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 25 static const struct of_device_id omap_dt_match_table[] __initconst = { 26 { .compatible = "simple-bus", }, 27 { .compatible = "ti,omap-infra", }, 28 { } 29 }; 30 31 static void __init omap_generic_init(void) 32 { 33 omapdss_early_init_of(); 34 35 pdata_quirks_init(omap_dt_match_table); 36 37 omapdss_init_of(); 38 } 39 40 #ifdef CONFIG_SOC_OMAP2420 41 static const char *const omap242x_boards_compat[] __initconst = { 42 "ti,omap2420", 43 NULL, 44 }; 45 46 DT_MACHINE_START(OMAP242X_DT, "Generic OMAP2420 (Flattened Device Tree)") 47 .reserve = omap_reserve, 48 .map_io = omap242x_map_io, 49 .init_early = omap2420_init_early, 50 .init_machine = omap_generic_init, 51 .init_time = omap_init_time, 52 .dt_compat = omap242x_boards_compat, 53 .restart = omap2xxx_restart, 54 MACHINE_END 55 #endif 56 57 #ifdef CONFIG_SOC_OMAP2430 58 static const char *const omap243x_boards_compat[] __initconst = { 59 "ti,omap2430", 60 NULL, 61 }; 62 63 DT_MACHINE_START(OMAP243X_DT, "Generic OMAP2430 (Flattened Device Tree)") 64 .reserve = omap_reserve, 65 .map_io = omap243x_map_io, 66 .init_early = omap2430_init_early, 67 .init_machine = omap_generic_init, 68 .init_time = omap_init_time, 69 .dt_compat = omap243x_boards_compat, 70 .restart = omap2xxx_restart, 71 MACHINE_END 72 #endif 73 74 #ifdef CONFIG_ARCH_OMAP3 75 /* Some boards need board name for legacy userspace in /proc/cpuinfo */ 76 static const char *const n900_boards_compat[] __initconst = { 77 "nokia,omap3-n900", 78 NULL, 79 }; 80 81 /* Set system_rev from atags */ 82 static void __init rx51_set_system_rev(const struct tag *tags) 83 { 84 const struct tag *tag; 85 86 if (tags->hdr.tag != ATAG_CORE) 87 return; 88 89 for_each_tag(tag, tags) { 90 if (tag->hdr.tag == ATAG_REVISION) { 91 system_rev = tag->u.revision.rev; 92 break; 93 } 94 } 95 } 96 97 /* Legacy userspace on Nokia N900 needs ATAGS exported in /proc/atags, 98 * save them while the data is still not overwritten 99 */ 100 static void __init rx51_reserve(void) 101 { 102 const struct tag *tags = (const struct tag *)(PAGE_OFFSET + 0x100); 103 104 save_atags(tags); 105 rx51_set_system_rev(tags); 106 omap_reserve(); 107 } 108 109 DT_MACHINE_START(OMAP3_N900_DT, "Nokia RX-51 board") 110 .reserve = rx51_reserve, 111 .map_io = omap3_map_io, 112 .init_early = omap3430_init_early, 113 .init_machine = omap_generic_init, 114 .init_late = omap3_init_late, 115 .init_time = omap_init_time, 116 .dt_compat = n900_boards_compat, 117 .restart = omap3xxx_restart, 118 MACHINE_END 119 120 /* Generic omap3 boards, most boards can use these */ 121 static const char *const omap3_boards_compat[] __initconst = { 122 "ti,omap3430", 123 "ti,omap3", 124 NULL, 125 }; 126 127 DT_MACHINE_START(OMAP3_DT, "Generic OMAP3 (Flattened Device Tree)") 128 .reserve = omap_reserve, 129 .map_io = omap3_map_io, 130 .init_early = omap3430_init_early, 131 .init_machine = omap_generic_init, 132 .init_late = omap3_init_late, 133 .init_time = omap_init_time, 134 .dt_compat = omap3_boards_compat, 135 .restart = omap3xxx_restart, 136 MACHINE_END 137 138 static const char *const omap36xx_boards_compat[] __initconst = { 139 "ti,omap3630", 140 "ti,omap36xx", 141 NULL, 142 }; 143 144 DT_MACHINE_START(OMAP36XX_DT, "Generic OMAP36xx (Flattened Device Tree)") 145 .reserve = omap_reserve, 146 .map_io = omap3_map_io, 147 .init_early = omap3630_init_early, 148 .init_machine = omap_generic_init, 149 .init_late = omap3_init_late, 150 .init_time = omap_init_time, 151 .dt_compat = omap36xx_boards_compat, 152 .restart = omap3xxx_restart, 153 MACHINE_END 154 155 static const char *const omap3_gp_boards_compat[] __initconst = { 156 "ti,omap3-beagle", 157 "timll,omap3-devkit8000", 158 NULL, 159 }; 160 161 DT_MACHINE_START(OMAP3_GP_DT, "Generic OMAP3-GP (Flattened Device Tree)") 162 .reserve = omap_reserve, 163 .map_io = omap3_map_io, 164 .init_early = omap3430_init_early, 165 .init_machine = omap_generic_init, 166 .init_late = omap3_init_late, 167 .init_time = omap3_secure_sync32k_timer_init, 168 .dt_compat = omap3_gp_boards_compat, 169 .restart = omap3xxx_restart, 170 MACHINE_END 171 172 static const char *const am3517_boards_compat[] __initconst = { 173 "ti,am3517", 174 NULL, 175 }; 176 177 DT_MACHINE_START(AM3517_DT, "Generic AM3517 (Flattened Device Tree)") 178 .reserve = omap_reserve, 179 .map_io = omap3_map_io, 180 .init_early = am35xx_init_early, 181 .init_machine = omap_generic_init, 182 .init_late = omap3_init_late, 183 .init_time = omap3_gptimer_timer_init, 184 .dt_compat = am3517_boards_compat, 185 .restart = omap3xxx_restart, 186 MACHINE_END 187 #endif 188 189 #ifdef CONFIG_SOC_TI81XX 190 static const char *const ti814x_boards_compat[] __initconst = { 191 "ti,dm8148", 192 "ti,dm814", 193 NULL, 194 }; 195 196 DT_MACHINE_START(TI814X_DT, "Generic ti814x (Flattened Device Tree)") 197 .reserve = omap_reserve, 198 .map_io = ti81xx_map_io, 199 .init_early = ti814x_init_early, 200 .init_machine = omap_generic_init, 201 .init_late = ti81xx_init_late, 202 .init_time = omap3_gptimer_timer_init, 203 .dt_compat = ti814x_boards_compat, 204 .restart = ti81xx_restart, 205 MACHINE_END 206 207 static const char *const ti816x_boards_compat[] __initconst = { 208 "ti,dm8168", 209 "ti,dm816", 210 NULL, 211 }; 212 213 DT_MACHINE_START(TI816X_DT, "Generic ti816x (Flattened Device Tree)") 214 .reserve = omap_reserve, 215 .map_io = ti81xx_map_io, 216 .init_early = ti816x_init_early, 217 .init_machine = omap_generic_init, 218 .init_late = ti81xx_init_late, 219 .init_time = omap3_gptimer_timer_init, 220 .dt_compat = ti816x_boards_compat, 221 .restart = ti81xx_restart, 222 MACHINE_END 223 #endif 224 225 #ifdef CONFIG_SOC_AM33XX 226 static const char *const am33xx_boards_compat[] __initconst = { 227 "ti,am33xx", 228 NULL, 229 }; 230 231 DT_MACHINE_START(AM33XX_DT, "Generic AM33XX (Flattened Device Tree)") 232 .reserve = omap_reserve, 233 .map_io = am33xx_map_io, 234 .init_early = am33xx_init_early, 235 .init_machine = omap_generic_init, 236 .init_late = am33xx_init_late, 237 .init_time = omap3_gptimer_timer_init, 238 .dt_compat = am33xx_boards_compat, 239 .restart = am33xx_restart, 240 MACHINE_END 241 #endif 242 243 #ifdef CONFIG_ARCH_OMAP4 244 static const char *const omap4_boards_compat[] __initconst = { 245 "ti,omap4460", 246 "ti,omap4430", 247 "ti,omap4", 248 NULL, 249 }; 250 251 DT_MACHINE_START(OMAP4_DT, "Generic OMAP4 (Flattened Device Tree)") 252 .l2c_aux_val = OMAP_L2C_AUX_CTRL, 253 .l2c_aux_mask = 0xcf9fffff, 254 .l2c_write_sec = omap4_l2c310_write_sec, 255 .reserve = omap_reserve, 256 .smp = smp_ops(omap4_smp_ops), 257 .map_io = omap4_map_io, 258 .init_early = omap4430_init_early, 259 .init_irq = omap_gic_of_init, 260 .init_machine = omap_generic_init, 261 .init_late = omap4430_init_late, 262 .init_time = omap4_local_timer_init, 263 .dt_compat = omap4_boards_compat, 264 .restart = omap44xx_restart, 265 MACHINE_END 266 #endif 267 268 #ifdef CONFIG_SOC_OMAP5 269 static const char *const omap5_boards_compat[] __initconst = { 270 "ti,omap5432", 271 "ti,omap5430", 272 "ti,omap5", 273 NULL, 274 }; 275 276 DT_MACHINE_START(OMAP5_DT, "Generic OMAP5 (Flattened Device Tree)") 277 #if defined(CONFIG_ZONE_DMA) && defined(CONFIG_ARM_LPAE) 278 .dma_zone_size = SZ_2G, 279 #endif 280 .reserve = omap_reserve, 281 .smp = smp_ops(omap4_smp_ops), 282 .map_io = omap5_map_io, 283 .init_early = omap5_init_early, 284 .init_irq = omap_gic_of_init, 285 .init_machine = omap_generic_init, 286 .init_late = omap5_init_late, 287 .init_time = omap5_realtime_timer_init, 288 .dt_compat = omap5_boards_compat, 289 .restart = omap44xx_restart, 290 MACHINE_END 291 #endif 292 293 #ifdef CONFIG_SOC_AM43XX 294 static const char *const am43_boards_compat[] __initconst = { 295 "ti,am4372", 296 "ti,am43", 297 NULL, 298 }; 299 300 DT_MACHINE_START(AM43_DT, "Generic AM43 (Flattened Device Tree)") 301 .l2c_aux_val = OMAP_L2C_AUX_CTRL, 302 .l2c_aux_mask = 0xcf9fffff, 303 .l2c_write_sec = omap4_l2c310_write_sec, 304 .map_io = am33xx_map_io, 305 .init_early = am43xx_init_early, 306 .init_late = am43xx_init_late, 307 .init_irq = omap_gic_of_init, 308 .init_machine = omap_generic_init, 309 .init_time = omap4_local_timer_init, 310 .dt_compat = am43_boards_compat, 311 .restart = omap44xx_restart, 312 MACHINE_END 313 #endif 314 315 #ifdef CONFIG_SOC_DRA7XX 316 static const char *const dra74x_boards_compat[] __initconst = { 317 "ti,am5728", 318 "ti,am5726", 319 "ti,dra742", 320 "ti,dra7", 321 NULL, 322 }; 323 324 DT_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, 338 MACHINE_END 339 340 static const char *const dra72x_boards_compat[] __initconst = { 341 "ti,am5718", 342 "ti,am5716", 343 "ti,dra722", 344 NULL, 345 }; 346 347 DT_MACHINE_START(DRA72X_DT, "Generic DRA72X (Flattened Device Tree)") 348 #if defined(CONFIG_ZONE_DMA) && defined(CONFIG_ARM_LPAE) 349 .dma_zone_size = SZ_2G, 350 #endif 351 .reserve = omap_reserve, 352 .map_io = dra7xx_map_io, 353 .init_early = dra7xx_init_early, 354 .init_late = dra7xx_init_late, 355 .init_irq = omap_gic_of_init, 356 .init_machine = omap_generic_init, 357 .init_time = omap5_realtime_timer_init, 358 .dt_compat = dra72x_boards_compat, 359 .restart = omap44xx_restart, 360 MACHINE_END 361 #endif 362