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 23 static const struct of_device_id omap_dt_match_table[] __initconst = { 24 { .compatible = "simple-bus", }, 25 { .compatible = "ti,omap-infra", }, 26 { } 27 }; 28 29 static 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 */ 36 void __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) 44 void tick_broadcast(const struct cpumask *mask) 45 { 46 } 47 #endif 48 49 #ifdef CONFIG_SOC_OMAP2420 50 static const char *const omap242x_boards_compat[] __initconst = { 51 "ti,omap2420", 52 NULL, 53 }; 54 55 DT_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, 63 MACHINE_END 64 #endif 65 66 #ifdef CONFIG_SOC_OMAP2430 67 static const char *const omap243x_boards_compat[] __initconst = { 68 "ti,omap2430", 69 NULL, 70 }; 71 72 DT_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, 80 MACHINE_END 81 #endif 82 83 #ifdef CONFIG_ARCH_OMAP3 84 /* Some boards need board name for legacy userspace in /proc/cpuinfo */ 85 static const char *const n900_boards_compat[] __initconst = { 86 "nokia,omap3-n900", 87 NULL, 88 }; 89 90 /* Set system_rev from atags */ 91 static 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 */ 109 static 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 118 DT_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, 127 MACHINE_END 128 129 /* Generic omap3 boards, most boards can use these */ 130 static const char *const omap3_boards_compat[] __initconst = { 131 "ti,omap3430", 132 "ti,omap3", 133 NULL, 134 }; 135 136 DT_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, 145 MACHINE_END 146 147 static const char *const omap36xx_boards_compat[] __initconst = { 148 "ti,omap3630", 149 "ti,omap36xx", 150 NULL, 151 }; 152 153 DT_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, 162 MACHINE_END 163 164 static const char *const omap3_gp_boards_compat[] __initconst = { 165 "ti,omap3-beagle", 166 "timll,omap3-devkit8000", 167 NULL, 168 }; 169 170 DT_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, 179 MACHINE_END 180 181 static const char *const am3517_boards_compat[] __initconst = { 182 "ti,am3517", 183 NULL, 184 }; 185 186 DT_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, 195 MACHINE_END 196 #endif 197 198 #ifdef CONFIG_SOC_TI81XX 199 static const char *const ti814x_boards_compat[] __initconst = { 200 "ti,dm8148", 201 "ti,dm814", 202 NULL, 203 }; 204 205 DT_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, 214 MACHINE_END 215 216 static const char *const ti816x_boards_compat[] __initconst = { 217 "ti,dm8168", 218 "ti,dm816", 219 NULL, 220 }; 221 222 DT_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, 231 MACHINE_END 232 #endif 233 234 #ifdef CONFIG_SOC_AM33XX 235 static const char *const am33xx_boards_compat[] __initconst = { 236 "ti,am33xx", 237 NULL, 238 }; 239 240 DT_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, 249 MACHINE_END 250 #endif 251 252 #ifdef CONFIG_ARCH_OMAP4 253 static const char *const omap4_boards_compat[] __initconst = { 254 "ti,omap4460", 255 "ti,omap4430", 256 "ti,omap4", 257 NULL, 258 }; 259 260 DT_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, 274 MACHINE_END 275 #endif 276 277 #ifdef CONFIG_SOC_OMAP5 278 static const char *const omap5_boards_compat[] __initconst = { 279 "ti,omap5432", 280 "ti,omap5430", 281 "ti,omap5", 282 NULL, 283 }; 284 285 DT_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, 299 MACHINE_END 300 #endif 301 302 #ifdef CONFIG_SOC_AM43XX 303 static const char *const am43_boards_compat[] __initconst = { 304 "ti,am4372", 305 "ti,am43", 306 NULL, 307 }; 308 309 DT_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, 321 MACHINE_END 322 #endif 323 324 #ifdef CONFIG_SOC_DRA7XX 325 static 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 334 DT_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, 348 MACHINE_END 349 350 static const char *const dra72x_boards_compat[] __initconst = { 351 "ti,am5718", 352 "ti,am5716", 353 "ti,dra722", 354 "ti,dra718", 355 NULL, 356 }; 357 358 DT_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, 371 MACHINE_END 372 #endif 373