diff options
author | Viresh Kumar <viresh.kumar@linaro.org> | 2012-10-16 00:19:18 -0400 |
---|---|---|
committer | Vinod Koul <vinod.koul@intel.com> | 2013-01-08 01:04:46 -0500 |
commit | f9965aa20706860077cfa093d04a6351c0c1e940 (patch) | |
tree | d1e039e70ace9c2f8d52caa64b2b4f4305089937 /arch | |
parent | a9ddb575d6d6c58c39e8c44a22b84445fedb0521 (diff) |
ARM: SPEAr13xx: Pass DW DMAC platform data from DT
This patch adds dw_dmac's platform data to DT node. It also creates slave info
node for SPEAr13xx, for the devices which were using dw_dmac.
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Vinod Koul <vinod.koul@linux.intel.com>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/arm/boot/dts/spear1340.dtsi | 19 | ||||
-rw-r--r-- | arch/arm/boot/dts/spear13xx.dtsi | 38 | ||||
-rw-r--r-- | arch/arm/mach-spear13xx/include/mach/spear.h | 2 | ||||
-rw-r--r-- | arch/arm/mach-spear13xx/spear1310.c | 5 | ||||
-rw-r--r-- | arch/arm/mach-spear13xx/spear1340.c | 33 | ||||
-rw-r--r-- | arch/arm/mach-spear13xx/spear13xx.c | 55 |
6 files changed, 72 insertions, 80 deletions
diff --git a/arch/arm/boot/dts/spear1340.dtsi b/arch/arm/boot/dts/spear1340.dtsi index 34da11aa6795..b2d41b7502bd 100644 --- a/arch/arm/boot/dts/spear1340.dtsi +++ b/arch/arm/boot/dts/spear1340.dtsi | |||
@@ -88,6 +88,25 @@ | |||
88 | status = "disabled"; | 88 | status = "disabled"; |
89 | }; | 89 | }; |
90 | 90 | ||
91 | dma@ea800000 { | ||
92 | slave_info { | ||
93 | uart1_tx { | ||
94 | bus_id = "uart1_tx"; | ||
95 | cfg_hi = <0x6000>; /* 0xC << 11 */ | ||
96 | cfg_lo = <0>; | ||
97 | src_master = <0>; | ||
98 | dst_master = <1>; | ||
99 | }; | ||
100 | uart1_tx { | ||
101 | bus_id = "uart1_tx"; | ||
102 | cfg_hi = <0x680>; /* 0xD << 7 */ | ||
103 | cfg_lo = <0>; | ||
104 | src_master = <1>; | ||
105 | dst_master = <0>; | ||
106 | }; | ||
107 | }; | ||
108 | }; | ||
109 | |||
91 | spi1: spi@5d400000 { | 110 | spi1: spi@5d400000 { |
92 | compatible = "arm,pl022", "arm,primecell"; | 111 | compatible = "arm,pl022", "arm,primecell"; |
93 | reg = <0x5d400000 0x1000>; | 112 | reg = <0x5d400000 0x1000>; |
diff --git a/arch/arm/boot/dts/spear13xx.dtsi b/arch/arm/boot/dts/spear13xx.dtsi index b4ca60f4eb42..585f64157ea4 100644 --- a/arch/arm/boot/dts/spear13xx.dtsi +++ b/arch/arm/boot/dts/spear13xx.dtsi | |||
@@ -105,6 +105,37 @@ | |||
105 | reg = <0xea800000 0x1000>; | 105 | reg = <0xea800000 0x1000>; |
106 | interrupts = <0 19 0x4>; | 106 | interrupts = <0 19 0x4>; |
107 | status = "disabled"; | 107 | status = "disabled"; |
108 | |||
109 | nr_channels = <8>; | ||
110 | chan_allocation_order = <1>; | ||
111 | chan_priority = <1>; | ||
112 | block_size = <0xfff>; | ||
113 | nr_masters = <2>; | ||
114 | data_width = <3 3 0 0>; | ||
115 | |||
116 | slave_info { | ||
117 | ssp0_tx { | ||
118 | bus_id = "ssp0_tx"; | ||
119 | cfg_hi = <0x2000>; /* 0x4 << 11 */ | ||
120 | cfg_lo = <0>; | ||
121 | src_master = <0>; | ||
122 | dst_master = <0>; | ||
123 | }; | ||
124 | ssp0_rx { | ||
125 | bus_id = "ssp0_rx"; | ||
126 | cfg_hi = <0x280>; /* 0x5 << 7 */ | ||
127 | cfg_lo = <0>; | ||
128 | src_master = <0>; | ||
129 | dst_master = <0>; | ||
130 | }; | ||
131 | cf { | ||
132 | bus_id = "cf"; | ||
133 | cfg_hi = <0>; | ||
134 | cfg_lo = <0>; | ||
135 | src_master = <0>; | ||
136 | dst_master = <0>; | ||
137 | }; | ||
138 | }; | ||
108 | }; | 139 | }; |
109 | 140 | ||
110 | dma@eb000000 { | 141 | dma@eb000000 { |
@@ -112,6 +143,13 @@ | |||
112 | reg = <0xeb000000 0x1000>; | 143 | reg = <0xeb000000 0x1000>; |
113 | interrupts = <0 59 0x4>; | 144 | interrupts = <0 59 0x4>; |
114 | status = "disabled"; | 145 | status = "disabled"; |
146 | |||
147 | nr_channels = <8>; | ||
148 | chan_allocation_order = <1>; | ||
149 | chan_priority = <1>; | ||
150 | block_size = <0xfff>; | ||
151 | nr_masters = <2>; | ||
152 | data_width = <3 3 0 0>; | ||
115 | }; | 153 | }; |
116 | 154 | ||
117 | fsmc: flash@b0000000 { | 155 | fsmc: flash@b0000000 { |
diff --git a/arch/arm/mach-spear13xx/include/mach/spear.h b/arch/arm/mach-spear13xx/include/mach/spear.h index 7cfa6818865a..972a151df34c 100644 --- a/arch/arm/mach-spear13xx/include/mach/spear.h +++ b/arch/arm/mach-spear13xx/include/mach/spear.h | |||
@@ -43,8 +43,6 @@ | |||
43 | #define VA_L2CC_BASE IOMEM(UL(0xFB000000)) | 43 | #define VA_L2CC_BASE IOMEM(UL(0xFB000000)) |
44 | 44 | ||
45 | /* others */ | 45 | /* others */ |
46 | #define DMAC0_BASE UL(0xEA800000) | ||
47 | #define DMAC1_BASE UL(0xEB000000) | ||
48 | #define MCIF_CF_BASE UL(0xB2800000) | 46 | #define MCIF_CF_BASE UL(0xB2800000) |
49 | 47 | ||
50 | /* Debug uart for linux, will be used for debug and uncompress messages */ | 48 | /* Debug uart for linux, will be used for debug and uncompress messages */ |
diff --git a/arch/arm/mach-spear13xx/spear1310.c b/arch/arm/mach-spear13xx/spear1310.c index 02f4724bb0d4..ec72c47c0e08 100644 --- a/arch/arm/mach-spear13xx/spear1310.c +++ b/arch/arm/mach-spear13xx/spear1310.c | |||
@@ -36,7 +36,7 @@ | |||
36 | static struct arasan_cf_pdata cf_pdata = { | 36 | static struct arasan_cf_pdata cf_pdata = { |
37 | .cf_if_clk = CF_IF_CLK_166M, | 37 | .cf_if_clk = CF_IF_CLK_166M, |
38 | .quirk = CF_BROKEN_UDMA, | 38 | .quirk = CF_BROKEN_UDMA, |
39 | .dma_priv = &cf_dma_priv, | 39 | .dma_priv = "cf", |
40 | }; | 40 | }; |
41 | 41 | ||
42 | /* ssp device registration */ | 42 | /* ssp device registration */ |
@@ -47,10 +47,7 @@ static struct pl022_ssp_controller ssp1_plat_data = { | |||
47 | /* Add SPEAr1310 auxdata to pass platform data */ | 47 | /* Add SPEAr1310 auxdata to pass platform data */ |
48 | static struct of_dev_auxdata spear1310_auxdata_lookup[] __initdata = { | 48 | static struct of_dev_auxdata spear1310_auxdata_lookup[] __initdata = { |
49 | OF_DEV_AUXDATA("arasan,cf-spear1340", MCIF_CF_BASE, NULL, &cf_pdata), | 49 | OF_DEV_AUXDATA("arasan,cf-spear1340", MCIF_CF_BASE, NULL, &cf_pdata), |
50 | OF_DEV_AUXDATA("snps,dma-spear1340", DMAC0_BASE, NULL, &dmac_plat_data), | ||
51 | OF_DEV_AUXDATA("snps,dma-spear1340", DMAC1_BASE, NULL, &dmac_plat_data), | ||
52 | OF_DEV_AUXDATA("arm,pl022", SSP_BASE, NULL, &pl022_plat_data), | 50 | OF_DEV_AUXDATA("arm,pl022", SSP_BASE, NULL, &pl022_plat_data), |
53 | |||
54 | OF_DEV_AUXDATA("arm,pl022", SPEAR1310_SSP1_BASE, NULL, &ssp1_plat_data), | 51 | OF_DEV_AUXDATA("arm,pl022", SPEAR1310_SSP1_BASE, NULL, &ssp1_plat_data), |
55 | {} | 52 | {} |
56 | }; | 53 | }; |
diff --git a/arch/arm/mach-spear13xx/spear1340.c b/arch/arm/mach-spear13xx/spear1340.c index 081014fb314a..69c8f72a9ca2 100644 --- a/arch/arm/mach-spear13xx/spear1340.c +++ b/arch/arm/mach-spear13xx/spear1340.c | |||
@@ -18,9 +18,9 @@ | |||
18 | #include <linux/delay.h> | 18 | #include <linux/delay.h> |
19 | #include <linux/dw_dmac.h> | 19 | #include <linux/dw_dmac.h> |
20 | #include <linux/of_platform.h> | 20 | #include <linux/of_platform.h> |
21 | #include <linux/pata_arasan_cf_data.h> | ||
21 | #include <asm/hardware/gic.h> | 22 | #include <asm/hardware/gic.h> |
22 | #include <asm/mach/arch.h> | 23 | #include <asm/mach/arch.h> |
23 | #include <mach/dma.h> | ||
24 | #include <mach/generic.h> | 24 | #include <mach/generic.h> |
25 | #include <mach/spear.h> | 25 | #include <mach/spear.h> |
26 | 26 | ||
@@ -78,26 +78,16 @@ | |||
78 | (SPEAR1340_MIPHY_OSC_BYPASS_EXT | \ | 78 | (SPEAR1340_MIPHY_OSC_BYPASS_EXT | \ |
79 | SPEAR1340_MIPHY_PLL_RATIO_TOP(25)) | 79 | SPEAR1340_MIPHY_PLL_RATIO_TOP(25)) |
80 | 80 | ||
81 | static struct dw_dma_slave uart1_dma_param[] = { | 81 | static struct amba_pl011_data uart1_data = { |
82 | { | 82 | .dma_filter = dw_dma_generic_filter, |
83 | /* Tx */ | 83 | .dma_tx_param = "uart1_tx", |
84 | .cfg_hi = DWC_CFGH_DST_PER(SPEAR1340_DMA_REQ_UART1_TX), | 84 | .dma_rx_param = "uart1_rx", |
85 | .cfg_lo = 0, | ||
86 | .src_master = DMA_MASTER_MEMORY, | ||
87 | .dst_master = SPEAR1340_DMA_MASTER_UART1, | ||
88 | }, { | ||
89 | /* Rx */ | ||
90 | .cfg_hi = DWC_CFGH_SRC_PER(SPEAR1340_DMA_REQ_UART1_RX), | ||
91 | .cfg_lo = 0, | ||
92 | .src_master = SPEAR1340_DMA_MASTER_UART1, | ||
93 | .dst_master = DMA_MASTER_MEMORY, | ||
94 | } | ||
95 | }; | 85 | }; |
96 | 86 | ||
97 | static struct amba_pl011_data uart1_data = { | 87 | static struct arasan_cf_pdata cf_pdata = { |
98 | .dma_filter = dw_dma_filter, | 88 | .cf_if_clk = CF_IF_CLK_166M, |
99 | .dma_tx_param = &uart1_dma_param[0], | 89 | .quirk = CF_BROKEN_UDMA, |
100 | .dma_rx_param = &uart1_dma_param[1], | 90 | .dma_priv = "cf", |
101 | }; | 91 | }; |
102 | 92 | ||
103 | /* SATA device registration */ | 93 | /* SATA device registration */ |
@@ -158,11 +148,8 @@ static struct ahci_platform_data sata_pdata = { | |||
158 | 148 | ||
159 | /* Add SPEAr1340 auxdata to pass platform data */ | 149 | /* Add SPEAr1340 auxdata to pass platform data */ |
160 | static struct of_dev_auxdata spear1340_auxdata_lookup[] __initdata = { | 150 | static struct of_dev_auxdata spear1340_auxdata_lookup[] __initdata = { |
161 | OF_DEV_AUXDATA("arasan,cf-spear1340", MCIF_CF_BASE, NULL, &cf_dma_priv), | 151 | OF_DEV_AUXDATA("arasan,cf-spear1340", MCIF_CF_BASE, NULL, &cf_pdata), |
162 | OF_DEV_AUXDATA("snps,dma-spear1340", DMAC0_BASE, NULL, &dmac_plat_data), | ||
163 | OF_DEV_AUXDATA("snps,dma-spear1340", DMAC1_BASE, NULL, &dmac_plat_data), | ||
164 | OF_DEV_AUXDATA("arm,pl022", SSP_BASE, NULL, &pl022_plat_data), | 152 | OF_DEV_AUXDATA("arm,pl022", SSP_BASE, NULL, &pl022_plat_data), |
165 | |||
166 | OF_DEV_AUXDATA("snps,spear-ahci", SPEAR1340_SATA_BASE, NULL, | 153 | OF_DEV_AUXDATA("snps,spear-ahci", SPEAR1340_SATA_BASE, NULL, |
167 | &sata_pdata), | 154 | &sata_pdata), |
168 | OF_DEV_AUXDATA("arm,pl011", SPEAR1340_UART1_BASE, NULL, &uart1_data), | 155 | OF_DEV_AUXDATA("arm,pl011", SPEAR1340_UART1_BASE, NULL, &uart1_data), |
diff --git a/arch/arm/mach-spear13xx/spear13xx.c b/arch/arm/mach-spear13xx/spear13xx.c index c4af775a8451..b074db8b109c 100644 --- a/arch/arm/mach-spear13xx/spear13xx.c +++ b/arch/arm/mach-spear13xx/spear13xx.c | |||
@@ -22,63 +22,16 @@ | |||
22 | #include <asm/hardware/gic.h> | 22 | #include <asm/hardware/gic.h> |
23 | #include <asm/mach/map.h> | 23 | #include <asm/mach/map.h> |
24 | #include <asm/smp_twd.h> | 24 | #include <asm/smp_twd.h> |
25 | #include <mach/dma.h> | ||
26 | #include <mach/generic.h> | 25 | #include <mach/generic.h> |
27 | #include <mach/spear.h> | 26 | #include <mach/spear.h> |
28 | 27 | ||
29 | /* common dw_dma filter routine to be used by peripherals */ | ||
30 | bool dw_dma_filter(struct dma_chan *chan, void *slave) | ||
31 | { | ||
32 | struct dw_dma_slave *dws = (struct dw_dma_slave *)slave; | ||
33 | |||
34 | if (chan->device->dev == dws->dma_dev) { | ||
35 | chan->private = slave; | ||
36 | return true; | ||
37 | } else { | ||
38 | return false; | ||
39 | } | ||
40 | } | ||
41 | |||
42 | /* ssp device registration */ | 28 | /* ssp device registration */ |
43 | static struct dw_dma_slave ssp_dma_param[] = { | ||
44 | { | ||
45 | /* Tx */ | ||
46 | .cfg_hi = DWC_CFGH_DST_PER(DMA_REQ_SSP0_TX), | ||
47 | .cfg_lo = 0, | ||
48 | .src_master = DMA_MASTER_MEMORY, | ||
49 | .dst_master = DMA_MASTER_SSP0, | ||
50 | }, { | ||
51 | /* Rx */ | ||
52 | .cfg_hi = DWC_CFGH_SRC_PER(DMA_REQ_SSP0_RX), | ||
53 | .cfg_lo = 0, | ||
54 | .src_master = DMA_MASTER_SSP0, | ||
55 | .dst_master = DMA_MASTER_MEMORY, | ||
56 | } | ||
57 | }; | ||
58 | |||
59 | struct pl022_ssp_controller pl022_plat_data = { | 29 | struct pl022_ssp_controller pl022_plat_data = { |
60 | .enable_dma = 1, | 30 | .enable_dma = 1, |
61 | .dma_filter = dw_dma_filter, | 31 | .dma_filter = dw_dma_generic_filter, |
62 | .dma_rx_param = &ssp_dma_param[1], | 32 | .dma_rx_param = "ssp0_rx", |
63 | .dma_tx_param = &ssp_dma_param[0], | 33 | .dma_tx_param = "ssp0_tx", |
64 | }; | 34 | .num_chipselect = 3, |
65 | |||
66 | /* CF device registration */ | ||
67 | struct dw_dma_slave cf_dma_priv = { | ||
68 | .cfg_hi = 0, | ||
69 | .cfg_lo = 0, | ||
70 | .src_master = 0, | ||
71 | .dst_master = 0, | ||
72 | }; | ||
73 | |||
74 | /* dmac device registeration */ | ||
75 | struct dw_dma_platform_data dmac_plat_data = { | ||
76 | .nr_channels = 8, | ||
77 | .chan_allocation_order = CHAN_ALLOCATION_DESCENDING, | ||
78 | .chan_priority = CHAN_PRIORITY_DESCENDING, | ||
79 | .block_size = 4095U, | ||
80 | .nr_masters = 2, | ||
81 | .data_width = { 3, 3, 0, 0 }, | ||
82 | }; | 35 | }; |
83 | 36 | ||
84 | void __init spear13xx_l2x0_init(void) | 37 | void __init spear13xx_l2x0_init(void) |