aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorViresh Kumar <viresh.kumar@linaro.org>2012-10-16 00:19:18 -0400
committerVinod Koul <vinod.koul@intel.com>2013-01-08 01:04:46 -0500
commitf9965aa20706860077cfa093d04a6351c0c1e940 (patch)
treed1e039e70ace9c2f8d52caa64b2b4f4305089937 /arch
parenta9ddb575d6d6c58c39e8c44a22b84445fedb0521 (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.dtsi19
-rw-r--r--arch/arm/boot/dts/spear13xx.dtsi38
-rw-r--r--arch/arm/mach-spear13xx/include/mach/spear.h2
-rw-r--r--arch/arm/mach-spear13xx/spear1310.c5
-rw-r--r--arch/arm/mach-spear13xx/spear1340.c33
-rw-r--r--arch/arm/mach-spear13xx/spear13xx.c55
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 @@
36static struct arasan_cf_pdata cf_pdata = { 36static 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 */
48static struct of_dev_auxdata spear1310_auxdata_lookup[] __initdata = { 48static 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
81static struct dw_dma_slave uart1_dma_param[] = { 81static 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
97static struct amba_pl011_data uart1_data = { 87static 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 */
160static struct of_dev_auxdata spear1340_auxdata_lookup[] __initdata = { 150static 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 */
30bool 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 */
43static 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
59struct pl022_ssp_controller pl022_plat_data = { 29struct 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 */
67struct 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 */
75struct 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
84void __init spear13xx_l2x0_init(void) 37void __init spear13xx_l2x0_init(void)