Linux Audio

Check our new training course

Loading...
v3.5.6
 
  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 <mach/hardware.h>
 20#include <asm/hardware/gic.h>
 21#include <asm/mach/arch.h>
 
 22
 23#include <plat/board.h>
 24#include "common.h"
 25#include "common-board-devices.h"
 26
 27#if !(defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3))
 28#define omap_intc_of_init	NULL
 29#endif
 30#ifndef CONFIG_ARCH_OMAP4
 31#define gic_of_init		NULL
 32#endif
 33
 34static struct of_device_id irq_match[] __initdata = {
 35	{ .compatible = "ti,omap2-intc", .data = omap_intc_of_init, },
 36	{ .compatible = "arm,cortex-a9-gic", .data = gic_of_init, },
 37	{ }
 38};
 39
 40static void __init omap_init_irq(void)
 41{
 42	of_irq_init(irq_match);
 
 43}
 44
 45static struct of_device_id omap_dt_match_table[] __initdata = {
 46	{ .compatible = "simple-bus", },
 47	{ .compatible = "ti,omap-infra", },
 48	{ }
 49};
 50
 51static void __init omap_generic_init(void)
 52{
 53	omap_sdrc_init(NULL, NULL);
 
 
 54
 55	of_platform_populate(NULL, omap_dt_match_table, NULL, NULL);
 
 
 
 56}
 
 57
 58#ifdef CONFIG_SOC_OMAP2420
 59static const char *omap242x_boards_compat[] __initdata = {
 60	"ti,omap2420",
 61	NULL,
 62};
 63
 64DT_MACHINE_START(OMAP242X_DT, "Generic OMAP2420 (Flattened Device Tree)")
 65	.reserve	= omap_reserve,
 66	.map_io		= omap242x_map_io,
 67	.init_early	= omap2420_init_early,
 68	.init_irq	= omap_init_irq,
 69	.handle_irq	= omap2_intc_handle_irq,
 70	.init_machine	= omap_generic_init,
 71	.timer		= &omap2_timer,
 72	.dt_compat	= omap242x_boards_compat,
 73	.restart	= omap_prcm_restart,
 74MACHINE_END
 75#endif
 76
 77#ifdef CONFIG_SOC_OMAP2430
 78static const char *omap243x_boards_compat[] __initdata = {
 79	"ti,omap2430",
 80	NULL,
 81};
 82
 83DT_MACHINE_START(OMAP243X_DT, "Generic OMAP2430 (Flattened Device Tree)")
 84	.reserve	= omap_reserve,
 85	.map_io		= omap243x_map_io,
 86	.init_early	= omap2430_init_early,
 87	.init_irq	= omap_init_irq,
 88	.handle_irq	= omap2_intc_handle_irq,
 89	.init_machine	= omap_generic_init,
 90	.timer		= &omap2_timer,
 91	.dt_compat	= omap243x_boards_compat,
 92	.restart	= omap_prcm_restart,
 93MACHINE_END
 94#endif
 95
 96#ifdef CONFIG_ARCH_OMAP3
 97static const char *omap3_boards_compat[] __initdata = {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 98	"ti,omap3",
 99	NULL,
100};
101
102DT_MACHINE_START(OMAP3_DT, "Generic OMAP3 (Flattened Device Tree)")
103	.reserve	= omap_reserve,
104	.map_io		= omap3_map_io,
105	.init_early	= omap3430_init_early,
106	.init_irq	= omap_init_irq,
107	.handle_irq	= omap3_intc_handle_irq,
108	.init_machine	= omap_generic_init,
109	.timer		= &omap3_timer,
 
110	.dt_compat	= omap3_boards_compat,
111	.restart	= omap_prcm_restart,
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
112MACHINE_END
113#endif
114
115#ifdef CONFIG_ARCH_OMAP4
116static const char *omap4_boards_compat[] __initdata = {
 
 
117	"ti,omap4",
118	NULL,
119};
120
121DT_MACHINE_START(OMAP4_DT, "Generic OMAP4 (Flattened Device Tree)")
 
 
 
122	.reserve	= omap_reserve,
 
