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