Skip to content

Commit

Permalink
SH: constify multiple DMA related objects and references to them
Browse files Browse the repository at this point in the history
Lists of DMA channels and slaves are not changed, make them constant. Besides,
SH7724 channel and slave configuration of both DMA controllers is identical,
remove the extra copy of the configuration data.

Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
  • Loading branch information
Guennadi Liakhovetski authored and Paul Mundt committed Apr 26, 2010
1 parent 6b6b18e commit 5bac942
Show file tree
Hide file tree
Showing 7 changed files with 30 additions and 67 deletions.
6 changes: 3 additions & 3 deletions arch/sh/kernel/cpu/sh4a/setup-sh7722.c
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
#include <cpu/dma-register.h>
#include <cpu/sh7722.h>

static struct sh_dmae_slave_config sh7722_dmae_slaves[] = {
static const struct sh_dmae_slave_config sh7722_dmae_slaves[] = {
{
.slave_id = SHDMA_SLAVE_SCIF0_TX,
.addr = 0xffe0000c,
Expand Down Expand Up @@ -78,7 +78,7 @@ static struct sh_dmae_slave_config sh7722_dmae_slaves[] = {
},
};

static struct sh_dmae_channel sh7722_dmae_channels[] = {
static const struct sh_dmae_channel sh7722_dmae_channels[] = {
{
.offset = 0,
.dmars = 0,
Expand Down Expand Up @@ -106,7 +106,7 @@ static struct sh_dmae_channel sh7722_dmae_channels[] = {
}
};

static unsigned int ts_shift[] = TS_SHIFT;
static const unsigned int ts_shift[] = TS_SHIFT;

static struct sh_dmae_pdata dma_platform_data = {
.slave = sh7722_dmae_slaves,
Expand Down
54 changes: 7 additions & 47 deletions arch/sh/kernel/cpu/sh4a/setup-sh7724.c
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@
#include <cpu/sh7724.h>

/* DMA */
static struct sh_dmae_channel sh7724_dmae0_channels[] = {
static const struct sh_dmae_channel sh7724_dmae_channels[] = {
{
.offset = 0,
.dmars = 0,
Expand Down Expand Up @@ -59,51 +59,11 @@ static struct sh_dmae_channel sh7724_dmae0_channels[] = {
}
};

static struct sh_dmae_channel sh7724_dmae1_channels[] = {
{
.offset = 0,
.dmars = 0,
.dmars_bit = 0,
}, {
.offset = 0x10,
.dmars = 0,
.dmars_bit = 8,
}, {
.offset = 0x20,
.dmars = 4,
.dmars_bit = 0,
}, {
.offset = 0x30,
.dmars = 4,
.dmars_bit = 8,
}, {
.offset = 0x50,
.dmars = 8,
.dmars_bit = 0,
}, {
.offset = 0x60,
.dmars = 8,
.dmars_bit = 8,
}
};

static unsigned int ts_shift[] = TS_SHIFT;

static struct sh_dmae_pdata dma0_platform_data = {
.channel = sh7724_dmae0_channels,
.channel_num = ARRAY_SIZE(sh7724_dmae0_channels),
.ts_low_shift = CHCR_TS_LOW_SHIFT,
.ts_low_mask = CHCR_TS_LOW_MASK,
.ts_high_shift = CHCR_TS_HIGH_SHIFT,
.ts_high_mask = CHCR_TS_HIGH_MASK,
.ts_shift = ts_shift,
.ts_shift_num = ARRAY_SIZE(ts_shift),
.dmaor_init = DMAOR_INIT,
};
static const unsigned int ts_shift[] = TS_SHIFT;

static struct sh_dmae_pdata dma1_platform_data = {
.channel = sh7724_dmae1_channels,
.channel_num = ARRAY_SIZE(sh7724_dmae1_channels),
static struct sh_dmae_pdata dma_platform_data = {
.channel = sh7724_dmae_channels,
.channel_num = ARRAY_SIZE(sh7724_dmae_channels),
.ts_low_shift = CHCR_TS_LOW_SHIFT,
.ts_low_mask = CHCR_TS_LOW_MASK,
.ts_high_shift = CHCR_TS_HIGH_SHIFT,
Expand Down Expand Up @@ -187,7 +147,7 @@ static struct platform_device dma0_device = {
.resource = sh7724_dmae0_resources,
.num_resources = ARRAY_SIZE(sh7724_dmae0_resources),
.dev = {
.platform_data = &dma0_platform_data,
.platform_data = &dma_platform_data,
},
.archdata = {
.hwblk_id = HWBLK_DMAC0,
Expand All @@ -200,7 +160,7 @@ static struct platform_device dma1_device = {
.resource = sh7724_dmae1_resources,
.num_resources = ARRAY_SIZE(sh7724_dmae1_resources),
.dev = {
.platform_data = &dma1_platform_data,
.platform_data = &dma_platform_data,
},
.archdata = {
.hwblk_id = HWBLK_DMAC1,
Expand Down
6 changes: 3 additions & 3 deletions arch/sh/kernel/cpu/sh4a/setup-sh7780.c
Original file line number Diff line number Diff line change
Expand Up @@ -233,7 +233,7 @@ static struct platform_device rtc_device = {
};

/* DMA */
static struct sh_dmae_channel sh7780_dmae0_channels[] = {
static const struct sh_dmae_channel sh7780_dmae0_channels[] = {
{
.offset = 0,
.dmars = 0,
Expand Down Expand Up @@ -261,7 +261,7 @@ static struct sh_dmae_channel sh7780_dmae0_channels[] = {
}
};

static struct sh_dmae_channel sh7780_dmae1_channels[] = {
static const struct sh_dmae_channel sh7780_dmae1_channels[] = {
{
.offset = 0,
}, {
Expand All @@ -277,7 +277,7 @@ static struct sh_dmae_channel sh7780_dmae1_channels[] = {
}
};

static unsigned int ts_shift[] = TS_SHIFT;
static const unsigned int ts_shift[] = TS_SHIFT;

static struct sh_dmae_pdata dma0_platform_data = {
.channel = sh7780_dmae0_channels,
Expand Down
6 changes: 3 additions & 3 deletions arch/sh/kernel/cpu/sh4a/setup-sh7785.c
Original file line number Diff line number Diff line change
Expand Up @@ -275,7 +275,7 @@ static struct platform_device tmu5_device = {
};

/* DMA */
static struct sh_dmae_channel sh7785_dmae0_channels[] = {
static const struct sh_dmae_channel sh7785_dmae0_channels[] = {
{
.offset = 0,
.dmars = 0,
Expand Down Expand Up @@ -303,7 +303,7 @@ static struct sh_dmae_channel sh7785_dmae0_channels[] = {
}
};

static struct sh_dmae_channel sh7785_dmae1_channels[] = {
static const struct sh_dmae_channel sh7785_dmae1_channels[] = {
{
.offset = 0,
}, {
Expand All @@ -319,7 +319,7 @@ static struct sh_dmae_channel sh7785_dmae1_channels[] = {
}
};

static unsigned int ts_shift[] = TS_SHIFT;
static const unsigned int ts_shift[] = TS_SHIFT;

static struct sh_dmae_pdata dma0_platform_data = {
.channel = sh7785_dmae0_channels,
Expand Down
4 changes: 2 additions & 2 deletions arch/sh/kernel/cpu/sh4a/setup-sh7786.c
Original file line number Diff line number Diff line change
Expand Up @@ -445,7 +445,7 @@ static struct platform_device tmu11_device = {
.num_resources = ARRAY_SIZE(tmu11_resources),
};

static struct sh_dmae_channel dmac0_channels[] = {
static const struct sh_dmae_channel dmac0_channels[] = {
{
.offset = 0,
.dmars = 0,
Expand Down Expand Up @@ -473,7 +473,7 @@ static struct sh_dmae_channel dmac0_channels[] = {
}
};

static unsigned int ts_shift[] = TS_SHIFT;
static const unsigned int ts_shift[] = TS_SHIFT;

static struct sh_dmae_pdata dma0_platform_data = {
.channel = dmac0_channels,
Expand Down
12 changes: 7 additions & 5 deletions drivers/dma/shdma.c
Original file line number Diff line number Diff line change
Expand Up @@ -188,7 +188,7 @@ static int dmae_set_dmars(struct sh_dmae_chan *sh_chan, u16 val)
struct sh_dmae_device *shdev = container_of(sh_chan->common.device,
struct sh_dmae_device, common);
struct sh_dmae_pdata *pdata = shdev->pdata;
struct sh_dmae_channel *chan_pdata = &pdata->channel[sh_chan->id];
const struct sh_dmae_channel *chan_pdata = &pdata->channel[sh_chan->id];
u16 __iomem *addr = shdev->dmars + chan_pdata->dmars / sizeof(u16);
int shift = chan_pdata->dmars_bit;

Expand Down Expand Up @@ -264,7 +264,7 @@ static struct sh_desc *sh_dmae_get_desc(struct sh_dmae_chan *sh_chan)
return NULL;
}

static struct sh_dmae_slave_config *sh_dmae_find_slave(
static const struct sh_dmae_slave_config *sh_dmae_find_slave(
struct sh_dmae_chan *sh_chan, struct sh_dmae_slave *param)
{
struct dma_device *dma_dev = sh_chan->common.device;
Expand Down Expand Up @@ -296,7 +296,7 @@ static int sh_dmae_alloc_chan_resources(struct dma_chan *chan)
* never runs concurrently with itself or free_chan_resources.
*/
if (param) {
struct sh_dmae_slave_config *cfg;
const struct sh_dmae_slave_config *cfg;

cfg = sh_dmae_find_slave(sh_chan, param);
if (!cfg)
Expand Down Expand Up @@ -557,12 +557,14 @@ static struct dma_async_tx_descriptor *sh_dmae_prep_slave_sg(
{
struct sh_dmae_slave *param;
struct sh_dmae_chan *sh_chan;
dma_addr_t slave_addr;

if (!chan)
return NULL;

sh_chan = to_sh_chan(chan);
param = chan->private;
slave_addr = param->config->addr;

/* Someone calling slave DMA on a public channel? */
if (!param || !sg_len) {
Expand All @@ -575,7 +577,7 @@ static struct dma_async_tx_descriptor *sh_dmae_prep_slave_sg(
* if (param != NULL), this is a successfully requested slave channel,
* therefore param->config != NULL too.
*/
return sh_dmae_prep_sg(sh_chan, sgl, sg_len, &param->config->addr,
return sh_dmae_prep_sg(sh_chan, sgl, sg_len, &slave_addr,
direction, flags);
}

Expand Down Expand Up @@ -856,7 +858,7 @@ static int __devinit sh_dmae_chan_probe(struct sh_dmae_device *shdev, int id,
int irq, unsigned long flags)
{
int err;
struct sh_dmae_channel *chan_pdata = &shdev->pdata->channel[id];
const struct sh_dmae_channel *chan_pdata = &shdev->pdata->channel[id];
struct platform_device *pdev = to_platform_device(shdev->common.dev);
struct sh_dmae_chan *new_sh_chan;

Expand Down
9 changes: 5 additions & 4 deletions include/linux/sh_dma.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
struct sh_dmae_slave {
unsigned int slave_id; /* Set by the platform */
struct device *dma_dev; /* Set by the platform */
struct sh_dmae_slave_config *config; /* Set by the driver */
const struct sh_dmae_slave_config *config; /* Set by the driver */
};

struct sh_dmae_regs {
Expand All @@ -36,6 +36,7 @@ struct sh_desc {
int chunks;
int mark;
};

struct sh_dmae_slave_config {
unsigned int slave_id;
dma_addr_t addr;
Expand All @@ -50,15 +51,15 @@ struct sh_dmae_channel {
};

struct sh_dmae_pdata {
struct sh_dmae_slave_config *slave;
const struct sh_dmae_slave_config *slave;
int slave_num;
struct sh_dmae_channel *channel;
const struct sh_dmae_channel *channel;
int channel_num;
unsigned int ts_low_shift;
unsigned int ts_low_mask;
unsigned int ts_high_shift;
unsigned int ts_high_mask;
unsigned int *ts_shift;
const unsigned int *ts_shift;
int ts_shift_num;
u16 dmaor_init;
};
Expand Down

0 comments on commit 5bac942

Please sign in to comment.