11dbae815STony Lindgren /*
21dbae815STony Lindgren  * Copyright (C) 2005 Nokia Corporation
31dbae815STony Lindgren  * Author: Paul Mundt <paul.mundt@nokia.com>
41dbae815STony Lindgren  *
58d61649dSBenoit Cousson  * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
61dbae815STony Lindgren  *
78d61649dSBenoit Cousson  * Modified from the original mach-omap/omap2/board-generic.c did by Paul
88d61649dSBenoit Cousson  * to support the OMAP2+ device tree boards with an unique board file.
91dbae815STony Lindgren  *
101dbae815STony Lindgren  * This program is free software; you can redistribute it and/or modify
111dbae815STony Lindgren  * it under the terms of the GNU General Public License version 2 as
121dbae815STony Lindgren  * published by the Free Software Foundation.
131dbae815STony Lindgren  */
148d61649dSBenoit Cousson #include <linux/io.h>
15fbf75da7SBenoit Cousson #include <linux/of_irq.h>
168d61649dSBenoit Cousson #include <linux/of_platform.h>
178d61649dSBenoit Cousson #include <linux/irqdomain.h>
181dbae815STony Lindgren 
19a09e64fbSRussell King #include <mach/hardware.h>
20b755706cSBenoit Cousson #include <asm/hardware/gic.h>
211dbae815STony Lindgren #include <asm/mach/arch.h>
221dbae815STony Lindgren 
23ce491cf8STony Lindgren #include <plat/board.h>
244e65331cSTony Lindgren #include "common.h"
25a7cbb9b1SBenoit Cousson #include "common-board-devices.h"
261dbae815STony Lindgren 
2775a57fe9STony Lindgren #if !(defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3))
2875a57fe9STony Lindgren #define omap_intc_of_init	NULL
2975a57fe9STony Lindgren #endif
3075a57fe9STony Lindgren #ifndef CONFIG_ARCH_OMAP4
3175a57fe9STony Lindgren #define gic_of_init		NULL
3275a57fe9STony Lindgren #endif
3375a57fe9STony Lindgren 
34fbf75da7SBenoit Cousson static struct of_device_id irq_match[] __initdata = {
35fbf75da7SBenoit Cousson 	{ .compatible = "ti,omap2-intc", .data = omap_intc_of_init, },
36fbf75da7SBenoit Cousson 	{ .compatible = "arm,cortex-a9-gic", .data = gic_of_init, },
37fbf75da7SBenoit Cousson 	{ }
38fbf75da7SBenoit Cousson };
39fbf75da7SBenoit Cousson 
40fbf75da7SBenoit Cousson static void __init omap_init_irq(void)
41fbf75da7SBenoit Cousson {
42fbf75da7SBenoit Cousson 	of_irq_init(irq_match);
43fbf75da7SBenoit Cousson }
44fbf75da7SBenoit Cousson 
458d61649dSBenoit Cousson static struct of_device_id omap_dt_match_table[] __initdata = {
468d61649dSBenoit Cousson 	{ .compatible = "simple-bus", },
478d61649dSBenoit Cousson 	{ .compatible = "ti,omap-infra", },
488d61649dSBenoit Cousson 	{ }
49b3c6df3aSPaul Walmsley };
50b3c6df3aSPaul Walmsley 
511dbae815STony Lindgren static void __init omap_generic_init(void)
521dbae815STony Lindgren {
53a4ca9dbeSTony Lindgren 	omap_sdrc_init(NULL, NULL);
548d61649dSBenoit Cousson 
558d61649dSBenoit Cousson 	of_platform_populate(NULL, omap_dt_match_table, NULL, NULL);
561dbae815STony Lindgren }
571dbae815STony Lindgren 
580e02a8c1SBenoit Cousson #ifdef CONFIG_SOC_OMAP2420
598d61649dSBenoit Cousson static const char *omap242x_boards_compat[] __initdata = {
608d61649dSBenoit Cousson 	"ti,omap2420",
618d61649dSBenoit Cousson 	NULL,
628d61649dSBenoit Cousson };
631dbae815STony Lindgren 
648d61649dSBenoit Cousson DT_MACHINE_START(OMAP242X_DT, "Generic OMAP2420 (Flattened Device Tree)")
6571ee7dadSRussell King 	.reserve	= omap_reserve,
668d61649dSBenoit Cousson 	.map_io		= omap242x_map_io,
678d61649dSBenoit Cousson 	.init_early	= omap2420_init_early,
68fbf75da7SBenoit Cousson 	.init_irq	= omap_init_irq,
69b755706cSBenoit Cousson 	.handle_irq	= omap2_intc_handle_irq,
701dbae815STony Lindgren 	.init_machine	= omap_generic_init,
7113340b2aSArnd Bergmann 	.timer		= &omap2_timer,
728d61649dSBenoit Cousson 	.dt_compat	= omap242x_boards_compat,
73baa95883SRussell King 	.restart	= omap_prcm_restart,
741dbae815STony Lindgren MACHINE_END
758d61649dSBenoit Cousson #endif
768d61649dSBenoit Cousson 
770e02a8c1SBenoit Cousson #ifdef CONFIG_SOC_OMAP2430
788d61649dSBenoit Cousson static const char *omap243x_boards_compat[] __initdata = {
798d61649dSBenoit Cousson 	"ti,omap2430",
808d61649dSBenoit Cousson 	NULL,
818d61649dSBenoit Cousson };
828d61649dSBenoit Cousson 
838d61649dSBenoit Cousson DT_MACHINE_START(OMAP243X_DT, "Generic OMAP2430 (Flattened Device Tree)")
848d61649dSBenoit Cousson 	.reserve	= omap_reserve,
858d61649dSBenoit Cousson 	.map_io		= omap243x_map_io,
868d61649dSBenoit Cousson 	.init_early	= omap2430_init_early,
87fbf75da7SBenoit Cousson 	.init_irq	= omap_init_irq,
886b2f55d7SMarc Zyngier 	.handle_irq	= omap2_intc_handle_irq,
898d61649dSBenoit Cousson 	.init_machine	= omap_generic_init,
908d61649dSBenoit Cousson 	.timer		= &omap2_timer,
918d61649dSBenoit Cousson 	.dt_compat	= omap243x_boards_compat,
92baa95883SRussell King 	.restart	= omap_prcm_restart,
938d61649dSBenoit Cousson MACHINE_END
948d61649dSBenoit Cousson #endif
958d61649dSBenoit Cousson 
960e02a8c1SBenoit Cousson #ifdef CONFIG_ARCH_OMAP3
978d61649dSBenoit Cousson static const char *omap3_boards_compat[] __initdata = {
988d61649dSBenoit Cousson 	"ti,omap3",
998d61649dSBenoit Cousson 	NULL,
1008d61649dSBenoit Cousson };
1018d61649dSBenoit Cousson 
1028d61649dSBenoit Cousson DT_MACHINE_START(OMAP3_DT, "Generic OMAP3 (Flattened Device Tree)")
1038d61649dSBenoit Cousson 	.reserve	= omap_reserve,
1048d61649dSBenoit Cousson 	.map_io		= omap3_map_io,
1058d61649dSBenoit Cousson 	.init_early	= omap3430_init_early,
106fbf75da7SBenoit Cousson 	.init_irq	= omap_init_irq,
107b755706cSBenoit Cousson 	.handle_irq	= omap3_intc_handle_irq,
10893651b85SBenoit Cousson 	.init_machine	= omap_generic_init,
1098d61649dSBenoit Cousson 	.timer		= &omap3_timer,
1108d61649dSBenoit Cousson 	.dt_compat	= omap3_boards_compat,
111baa95883SRussell King 	.restart	= omap_prcm_restart,
1128d61649dSBenoit Cousson MACHINE_END
1138d61649dSBenoit Cousson #endif
1148d61649dSBenoit Cousson 
1150e02a8c1SBenoit Cousson #ifdef CONFIG_ARCH_OMAP4
1168d61649dSBenoit Cousson static const char *omap4_boards_compat[] __initdata = {
1178d61649dSBenoit Cousson 	"ti,omap4",
1188d61649dSBenoit Cousson 	NULL,
1198d61649dSBenoit Cousson };
1208d61649dSBenoit Cousson 
1218d61649dSBenoit Cousson DT_MACHINE_START(OMAP4_DT, "Generic OMAP4 (Flattened Device Tree)")
1228d61649dSBenoit Cousson 	.reserve	= omap_reserve,
1238d61649dSBenoit Cousson 	.map_io		= omap4_map_io,
1248d61649dSBenoit Cousson 	.init_early	= omap4430_init_early,
125fbf75da7SBenoit Cousson 	.init_irq	= omap_init_irq,
126b755706cSBenoit Cousson 	.handle_irq	= gic_handle_irq,
12793651b85SBenoit Cousson 	.init_machine	= omap_generic_init,
1288d61649dSBenoit Cousson 	.timer		= &omap4_timer,
1298d61649dSBenoit Cousson 	.dt_compat	= omap4_boards_compat,
130baa95883SRussell King 	.restart	= omap_prcm_restart,
1318d61649dSBenoit Cousson MACHINE_END
1328d61649dSBenoit Cousson #endif
133