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 - https://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/irqdomain.h> 13#include <linux/clocksource.h> 14#include <linux/clockchips.h> 15#include <linux/mod_devicetable.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 23static const struct of_device_id omap_dt_match_table[] __initconst = { 24 { .compatible = "simple-bus", }, 25 { .compatible = "ti,omap-infra", }, 26 { } 27}; 28 29static 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 */ 36static 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) 44void tick_broadcast(const struct cpumask *mask) 45{ 46} 47#endif 48 49#ifdef CONFIG_SOC_OMAP2420 50static const char *const omap242x_boards_compat[] __initconst = { 51 "ti,omap2420", 52 NULL, 53}; 54 55DT_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, 63MACHINE_END 64#endif 65 66#ifdef CONFIG_SOC_OMAP2430 67static const char *const omap243x_boards_compat[] __initconst = { 68 "ti,omap2430", 69 NULL, 70}; 71 72DT_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, 80MACHINE_END 81#endif 82 83#ifdef CONFIG_ARCH_OMAP3 84/* Some boards need board name for legacy userspace in /proc/cpuinfo */ 85static const char *const n900_boards_compat[] __initconst = { 86 "nokia,omap3-n900", 87 NULL, 88}; 89 90/* Set system_rev from atags */ 91static 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 */ 109static 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 118DT_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, 127MACHINE_END 128 129/* Generic omap3 boards, most boards can use these */ 130static const char *const omap3_boards_compat[] __initconst = { 131 "ti,omap3430", 132 "ti,omap3", 133 NULL, 134}; 135 136DT_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, 145MACHINE_END 146 147static const char *const omap36xx_boards_compat[] __initconst = { 148 "ti,omap3630", 149 "ti,omap36xx", 150 NULL, 151}; 152 153DT_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, 162MACHINE_END 163 164static const char *const omap3_gp_boards_compat[] __initconst = { 165 "ti,omap3-beagle", 166 "timll,omap3-devkit8000", 167 NULL, 168}; 169 170DT_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, 179MACHINE_END 180 181static const char *const am3517_boards_compat[] __initconst = { 182 "ti,am3517", 183 NULL, 184}; 185 186DT_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, 195MACHINE_END 196#endif 197 198#ifdef CONFIG_SOC_TI81XX 199static const char *const ti814x_boards_compat[] __initconst = { 200 "ti,dm8148", 201 "ti,dm814", 202 NULL, 203}; 204 205DT_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, 214MACHINE_END 215 216static const char *const ti816x_boards_compat[] __initconst = { 217 "ti,dm8168", 218 "ti,dm816", 219 NULL, 220}; 221 222DT_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, 231MACHINE_END 232#endif 233 234#ifdef CONFIG_SOC_AM33XX 235static const char *const am33xx_boards_compat[] __initconst = { 236 "ti,am33xx", 237 NULL, 238}; 239 240DT_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 /* 250 * Historically am33xx supported only REBOOT_WARM even though default 251 * reboot_mode was REBOOT_COLD. Reflect legacy de-facto behaviour in 252 * SYSFS. 253 */ 254 .reboot_mode = REBOOT_WARM, 255MACHINE_END 256#endif 257 258#ifdef CONFIG_ARCH_OMAP4 259static const char *const omap4_boards_compat[] __initconst = { 260 "ti,omap4460", 261 "ti,omap4430", 262 "ti,omap4", 263 NULL, 264}; 265 266DT_MACHINE_START(OMAP4_DT, "Generic OMAP4 (Flattened Device Tree)") 267 .l2c_aux_val = OMAP_L2C_AUX_CTRL, 268 .l2c_aux_mask = 0xcf9fffff, 269 .l2c_write_sec = omap4_l2c310_write_sec, 270 .reserve = omap_reserve, 271 .smp = smp_ops(omap4_smp_ops), 272 .map_io = omap4_map_io, 273 .init_early = omap4430_init_early, 274 .init_irq = omap_gic_of_init, 275 .init_machine = omap_generic_init, 276 .init_late = omap4430_init_late, 277 .init_time = omap_init_time_of, 278 .dt_compat = omap4_boards_compat, 279 .restart = omap44xx_restart, 280MACHINE_END 281#endif 282 283#ifdef CONFIG_SOC_OMAP5 284static const char *const omap5_boards_compat[] __initconst = { 285 "ti,omap5432", 286 "ti,omap5430", 287 "ti,omap5", 288 NULL, 289}; 290 291DT_MACHINE_START(OMAP5_DT, "Generic OMAP5 (Flattened Device Tree)") 292#if defined(CONFIG_ZONE_DMA) && defined(CONFIG_ARM_LPAE) 293 .dma_zone_size = SZ_2G, 294#endif 295 .reserve = omap_reserve, 296 .smp = smp_ops(omap4_smp_ops), 297 .map_io = omap5_map_io, 298 .init_early = omap5_init_early, 299 .init_irq = omap_gic_of_init, 300 .init_machine = omap_generic_init, 301 .init_late = omap5_init_late, 302 .init_time = omap5_realtime_timer_init, 303 .dt_compat = omap5_boards_compat, 304 .restart = omap44xx_restart, 305MACHINE_END 306#endif 307 308#ifdef CONFIG_SOC_AM43XX 309static const char *const am43_boards_compat[] __initconst = { 310 "ti,am4372", 311 "ti,am43", 312 NULL, 313}; 314 315DT_MACHINE_START(AM43_DT, "Generic AM43 (Flattened Device Tree)") 316 .l2c_aux_val = OMAP_L2C_AUX_CTRL, 317 .l2c_aux_mask = 0xcf9fffff, 318 .l2c_write_sec = omap4_l2c310_write_sec, 319 .map_io = am33xx_map_io, 320 .init_early = am43xx_init_early, 321 .init_late = am43xx_init_late, 322 .init_irq = omap_gic_of_init, 323 .init_machine = omap_generic_init, 324 .init_time = omap_init_time_of, 325 .dt_compat = am43_boards_compat, 326 .restart = omap44xx_restart, 327MACHINE_END 328#endif 329 330#ifdef CONFIG_SOC_DRA7XX 331static const char *const dra74x_boards_compat[] __initconst = { 332 "ti,dra762", 333 "ti,am5728", 334 "ti,am5726", 335 "ti,dra742", 336 "ti,dra7", 337 NULL, 338}; 339 340DT_MACHINE_START(DRA74X_DT, "Generic DRA74X (Flattened Device Tree)") 341#if defined(CONFIG_ZONE_DMA) && defined(CONFIG_ARM_LPAE) 342 .dma_zone_size = SZ_2G, 343#endif 344 .reserve = omap_reserve, 345 .smp = smp_ops(omap4_smp_ops), 346 .map_io = dra7xx_map_io, 347 .init_early = dra7xx_init_early, 348 .init_late = dra7xx_init_late, 349 .init_irq = omap_gic_of_init, 350 .init_machine = omap_generic_init, 351 .init_time = omap5_realtime_timer_init, 352 .dt_compat = dra74x_boards_compat, 353 .restart = omap44xx_restart, 354MACHINE_END 355 356static const char *const dra72x_boards_compat[] __initconst = { 357 "ti,am5718", 358 "ti,am5716", 359 "ti,dra722", 360 "ti,dra718", 361 NULL, 362}; 363 364DT_MACHINE_START(DRA72X_DT, "Generic DRA72X (Flattened Device Tree)") 365#if defined(CONFIG_ZONE_DMA) && defined(CONFIG_ARM_LPAE) 366 .dma_zone_size = SZ_2G, 367#endif 368 .reserve = omap_reserve, 369 .map_io = dra7xx_map_io, 370 .init_early = dra7xx_init_early, 371 .init_late = dra7xx_init_late, 372 .init_irq = omap_gic_of_init, 373 .init_machine = omap_generic_init, 374 .init_time = omap5_realtime_timer_init, 375 .dt_compat = dra72x_boards_compat, 376 .restart = omap44xx_restart, 377MACHINE_END 378#endif 379