Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/arm/mach-omap2/board-generic.c
26292 views
1
// SPDX-License-Identifier: GPL-2.0-only
2
/*
3
* Copyright (C) 2005 Nokia Corporation
4
* Author: Paul Mundt <[email protected]>
5
*
6
* Copyright (C) 2011 Texas Instruments Incorporated - https://www.ti.com/
7
*
8
* Modified from the original mach-omap/omap2/board-generic.c did by Paul
9
* to support the OMAP2+ device tree boards with an unique board file.
10
*/
11
#include <linux/io.h>
12
#include <linux/irqdomain.h>
13
#include <linux/clocksource.h>
14
#include <linux/clockchips.h>
15
#include <linux/mod_devicetable.h>
16
17
#include <asm/setup.h>
18
#include <asm/mach/arch.h>
19
#include <asm/system_info.h>
20
21
#include "common.h"
22
23
static const struct of_device_id omap_dt_match_table[] __initconst = {
24
{ .compatible = "simple-bus", },
25
{ .compatible = "ti,omap-infra", },
26
{ }
27
};
28
29
static void __init __maybe_unused omap_generic_init(void)
30
{
31
pdata_quirks_init(omap_dt_match_table);
32
omap_soc_device_init();
33
}
34
35
/* Clocks are needed early, see drivers/clocksource for the rest */
36
static void __init __maybe_unused omap_init_time_of(void)
37
{
38
omap_clk_init();
39
timer_probe();
40
}
41
42
/* Used by am437x for ARM timer in non-SMP configurations */
43
#if !defined(CONFIG_SMP) && defined(CONFIG_GENERIC_CLOCKEVENTS_BROADCAST)
44
void tick_broadcast(const struct cpumask *mask)
45
{
46
}
47
#endif
48
49
#ifdef CONFIG_SOC_OMAP2420
50
static const char *const omap242x_boards_compat[] __initconst = {
51
"ti,omap2420",
52
NULL,
53
};
54
55
DT_MACHINE_START(OMAP242X_DT, "Generic OMAP2420 (Flattened Device Tree)")
56
.reserve = omap_reserve,
57
.map_io = omap242x_map_io,
58
.init_early = omap2420_init_early,
59
.init_machine = omap_generic_init,
60
.init_time = omap_init_time_of,
61
.dt_compat = omap242x_boards_compat,
62
.restart = omap2xxx_restart,
63
MACHINE_END
64
#endif
65
66
#ifdef CONFIG_SOC_OMAP2430
67
static const char *const omap243x_boards_compat[] __initconst = {
68
"ti,omap2430",
69
NULL,
70
};
71
72
DT_MACHINE_START(OMAP243X_DT, "Generic OMAP2430 (Flattened Device Tree)")
73
.reserve = omap_reserve,
74
.map_io = omap243x_map_io,
75
.init_early = omap2430_init_early,
76
.init_machine = omap_generic_init,
77
.init_time = omap_init_time_of,
78
.dt_compat = omap243x_boards_compat,
79
.restart = omap2xxx_restart,
80
MACHINE_END
81
#endif
82
83
#ifdef CONFIG_ARCH_OMAP3
84
/* Some boards need board name for legacy userspace in /proc/cpuinfo */
85
static const char *const n900_boards_compat[] __initconst = {
86
"nokia,omap3-n900",
87
NULL,
88
};
89
90
/* Set system_rev from atags */
91
static void __init rx51_set_system_rev(const struct tag *tags)
92
{
93
const struct tag *tag;
94
95
if (tags->hdr.tag != ATAG_CORE)
96
return;
97
98
for_each_tag(tag, tags) {
99
if (tag->hdr.tag == ATAG_REVISION) {
100
system_rev = tag->u.revision.rev;
101
break;
102
}
103
}
104
}
105
106
/* Legacy userspace on Nokia N900 needs ATAGS exported in /proc/atags,
107
* save them while the data is still not overwritten
108
*/
109
static void __init rx51_reserve(void)
110
{
111
const struct tag *tags = (const struct tag *)(PAGE_OFFSET + 0x100);
112
113
save_atags(tags);
114
rx51_set_system_rev(tags);
115
omap_reserve();
116
}
117
118
DT_MACHINE_START(OMAP3_N900_DT, "Nokia RX-51 board")
119
.reserve = rx51_reserve,
120
.map_io = omap3_map_io,
121
.init_early = omap3430_init_early,
122
.init_machine = omap_generic_init,
123
.init_late = omap3_init_late,
124
.init_time = omap_init_time_of,
125
.dt_compat = n900_boards_compat,
126
.restart = omap3xxx_restart,
127
MACHINE_END
128
129
/* Generic omap3 boards, most boards can use these */
130
static const char *const omap3_boards_compat[] __initconst = {
131
"ti,omap3430",
132
"ti,omap3",
133
NULL,
134
};
135
136
DT_MACHINE_START(OMAP3_DT, "Generic OMAP3 (Flattened Device Tree)")
137
.reserve = omap_reserve,
138
.map_io = omap3_map_io,
139
.init_early = omap3430_init_early,
140
.init_machine = omap_generic_init,
141
.init_late = omap3_init_late,
142
.init_time = omap_init_time_of,
143
.dt_compat = omap3_boards_compat,
144
.restart = omap3xxx_restart,
145
MACHINE_END
146
147
static const char *const omap36xx_boards_compat[] __initconst = {
148
"ti,omap3630",
149
"ti,omap36xx",
150
NULL,
151
};
152
153
DT_MACHINE_START(OMAP36XX_DT, "Generic OMAP36xx (Flattened Device Tree)")
154
.reserve = omap_reserve,
155
.map_io = omap3_map_io,
156
.init_early = omap3630_init_early,
157
.init_machine = omap_generic_init,
158
.init_late = omap3_init_late,
159
.init_time = omap_init_time_of,
160
.dt_compat = omap36xx_boards_compat,
161
.restart = omap3xxx_restart,
162
MACHINE_END
163
164
static const char *const omap3_gp_boards_compat[] __initconst = {
165
"ti,omap3-beagle",
166
"timll,omap3-devkit8000",
167
NULL,
168
};
169
170
DT_MACHINE_START(OMAP3_GP_DT, "Generic OMAP3-GP (Flattened Device Tree)")
171
.reserve = omap_reserve,
172
.map_io = omap3_map_io,
173
.init_early = omap3430_init_early,
174
.init_machine = omap_generic_init,
175
.init_late = omap3_init_late,
176
.init_time = omap_init_time_of,
177
.dt_compat = omap3_gp_boards_compat,
178
.restart = omap3xxx_restart,
179
MACHINE_END
180
181
static const char *const am3517_boards_compat[] __initconst = {
182
"ti,am3517",
183
NULL,
184
};
185
186
DT_MACHINE_START(AM3517_DT, "Generic AM3517 (Flattened Device Tree)")
187
.reserve = omap_reserve,
188
.map_io = omap3_map_io,
189
.init_early = am35xx_init_early,
190
.init_machine = omap_generic_init,
191
.init_late = omap3_init_late,
192
.init_time = omap_init_time_of,
193
.dt_compat = am3517_boards_compat,
194
.restart = omap3xxx_restart,
195
MACHINE_END
196
#endif
197
198
#ifdef CONFIG_SOC_TI81XX
199
static const char *const ti814x_boards_compat[] __initconst = {
200
"ti,dm8148",
201
"ti,dm814",
202
NULL,
203
};
204
205
DT_MACHINE_START(TI814X_DT, "Generic ti814x (Flattened Device Tree)")
206
.reserve = omap_reserve,
207
.map_io = ti81xx_map_io,
208
.init_early = ti814x_init_early,
209
.init_machine = omap_generic_init,
210
.init_late = ti81xx_init_late,
211
.init_time = omap_init_time_of,
212
.dt_compat = ti814x_boards_compat,
213
.restart = ti81xx_restart,
214
MACHINE_END
215
216
static const char *const ti816x_boards_compat[] __initconst = {
217
"ti,dm8168",
218
"ti,dm816",
219
NULL,
220
};
221
222
DT_MACHINE_START(TI816X_DT, "Generic ti816x (Flattened Device Tree)")
223
.reserve = omap_reserve,
224
.map_io = ti81xx_map_io,
225
.init_early = ti816x_init_early,
226
.init_machine = omap_generic_init,
227
.init_late = ti81xx_init_late,
228
.init_time = omap_init_time_of,
229
.dt_compat = ti816x_boards_compat,
230
.restart = ti81xx_restart,
231
MACHINE_END
232
#endif
233
234
#ifdef CONFIG_SOC_AM33XX
235
static const char *const am33xx_boards_compat[] __initconst = {
236
"ti,am33xx",
237
NULL,
238
};
239
240
DT_MACHINE_START(AM33XX_DT, "Generic AM33XX (Flattened Device Tree)")
241
.reserve = omap_reserve,
242
.map_io = am33xx_map_io,
243
.init_early = am33xx_init_early,
244
.init_machine = omap_generic_init,
245
.init_late = am33xx_init_late,
246
.init_time = omap_init_time_of,
247
.dt_compat = am33xx_boards_compat,
248
.restart = am33xx_restart,
249
/*
250
* Historically am33xx supported only REBOOT_WARM even though default
251
* reboot_mode was REBOOT_COLD. Reflect legacy de-facto behaviour in
252
* SYSFS.
253
*/
254
.reboot_mode = REBOOT_WARM,
255
MACHINE_END
256
#endif
257
258
#ifdef CONFIG_ARCH_OMAP4
259
static const char *const omap4_boards_compat[] __initconst = {
260
"ti,omap4460",
261
"ti,omap4430",
262
"ti,omap4",
263
NULL,
264
};
265
266
DT_MACHINE_START(OMAP4_DT, "Generic OMAP4 (Flattened Device Tree)")
267
.l2c_aux_val = OMAP_L2C_AUX_CTRL,
268
.l2c_aux_mask = 0xcf9fffff,
269
.l2c_write_sec = omap4_l2c310_write_sec,
270
.reserve = omap_reserve,
271
.smp = smp_ops(omap4_smp_ops),
272
.map_io = omap4_map_io,
273
.init_early = omap4430_init_early,
274
.init_irq = omap_gic_of_init,
275
.init_machine = omap_generic_init,
276
.init_late = omap4430_init_late,
277
.init_time = omap_init_time_of,
278
.dt_compat = omap4_boards_compat,
279
.restart = omap44xx_restart,
280
MACHINE_END
281
#endif
282
283
#ifdef CONFIG_SOC_OMAP5
284
static const char *const omap5_boards_compat[] __initconst = {
285
"ti,omap5432",
286
"ti,omap5430",
287
"ti,omap5",
288
NULL,
289
};
290
291
DT_MACHINE_START(OMAP5_DT, "Generic OMAP5 (Flattened Device Tree)")
292
#if defined(CONFIG_ZONE_DMA) && defined(CONFIG_ARM_LPAE)
293
.dma_zone_size = SZ_2G,
294
#endif
295
.reserve = omap_reserve,
296
.smp = smp_ops(omap4_smp_ops),
297
.map_io = omap5_map_io,
298
.init_early = omap5_init_early,
299
.init_irq = omap_gic_of_init,
300
.init_machine = omap_generic_init,
301
.init_late = omap5_init_late,
302
.init_time = omap5_realtime_timer_init,
303
.dt_compat = omap5_boards_compat,
304
.restart = omap44xx_restart,
305
MACHINE_END
306
#endif
307
308
#ifdef CONFIG_SOC_AM43XX
309
static const char *const am43_boards_compat[] __initconst = {
310
"ti,am4372",
311
"ti,am43",
312
NULL,
313
};
314
315
DT_MACHINE_START(AM43_DT, "Generic AM43 (Flattened Device Tree)")
316
.l2c_aux_val = OMAP_L2C_AUX_CTRL,
317
.l2c_aux_mask = 0xcf9fffff,
318
.l2c_write_sec = omap4_l2c310_write_sec,
319
.map_io = am33xx_map_io,
320
.init_early = am43xx_init_early,
321
.init_late = am43xx_init_late,
322
.init_irq = omap_gic_of_init,
323
.init_machine = omap_generic_init,
324
.init_time = omap_init_time_of,
325
.dt_compat = am43_boards_compat,
326
.restart = omap44xx_restart,
327
MACHINE_END
328
#endif
329
330
#ifdef CONFIG_SOC_DRA7XX
331
static const char *const dra74x_boards_compat[] __initconst = {
332
"ti,dra762",
333
"ti,am5728",
334
"ti,am5726",
335
"ti,dra742",
336
"ti,dra7",
337
NULL,
338
};
339
340
DT_MACHINE_START(DRA74X_DT, "Generic DRA74X (Flattened Device Tree)")
341
#if defined(CONFIG_ZONE_DMA) && defined(CONFIG_ARM_LPAE)
342
.dma_zone_size = SZ_2G,
343
#endif
344
.reserve = omap_reserve,
345
.smp = smp_ops(omap4_smp_ops),
346
.map_io = dra7xx_map_io,
347
.init_early = dra7xx_init_early,
348
.init_late = dra7xx_init_late,
349
.init_irq = omap_gic_of_init,
350
.init_machine = omap_generic_init,
351
.init_time = omap5_realtime_timer_init,
352
.dt_compat = dra74x_boards_compat,
353
.restart = omap44xx_restart,
354
MACHINE_END
355
356
static const char *const dra72x_boards_compat[] __initconst = {
357
"ti,am5718",
358
"ti,am5716",
359
"ti,dra722",
360
"ti,dra718",
361
NULL,
362
};
363
364
DT_MACHINE_START(DRA72X_DT, "Generic DRA72X (Flattened Device Tree)")
365
#if defined(CONFIG_ZONE_DMA) && defined(CONFIG_ARM_LPAE)
366
.dma_zone_size = SZ_2G,
367
#endif
368
.reserve = omap_reserve,
369
.map_io = dra7xx_map_io,
370
.init_early = dra7xx_init_early,
371
.init_late = dra7xx_init_late,
372
.init_irq = omap_gic_of_init,
373
.init_machine = omap_generic_init,
374
.init_time = omap5_realtime_timer_init,
375
.dt_compat = dra72x_boards_compat,
376
.restart = omap44xx_restart,
377
MACHINE_END
378
#endif
379
380