Linux Audio

Check our new training course

Loading...
v3.1
 1/*
 2 * linux/arch/arm/mach-omap2/board-generic.c
 3 *
 4 * Copyright (C) 2005 Nokia Corporation
 5 * Author: Paul Mundt <paul.mundt@nokia.com>
 6 *
 7 * Modified from mach-omap/omap1/board-generic.c
 8 *
 9 * Code for generic OMAP2 board. Should work on many OMAP2 systems where
10 * the bootloader passes the board-specific data to the kernel.
11 * Do not put any board specific code to this file; create a new machine
12 * type if you need custom low-level initializations.
13 *
14 * This program is free software; you can redistribute it and/or modify
15 * it under the terms of the GNU General Public License version 2 as
16 * published by the Free Software Foundation.
17 */
 
 
 
 
18
19#include <linux/kernel.h>
20#include <linux/init.h>
21#include <linux/device.h>
22
23#include <mach/hardware.h>
24#include <asm/mach-types.h>
25#include <asm/mach/arch.h>
26#include <asm/mach/map.h>
27
28#include <mach/gpio.h>
29#include <plat/usb.h>
30#include <plat/board.h>
31#include <plat/common.h>
32
33static struct omap_board_config_kernel generic_config[] = {
 
 
 
34};
35
36static void __init omap_generic_init_early(void)
37{
38	omap2_init_common_infrastructure();
39	omap2_init_common_devices(NULL, NULL);
 
 
40}
41
42static void __init omap_generic_init(void)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
43{
44	omap_serial_init();
45	omap_board_config = generic_config;
46	omap_board_config_size = ARRAY_SIZE(generic_config);
 
 
 
 
 
 
 
 
47}
48
49static void __init omap_generic_map_io(void)
 
 
 
50{
51	if (cpu_is_omap242x()) {
52		omap2_set_globals_242x();
53		omap242x_map_common_io();
54	} else if (cpu_is_omap243x()) {
55		omap2_set_globals_243x();
56		omap243x_map_common_io();
57	} else if (cpu_is_omap34xx()) {
58		omap2_set_globals_3xxx();
59		omap34xx_map_common_io();
60	} else if (cpu_is_omap44xx()) {
61		omap2_set_globals_443x();
62		omap44xx_map_common_io();
63	}
64}
65
66/* XXX This machine entry name should be updated */
67MACHINE_START(OMAP_GENERIC, "Generic OMAP24xx")
68	/* Maintainer: Paul Mundt <paul.mundt@nokia.com> */
69	.boot_params	= 0x80000100,
70	.reserve	= omap_reserve,
71	.map_io		= omap_generic_map_io,
72	.init_early	= omap_generic_init_early,
73	.init_irq	= omap2_init_irq,
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
74	.init_machine	= omap_generic_init,
75	.timer		= &omap2_timer,
 
 
76MACHINE_END
v4.17
  1/*
 
 
  2 * Copyright (C) 2005 Nokia Corporation
  3 * Author: Paul Mundt <paul.mundt@nokia.com>
  4 *
  5 * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
  6 *
  7 * Modified from the original mach-omap/omap2/board-generic.c did by Paul
  8 * to support the OMAP2+ device tree boards with an unique board file.
 
 
  9 *
 10 * This program is free software; you can redistribute it and/or modify
 11 * it under the terms of the GNU General Public License version 2 as
 12 * published by the Free Software Foundation.
 13 */
 14#include <linux/io.h>
 15#include <linux/of_irq.h>
 16#include <linux/of_platform.h>
 17#include <linux/irqdomain.h>
 18
 19#include <asm/setup.h>
 
 
 
 
 
 20#include <asm/mach/arch.h>
 21#include <asm/system_info.h>
 22
 23#include "common.h"
 
 
 
 24
 25static const struct of_device_id omap_dt_match_table[] __initconst = {
 26	{ .compatible = "simple-bus", },
 27	{ .compatible = "ti,omap-infra", },
 28	{ }
 29};
 30
 31static void __init __maybe_unused omap_generic_init(void)
 32{
 33	pdata_quirks_init(omap_dt_match_table);
 34
 35	omapdss_init_of();
 36	omap_soc_device_init();
 37}
 38
 39#ifdef CONFIG_SOC_OMAP2420
 40static const char *const omap242x_boards_compat[] __initconst = {
 41	"ti,omap2420",
 42	NULL,
 43};
 44
 45DT_MACHINE_START(OMAP242X_DT, "Generic OMAP2420 (Flattened Device Tree)")
 46	.reserve	= omap_reserve,
 47	.map_io		= omap242x_map_io,
 48	.init_early	= omap2420_init_early,
 49	.init_machine	= omap_generic_init,
 50	.init_time	= omap_init_time,
 51	.dt_compat	= omap242x_boards_compat,
 52	.restart	= omap2xxx_restart,
 53MACHINE_END
 54#endif
 55
 56#ifdef CONFIG_SOC_OMAP2430
 57static const char *const omap243x_boards_compat[] __initconst = {
 58	"ti,omap2430",
 59	NULL,
 60};
 61
 62DT_MACHINE_START(OMAP243X_DT, "Generic OMAP2430 (Flattened Device Tree)")
 63	.reserve	= omap_reserve,
 64	.map_io		= omap243x_map_io,
 65	.init_early	= omap2430_init_early,
 66	.init_machine	= omap_generic_init,
 67	.init_time	= omap_init_time,
 68	.dt_compat	= omap243x_boards_compat,
 69	.restart	= omap2xxx_restart,
 70MACHINE_END
 71#endif
 72
 73#ifdef CONFIG_ARCH_OMAP3
 74/* Some boards need board name for legacy userspace in /proc/cpuinfo */
 75static const char *const n900_boards_compat[] __initconst = {
 76	"nokia,omap3-n900",
 77	NULL,
 78};
 79
 80/* Set system_rev from atags */
 81static void __init rx51_set_system_rev(const struct tag *tags)
 82{
 83	const struct tag *tag;
 84
 85	if (tags->hdr.tag != ATAG_CORE)
 86		return;
 87
 88	for_each_tag(tag, tags) {
 89		if (tag->hdr.tag == ATAG_REVISION) {
 90			system_rev = tag->u.revision.rev;
 91			break;
 92		}
 93	}
 94}
 95
 96/* Legacy userspace on Nokia N900 needs ATAGS exported in /proc/atags,
 97 * save them while the data is still not overwritten
 98 */
 99static void __init rx51_reserve(void)
