aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGuennadi Liakhovetski <g.liakhovetski@gmx.de>2010-04-21 11:36:49 -0400
committerPaul Mundt <lethal@linux-sh.org>2010-04-26 02:50:50 -0400
commit5bac942db3d2c4738df04104240d65a5d1eaec6a (patch)
tree253c75407764fc5cb3483283941b14a99fad389a
parent6b6b18e62cfba44ce7b6489c7100f12b199232d7 (diff)
SH: constify multiple DMA related objects and references to them
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>
-rw-r--r--arch/sh/kernel/cpu/sh4a/setup-sh7722.c6
-rw-r--r--arch/sh/kernel/cpu/sh4a/setup-sh7724.c54
-rw-r--r--arch/sh/kernel/cpu/sh4a/setup-sh7780.c6
-rw-r--r--arch/sh/kernel/cpu/sh4a/setup-sh7785.c6
-rw-r--r--arch/sh/kernel/cpu/sh4a/setup-sh7786.c4
-rw-r--r--drivers/dma/shdma.c12
-rw-r--r--include/linux/sh_dma.h9
7 files changed, 30 insertions, 67 deletions
diff --git a/arch/sh/kernel/cpu/sh4a/setup-sh7722.c b/arch/sh/kernel/cpu/sh4a/setup-sh7722.c
index dc9b30d086a4..24c6167a7181 100644
--- a/arch/sh/kernel/cpu/sh4a/setup-sh7722.c
+++ b/arch/sh/kernel/cpu/sh4a/setup-sh7722.c
@@ -24,7 +24,7 @@
24#include <cpu/dma-register.h> 24#include <cpu/dma-register.h>
25#include <cpu/sh7722.h> 25#include <cpu/sh7722.h>
26 26
27static struct sh_dmae_slave_config sh7722_dmae_slaves[] = { 27static const struct sh_dmae_slave_config sh7722_dmae_slaves[] = {
28 { 28 {
29 .slave_id = SHDMA_SLAVE_SCIF0_TX, 29 .slave_id = SHDMA_SLAVE_SCIF0_TX,
30 .addr = 0xffe0000c, 30 .addr = 0xffe0000c,
@@ -78,7 +78,7 @@ static struct sh_dmae_slave_config sh7722_dmae_slaves[] = {
78 }, 78 },
79}; 79};
80 80
81static struct sh_dmae_channel sh7722_dmae_channels[] = { 81static const struct sh_dmae_channel sh7722_dmae_channels[] = {
82 { 82 {
83 .offset = 0, 83 .offset = 0,
84 .dmars = 0, 84 .dmars = 0,
@@ -106,7 +106,7 @@ static struct sh_dmae_channel sh7722_dmae_channels[] = {
106 } 106 }
107}; 107};
108 108
109static unsigned int ts_shift[] = TS_SHIFT; 109static const unsigned int ts_shift[] = TS_SHIFT;
110 110
111static struct sh_dmae_pdata dma_platform_data = { 111static struct sh_dmae_pdata dma_platform_data = {
112 .slave = sh7722_dmae_slaves, 112 .slave = sh7722_dmae_slaves,
diff --git a/arch/sh/kernel/cpu/sh4a/setup-sh7724.c b/arch/sh/kernel/cpu/sh4a/setup-sh7724.c
index 8a0a4a99f86b..89fe16d20fdb 100644
--- a/arch/sh/kernel/cpu/sh4a/setup-sh7724.c
+++ b/arch/sh/kernel/cpu/sh4a/setup-sh7724.c
@@ -31,7 +31,7 @@
31#include <cpu/sh7724.h> 31#include <cpu/sh7724.h>
32 32
33/* DMA */ 33/* DMA */
34static struct sh_dmae_channel sh7724_dmae0_channels[] = { 34static const struct sh_dmae_channel sh7724_dmae_channels[] = {
35 { 35 {
36 .offset = 0, 36 .offset = 0,
37 .dmars = 0, 37 .dmars = 0,
@@ -59,51 +59,11 @@ static struct sh_dmae_channel sh7724_dmae0_channels[] = {
59 } 59 }
60}; 60};
61 61
62static struct sh_dmae_channel sh7724_dmae1_channels[] = { 62static const unsigned int ts_shift[] = TS_SHIFT;
63 {
64 .offset = 0,
65 .dmars = 0,
66 .dmars_bit = 0,
67 }, {
68 .offset = 0x10,
69 .dmars = 0,
70 .dmars_bit = 8,
71 }, {
72 .offset = 0x20,
73 .dmars = 4,
74 .dmars_bit = 0,
75 }, {
76 .offset = 0x30,
77 .dmars = 4,
78 .dmars_bit = 8,
79 }, {
80 .offset = 0x50,
81 .dmars = 8,
82 .dmars_bit = 0,
83 }, {
84 .offset = 0x60,
85 .dmars = 8,
86 .dmars_bit = 8,
87 }
88};
89
90static unsigned int ts_shift[] = TS_SHIFT;
91
92static struct sh_dmae_pdata dma0_platform_data = {
93 .channel = sh7724_dmae0_channels,
94 .channel_num = ARRAY_SIZE(sh7724_dmae0_channels),
95 .ts_low_shift = CHCR_TS_LOW_SHIFT,
96 .ts_low_mask = CHCR_TS_LOW_MASK,
97 .ts_high_shift = CHCR_TS_HIGH_SHIFT,
98 .ts_high_mask = CHCR_TS_HIGH_MASK,
99 .ts_shift = ts_shift,
100 .ts_shift_num = ARRAY_SIZE(ts_shift),
101 .dmaor_init = DMAOR_INIT,
102};
103 63
104static struct sh_dmae_pdata dma1_platform_data = { 64static struct sh_dmae_pdata dma_platform_data = {
105 .channel = sh7724_dmae1_channels, 65 .channel = sh7724_dmae_channels,
106 .channel_num = ARRAY_SIZE(sh7724_dmae1_channels), 66 .channel_num = ARRAY_SIZE(sh7724_dmae_channels),
107 .ts_low_shift = CHCR_TS_LOW_SHIFT, 67 .ts_low_shift = CHCR_TS_LOW_SHIFT,
108 .ts_low_mask = CHCR_TS_LOW_MASK, 68 .ts_low_mask = CHCR_TS_LOW_MASK,
109 .ts_high_shift = CHCR_TS_HIGH_SHIFT, 69 .ts_high_shift = CHCR_TS_HIGH_SHIFT,
@@ -187,7 +147,7 @@ static struct platform_device dma0_device = {
187 .resource = sh7724_dmae0_resources, 147 .resource = sh7724_dmae0_resources,
188 .num_resources = ARRAY_SIZE(sh7724_dmae0_resources), 148 .num_resources = ARRAY_SIZE(sh7724_dmae0_resources),
189 .dev = { 149 .dev = {
190 .platform_data = &dma0_platform_data, 150 .platform_data = &dma_platform_data,
191 }, 151 },
192 .archdata = { 152 .archdata = {
193 .hwblk_id = HWBLK_DMAC0, 153 .hwblk_id = HWBLK_DMAC0,
@@ -200,7 +160,7 @@ static struct platform_device dma1_device = {
200 .resource = sh7724_dmae1_resources, 160 .resource = sh7724_dmae1_resources,
201 .num_resources = ARRAY_SIZE(sh7724_dmae1_resources), 161 .num_resources = ARRAY_SIZE(sh7724_dmae1_resources),
202 .dev = { 162 .dev = {
203 .platform_data = &dma1_platform_data, 163 .platform_data = &dma_platform_data,
204 }, 164 },
205 .archdata = { 165 .archdata = {
206 .hwblk_id = HWBLK_DMAC1, 166 .hwblk_id = HWBLK_DMAC1,
diff --git a/arch/sh/kernel/cpu/sh4a/setup-sh7780.c b/arch/sh/kernel/cpu/sh4a/setup-sh7780.c
index 05fc38df1582..b12f537e4dde 100644
--- a/arch/sh/kernel/cpu/sh4a/setup-sh7780.c
+++ b/arch/sh/kernel/cpu/sh4a/setup-sh7780.c
@@ -233,7 +233,7 @@ static struct platform_device rtc_device = {
233}; 233};
234 234
235/* DMA */ 235/* DMA */
236static struct sh_dmae_channel sh7780_dmae0_channels[] = { 236static const struct sh_dmae_channel sh7780_dmae0_channels[] = {
237 { 237 {
238 .offset = 0, 238 .offset = 0,
239 .dmars = 0, 239 .dmars = 0,
@@ -261,7 +261,7 @@ static struct sh_dmae_channel sh7780_dmae0_channels[] = {
261 } 261 }
262}; 262};
263 263
264static struct sh_dmae_channel sh7780_dmae1_channels[] = { 264static const struct sh_dmae_channel sh7780_dmae1_channels[] = {
265 { 265 {
266 .offset = 0, 266 .offset = 0,
267 }, { 267 }, {
@@ -277,7 +277,7 @@ static struct sh_dmae_channel sh7780_dmae1_channels[] = {
277 } 277 }
278}; 278};
279 279
280static unsigned int ts_shift[] = TS_SHIFT; 280static const unsigned int ts_shift[] = TS_SHIFT;
281 281
282static struct sh_dmae_pdata dma0_platform_data = { 282static struct sh_dmae_pdata dma0_platform_data = {
283 .channel = sh7780_dmae0_channels, 283 .channel = sh7780_dmae0_channels,
diff --git a/arch/sh/kernel/cpu/sh4a/setup-sh7785.c b/arch/sh/kernel/cpu/sh4a/setup-sh7785.c
index 07bb2d4619f8..f3e3ea0ce050 100644
--- a/arch/sh/kernel/cpu/sh4a/setup-sh7785.c
+++ b/arch/sh/kernel/cpu/sh4a/setup-sh7785.c
@@ -275,7 +275,7 @@ static struct platform_device tmu5_device = {
275}; 275};
276 276
277/* DMA */ 277/* DMA */
278static struct sh_dmae_channel sh7785_dmae0_channels[] = { 278static const struct sh_dmae_channel sh7785_dmae0_channels[] = {
279 { 279 {
280 .offset = 0, 280 .offset = 0,
281 .dmars = 0, 281 .dmars = 0,
@@ -303,7 +303,7 @@ static struct sh_dmae_channel sh7785_dmae0_channels[] = {
303 } 303 }
304}; 304};
305 305
306static struct sh_dmae_channel sh7785_dmae1_channels[] = { 306static const struct sh_dmae_channel sh7785_dmae1_channels[] = {
307 { 307 {
308 .offset = 0, 308 .offset = 0,
309 }, { 309 }, {
@@ -319,7 +319,7 @@ static struct sh_dmae_channel sh7785_dmae1_channels[] = {
319 } 319 }
320}; 320};
321 321
322static unsigned int ts_shift[] = TS_SHIFT; 322static const unsigned int ts_shift[] = TS_SHIFT;
323 323
324static struct sh_dmae_pdata dma0_platform_data = { 324static struct sh_dmae_pdata dma0_platform_data = {
325 .channel = sh7785_dmae0_channels, 325 .channel = sh7785_dmae0_channels,
diff --git a/arch/sh/kernel/cpu/sh4a/setup-sh7786.c b/arch/sh/kernel/cpu/sh4a/setup-sh7786.c
index d7336036d04d..81657091da46 100644
--- a/arch/sh/kernel/cpu/sh4a/setup-sh7786.c
+++ b/arch/sh/kernel/cpu/sh4a/setup-sh7786.c
@@ -445,7 +445,7 @@ static struct platform_device tmu11_device = {
445 .num_resources = ARRAY_SIZE(tmu11_resources), 445 .num_resources = ARRAY_SIZE(tmu11_resources),
446}; 446};
447 447
448static struct sh_dmae_channel dmac0_channels[] = { 448static const struct sh_dmae_channel dmac0_channels[] = {
449 { 449 {
450 .offset = 0, 450 .offset = 0,
451 .dmars = 0, 451 .dmars = 0,
@@ -473,7 +473,7 @@ static struct sh_dmae_channel dmac0_channels[] = {
473 } 473 }
474}; 474};
475 475
476static unsigned int ts_shift[] = TS_SHIFT; 476static const unsigned int ts_shift[] = TS_SHIFT;
477 477
478static struct sh_dmae_pdata dma0_platform_data = { 478static struct sh_dmae_pdata dma0_platform_data = {
479 .channel = dmac0_channels, 479 .channel = dmac0_channels,
diff --git a/drivers/dma/shdma.c b/drivers/dma/shdma.c
index 7a18b580f626..aab352a63a4a 100644
--- a/drivers/dma/shdma.c
+++ b/drivers/dma/shdma.c
@@ -188,7 +188,7 @@ static int dmae_set_dmars(struct sh_dmae_chan *sh_chan, u16 val)
188 struct sh_dmae_device *shdev = container_of(sh_chan->common.device, 188 struct sh_dmae_device *shdev = container_of(sh_chan->common.device,
189 struct sh_dmae_device, common); 189 struct sh_dmae_device, common);
190 struct sh_dmae_pdata *pdata = shdev->pdata; 190 struct sh_dmae_pdata *pdata = shdev->pdata;
191 struct sh_dmae_channel *chan_pdata = &pdata->channel[sh_chan->id]; 191 const struct sh_dmae_channel *chan_pdata = &pdata->channel[sh_chan->id];
192 u16 __iomem *addr = shdev->dmars + chan_pdata->dmars / sizeof(u16); 192 u16 __iomem *addr = shdev->dmars + chan_pdata->dmars / sizeof(u16);
193 int shift = chan_pdata->dmars_bit; 193 int shift = chan_pdata->dmars_bit;
194 194
@@ -264,7 +264,7 @@ static struct sh_desc *sh_dmae_get_desc(struct sh_dmae_chan *sh_chan)
264 return NULL; 264 return NULL;
265} 265}
266 266
267static struct sh_dmae_slave_config *sh_dmae_find_slave( 267static const struct sh_dmae_slave_config *sh_dmae_find_slave(
268 struct sh_dmae_chan *sh_chan, struct sh_dmae_slave *param) 268 struct sh_dmae_chan *sh_chan, struct sh_dmae_slave *param)
269{ 269{
270 struct dma_device *dma_dev = sh_chan->common.device; 270 struct dma_device *dma_dev = sh_chan->common.device;
@@ -296,7 +296,7 @@ static int sh_dmae_alloc_chan_resources(struct dma_chan *chan)
296 * never runs concurrently with itself or free_chan_resources. 296 * never runs concurrently with itself or free_chan_resources.
297 */ 297 */
298 if (param) { 298 if (param) {
299 struct sh_dmae_slave_config *cfg; 299 const struct sh_dmae_slave_config *cfg;
300 300
301 cfg = sh_dmae_find_slave(sh_chan, param); 301 cfg = sh_dmae_find_slave(sh_chan, param);
302 if (!cfg) 302 if (!cfg)
@@ -557,12 +557,14 @@ static struct dma_async_tx_descriptor *sh_dmae_prep_slave_sg(
557{ 557{
558 struct sh_dmae_slave *param; 558 struct sh_dmae_slave *param;
559 struct sh_dmae_chan *sh_chan; 559 struct sh_dmae_chan *sh_chan;
560 dma_addr_t slave_addr;
560 561
561 if (!chan) 562 if (!chan)
562 return NULL; 563 return NULL;
563 564
564 sh_chan = to_sh_chan(chan); 565 sh_chan = to_sh_chan(chan);
565 param = chan->private; 566 param = chan->private;
567 slave_addr = param->config->addr;
566 568
567 /* Someone calling slave DMA on a public channel? */ 569 /* Someone calling slave DMA on a public channel? */
568 if (!param || !sg_len) { 570 if (!param || !sg_len) {
@@ -575,7 +577,7 @@ static struct dma_async_tx_descriptor *sh_dmae_prep_slave_sg(
575 * if (param != NULL), this is a successfully requested slave channel, 577 * if (param != NULL), this is a successfully requested slave channel,
576 * therefore param->config != NULL too. 578 * therefore param->config != NULL too.
577 */ 579 */
578 return sh_dmae_prep_sg(sh_chan, sgl, sg_len, &param->config->addr, 580 return sh_dmae_prep_sg(sh_chan, sgl, sg_len, &slave_addr,
579 direction, flags); 581 direction, flags);
580} 582}
581 583
@@ -856,7 +858,7 @@ static int __devinit sh_dmae_chan_probe(struct sh_dmae_device *shdev, int id,
856 int irq, unsigned long flags) 858 int irq, unsigned long flags)
857{ 859{
858 int err; 860 int err;
859 struct sh_dmae_channel *chan_pdata = &shdev->pdata->channel[id]; 861 const struct sh_dmae_channel *chan_pdata = &shdev->pdata->channel[id];
860 struct platform_device *pdev = to_platform_device(shdev->common.dev); 862 struct platform_device *pdev = to_platform_device(shdev->common.dev);
861 struct sh_dmae_chan *new_sh_chan; 863 struct sh_dmae_chan *new_sh_chan;
862 864
diff --git a/include/linux/sh_dma.h b/include/linux/sh_dma.h
index cdaaff424211..b08cd4efa15c 100644
--- a/include/linux/sh_dma.h
+++ b/include/linux/sh_dma.h
@@ -17,7 +17,7 @@
17struct sh_dmae_slave { 17struct sh_dmae_slave {
18 unsigned int slave_id; /* Set by the platform */ 18 unsigned int slave_id; /* Set by the platform */
19 struct device *dma_dev; /* Set by the platform */ 19 struct device *dma_dev; /* Set by the platform */
20 struct sh_dmae_slave_config *config; /* Set by the driver */ 20 const struct sh_dmae_slave_config *config; /* Set by the driver */
21}; 21};
22 22
23struct sh_dmae_regs { 23struct sh_dmae_regs {
@@ -36,6 +36,7 @@ struct sh_desc {
36 int chunks; 36 int chunks;
37 int mark; 37 int mark;
38}; 38};
39
39struct sh_dmae_slave_config { 40struct sh_dmae_slave_config {
40 unsigned int slave_id; 41 unsigned int slave_id;
41 dma_addr_t addr; 42 dma_addr_t addr;
@@ -50,15 +51,15 @@ struct sh_dmae_channel {
50}; 51};
51 52
52struct sh_dmae_pdata { 53struct sh_dmae_pdata {
53 struct sh_dmae_slave_config *slave; 54 const struct sh_dmae_slave_config *slave;
54 int slave_num; 55 int slave_num;
55 struct sh_dmae_channel *channel; 56 const struct sh_dmae_channel *channel;
56 int channel_num; 57 int channel_num;
57 unsigned int ts_low_shift; 58 unsigned int ts_low_shift;
58 unsigned int ts_low_mask; 59 unsigned int ts_low_mask;
59 unsigned int ts_high_shift; 60 unsigned int ts_high_shift;
60 unsigned int ts_high_mask; 61 unsigned int ts_high_mask;
61 unsigned int *ts_shift; 62 const unsigned int *ts_shift;
62 int ts_shift_num; 63 int ts_shift_num;
63 u16 dmaor_init; 64 u16 dmaor_init;
64}; 65};