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 __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 40 static const char *const omap242x_boards_compat[] __initconst = { 41 "ti,omap2420", 42 NULL, 43 }; 44 45 DT_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, 53 MACHINE_END 54 #endif 55 56 #ifdef CONFIG_SOC_OMAP2430 57 static const char *const omap243x_boards_compat[] __initconst = { 58 "ti,omap2430", 59 NULL, 60 }; 61 62 DT_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, 70 MACHINE_END 71 #endif 72 73 #ifdef CONFIG_ARCH_OMAP3 74 /* Some boards need board name for legacy userspace in /proc/cpuinfo */ 75 static const char *const n900_boards_compat[] __initconst = { 76 "nokia,omap3-n900", 77 NULL, 78 }; 79 80 /* Set system_rev from atags */ 81 static 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 */ 99 static 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 108 DT_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, 117 MACHINE_END 118 119 /* Generic omap3 boards, most boards can use these */ 120 static const char *const omap3_boards_compat[] __initconst = { 121 "ti,omap3430", 122 "ti,omap3", 123 NULL, 124 }; 125 126 DT_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, 135 MACHINE_END 136 137 static const char *const omap36xx_boards_compat[] __initconst = { 138 "ti,omap3630", 139 "ti,omap36xx", 140 NULL, 141 }; 142 143 DT_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, 152 MACHINE_END 153 154 static const char *const omap3_gp_boards_compat[] __initconst = { 155 "ti,omap3-beagle", 156 "timll,omap3-devkit8000", 157 NULL, 158 }; 159 160 DT_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, 169 MACHINE_END 170 171 static const char *const am3517_boards_compat[] __initconst = { 172 "ti,am3517", 173 NULL, 174 }; 175 176 DT_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, 185 MACHINE_END 186 #endif 187 188 #ifdef CONFIG_SOC_TI81XX 189 static const char *const ti814x_boards_compat[] __initconst = { 190 "ti,dm8148", 191 "ti,dm814", 192 NULL, 193 }; 194 195 DT_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, 204 MACHINE_END 205 206 static const char *const ti816x_boards_compat[] __initconst = { 207 "ti,dm8168", 208 "ti,dm816", 209 NULL, 210 }; 211 212 DT_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, 221 MACHINE_END 222 #endif 223 224 #ifdef CONFIG_SOC_AM33XX 225 static const char *const am33xx_boards_compat[] __initconst = { 226 "ti,am33xx", 227 NULL, 228 }; 229 230 DT_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, 239 MACHINE_END 240 #endif 241 242 #ifdef CONFIG_ARCH_OMAP4 243 static const char *const omap4_boards_compat[] __initconst = { 244 "ti,omap4460", 245 "ti,omap4430", 246 "ti,omap4", 247 NULL, 248 }; 249 250 DT_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, 264 MACHINE_END 265 #endif 266 267 #ifdef CONFIG_SOC_OMAP5 268 static const char *const omap5_boards_compat[] __initconst = { 269 "ti,omap5432", 270 "ti,omap5430", 271 "ti,omap5", 272 NULL, 273 }; 274 275 DT_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, 289 MACHINE_END 290 #endif 291 292 #ifdef CONFIG_SOC_AM43XX 293 static const char *const am43_boards_compat[] __initconst = { 294 "ti,am4372", 295 "ti,am43", 296 NULL, 297 }; 298 299 DT_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, 311 MACHINE_END 312 #endif 313 314 #ifdef CONFIG_SOC_DRA7XX 315 static 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 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 "ti,dra718", 345 NULL, 346 }; 347 348 DT_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, 361 MACHINE_END 362 #endif 363