123	.map_io		= omap4_map_io,
124	.init_early	= omap4430_init_early,
125	.init_irq	= omap_init_irq,
126	.handle_irq	= gic_handle_irq,
127	.init_machine	= omap_generic_init,
128	.init_late	= omap4430_init_late,
129	.timer		= &omap4_timer,
130	.dt_compat	= omap4_boards_compat,
131	.restart	= omap_prcm_restart,
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
132MACHINE_END
133#endif
v5.9
  1// SPDX-License-Identifier: GPL-2.0-only
  2/*
  3 * Copyright (C) 2005 Nokia Corporation
  4 * Author: Paul Mundt <paul.mundt@nokia.com>
  5 *
  6 * Copyright (C) 2011 Texas Instruments Incorporated - http://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/of_irq.h>
 13#include <linux/of_platform.h>
 14#include <linux/irqdomain.h>
 15#include <linux/clocksource.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
 23static const struct of_device_id omap_dt_match_table[] __initconst = {
 24	{ .compatible = "simple-bus", },
 25	{ .compatible = "ti,omap-infra", },
 26	{ }
 27};
 28
 29static 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 */
 36void __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)
 44void tick_broadcast(const struct cpumask *mask)
 45{
 46}
 47#endif
 48
 49#ifdef CONFIG_SOC_OMAP2420
 50static const char *const omap242x_boards_compat[] __initconst = {
 51	"ti,omap2420",
 52	NULL,
 53};
 54
 55DT_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,
 63MACHINE_END
 64#endif
 65
 66#ifdef CONFIG_SOC_OMAP2430
 67static const char *const omap243x_boards_compat[] __initconst = {
 68	"ti,omap2430",
 69	NULL,
 70};
 71
 72DT_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,
 80MACHINE_END
 81#endif
 82
 83#ifdef CONFIG_ARCH_OMAP3
 84/* Some boards need board name for legacy userspace in /proc/cpuinfo */
 85static const char *const n900_boards_compat[] __initconst = {
 86	"nokia,omap3-n900",
 87	NULL,
 88};
 89
 90/* Set system_rev from atags */
 91static 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 */
109static 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
118DT_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,
127MACHINE_END
128
129/* Generic omap3 boards, most boards can use these */
130static const char *const omap3_boards_compat[] __initconst = {
131	"ti,omap3430",
132	"ti,omap3",
133	NULL,
134};
135
136DT_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,
145MACHINE_END
146
147static const char *const omap36xx_boards_compat[] __initconst = {
148	"ti,omap3630",
149	"ti,omap36xx",
150	NULL,
151};
152
153DT_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,
162MACHINE_END
163
164static const char *const omap3_gp_boards_compat[] __initconst = {
165	"ti,omap3-beagle",
166	"timll,omap3-devkit8000",
167	NULL,
168};
169
170DT_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,
179MACHINE_END
180
181static const char *const am3517_boards_compat[] __initconst = {
182	"ti,am3517",
183	NULL,
184};
185
186DT_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,
195MACHINE_END
196#endif
197
198#ifdef CONFIG_SOC_TI81XX
199static const char *const ti814x_boards_compat[] __initconst = {
200	"ti,dm8148",
201	"ti,dm814",
202	NULL,
203};
204
205DT_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,
214MACHINE_END
215
216static const char *const ti816x_boards_compat[] __initconst = {
217	"ti,dm8168",
218	"ti,dm816",
219	NULL,
220};
221
222DT_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,
231MACHINE_END
232#endif
233
234#ifdef CONFIG_SOC_AM33XX
235static const char *const am33xx_boards_compat[] __initconst = {
236	"ti,am33xx",
237	NULL,
238};
239
240DT_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,
249MACHINE_END
250#endif
251
252#ifdef CONFIG_ARCH_OMAP4
253static const char *const omap4_boards_compat[] __initconst = {
254	"ti,omap4460",
255	"ti,omap4430",
256	"ti,omap4",
257	NULL,
258};
259
260DT_MACHINE_START(OMAP4_DT, "Generic OMAP4 (Flattened Device Tree)")
261	.l2c_aux_val	= OMAP_L2C_AUX_CTRL,
262	.l2c_aux_mask	= 0xcf9fffff,
263	.l2c_write_sec	= omap4_l2c310_write_sec,
264	.reserve	= omap_reserve,
265	.smp		= smp_ops(omap4_smp_ops),
266	.map_io		= omap4_map_io,
267	.init_early	= omap4430_init_early,
268	.init_irq	= omap_gic_of_init,
 
