xref: /openbmc/linux/arch/arm/mach-spear/spear300.c (revision 4f2c0a4acffbec01079c28f839422e64ddeff004)
1*0fdebc5eSThomas Gleixner // SPDX-License-Identifier: GPL-2.0-only
2a7ed099fSArnd Bergmann /*
3a7ed099fSArnd Bergmann  * arch/arm/mach-spear3xx/spear300.c
4a7ed099fSArnd Bergmann  *
5a7ed099fSArnd Bergmann  * SPEAr300 machine source file
6a7ed099fSArnd Bergmann  *
7a7ed099fSArnd Bergmann  * Copyright (C) 2009-2012 ST Microelectronics
8da89947bSViresh Kumar  * Viresh Kumar <vireshk@kernel.org>
9a7ed099fSArnd Bergmann  */
10a7ed099fSArnd Bergmann 
11a7ed099fSArnd Bergmann #define pr_fmt(fmt) "SPEAr300: " fmt
12a7ed099fSArnd Bergmann 
13a7ed099fSArnd Bergmann #include <linux/amba/pl08x.h>
14a7ed099fSArnd Bergmann #include <linux/of_platform.h>
15a7ed099fSArnd Bergmann #include <asm/mach/arch.h>
162b9c613cSArnd Bergmann #include "generic.h"
17c164620aSArnd Bergmann #include "spear.h"
18a7ed099fSArnd Bergmann 
19a7ed099fSArnd Bergmann /* DMAC platform data's slave info */
20a7ed099fSArnd Bergmann struct pl08x_channel_data spear300_dma_info[] = {
21a7ed099fSArnd Bergmann 	{
22a7ed099fSArnd Bergmann 		.bus_id = "uart0_rx",
23a7ed099fSArnd Bergmann 		.min_signal = 2,
24a7ed099fSArnd Bergmann 		.max_signal = 2,
25a7ed099fSArnd Bergmann 		.muxval = 0,
26a7ed099fSArnd Bergmann 		.periph_buses = PL08X_AHB1,
27a7ed099fSArnd Bergmann 	}, {
28a7ed099fSArnd Bergmann 		.bus_id = "uart0_tx",
29a7ed099fSArnd Bergmann 		.min_signal = 3,
30a7ed099fSArnd Bergmann 		.max_signal = 3,
31a7ed099fSArnd Bergmann 		.muxval = 0,
32a7ed099fSArnd Bergmann 		.periph_buses = PL08X_AHB1,
33a7ed099fSArnd Bergmann 	}, {
34a7ed099fSArnd Bergmann 		.bus_id = "ssp0_rx",
35a7ed099fSArnd Bergmann 		.min_signal = 8,
36a7ed099fSArnd Bergmann 		.max_signal = 8,
37a7ed099fSArnd Bergmann 		.muxval = 0,
38a7ed099fSArnd Bergmann 		.periph_buses = PL08X_AHB1,
39a7ed099fSArnd Bergmann 	}, {
40a7ed099fSArnd Bergmann 		.bus_id = "ssp0_tx",
41a7ed099fSArnd Bergmann 		.min_signal = 9,
42a7ed099fSArnd Bergmann 		.max_signal = 9,
43a7ed099fSArnd Bergmann 		.muxval = 0,
44a7ed099fSArnd Bergmann 		.periph_buses = PL08X_AHB1,
45a7ed099fSArnd Bergmann 	}, {
46a7ed099fSArnd Bergmann 		.bus_id = "i2c_rx",
47a7ed099fSArnd Bergmann 		.min_signal = 10,
48a7ed099fSArnd Bergmann 		.max_signal = 10,
49a7ed099fSArnd Bergmann 		.muxval = 0,
50a7ed099fSArnd Bergmann 		.periph_buses = PL08X_AHB1,
51a7ed099fSArnd Bergmann 	}, {
52a7ed099fSArnd Bergmann 		.bus_id = "i2c_tx",
53a7ed099fSArnd Bergmann 		.min_signal = 11,
54a7ed099fSArnd Bergmann 		.max_signal = 11,
55a7ed099fSArnd Bergmann 		.muxval = 0,
56a7ed099fSArnd Bergmann 		.periph_buses = PL08X_AHB1,
57a7ed099fSArnd Bergmann 	}, {
58a7ed099fSArnd Bergmann 		.bus_id = "irda",
59a7ed099fSArnd Bergmann 		.min_signal = 12,
60a7ed099fSArnd Bergmann 		.max_signal = 12,
61a7ed099fSArnd Bergmann 		.muxval = 0,
62a7ed099fSArnd Bergmann 		.periph_buses = PL08X_AHB1,
63a7ed099fSArnd Bergmann 	}, {
64a7ed099fSArnd Bergmann 		.bus_id = "adc",
65a7ed099fSArnd Bergmann 		.min_signal = 13,
66a7ed099fSArnd Bergmann 		.max_signal = 13,
67a7ed099fSArnd Bergmann 		.muxval = 0,
68a7ed099fSArnd Bergmann 		.periph_buses = PL08X_AHB1,
69a7ed099fSArnd Bergmann 	}, {
70a7ed099fSArnd Bergmann 		.bus_id = "to_jpeg",
71a7ed099fSArnd Bergmann 		.min_signal = 14,
72a7ed099fSArnd Bergmann 		.max_signal = 14,
73a7ed099fSArnd Bergmann 		.muxval = 0,
74a7ed099fSArnd Bergmann 		.periph_buses = PL08X_AHB1,
75a7ed099fSArnd Bergmann 	}, {
76a7ed099fSArnd Bergmann 		.bus_id = "from_jpeg",
77a7ed099fSArnd Bergmann 		.min_signal = 15,
78a7ed099fSArnd Bergmann 		.max_signal = 15,
79a7ed099fSArnd Bergmann 		.muxval = 0,
80a7ed099fSArnd Bergmann 		.periph_buses = PL08X_AHB1,
81a7ed099fSArnd Bergmann 	}, {
82a7ed099fSArnd Bergmann 		.bus_id = "ras0_rx",
83a7ed099fSArnd Bergmann 		.min_signal = 0,
84a7ed099fSArnd Bergmann 		.max_signal = 0,
85a7ed099fSArnd Bergmann 		.muxval = 1,
86a7ed099fSArnd Bergmann 		.periph_buses = PL08X_AHB1,
87a7ed099fSArnd Bergmann 	}, {
88a7ed099fSArnd Bergmann 		.bus_id = "ras0_tx",
89a7ed099fSArnd Bergmann 		.min_signal = 1,
90a7ed099fSArnd Bergmann 		.max_signal = 1,
91a7ed099fSArnd Bergmann 		.muxval = 1,
92a7ed099fSArnd Bergmann 		.periph_buses = PL08X_AHB1,
93a7ed099fSArnd Bergmann 	}, {
94a7ed099fSArnd Bergmann 		.bus_id = "ras1_rx",
95a7ed099fSArnd Bergmann 		.min_signal = 2,
96a7ed099fSArnd Bergmann 		.max_signal = 2,
97a7ed099fSArnd Bergmann 		.muxval = 1,
98a7ed099fSArnd Bergmann 		.periph_buses = PL08X_AHB1,
99a7ed099fSArnd Bergmann 	}, {
100a7ed099fSArnd Bergmann 		.bus_id = "ras1_tx",
101a7ed099fSArnd Bergmann 		.min_signal = 3,
102a7ed099fSArnd Bergmann 		.max_signal = 3,
103a7ed099fSArnd Bergmann 		.muxval = 1,
104a7ed099fSArnd Bergmann 		.periph_buses = PL08X_AHB1,
105a7ed099fSArnd Bergmann 	}, {
106a7ed099fSArnd Bergmann 		.bus_id = "ras2_rx",
107a7ed099fSArnd Bergmann 		.min_signal = 4,
108a7ed099fSArnd Bergmann 		.max_signal = 4,
109a7ed099fSArnd Bergmann 		.muxval = 1,
110a7ed099fSArnd Bergmann 		.periph_buses = PL08X_AHB1,
111a7ed099fSArnd Bergmann 	}, {
112a7ed099fSArnd Bergmann 		.bus_id = "ras2_tx",
113a7ed099fSArnd Bergmann 		.min_signal = 5,
114a7ed099fSArnd Bergmann 		.max_signal = 5,
115a7ed099fSArnd Bergmann 		.muxval = 1,
116a7ed099fSArnd Bergmann 		.periph_buses = PL08X_AHB1,
117a7ed099fSArnd Bergmann 	}, {
118a7ed099fSArnd Bergmann 		.bus_id = "ras3_rx",
119a7ed099fSArnd Bergmann 		.min_signal = 6,
120a7ed099fSArnd Bergmann 		.max_signal = 6,
121a7ed099fSArnd Bergmann 		.muxval = 1,
122a7ed099fSArnd Bergmann 		.periph_buses = PL08X_AHB1,
123a7ed099fSArnd Bergmann 	}, {
124a7ed099fSArnd Bergmann 		.bus_id = "ras3_tx",
125a7ed099fSArnd Bergmann 		.min_signal = 7,
126a7ed099fSArnd Bergmann 		.max_signal = 7,
127a7ed099fSArnd Bergmann 		.muxval = 1,
128a7ed099fSArnd Bergmann 		.periph_buses = PL08X_AHB1,
129a7ed099fSArnd Bergmann 	}, {
130a7ed099fSArnd Bergmann 		.bus_id = "ras4_rx",
131a7ed099fSArnd Bergmann 		.min_signal = 8,
132a7ed099fSArnd Bergmann 		.max_signal = 8,
133a7ed099fSArnd Bergmann 		.muxval = 1,
134a7ed099fSArnd Bergmann 		.periph_buses = PL08X_AHB1,
135a7ed099fSArnd Bergmann 	}, {
136a7ed099fSArnd Bergmann 		.bus_id = "ras4_tx",
137a7ed099fSArnd Bergmann 		.min_signal = 9,
138a7ed099fSArnd Bergmann 		.max_signal = 9,
139a7ed099fSArnd Bergmann 		.muxval = 1,
140a7ed099fSArnd Bergmann 		.periph_buses = PL08X_AHB1,
141a7ed099fSArnd Bergmann 	}, {
142a7ed099fSArnd Bergmann 		.bus_id = "ras5_rx",
143a7ed099fSArnd Bergmann 		.min_signal = 10,
144a7ed099fSArnd Bergmann 		.max_signal = 10,
145a7ed099fSArnd Bergmann 		.muxval = 1,
146a7ed099fSArnd Bergmann 		.periph_buses = PL08X_AHB1,
147a7ed099fSArnd Bergmann 	}, {
148a7ed099fSArnd Bergmann 		.bus_id = "ras5_tx",
149a7ed099fSArnd Bergmann 		.min_signal = 11,
150a7ed099fSArnd Bergmann 		.max_signal = 11,
151a7ed099fSArnd Bergmann 		.muxval = 1,
152a7ed099fSArnd Bergmann 		.periph_buses = PL08X_AHB1,
153a7ed099fSArnd Bergmann 	}, {
154a7ed099fSArnd Bergmann 		.bus_id = "ras6_rx",
155a7ed099fSArnd Bergmann 		.min_signal = 12,
156a7ed099fSArnd Bergmann 		.max_signal = 12,
157a7ed099fSArnd Bergmann 		.muxval = 1,
158a7ed099fSArnd Bergmann 		.periph_buses = PL08X_AHB1,
159a7ed099fSArnd Bergmann 	}, {
160a7ed099fSArnd Bergmann 		.bus_id = "ras6_tx",
161a7ed099fSArnd Bergmann 		.min_signal = 13,
162a7ed099fSArnd Bergmann 		.max_signal = 13,
163a7ed099fSArnd Bergmann 		.muxval = 1,
164a7ed099fSArnd Bergmann 		.periph_buses = PL08X_AHB1,
165a7ed099fSArnd Bergmann 	}, {
166a7ed099fSArnd Bergmann 		.bus_id = "ras7_rx",
167a7ed099fSArnd Bergmann 		.min_signal = 14,
168a7ed099fSArnd Bergmann 		.max_signal = 14,
169a7ed099fSArnd Bergmann 		.muxval = 1,
170a7ed099fSArnd Bergmann 		.periph_buses = PL08X_AHB1,
171a7ed099fSArnd Bergmann 	}, {
172a7ed099fSArnd Bergmann 		.bus_id = "ras7_tx",
173a7ed099fSArnd Bergmann 		.min_signal = 15,
174a7ed099fSArnd Bergmann 		.max_signal = 15,
175a7ed099fSArnd Bergmann 		.muxval = 1,
176a7ed099fSArnd Bergmann 		.periph_buses = PL08X_AHB1,
177a7ed099fSArnd Bergmann 	},
178a7ed099fSArnd Bergmann };
179a7ed099fSArnd Bergmann 
180a7ed099fSArnd Bergmann /* Add SPEAr300 auxdata to pass platform data */
181a7ed099fSArnd Bergmann static struct of_dev_auxdata spear300_auxdata_lookup[] __initdata = {
182a7ed099fSArnd Bergmann 	OF_DEV_AUXDATA("arm,pl022", SPEAR3XX_ICM1_SSP_BASE, NULL,
183a7ed099fSArnd Bergmann 			&pl022_plat_data),
184a7ed099fSArnd Bergmann 	OF_DEV_AUXDATA("arm,pl080", SPEAR_ICM3_DMA_BASE, NULL,
185a7ed099fSArnd Bergmann 			&pl080_plat_data),
186a7ed099fSArnd Bergmann 	{}
187a7ed099fSArnd Bergmann };
188a7ed099fSArnd Bergmann 
spear300_dt_init(void)189a7ed099fSArnd Bergmann static void __init spear300_dt_init(void)
190a7ed099fSArnd Bergmann {
191a7ed099fSArnd Bergmann 	pl080_plat_data.slave_channels = spear300_dma_info;
192a7ed099fSArnd Bergmann 	pl080_plat_data.num_slave_channels = ARRAY_SIZE(spear300_dma_info);
193a7ed099fSArnd Bergmann 
194435ebcbcSKefeng Wang 	of_platform_default_populate(NULL, spear300_auxdata_lookup, NULL);
195a7ed099fSArnd Bergmann }
196a7ed099fSArnd Bergmann 
197a7ed099fSArnd Bergmann static const char * const spear300_dt_board_compat[] = {
198a7ed099fSArnd Bergmann 	"st,spear300",
199a7ed099fSArnd Bergmann 	"st,spear300-evb",
200a7ed099fSArnd Bergmann 	NULL,
201a7ed099fSArnd Bergmann };
202a7ed099fSArnd Bergmann 
spear300_map_io(void)203a7ed099fSArnd Bergmann static void __init spear300_map_io(void)
204a7ed099fSArnd Bergmann {
205a7ed099fSArnd Bergmann 	spear3xx_map_io();
206a7ed099fSArnd Bergmann }
207a7ed099fSArnd Bergmann 
208a7ed099fSArnd Bergmann DT_MACHINE_START(SPEAR300_DT, "ST SPEAr300 SoC with Flattened Device Tree")
209a7ed099fSArnd Bergmann 	.map_io		=	spear300_map_io,
210a7ed099fSArnd Bergmann 	.init_time	=	spear3xx_timer_init,
211a7ed099fSArnd Bergmann 	.init_machine	=	spear300_dt_init,
212a7ed099fSArnd Bergmann 	.restart	=	spear_restart,
213a7ed099fSArnd Bergmann 	.dt_compat	=	spear300_dt_board_compat,
214a7ed099fSArnd Bergmann MACHINE_END
215