100{
101	const struct tag *tags = (const struct tag *)(PAGE_OFFSET + 0x100);
102
103	save_atags(tags);
104	rx51_set_system_rev(tags);
105	omap_reserve();
 
 
 
 
 
 
 
 
106}
107
108DT_MACHINE_START(OMAP3_N900_DT, "Nokia RX-51 board")
109	.reserve	= rx51_reserve,
110	.map_io		= omap3_map_io,
111	.init_early	= omap3430_init_early,
112	.init_machine	= omap_generic_init,
113	.init_late	= omap3_init_late,
114	.init_time	= omap_init_time,
115	.dt_compat	= n900_boards_compat,
116	.restart	= omap3xxx_restart,
117MACHINE_END
118
119/* Generic omap3 boards, most boards can use these */
120static const char *const omap3_boards_compat[] __initconst = {
121	"ti,omap3430",
122	"ti,omap3",
123	NULL,
124};
125
126DT_MACHINE_START(OMAP3_DT, "Generic OMAP3 (Flattened Device Tree)")
127	.reserve	= omap_reserve,
128	.map_io		= omap3_map_io,
129	.init_early	= omap3430_init_early,
130	.init_machine	= omap_generic_init,
131	.init_late	= omap3_init_late,
132	.init_time	= omap_init_time,
133	.dt_compat	= omap3_boards_compat,
134	.restart	= omap3xxx_restart,
135MACHINE_END
136
137static const char *const omap36xx_boards_compat[] __initconst = {
138	"ti,omap3630",
139	"ti,omap36xx",
140	NULL,
141};
142
143DT_MACHINE_START(OMAP36XX_DT, "Generic OMAP36xx (Flattened Device Tree)")
144	.reserve	= omap_reserve,
145	.map_io		= omap3_map_io,
146	.init_early	= omap3630_init_early,
147	.init_machine	= omap_generic_init,
148	.init_late	= omap3_init_late,
149	.init_time	= omap_init_time,
150	.dt_compat	= omap36xx_boards_compat,
151	.restart	= omap3xxx_restart,
152MACHINE_END
153
154static const char *const omap3_gp_boards_compat[] __initconst = {
155	"ti,omap3-beagle",
156	"timll,omap3-devkit8000",
157	NULL,
158};
159
160DT_MACHINE_START(OMAP3_GP_DT, "Generic OMAP3-GP (Flattened Device Tree)")
161	.reserve	= omap_reserve,
162	.map_io		= omap3_map_io,
163	.init_early	= omap3430_init_early,
164	.init_machine	= omap_generic_init,
165	.init_late	= omap3_init_late,
166	.init_time	= omap3_secure_sync32k_timer_init,
167	.dt_compat	= omap3_gp_boards_compat,
168	.restart	= omap3xxx_restart,
169MACHINE_END
170
171static const char *const am3517_boards_compat[] __initconst = {
172	"ti,am3517",
173	NULL,
174};
175
176DT_MACHINE_START(AM3517_DT, "Generic AM3517 (Flattened Device Tree)")
177	.reserve	= omap_reserve,
178	.map_io		= omap3_map_io,
179	.init_early	= am35xx_init_early,
180	.init_machine	= omap_generic_init,
181	.init_late	= omap3_init_late,
182	.init_time	= omap3_gptimer_timer_init,
183	.dt_compat	= am3517_boards_compat,
184	.restart	= omap3xxx_restart,
185MACHINE_END
186#endif
187
188#ifdef CONFIG_SOC_TI81XX
189static const char *const ti814x_boards_compat[] __initconst = {
190	"ti,dm8148",
191	"ti,dm814",
192	NULL,
193};
194
195DT_MACHINE_START(TI814X_DT, "Generic ti814x (Flattened Device Tree)")
196	.reserve	= omap_reserve,
197	.map_io		= ti81xx_map_io,
198	.init_early	= ti814x_init_early,
199	.init_machine	= omap_generic_init,
200	.init_late	= ti81xx_init_late,
201	.init_time	= omap3_gptimer_timer_init,
202	.dt_compat	= ti814x_boards_compat,
203	.restart	= ti81xx_restart,
204MACHINE_END
205
206static const char *const ti816x_boards_compat[] __initconst = {
207	"ti,dm8168",
208	"ti,dm816",
209	NULL,
210};
211
212DT_MACHINE_START(TI816X_DT, "Generic ti816x (Flattened Device Tree)")
213	.reserve	= omap_reserve,
214	.map_io		= ti81xx_map_io,
215	.init_early	= ti816x_init_early,
216	.init_machine	= omap_generic_init,
217	.init_late	= ti81xx_init_late,
218	.init_time	= omap3_gptimer_timer_init,
219	.dt_compat	= ti816x_boards_compat,
220	.restart	= ti81xx_restart,
221MACHINE_END
222#endif
223
224#ifdef CONFIG_SOC_AM33XX
225static const char *const am33xx_boards_compat[] __initconst = {
226	"ti,am33xx",
227	NULL,
228};
229
230DT_MACHINE_START(AM33XX_DT, "Generic AM33XX (Flattened Device Tree)")
231	.reserve	= omap_reserve,
232	.map_io		= am33xx_map_io,
233	.init_early	= am33xx_init_early,
234	.init_machine	= omap_generic_init,
235	.init_late	= am33xx_init_late,
236	.init_time	= omap3_gptimer_timer_init,
237	.dt_compat	= am33xx_boards_compat,
238	.restart	= am33xx_restart,
239MACHINE_END
240#endif
241
242#ifdef CONFIG_ARCH_OMAP4
243static const char *const omap4_boards_compat[] __initconst = {
244	"ti,omap4460",
245	"ti,omap4430",
246	"ti,omap4",
247	NULL,
248};
249
250DT_MACHINE_START(OMAP4_DT, "Generic OMAP4 (Flattened Device Tree)")
251	.l2c_aux_val	= OMAP_L2C_AUX_CTRL,
252	.l2c_aux_mask	= 0xcf9fffff,
253	.l2c_write_sec	= omap4_l2c310_write_sec,
254	.reserve	= omap_reserve,
255	.smp		= smp_ops(omap4_smp_ops),
256	.map_io		= omap4_map_io,
257	.init_early	= omap4430_init_early,
258	.init_irq	= omap_gic_of_init,
259	.init_machine	= omap_generic_init,
260	.init_late	= omap4430_init_late,
261	.init_time	= omap4_local_timer_init,
262	.dt_compat	= omap4_boards_compat,
263	.restart	= omap44xx_restart,
264MACHINE_END
265#endif
266
267#ifdef CONFIG_SOC_OMAP5
268static const char *const omap5_boards_compat[] __initconst = {
269	"ti,omap5432",
270	"ti,omap5430",
271	"ti,omap5",
272	NULL,
273};
274
275DT_MACHINE_START(OMAP5_DT, "Generic OMAP5 (Flattened Device Tree)")
276#if defined(CONFIG_ZONE_DMA) && defined(CONFIG_ARM_LPAE)
277	.dma_zone_size	= SZ_2G,
278#endif
279	.reserve	= omap_reserve,
280	.smp		= smp_ops(omap4_smp_ops),
281	.map_io		= omap5_map_io,
282	.init_early	= omap5_init_early,
283	.init_irq	= omap_gic_of_init,
284	.init_machine	= omap_generic_init,
285	.init_late	= omap5_init_late,
286	.init_time	= omap5_realtime_timer_init,
287	.dt_compat	= omap5_boards_compat,
288	.restart	= omap44xx_restart,
289MACHINE_END
290#endif
291
292#ifdef CONFIG_SOC_AM43XX
293static const char *const am43_boards_compat[] __initconst = {
294	"ti,am4372",
295	"ti,am43",
296	NULL,
297};
298
299DT_MACHINE_START(AM43_DT, "Generic AM43 (Flattened Device Tree)")
300	.l2c_aux_val	= OMAP_L2C_AUX_CTRL,
301	.l2c_aux_mask	= 0xcf9fffff,
302	.l2c_write_sec	= omap4_l2c310_write_sec,
303	.map_io		= am33xx_map_io,
304	.init_early	= am43xx_init_early,
305	.init_late	= am43xx_init_late,
306	.init_irq	= omap_gic_of_init,
307	.init_machine	= omap_generic_init,
308	.init_time	= omap3_gptimer_timer_init,
309	.dt_compat	= am43_boards_compat,
310	.restart	= omap44xx_restart,
311MACHINE_END
312#endif
313
314#ifdef CONFIG_SOC_DRA7XX
315static const char *const dra74x_boards_compat[] __initconst = {
316	"ti,dra762",
317	"ti,am5728",
318	"ti,am5726",
319	"ti,dra742",
320	"ti,dra7",
321	NULL,
322};
323
324DT_MACHINE_START(DRA74X_DT, "Generic DRA74X (Flattened Device Tree)")
325#if defined(CONFIG_ZONE_DMA) && defined(CONFIG_ARM_LPAE)
326	.dma_zone_size	= SZ_2G,
327#endif
328	.reserve	= omap_reserve,
329	.smp		= smp_ops(omap4_smp_ops),
330	.map_io		= dra7xx_map_io,
331	.init_early	= dra7xx_init_early,
332	.init_late	= dra7xx_init_late,
333	.init_irq	= omap_gic_of_init,
334	.init_machine	= omap_generic_init,
335	.init_time	= omap5_realtime_timer_init,
336	.dt_compat	= dra74x_boards_compat,
337	.restart	= omap44xx_restart,
338MACHINE_END
339
340static const char *const dra72x_boards_compat[] __initconst = {
341	"ti,am5718",
342	"ti,am5716",
343	"ti,dra722",
344	"ti,dra718",
345	NULL,
346};
347
348DT_MACHINE_START(DRA72X_DT, "Generic DRA72X (Flattened Device Tree)")
349#if defined(CONFIG_ZONE_DMA) && defined(CONFIG_ARM_LPAE)
350	.dma_zone_size	= SZ_2G,
351#endif
352	.reserve	= omap_reserve,
353	.map_io		= dra7xx_map_io,
354	.init_early	= dra7xx_init_early,
355	.init_late	= dra7xx_init_late,
356	.init_irq	= omap_gic_of_init,
357	.init_machine	= omap_generic_init,
358	.init_time	= omap5_realtime_timer_init,
359	.dt_compat	= dra72x_boards_compat,
360	.restart	= omap44xx_restart,
361MACHINE_END
362#endif