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