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> 158d61649dSBenoit Cousson #include <linux/of_platform.h> 168d61649dSBenoit Cousson #include <linux/irqdomain.h> 17a7cbb9b1SBenoit Cousson #include <linux/i2c/twl.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 27a7cbb9b1SBenoit Cousson /* 28a7cbb9b1SBenoit Cousson * XXX: Still needed to boot until the i2c & twl driver is adapted to 29a7cbb9b1SBenoit Cousson * device-tree 30a7cbb9b1SBenoit Cousson */ 31c4e2d245SSanjeev Premi #ifdef CONFIG_ARCH_OMAP4 32a7cbb9b1SBenoit Cousson static struct twl4030_platform_data sdp4430_twldata = { 33a7cbb9b1SBenoit Cousson .irq_base = TWL6030_IRQ_BASE, 34a7cbb9b1SBenoit Cousson .irq_end = TWL6030_IRQ_END, 35a7cbb9b1SBenoit Cousson }; 36a7cbb9b1SBenoit Cousson 37a7cbb9b1SBenoit Cousson static void __init omap4_i2c_init(void) 38a7cbb9b1SBenoit Cousson { 39a7cbb9b1SBenoit Cousson omap4_pmic_init("twl6030", &sdp4430_twldata); 40a7cbb9b1SBenoit Cousson } 41c4e2d245SSanjeev Premi #endif 42a7cbb9b1SBenoit Cousson 43c4e2d245SSanjeev Premi #ifdef CONFIG_ARCH_OMAP3 44a7cbb9b1SBenoit Cousson static struct twl4030_platform_data beagle_twldata = { 45a7cbb9b1SBenoit Cousson .irq_base = TWL4030_IRQ_BASE, 46a7cbb9b1SBenoit Cousson .irq_end = TWL4030_IRQ_END, 47a7cbb9b1SBenoit Cousson }; 48a7cbb9b1SBenoit Cousson 49a7cbb9b1SBenoit Cousson static void __init omap3_i2c_init(void) 50a7cbb9b1SBenoit Cousson { 51a7cbb9b1SBenoit Cousson omap3_pmic_init("twl4030", &beagle_twldata); 52a7cbb9b1SBenoit Cousson } 53c4e2d245SSanjeev Premi #endif 548d61649dSBenoit Cousson 558d61649dSBenoit Cousson static struct of_device_id omap_dt_match_table[] __initdata = { 568d61649dSBenoit Cousson { .compatible = "simple-bus", }, 578d61649dSBenoit Cousson { .compatible = "ti,omap-infra", }, 588d61649dSBenoit Cousson { } 59b3c6df3aSPaul Walmsley }; 60b3c6df3aSPaul Walmsley 618d61649dSBenoit Cousson static struct of_device_id intc_match[] __initdata = { 628d61649dSBenoit Cousson { .compatible = "ti,omap3-intc", }, 638d61649dSBenoit Cousson { .compatible = "arm,cortex-a9-gic", }, 648d61649dSBenoit Cousson { } 658d61649dSBenoit Cousson }; 661dbae815STony Lindgren 671dbae815STony Lindgren static void __init omap_generic_init(void) 681dbae815STony Lindgren { 698d61649dSBenoit Cousson struct device_node *node = of_find_matching_node(NULL, intc_match); 708d61649dSBenoit Cousson if (node) 718d61649dSBenoit Cousson irq_domain_add_simple(node, 0); 728d61649dSBenoit Cousson 731dbae815STony Lindgren omap_serial_init(); 74a4ca9dbeSTony Lindgren omap_sdrc_init(NULL, NULL); 758d61649dSBenoit Cousson 768d61649dSBenoit Cousson of_platform_populate(NULL, omap_dt_match_table, NULL, NULL); 771dbae815STony Lindgren } 781dbae815STony Lindgren 79c4e2d245SSanjeev Premi #ifdef CONFIG_ARCH_OMAP4 80a7cbb9b1SBenoit Cousson static void __init omap4_init(void) 81a7cbb9b1SBenoit Cousson { 82a7cbb9b1SBenoit Cousson omap4_i2c_init(); 83a7cbb9b1SBenoit Cousson omap_generic_init(); 84a7cbb9b1SBenoit Cousson } 85c4e2d245SSanjeev Premi #endif 86a7cbb9b1SBenoit Cousson 87c4e2d245SSanjeev Premi #ifdef CONFIG_ARCH_OMAP3 88a7cbb9b1SBenoit Cousson static void __init omap3_init(void) 89a7cbb9b1SBenoit Cousson { 90a7cbb9b1SBenoit Cousson omap3_i2c_init(); 91a7cbb9b1SBenoit Cousson omap_generic_init(); 92a7cbb9b1SBenoit Cousson } 93c4e2d245SSanjeev Premi #endif 94a7cbb9b1SBenoit Cousson 958d61649dSBenoit Cousson #if defined(CONFIG_SOC_OMAP2420) 968d61649dSBenoit Cousson static const char *omap242x_boards_compat[] __initdata = { 978d61649dSBenoit Cousson "ti,omap2420", 988d61649dSBenoit Cousson NULL, 998d61649dSBenoit Cousson }; 1001dbae815STony Lindgren 1018d61649dSBenoit Cousson DT_MACHINE_START(OMAP242X_DT, "Generic OMAP2420 (Flattened Device Tree)") 1025e52b435SNicolas Pitre .atag_offset = 0x100, 10371ee7dadSRussell King .reserve = omap_reserve, 1048d61649dSBenoit Cousson .map_io = omap242x_map_io, 1058d61649dSBenoit Cousson .init_early = omap2420_init_early, 106741e3a89STony Lindgren .init_irq = omap2_init_irq, 107b755706cSBenoit Cousson .handle_irq = omap2_intc_handle_irq, 1081dbae815STony Lindgren .init_machine = omap_generic_init, 10913340b2aSArnd Bergmann .timer = &omap2_timer, 1108d61649dSBenoit Cousson .dt_compat = omap242x_boards_compat, 1111dbae815STony Lindgren MACHINE_END 1128d61649dSBenoit Cousson #endif 1138d61649dSBenoit Cousson 1148d61649dSBenoit Cousson #if defined(CONFIG_SOC_OMAP2430) 1158d61649dSBenoit Cousson static const char *omap243x_boards_compat[] __initdata = { 1168d61649dSBenoit Cousson "ti,omap2430", 1178d61649dSBenoit Cousson NULL, 1188d61649dSBenoit Cousson }; 1198d61649dSBenoit Cousson 1208d61649dSBenoit Cousson DT_MACHINE_START(OMAP243X_DT, "Generic OMAP2430 (Flattened Device Tree)") 121df80442dSArnd Bergmann .atag_offset = 0x100, 1228d61649dSBenoit Cousson .reserve = omap_reserve, 1238d61649dSBenoit Cousson .map_io = omap243x_map_io, 1248d61649dSBenoit Cousson .init_early = omap2430_init_early, 1258d61649dSBenoit Cousson .init_irq = omap2_init_irq, 1266b2f55d7SMarc Zyngier .handle_irq = omap2_intc_handle_irq, 1278d61649dSBenoit Cousson .init_machine = omap_generic_init, 1288d61649dSBenoit Cousson .timer = &omap2_timer, 1298d61649dSBenoit Cousson .dt_compat = omap243x_boards_compat, 1308d61649dSBenoit Cousson MACHINE_END 1318d61649dSBenoit Cousson #endif 1328d61649dSBenoit Cousson 1338d61649dSBenoit Cousson #if defined(CONFIG_ARCH_OMAP3) 1348d61649dSBenoit Cousson static const char *omap3_boards_compat[] __initdata = { 1358d61649dSBenoit Cousson "ti,omap3", 1368d61649dSBenoit Cousson NULL, 1378d61649dSBenoit Cousson }; 1388d61649dSBenoit Cousson 1398d61649dSBenoit Cousson DT_MACHINE_START(OMAP3_DT, "Generic OMAP3 (Flattened Device Tree)") 140df80442dSArnd Bergmann .atag_offset = 0x100, 1418d61649dSBenoit Cousson .reserve = omap_reserve, 1428d61649dSBenoit Cousson .map_io = omap3_map_io, 1438d61649dSBenoit Cousson .init_early = omap3430_init_early, 1448d61649dSBenoit Cousson .init_irq = omap3_init_irq, 145b755706cSBenoit Cousson .handle_irq = omap3_intc_handle_irq, 146a7cbb9b1SBenoit Cousson .init_machine = omap3_init, 1478d61649dSBenoit Cousson .timer = &omap3_timer, 1488d61649dSBenoit Cousson .dt_compat = omap3_boards_compat, 1498d61649dSBenoit Cousson MACHINE_END 1508d61649dSBenoit Cousson #endif 1518d61649dSBenoit Cousson 1528d61649dSBenoit Cousson #if defined(CONFIG_ARCH_OMAP4) 1538d61649dSBenoit Cousson static const char *omap4_boards_compat[] __initdata = { 1548d61649dSBenoit Cousson "ti,omap4", 1558d61649dSBenoit Cousson NULL, 1568d61649dSBenoit Cousson }; 1578d61649dSBenoit Cousson 1588d61649dSBenoit Cousson DT_MACHINE_START(OMAP4_DT, "Generic OMAP4 (Flattened Device Tree)") 159df80442dSArnd Bergmann .atag_offset = 0x100, 1608d61649dSBenoit Cousson .reserve = omap_reserve, 1618d61649dSBenoit Cousson .map_io = omap4_map_io, 1628d61649dSBenoit Cousson .init_early = omap4430_init_early, 1638d61649dSBenoit Cousson .init_irq = gic_init_irq, 164b755706cSBenoit Cousson .handle_irq = gic_handle_irq, 165a7cbb9b1SBenoit Cousson .init_machine = omap4_init, 1668d61649dSBenoit Cousson .timer = &omap4_timer, 1678d61649dSBenoit Cousson .dt_compat = omap4_boards_compat, 1688d61649dSBenoit Cousson MACHINE_END 1698d61649dSBenoit Cousson #endif 170