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