board-generic.c (9571B)
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/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 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, 249MACHINE_END 250#endif 251 252#ifdef CONFIG_ARCH_OMAP4 253static const char *const omap4_boards_compat[] __initconst = { 254 "ti,omap4460", 255 "ti,omap4430", 256 "ti,omap4", 257 NULL, 258}; 259 260DT_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, 274MACHINE_END 275#endif 276 277#ifdef CONFIG_SOC_OMAP5 278static const char *const omap5_boards_compat[] __initconst = { 279 "ti,omap5432", 280 "ti,omap5430", 281 "ti,omap5", 282 NULL, 283}; 284 285DT_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, 299MACHINE_END 300#endif 301 302#ifdef CONFIG_SOC_AM43XX 303static const char *const am43_boards_compat[] __initconst = { 304 "ti,am4372", 305 "ti,am43", 306 NULL, 307}; 308 309DT_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, 321MACHINE_END 322#endif 323 324#ifdef CONFIG_SOC_DRA7XX 325static 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 334DT_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, 348MACHINE_END 349 350static const char *const dra72x_boards_compat[] __initconst = { 351 "ti,am5718", 352 "ti,am5716", 353 "ti,dra722", 354 "ti,dra718", 355 NULL, 356}; 357 358DT_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, 371MACHINE_END 372#endif