1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun * arch/arm/mach-spear6xx/spear6xx.c
3*4882a593Smuzhiyun *
4*4882a593Smuzhiyun * SPEAr6XX machines common source file
5*4882a593Smuzhiyun *
6*4882a593Smuzhiyun * Copyright (C) 2009 ST Microelectronics
7*4882a593Smuzhiyun * Rajeev Kumar<rajeev-dlh.kumar@st.com>
8*4882a593Smuzhiyun *
9*4882a593Smuzhiyun * Copyright 2012 Stefan Roese <sr@denx.de>
10*4882a593Smuzhiyun *
11*4882a593Smuzhiyun * This file is licensed under the terms of the GNU General Public
12*4882a593Smuzhiyun * License version 2. This program is licensed "as is" without any
13*4882a593Smuzhiyun * warranty of any kind, whether express or implied.
14*4882a593Smuzhiyun */
15*4882a593Smuzhiyun
16*4882a593Smuzhiyun #include <linux/amba/pl08x.h>
17*4882a593Smuzhiyun #include <linux/clk.h>
18*4882a593Smuzhiyun #include <linux/err.h>
19*4882a593Smuzhiyun #include <linux/of.h>
20*4882a593Smuzhiyun #include <linux/of_address.h>
21*4882a593Smuzhiyun #include <linux/of_platform.h>
22*4882a593Smuzhiyun #include <linux/amba/pl080.h>
23*4882a593Smuzhiyun #include <asm/mach/arch.h>
24*4882a593Smuzhiyun #include <asm/mach/time.h>
25*4882a593Smuzhiyun #include <asm/mach/map.h>
26*4882a593Smuzhiyun #include "pl080.h"
27*4882a593Smuzhiyun #include "generic.h"
28*4882a593Smuzhiyun #include <mach/spear.h>
29*4882a593Smuzhiyun #include <mach/misc_regs.h>
30*4882a593Smuzhiyun
31*4882a593Smuzhiyun /* dmac device registration */
32*4882a593Smuzhiyun static struct pl08x_channel_data spear600_dma_info[] = {
33*4882a593Smuzhiyun {
34*4882a593Smuzhiyun .bus_id = "ssp1_rx",
35*4882a593Smuzhiyun .min_signal = 0,
36*4882a593Smuzhiyun .max_signal = 0,
37*4882a593Smuzhiyun .muxval = 0,
38*4882a593Smuzhiyun .periph_buses = PL08X_AHB1,
39*4882a593Smuzhiyun }, {
40*4882a593Smuzhiyun .bus_id = "ssp1_tx",
41*4882a593Smuzhiyun .min_signal = 1,
42*4882a593Smuzhiyun .max_signal = 1,
43*4882a593Smuzhiyun .muxval = 0,
44*4882a593Smuzhiyun .periph_buses = PL08X_AHB1,
45*4882a593Smuzhiyun }, {
46*4882a593Smuzhiyun .bus_id = "uart0_rx",
47*4882a593Smuzhiyun .min_signal = 2,
48*4882a593Smuzhiyun .max_signal = 2,
49*4882a593Smuzhiyun .muxval = 0,
50*4882a593Smuzhiyun .periph_buses = PL08X_AHB1,
51*4882a593Smuzhiyun }, {
52*4882a593Smuzhiyun .bus_id = "uart0_tx",
53*4882a593Smuzhiyun .min_signal = 3,
54*4882a593Smuzhiyun .max_signal = 3,
55*4882a593Smuzhiyun .muxval = 0,
56*4882a593Smuzhiyun .periph_buses = PL08X_AHB1,
57*4882a593Smuzhiyun }, {
58*4882a593Smuzhiyun .bus_id = "uart1_rx",
59*4882a593Smuzhiyun .min_signal = 4,
60*4882a593Smuzhiyun .max_signal = 4,
61*4882a593Smuzhiyun .muxval = 0,
62*4882a593Smuzhiyun .periph_buses = PL08X_AHB1,
63*4882a593Smuzhiyun }, {
64*4882a593Smuzhiyun .bus_id = "uart1_tx",
65*4882a593Smuzhiyun .min_signal = 5,
66*4882a593Smuzhiyun .max_signal = 5,
67*4882a593Smuzhiyun .muxval = 0,
68*4882a593Smuzhiyun .periph_buses = PL08X_AHB1,
69*4882a593Smuzhiyun }, {
70*4882a593Smuzhiyun .bus_id = "ssp2_rx",
71*4882a593Smuzhiyun .min_signal = 6,
72*4882a593Smuzhiyun .max_signal = 6,
73*4882a593Smuzhiyun .muxval = 0,
74*4882a593Smuzhiyun .periph_buses = PL08X_AHB2,
75*4882a593Smuzhiyun }, {
76*4882a593Smuzhiyun .bus_id = "ssp2_tx",
77*4882a593Smuzhiyun .min_signal = 7,
78*4882a593Smuzhiyun .max_signal = 7,
79*4882a593Smuzhiyun .muxval = 0,
80*4882a593Smuzhiyun .periph_buses = PL08X_AHB2,
81*4882a593Smuzhiyun }, {
82*4882a593Smuzhiyun .bus_id = "ssp0_rx",
83*4882a593Smuzhiyun .min_signal = 8,
84*4882a593Smuzhiyun .max_signal = 8,
85*4882a593Smuzhiyun .muxval = 0,
86*4882a593Smuzhiyun .periph_buses = PL08X_AHB1,
87*4882a593Smuzhiyun }, {
88*4882a593Smuzhiyun .bus_id = "ssp0_tx",
89*4882a593Smuzhiyun .min_signal = 9,
90*4882a593Smuzhiyun .max_signal = 9,
91*4882a593Smuzhiyun .muxval = 0,
92*4882a593Smuzhiyun .periph_buses = PL08X_AHB1,
93*4882a593Smuzhiyun }, {
94*4882a593Smuzhiyun .bus_id = "i2c_rx",
95*4882a593Smuzhiyun .min_signal = 10,
96*4882a593Smuzhiyun .max_signal = 10,
97*4882a593Smuzhiyun .muxval = 0,
98*4882a593Smuzhiyun .periph_buses = PL08X_AHB1,
99*4882a593Smuzhiyun }, {
100*4882a593Smuzhiyun .bus_id = "i2c_tx",
101*4882a593Smuzhiyun .min_signal = 11,
102*4882a593Smuzhiyun .max_signal = 11,
103*4882a593Smuzhiyun .muxval = 0,
104*4882a593Smuzhiyun .periph_buses = PL08X_AHB1,
105*4882a593Smuzhiyun }, {
106*4882a593Smuzhiyun .bus_id = "irda",
107*4882a593Smuzhiyun .min_signal = 12,
108*4882a593Smuzhiyun .max_signal = 12,
109*4882a593Smuzhiyun .muxval = 0,
110*4882a593Smuzhiyun .periph_buses = PL08X_AHB1,
111*4882a593Smuzhiyun }, {
112*4882a593Smuzhiyun .bus_id = "adc",
113*4882a593Smuzhiyun .min_signal = 13,
114*4882a593Smuzhiyun .max_signal = 13,
115*4882a593Smuzhiyun .muxval = 0,
116*4882a593Smuzhiyun .periph_buses = PL08X_AHB2,
117*4882a593Smuzhiyun }, {
118*4882a593Smuzhiyun .bus_id = "to_jpeg",
119*4882a593Smuzhiyun .min_signal = 14,
120*4882a593Smuzhiyun .max_signal = 14,
121*4882a593Smuzhiyun .muxval = 0,
122*4882a593Smuzhiyun .periph_buses = PL08X_AHB1,
123*4882a593Smuzhiyun }, {
124*4882a593Smuzhiyun .bus_id = "from_jpeg",
125*4882a593Smuzhiyun .min_signal = 15,
126*4882a593Smuzhiyun .max_signal = 15,
127*4882a593Smuzhiyun .muxval = 0,
128*4882a593Smuzhiyun .periph_buses = PL08X_AHB1,
129*4882a593Smuzhiyun }, {
130*4882a593Smuzhiyun .bus_id = "ras0_rx",
131*4882a593Smuzhiyun .min_signal = 0,
132*4882a593Smuzhiyun .max_signal = 0,
133*4882a593Smuzhiyun .muxval = 1,
134*4882a593Smuzhiyun .periph_buses = PL08X_AHB1,
135*4882a593Smuzhiyun }, {
136*4882a593Smuzhiyun .bus_id = "ras0_tx",
137*4882a593Smuzhiyun .min_signal = 1,
138*4882a593Smuzhiyun .max_signal = 1,
139*4882a593Smuzhiyun .muxval = 1,
140*4882a593Smuzhiyun .periph_buses = PL08X_AHB1,
141*4882a593Smuzhiyun }, {
142*4882a593Smuzhiyun .bus_id = "ras1_rx",
143*4882a593Smuzhiyun .min_signal = 2,
144*4882a593Smuzhiyun .max_signal = 2,
145*4882a593Smuzhiyun .muxval = 1,
146*4882a593Smuzhiyun .periph_buses = PL08X_AHB1,
147*4882a593Smuzhiyun }, {
148*4882a593Smuzhiyun .bus_id = "ras1_tx",
149*4882a593Smuzhiyun .min_signal = 3,
150*4882a593Smuzhiyun .max_signal = 3,
151*4882a593Smuzhiyun .muxval = 1,
152*4882a593Smuzhiyun .periph_buses = PL08X_AHB1,
153*4882a593Smuzhiyun }, {
154*4882a593Smuzhiyun .bus_id = "ras2_rx",
155*4882a593Smuzhiyun .min_signal = 4,
156*4882a593Smuzhiyun .max_signal = 4,
157*4882a593Smuzhiyun .muxval = 1,
158*4882a593Smuzhiyun .periph_buses = PL08X_AHB1,
159*4882a593Smuzhiyun }, {
160*4882a593Smuzhiyun .bus_id = "ras2_tx",
161*4882a593Smuzhiyun .min_signal = 5,
162*4882a593Smuzhiyun .max_signal = 5,
163*4882a593Smuzhiyun .muxval = 1,
164*4882a593Smuzhiyun .periph_buses = PL08X_AHB1,
165*4882a593Smuzhiyun }, {
166*4882a593Smuzhiyun .bus_id = "ras3_rx",
167*4882a593Smuzhiyun .min_signal = 6,
168*4882a593Smuzhiyun .max_signal = 6,
169*4882a593Smuzhiyun .muxval = 1,
170*4882a593Smuzhiyun .periph_buses = PL08X_AHB1,
171*4882a593Smuzhiyun }, {
172*4882a593Smuzhiyun .bus_id = "ras3_tx",
173*4882a593Smuzhiyun .min_signal = 7,
174*4882a593Smuzhiyun .max_signal = 7,
175*4882a593Smuzhiyun .muxval = 1,
176*4882a593Smuzhiyun .periph_buses = PL08X_AHB1,
177*4882a593Smuzhiyun }, {
178*4882a593Smuzhiyun .bus_id = "ras4_rx",
179*4882a593Smuzhiyun .min_signal = 8,
180*4882a593Smuzhiyun .max_signal = 8,
181*4882a593Smuzhiyun .muxval = 1,
182*4882a593Smuzhiyun .periph_buses = PL08X_AHB1,
183*4882a593Smuzhiyun }, {
184*4882a593Smuzhiyun .bus_id = "ras4_tx",
185*4882a593Smuzhiyun .min_signal = 9,
186*4882a593Smuzhiyun .max_signal = 9,
187*4882a593Smuzhiyun .muxval = 1,
188*4882a593Smuzhiyun .periph_buses = PL08X_AHB1,
189*4882a593Smuzhiyun }, {
190*4882a593Smuzhiyun .bus_id = "ras5_rx",
191*4882a593Smuzhiyun .min_signal = 10,
192*4882a593Smuzhiyun .max_signal = 10,
193*4882a593Smuzhiyun .muxval = 1,
194*4882a593Smuzhiyun .periph_buses = PL08X_AHB1,
195*4882a593Smuzhiyun }, {
196*4882a593Smuzhiyun .bus_id = "ras5_tx",
197*4882a593Smuzhiyun .min_signal = 11,
198*4882a593Smuzhiyun .max_signal = 11,
199*4882a593Smuzhiyun .muxval = 1,
200*4882a593Smuzhiyun .periph_buses = PL08X_AHB1,
201*4882a593Smuzhiyun }, {
202*4882a593Smuzhiyun .bus_id = "ras6_rx",
203*4882a593Smuzhiyun .min_signal = 12,
204*4882a593Smuzhiyun .max_signal = 12,
205*4882a593Smuzhiyun .muxval = 1,
206*4882a593Smuzhiyun .periph_buses = PL08X_AHB1,
207*4882a593Smuzhiyun }, {
208*4882a593Smuzhiyun .bus_id = "ras6_tx",
209*4882a593Smuzhiyun .min_signal = 13,
210*4882a593Smuzhiyun .max_signal = 13,
211*4882a593Smuzhiyun .muxval = 1,
212*4882a593Smuzhiyun .periph_buses = PL08X_AHB1,
213*4882a593Smuzhiyun }, {
214*4882a593Smuzhiyun .bus_id = "ras7_rx",
215*4882a593Smuzhiyun .min_signal = 14,
216*4882a593Smuzhiyun .max_signal = 14,
217*4882a593Smuzhiyun .muxval = 1,
218*4882a593Smuzhiyun .periph_buses = PL08X_AHB1,
219*4882a593Smuzhiyun }, {
220*4882a593Smuzhiyun .bus_id = "ras7_tx",
221*4882a593Smuzhiyun .min_signal = 15,
222*4882a593Smuzhiyun .max_signal = 15,
223*4882a593Smuzhiyun .muxval = 1,
224*4882a593Smuzhiyun .periph_buses = PL08X_AHB1,
225*4882a593Smuzhiyun }, {
226*4882a593Smuzhiyun .bus_id = "ext0_rx",
227*4882a593Smuzhiyun .min_signal = 0,
228*4882a593Smuzhiyun .max_signal = 0,
229*4882a593Smuzhiyun .muxval = 2,
230*4882a593Smuzhiyun .periph_buses = PL08X_AHB2,
231*4882a593Smuzhiyun }, {
232*4882a593Smuzhiyun .bus_id = "ext0_tx",
233*4882a593Smuzhiyun .min_signal = 1,
234*4882a593Smuzhiyun .max_signal = 1,
235*4882a593Smuzhiyun .muxval = 2,
236*4882a593Smuzhiyun .periph_buses = PL08X_AHB2,
237*4882a593Smuzhiyun }, {
238*4882a593Smuzhiyun .bus_id = "ext1_rx",
239*4882a593Smuzhiyun .min_signal = 2,
240*4882a593Smuzhiyun .max_signal = 2,
241*4882a593Smuzhiyun .muxval = 2,
242*4882a593Smuzhiyun .periph_buses = PL08X_AHB2,
243*4882a593Smuzhiyun }, {
244*4882a593Smuzhiyun .bus_id = "ext1_tx",
245*4882a593Smuzhiyun .min_signal = 3,
246*4882a593Smuzhiyun .max_signal = 3,
247*4882a593Smuzhiyun .muxval = 2,
248*4882a593Smuzhiyun .periph_buses = PL08X_AHB2,
249*4882a593Smuzhiyun }, {
250*4882a593Smuzhiyun .bus_id = "ext2_rx",
251*4882a593Smuzhiyun .min_signal = 4,
252*4882a593Smuzhiyun .max_signal = 4,
253*4882a593Smuzhiyun .muxval = 2,
254*4882a593Smuzhiyun .periph_buses = PL08X_AHB2,
255*4882a593Smuzhiyun }, {
256*4882a593Smuzhiyun .bus_id = "ext2_tx",
257*4882a593Smuzhiyun .min_signal = 5,
258*4882a593Smuzhiyun .max_signal = 5,
259*4882a593Smuzhiyun .muxval = 2,
260*4882a593Smuzhiyun .periph_buses = PL08X_AHB2,
261*4882a593Smuzhiyun }, {
262*4882a593Smuzhiyun .bus_id = "ext3_rx",
263*4882a593Smuzhiyun .min_signal = 6,
264*4882a593Smuzhiyun .max_signal = 6,
265*4882a593Smuzhiyun .muxval = 2,
266*4882a593Smuzhiyun .periph_buses = PL08X_AHB2,
267*4882a593Smuzhiyun }, {
268*4882a593Smuzhiyun .bus_id = "ext3_tx",
269*4882a593Smuzhiyun .min_signal = 7,
270*4882a593Smuzhiyun .max_signal = 7,
271*4882a593Smuzhiyun .muxval = 2,
272*4882a593Smuzhiyun .periph_buses = PL08X_AHB2,
273*4882a593Smuzhiyun }, {
274*4882a593Smuzhiyun .bus_id = "ext4_rx",
275*4882a593Smuzhiyun .min_signal = 8,
276*4882a593Smuzhiyun .max_signal = 8,
277*4882a593Smuzhiyun .muxval = 2,
278*4882a593Smuzhiyun .periph_buses = PL08X_AHB2,
279*4882a593Smuzhiyun }, {
280*4882a593Smuzhiyun .bus_id = "ext4_tx",
281*4882a593Smuzhiyun .min_signal = 9,
282*4882a593Smuzhiyun .max_signal = 9,
283*4882a593Smuzhiyun .muxval = 2,
284*4882a593Smuzhiyun .periph_buses = PL08X_AHB2,
285*4882a593Smuzhiyun }, {
286*4882a593Smuzhiyun .bus_id = "ext5_rx",
287*4882a593Smuzhiyun .min_signal = 10,
288*4882a593Smuzhiyun .max_signal = 10,
289*4882a593Smuzhiyun .muxval = 2,
290*4882a593Smuzhiyun .periph_buses = PL08X_AHB2,
291*4882a593Smuzhiyun }, {
292*4882a593Smuzhiyun .bus_id = "ext5_tx",
293*4882a593Smuzhiyun .min_signal = 11,
294*4882a593Smuzhiyun .max_signal = 11,
295*4882a593Smuzhiyun .muxval = 2,
296*4882a593Smuzhiyun .periph_buses = PL08X_AHB2,
297*4882a593Smuzhiyun }, {
298*4882a593Smuzhiyun .bus_id = "ext6_rx",
299*4882a593Smuzhiyun .min_signal = 12,
300*4882a593Smuzhiyun .max_signal = 12,
301*4882a593Smuzhiyun .muxval = 2,
302*4882a593Smuzhiyun .periph_buses = PL08X_AHB2,
303*4882a593Smuzhiyun }, {
304*4882a593Smuzhiyun .bus_id = "ext6_tx",
305*4882a593Smuzhiyun .min_signal = 13,
306*4882a593Smuzhiyun .max_signal = 13,
307*4882a593Smuzhiyun .muxval = 2,
308*4882a593Smuzhiyun .periph_buses = PL08X_AHB2,
309*4882a593Smuzhiyun }, {
310*4882a593Smuzhiyun .bus_id = "ext7_rx",
311*4882a593Smuzhiyun .min_signal = 14,
312*4882a593Smuzhiyun .max_signal = 14,
313*4882a593Smuzhiyun .muxval = 2,
314*4882a593Smuzhiyun .periph_buses = PL08X_AHB2,
315*4882a593Smuzhiyun }, {
316*4882a593Smuzhiyun .bus_id = "ext7_tx",
317*4882a593Smuzhiyun .min_signal = 15,
318*4882a593Smuzhiyun .max_signal = 15,
319*4882a593Smuzhiyun .muxval = 2,
320*4882a593Smuzhiyun .periph_buses = PL08X_AHB2,
321*4882a593Smuzhiyun },
322*4882a593Smuzhiyun };
323*4882a593Smuzhiyun
324*4882a593Smuzhiyun static struct pl08x_platform_data spear6xx_pl080_plat_data = {
325*4882a593Smuzhiyun .memcpy_burst_size = PL08X_BURST_SZ_16,
326*4882a593Smuzhiyun .memcpy_bus_width = PL08X_BUS_WIDTH_32_BITS,
327*4882a593Smuzhiyun .memcpy_prot_buff = true,
328*4882a593Smuzhiyun .memcpy_prot_cache = true,
329*4882a593Smuzhiyun .lli_buses = PL08X_AHB1,
330*4882a593Smuzhiyun .mem_buses = PL08X_AHB1,
331*4882a593Smuzhiyun .get_xfer_signal = pl080_get_signal,
332*4882a593Smuzhiyun .put_xfer_signal = pl080_put_signal,
333*4882a593Smuzhiyun .slave_channels = spear600_dma_info,
334*4882a593Smuzhiyun .num_slave_channels = ARRAY_SIZE(spear600_dma_info),
335*4882a593Smuzhiyun };
336*4882a593Smuzhiyun
337*4882a593Smuzhiyun /*
338*4882a593Smuzhiyun * Following will create 16MB static virtual/physical mappings
339*4882a593Smuzhiyun * PHYSICAL VIRTUAL
340*4882a593Smuzhiyun * 0xF0000000 0xF0000000
341*4882a593Smuzhiyun * 0xF1000000 0xF1000000
342*4882a593Smuzhiyun * 0xD0000000 0xFD000000
343*4882a593Smuzhiyun * 0xFC000000 0xFC000000
344*4882a593Smuzhiyun */
345*4882a593Smuzhiyun struct map_desc spear6xx_io_desc[] __initdata = {
346*4882a593Smuzhiyun {
347*4882a593Smuzhiyun .virtual = (unsigned long)VA_SPEAR6XX_ML_CPU_BASE,
348*4882a593Smuzhiyun .pfn = __phys_to_pfn(SPEAR_ICM3_ML1_2_BASE),
349*4882a593Smuzhiyun .length = 2 * SZ_16M,
350*4882a593Smuzhiyun .type = MT_DEVICE
351*4882a593Smuzhiyun }, {
352*4882a593Smuzhiyun .virtual = (unsigned long)VA_SPEAR_ICM1_2_BASE,
353*4882a593Smuzhiyun .pfn = __phys_to_pfn(SPEAR_ICM1_2_BASE),
354*4882a593Smuzhiyun .length = SZ_16M,
355*4882a593Smuzhiyun .type = MT_DEVICE
356*4882a593Smuzhiyun }, {
357*4882a593Smuzhiyun .virtual = (unsigned long)VA_SPEAR_ICM3_SMI_CTRL_BASE,
358*4882a593Smuzhiyun .pfn = __phys_to_pfn(SPEAR_ICM3_SMI_CTRL_BASE),
359*4882a593Smuzhiyun .length = SZ_16M,
360*4882a593Smuzhiyun .type = MT_DEVICE
361*4882a593Smuzhiyun },
362*4882a593Smuzhiyun };
363*4882a593Smuzhiyun
364*4882a593Smuzhiyun /* This will create static memory mapping for selected devices */
spear6xx_map_io(void)365*4882a593Smuzhiyun void __init spear6xx_map_io(void)
366*4882a593Smuzhiyun {
367*4882a593Smuzhiyun iotable_init(spear6xx_io_desc, ARRAY_SIZE(spear6xx_io_desc));
368*4882a593Smuzhiyun }
369*4882a593Smuzhiyun
spear6xx_timer_init(void)370*4882a593Smuzhiyun void __init spear6xx_timer_init(void)
371*4882a593Smuzhiyun {
372*4882a593Smuzhiyun char pclk_name[] = "pll3_clk";
373*4882a593Smuzhiyun struct clk *gpt_clk, *pclk;
374*4882a593Smuzhiyun
375*4882a593Smuzhiyun spear6xx_clk_init(MISC_BASE);
376*4882a593Smuzhiyun
377*4882a593Smuzhiyun /* get the system timer clock */
378*4882a593Smuzhiyun gpt_clk = clk_get_sys("gpt0", NULL);
379*4882a593Smuzhiyun if (IS_ERR(gpt_clk)) {
380*4882a593Smuzhiyun pr_err("%s:couldn't get clk for gpt\n", __func__);
381*4882a593Smuzhiyun BUG();
382*4882a593Smuzhiyun }
383*4882a593Smuzhiyun
384*4882a593Smuzhiyun /* get the suitable parent clock for timer*/
385*4882a593Smuzhiyun pclk = clk_get(NULL, pclk_name);
386*4882a593Smuzhiyun if (IS_ERR(pclk)) {
387*4882a593Smuzhiyun pr_err("%s:couldn't get %s as parent for gpt\n",
388*4882a593Smuzhiyun __func__, pclk_name);
389*4882a593Smuzhiyun BUG();
390*4882a593Smuzhiyun }
391*4882a593Smuzhiyun
392*4882a593Smuzhiyun clk_set_parent(gpt_clk, pclk);
393*4882a593Smuzhiyun clk_put(gpt_clk);
394*4882a593Smuzhiyun clk_put(pclk);
395*4882a593Smuzhiyun
396*4882a593Smuzhiyun spear_setup_of_timer();
397*4882a593Smuzhiyun }
398*4882a593Smuzhiyun
399*4882a593Smuzhiyun /* Add auxdata to pass platform data */
400*4882a593Smuzhiyun struct of_dev_auxdata spear6xx_auxdata_lookup[] __initdata = {
401*4882a593Smuzhiyun OF_DEV_AUXDATA("arm,pl080", SPEAR_ICM3_DMA_BASE, NULL,
402*4882a593Smuzhiyun &spear6xx_pl080_plat_data),
403*4882a593Smuzhiyun {}
404*4882a593Smuzhiyun };
405*4882a593Smuzhiyun
spear600_dt_init(void)406*4882a593Smuzhiyun static void __init spear600_dt_init(void)
407*4882a593Smuzhiyun {
408*4882a593Smuzhiyun of_platform_default_populate(NULL, spear6xx_auxdata_lookup, NULL);
409*4882a593Smuzhiyun }
410*4882a593Smuzhiyun
411*4882a593Smuzhiyun static const char *spear600_dt_board_compat[] = {
412*4882a593Smuzhiyun "st,spear600",
413*4882a593Smuzhiyun NULL
414*4882a593Smuzhiyun };
415*4882a593Smuzhiyun
416*4882a593Smuzhiyun DT_MACHINE_START(SPEAR600_DT, "ST SPEAr600 (Flattened Device Tree)")
417*4882a593Smuzhiyun .map_io = spear6xx_map_io,
418*4882a593Smuzhiyun .init_time = spear6xx_timer_init,
419*4882a593Smuzhiyun .init_machine = spear600_dt_init,
420*4882a593Smuzhiyun .restart = spear_restart,
421*4882a593Smuzhiyun .dt_compat = spear600_dt_board_compat,
422*4882a593Smuzhiyun MACHINE_END
423