269	.init_machine	= omap_generic_init,
270	.init_late	= omap4430_init_late,
271	.init_time	= omap_init_time_of,
272	.dt_compat	= omap4_boards_compat,
273	.restart	= omap44xx_restart,
274MACHINE_END
275#endif
276
277#ifdef CONFIG_SOC_OMAP5
278static const char *const omap5_boards_compat[] __initconst = {
279	"ti,omap5432",
280	"ti,omap5430",
281	"ti,omap5",
282	NULL,
283};
284
285DT_MACHINE_START(OMAP5_DT, "Generic OMAP5 (Flattened Device Tree)")
286#if defined(CONFIG_ZONE_DMA) && defined(CONFIG_ARM_LPAE)
287	.dma_zone_size	= SZ_2G,
288#endif
289	.reserve	= omap_reserve,
290	.smp		= smp_ops(omap4_smp_ops),
291	.map_io		= omap5_map_io,
292	.init_early	= omap5_init_early,
293	.init_irq	= omap_gic_of_init,
294	.init_machine	= omap_generic_init,
295	.init_late	= omap5_init_late,
296	.init_time	= omap5_realtime_timer_init,
297	.dt_compat	= omap5_boards_compat,
298	.restart	= omap44xx_restart,
299MACHINE_END
300#endif
301
302#ifdef CONFIG_SOC_AM43XX
303static const char *const am43_boards_compat[] __initconst = {
304	"ti,am4372",
305	"ti,am43",
306	NULL,
307};
308
309DT_MACHINE_START(AM43_DT, "Generic AM43 (Flattened Device Tree)")
310	.l2c_aux_val	= OMAP_L2C_AUX_CTRL,
311	.l2c_aux_mask	= 0xcf9fffff,
312	.l2c_write_sec	= omap4_l2c310_write_sec,
313	.map_io		= am33xx_map_io,
314	.init_early	= am43xx_init_early,
315	.init_late	= am43xx_init_late,
316	.init_irq	= omap_gic_of_init,
317	.init_machine	= omap_generic_init,
318	.init_time	= omap_init_time_of,
319	.dt_compat	= am43_boards_compat,
320	.restart	= omap44xx_restart,
321MACHINE_END
322#endif
323
324#ifdef CONFIG_SOC_DRA7XX
325static const char *const dra74x_boards_compat[] __initconst = {
326	"ti,dra762",
327	"ti,am5728",
328	"ti,am5726",
329	"ti,dra742",
330	"ti,dra7",
331	NULL,
332};
333
334DT_MACHINE_START(DRA74X_DT, "Generic DRA74X (Flattened Device Tree)")
335#if defined(CONFIG_ZONE_DMA) && defined(CONFIG_ARM_LPAE)
336	.dma_zone_size	= SZ_2G,
337#endif
338	.reserve	= omap_reserve,
339	.smp		= smp_ops(omap4_smp_ops),
340	.map_io		= dra7xx_map_io,
341	.init_early	= dra7xx_init_early,
342	.init_late	= dra7xx_init_late,
343	.init_irq	= omap_gic_of_init,
344	.init_machine	= omap_generic_init,
345	.init_time	= omap5_realtime_timer_init,
346	.dt_compat	= dra74x_boards_compat,
347	.restart	= omap44xx_restart,
348MACHINE_END
349
350static const char *const dra72x_boards_compat[] __initconst = {
351	"ti,am5718",
352	"ti,am5716",
353	"ti,dra722",
354	"ti,dra718",
355	NULL,
356};
357
358DT_MACHINE_START(DRA72X_DT, "Generic DRA72X (Flattened Device Tree)")
359#if defined(CONFIG_ZONE_DMA) && defined(CONFIG_ARM_LPAE)
360	.dma_zone_size	= SZ_2G,
361#endif
362	.reserve	= omap_reserve,
363	.map_io		= dra7xx_map_io,
364	.init_early	= dra7xx_init_early,
365	.init_late	= dra7xx_init_late,
366	.init_irq	= omap_gic_of_init,
367	.init_machine	= omap_generic_init,
368	.init_time	= omap5_realtime_timer_init,
369	.dt_compat	= dra72x_boards_compat,
370	.restart	= omap44xx_restart,
371MACHINE_END
372#endif