Skip to content

Commit

Permalink
dmaengine: dw: define DW_DMA_MAX_NR_MASTERS
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Andy Shevchenko authored and Vinod Koul committed Feb 5, 2015
1 parent cfd8fef commit d8ded50
Show file tree
Hide file tree
Showing 8 changed files with 13 additions and 10 deletions.
2 changes: 1 addition & 1 deletion Documentation/devicetree/bindings/dma/snps-dma.txt
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ Example:
chan_allocation_order = <1>;
chan_priority = <1>;
block_size = <0xfff>;
data_width = <3 3 0 0>;
data_width = <3 3>;
};

DMA clients connected to the Designware DMA controller must use the format
Expand Down
2 changes: 1 addition & 1 deletion arch/arc/boot/dts/abilis_tb10x.dtsi
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@
chan_allocation_order = <0>;
chan_priority = <1>;
block_size = <0x7ff>;
data_width = <2 0 0 0>;
data_width = <2>;
clocks = <&ahb_clk>;
clock-names = "hclk";
};
Expand Down
4 changes: 2 additions & 2 deletions arch/arm/boot/dts/spear13xx.dtsi
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@
chan_priority = <1>;
block_size = <0xfff>;
dma-masters = <2>;
data_width = <3 3 0 0>;
data_width = <3 3>;
};

dma@eb000000 {
Expand All @@ -133,7 +133,7 @@
chan_allocation_order = <1>;
chan_priority = <1>;
block_size = <0xfff>;
data_width = <3 3 0 0>;
data_width = <3 3>;
};

fsmc: flash@b0000000 {
Expand Down
2 changes: 1 addition & 1 deletion arch/avr32/mach-at32ap/at32ap700x.c
Original file line number Diff line number Diff line change
Expand Up @@ -607,7 +607,7 @@ static struct dw_dma_platform_data dw_dmac0_data = {
.nr_channels = 3,
.block_size = 4095U,
.nr_masters = 2,
.data_width = { 2, 2, 0, 0 },
.data_width = { 2, 2 },
};

static struct resource dw_dmac0_resource[] = {
Expand Down
3 changes: 2 additions & 1 deletion drivers/dma/dw/core.c
Original file line number Diff line number Diff line change
Expand Up @@ -1562,7 +1562,8 @@ int dw_dma_probe(struct dw_dma_chip *chip, struct dw_dma_platform_data *pdata)
}
} else {
dw->nr_masters = pdata->nr_masters;
memcpy(dw->data_width, pdata->data_width, 4);
for (i = 0; i < dw->nr_masters; i++)
dw->data_width[i] = pdata->data_width[i];
}

/* Calculate all channel mask before DMA setup */
Expand Down
4 changes: 2 additions & 2 deletions drivers/dma/dw/platform.c
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ dw_dma_parse_dt(struct platform_device *pdev)
{
struct device_node *np = pdev->dev.of_node;
struct dw_dma_platform_data *pdata;
u32 tmp, arr[4];
u32 tmp, arr[DW_DMA_MAX_NR_MASTERS];

if (!np) {
dev_err(&pdev->dev, "Missing DT data\n");
Expand All @@ -126,7 +126,7 @@ dw_dma_parse_dt(struct platform_device *pdev)
pdata->block_size = tmp;

if (!of_property_read_u32(np, "dma-masters", &tmp)) {
if (tmp > 4)
if (tmp > DW_DMA_MAX_NR_MASTERS)
return NULL;

pdata->nr_masters = tmp;
Expand Down
2 changes: 1 addition & 1 deletion drivers/dma/dw/regs.h
Original file line number Diff line number Diff line change
Expand Up @@ -285,7 +285,7 @@ struct dw_dma {

/* hardware configuration */
unsigned char nr_masters;
unsigned char data_width[4];
unsigned char data_width[DW_DMA_MAX_NR_MASTERS];
};

static inline struct dw_dma_regs __iomem *__dw_regs(struct dw_dma *dw)
Expand Down
4 changes: 3 additions & 1 deletion include/linux/platform_data/dma-dw.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@

#include <linux/device.h>

#define DW_DMA_MAX_NR_MASTERS 4

/**
* struct dw_dma_slave - Controller-specific information about a slave
*
Expand Down Expand Up @@ -53,7 +55,7 @@ struct dw_dma_platform_data {
unsigned char chan_priority;
unsigned short block_size;
unsigned char nr_masters;
unsigned char data_width[4];
unsigned char data_width[DW_DMA_MAX_NR_MASTERS];
};

#endif /* _PLATFORM_DATA_DMA_DW_H */

0 comments on commit d8ded50

Please sign in to comment.