aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/dma
diff options
context:
space:
mode:
authorAndy Shevchenko <andriy.shevchenko@linux.intel.com>2015-01-13 12:08:14 -0500
committerVinod Koul <vinod.koul@intel.com>2015-02-05 01:39:44 -0500
commitd8ded50f8b26a224df48f9f93e49440c6a39b77f (patch)
tree7c7620107180b0a2c3ea77770ef8fb9bccfa8341 /drivers/dma
parentcfd8fef322305bbe9955817464f0d2054ce545c0 (diff)
dmaengine: dw: define DW_DMA_MAX_NR_MASTERS
Instead of using magic number in the code the patch provides DW_DMA_MAX_NR_MASTERS constant. While here, restrict the reading of data width array by amount of the actual number of AHB masters. Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Signed-off-by: Vinod Koul <vinod.koul@intel.com>
Diffstat (limited to 'drivers/dma')
-rw-r--r--drivers/dma/dw/core.c3
-rw-r--r--drivers/dma/dw/platform.c4
-rw-r--r--drivers/dma/dw/regs.h2
3 files changed, 5 insertions, 4 deletions
diff --git a/drivers/dma/dw/core.c b/drivers/dma/dw/core.c
index fcb9a916e6f6..0469d8eda253 100644
--- a/drivers/dma/dw/core.c
+++ b/drivers/dma/dw/core.c
@@ -1562,7 +1562,8 @@ int dw_dma_probe(struct dw_dma_chip *chip, struct dw_dma_platform_data *pdata)
1562 } 1562 }
1563 } else { 1563 } else {
1564 dw->nr_masters = pdata->nr_masters; 1564 dw->nr_masters = pdata->nr_masters;
1565 memcpy(dw->data_width, pdata->data_width, 4); 1565 for (i = 0; i < dw->nr_masters; i++)
1566 dw->data_width[i] = pdata->data_width[i];
1566 } 1567 }
1567 1568
1568 /* Calculate all channel mask before DMA setup */ 1569 /* Calculate all channel mask before DMA setup */
diff --git a/drivers/dma/dw/platform.c b/drivers/dma/dw/platform.c
index a630161473a4..aaff37f53523 100644
--- a/drivers/dma/dw/platform.c
+++ b/drivers/dma/dw/platform.c
@@ -99,7 +99,7 @@ dw_dma_parse_dt(struct platform_device *pdev)
99{ 99{
100 struct device_node *np = pdev->dev.of_node; 100 struct device_node *np = pdev->dev.of_node;
101 struct dw_dma_platform_data *pdata; 101 struct dw_dma_platform_data *pdata;
102 u32 tmp, arr[4]; 102 u32 tmp, arr[DW_DMA_MAX_NR_MASTERS];
103 103
104 if (!np) { 104 if (!np) {
105 dev_err(&pdev->dev, "Missing DT data\n"); 105 dev_err(&pdev->dev, "Missing DT data\n");
@@ -126,7 +126,7 @@ dw_dma_parse_dt(struct platform_device *pdev)
126 pdata->block_size = tmp; 126 pdata->block_size = tmp;
127 127
128 if (!of_property_read_u32(np, "dma-masters", &tmp)) { 128 if (!of_property_read_u32(np, "dma-masters", &tmp)) {
129 if (tmp > 4) 129 if (tmp > DW_DMA_MAX_NR_MASTERS)
130 return NULL; 130 return NULL;
131 131
132 pdata->nr_masters = tmp; 132 pdata->nr_masters = tmp;
diff --git a/drivers/dma/dw/regs.h b/drivers/dma/dw/regs.h
index 254a1db03680..241ff2b1402b 100644
--- a/drivers/dma/dw/regs.h
+++ b/drivers/dma/dw/regs.h
@@ -285,7 +285,7 @@ struct dw_dma {
285 285
286 /* hardware configuration */ 286 /* hardware configuration */
287 unsigned char nr_masters; 287 unsigned char nr_masters;
288 unsigned char data_width[4]; 288 unsigned char data_width[DW_DMA_MAX_NR_MASTERS];
289}; 289};
290 290
291static inline struct dw_dma_regs __iomem *__dw_regs(struct dw_dma *dw) 291static inline struct dw_dma_regs __iomem *__dw_regs(struct dw_dma *dw)