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