1 /* 2 * linux/arch/arm/kernel/setup.c 3 * 4 * Copyright (C) 1995-2001 Russell King 5 * 6 * This program is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License version 2 as 8 * published by the Free Software Foundation. 9 */ 10 #include <linux/efi.h> 11 #include <linux/export.h> 12 #include <linux/kernel.h> 13 #include <linux/stddef.h> 14 #include <linux/ioport.h> 15 #include <linux/delay.h> 16 #include <linux/utsname.h> 17 #include <linux/initrd.h> 18 #include <linux/console.h> 19 #include <linux/bootmem.h> 20 #include <linux/seq_file.h> 21 #include <linux/screen_info.h> 22 #include <linux/of_platform.h> 23 #include <linux/init.h> 24 #include <linux/kexec.h> 25 #include <linux/of_fdt.h> 26 #include <linux/cpu.h> 27 #include <linux/interrupt.h> 28 #include <linux/smp.h> 29 #include <linux/proc_fs.h> 30 #include <linux/memblock.h> 31 #include <linux/bug.h> 32 #include <linux/compiler.h> 33 #include <linux/sort.h> 34 #include <linux/psci.h> 35 36 #include <asm/unified.h> 37 #include <asm/cp15.h> 38 #include <asm/cpu.h> 39 #include <asm/cputype.h> 40 #include <asm/efi.h> 41 #include <asm/elf.h> 42 #include <asm/early_ioremap.h> 43 #include <asm/fixmap.h> 44 #include <asm/procinfo.h> 45 #include <asm/psci.h> 46 #include <asm/sections.h> 47 #include <asm/setup.h> 48 #include <asm/smp_plat.h> 49 #include <asm/mach-types.h> 50 #include <asm/cacheflush.h> 51 #include <asm/cachetype.h> 52 #include <asm/tlbflush.h> 53 #include <asm/xen/hypervisor.h> 54 55 #include <asm/prom.h> 56 #include <asm/mach/arch.h> 57 #include <asm/mach/irq.h> 58 #include <asm/mach/time.h> 59 #include <asm/system_info.h> 60 #include <asm/system_misc.h> 61 #include <asm/traps.h> 62 #include <asm/unwind.h> 63 #include <asm/memblock.h> 64 #include <asm/virt.h> 65 66 #include "atags.h" 67 68 69 #if defined(CONFIG_FPE_NWFPE) || defined(CONFIG_FPE_FASTFPE) 70 char fpe_type[8]; 71 72 static int __init fpe_setup(char *line) 73 { 74 memcpy(fpe_type, line, 8); 75 return 1; 76 } 77 78 __setup("fpe=", fpe_setup); 79 #endif 80 81 extern void init_default_cache_policy(unsigned long); 82 extern void paging_init(const struct machine_desc *desc); 83 extern void early_paging_init(const struct machine_desc *); 84 extern void sanity_check_meminfo(void); 85 extern enum reboot_mode reboot_mode; 86 extern void setup_dma_zone(const struct machine_desc *desc); 87 88 unsigned int processor_id; 89 EXPORT_SYMBOL(processor_id); 90 unsigned int __machine_arch_type __read_mostly; 91 EXPORT_SYMBOL(__machine_arch_type); 92 unsigned int cacheid __read_mostly; 93 EXPORT_SYMBOL(cacheid); 94 95 unsigned int __atags_pointer __initdata; 96 97 unsigned int system_rev; 98 EXPORT_SYMBOL(system_rev); 99 100 const char *system_serial; 101 EXPORT_SYMBOL(system_serial); 102 103 unsigned int system_serial_low; 104 EXPORT_SYMBOL(system_serial_low); 105 106 unsigned int system_serial_high; 107 EXPORT_SYMBOL(system_serial_high); 108 109 unsigned int elf_hwcap __read_mostly; 110 EXPORT_SYMBOL(elf_hwcap); 111 112 unsigned int elf_hwcap2 __read_mostly; 113 EXPORT_SYMBOL(elf_hwcap2); 114 115 116 #ifdef MULTI_CPU 117 struct processor processor __read_mostly; 118 #endif 119 #ifdef MULTI_TLB 120 struct cpu_tlb_fns cpu_tlb __read_mostly; 121 #endif 122 #ifdef MULTI_USER 123 struct cpu_user_fns cpu_user __read_mostly; 124 #endif 125 #ifdef MULTI_CACHE 126 struct cpu_cache_fns cpu_cache __read_mostly; 127 #endif 128 #ifdef CONFIG_OUTER_CACHE 129 struct outer_cache_fns outer_cache __read_mostly; 130 EXPORT_SYMBOL(outer_cache); 131 #endif 132 133 /* 134 * Cached cpu_architecture() result for use by assembler code. 135 * C code should use the cpu_architecture() function instead of accessing this 136 * variable directly. 137 */ 138 int __cpu_architecture __read_mostly = CPU_ARCH_UNKNOWN; 139 140 struct stack { 141 u32 irq[3]; 142 u32 abt[3]; 143 u32 und[3]; 144 u32 fiq[3]; 145 } ____cacheline_aligned; 146 147 #ifndef CONFIG_CPU_V7M 148 static struct stack stacks[NR_CPUS]; 149 #endif 150 151 char elf_platform[ELF_PLATFORM_SIZE]; 152 EXPORT_SYMBOL(elf_platform); 153 154 static const char *cpu_name; 155 static const char *machine_name; 156 static char __initdata cmd_line[COMMAND_LINE_SIZE]; 157 const struct machine_desc *machine_desc __initdata; 158 159 static union { char c[4]; unsigned long l; } endian_test __initdata = { { 'l', '?', '?', 'b' } }; 160 #define ENDIANNESS ((char)endian_test.l) 161 162 DEFINE_PER_CPU(struct cpuinfo_arm, cpu_data); 163 164 /* 165 * Standard memory resources 166 */ 167 static struct resource mem_res[] = { 168 { 169 .name = "Video RAM", 170 .start = 0, 171 .end = 0, 172 .flags = IORESOURCE_MEM 173 }, 174 { 175 .name = "Kernel code", 176 .start = 0, 177 .end = 0, 178 .flags = IORESOURCE_SYSTEM_RAM 179 }, 180 { 181 .name = "Kernel data", 182 .start = 0, 183 .end = 0, 184 .flags = IORESOURCE_SYSTEM_RAM 185 } 186 }; 187 188 #define video_ram mem_res[0] 189 #define kernel_code mem_res[1] 190 #define kernel_data mem_res[2] 191 192 static struct resource io_res[] = { 193 { 194 .name = "reserved", 195 .start = 0x3bc, 196 .end = 0x3be, 197 .flags = IORESOURCE_IO | IORESOURCE_BUSY 198 }, 199 { 200 .name = "reserved", 201 .start = 0x378, 202 .end = 0x37f, 203 .flags = IORESOURCE_IO | IORESOURCE_BUSY 204 }, 205 { 206 .name = "reserved", 207 .start = 0x278, 208 .end = 0x27f, 209 .flags = IORESOURCE_IO | IORESOURCE_BUSY 210 } 211 }; 212 213 #define lp0 io_res[0] 214 #define lp1 io_res[1] 215 #define lp2 io_res[2] 216 217 static const char *proc_arch[] = { 218 "undefined/unknown", 219 "3", 220 "4", 221 "4T", 222 "5", 223 "5T", 224 "5TE", 225 "5TEJ", 226 "6TEJ", 227 "7", 228 "7M", 229 "?(12)", 230 "?(13)", 231 "?(14)", 232 "?(15)", 233 "?(16)", 234 "?(17)", 235 }; 236 237 #ifdef CONFIG_CPU_V7M 238 static int __get_cpu_architecture(void) 239 { 240 return CPU_ARCH_ARMv7M; 241 } 242 #else 243 static int __get_cpu_architecture(void) 244 { 245 int cpu_arch; 246 247 if ((read_cpuid_id() & 0x0008f000) == 0) { 248 cpu_arch = CPU_ARCH_UNKNOWN; 249 } else if ((read_cpuid_id() & 0x0008f000) == 0x00007000) { 250 cpu_arch = (read_cpuid_id() & (1 << 23)) ? CPU_ARCH_ARMv4T : CPU_ARCH_ARMv3; 251 } else if ((read_cpuid_id() & 0x00080000) == 0x00000000) { 252 cpu_arch = (read_cpuid_id() >> 16) & 7; 253 if (cpu_arch) 254 cpu_arch += CPU_ARCH_ARMv3; 255 } else if ((read_cpuid_id() & 0x000f0000) == 0x000f0000) { 256 /* Revised CPUID format. Read the Memory Model Feature 257 * Register 0 and check for VMSAv7 or PMSAv7 */ 258 unsigned int mmfr0 = read_cpuid_ext(CPUID_EXT_MMFR0); 259 if ((mmfr0 & 0x0000000f) >= 0x00000003 || 260 (mmfr0 & 0x000000f0) >= 0x00000030) 261 cpu_arch = CPU_ARCH_ARMv7; 262 else if ((mmfr0 & 0x0000000f) == 0x00000002 || 263 (mmfr0 & 0x000000f0) == 0x00000020) 264 cpu_arch = CPU_ARCH_ARMv6; 265 else 266 cpu_arch = CPU_ARCH_UNKNOWN; 267 } else 268 cpu_arch = CPU_ARCH_UNKNOWN; 269 270 return cpu_arch; 271 } 272 #endif 273 274 int __pure cpu_architecture(void) 275 { 276 BUG_ON(__cpu_architecture == CPU_ARCH_UNKNOWN); 277 278 return __cpu_architecture; 279 } 280 281 static int cpu_has_aliasing_icache(unsigned int arch) 282 { 283 int aliasing_icache; 284 unsigned int id_reg, num_sets, line_size; 285 286 /* PIPT caches never alias. */ 287 if (icache_is_pipt()) 288 return 0; 289 290 /* arch specifies the register format */ 291 switch (arch) { 292 case CPU_ARCH_ARMv7: 293 asm("mcr p15, 2, %0, c0, c0, 0 @ set CSSELR" 294 : /* No output operands */ 295 : "r" (1)); 296 isb(); 297 asm("mrc p15, 1, %0, c0, c0, 0 @ read CCSIDR" 298 : "=r" (id_reg)); 299 line_size = 4 << ((id_reg & 0x7) + 2); 300 num_sets = ((id_reg >> 13) & 0x7fff) + 1; 301 aliasing_icache = (line_size * num_sets) > PAGE_SIZE; 302 break; 303 case CPU_ARCH_ARMv6: 304 aliasing_icache = read_cpuid_cachetype() & (1 << 11); 305 break; 306 default: 307 /* I-cache aliases will be handled by D-cache aliasing code */ 308 aliasing_icache = 0; 309 } 310 311 return aliasing_icache; 312 } 313 314 static void __init cacheid_init(void) 315 { 316 unsigned int arch = cpu_architecture(); 317 318 if (arch == CPU_ARCH_ARMv7M) { 319 cacheid = 0; 320 } else if (arch >= CPU_ARCH_ARMv6) { 321 unsigned int cachetype = read_cpuid_cachetype(); 322 if ((cachetype & (7 << 29)) == 4 << 29) { 323 /* ARMv7 register format */ 324 arch = CPU_ARCH_ARMv7; 325 cacheid = CACHEID_VIPT_NONALIASING; 326 switch (cachetype & (3 << 14)) { 327 case (1 << 14): 328 cacheid |= CACHEID_ASID_TAGGED; 329 break; 330 case (3 << 14): 331 cacheid |= CACHEID_PIPT; 332 break; 333 } 334 } else { 335 arch = CPU_ARCH_ARMv6; 336 if (cachetype & (1 << 23)) 337 cacheid = CACHEID_VIPT_ALIASING; 338 else 339 cacheid = CACHEID_VIPT_NONALIASING; 340 } 341 if (cpu_has_aliasing_icache(arch)) 342 cacheid |= CACHEID_VIPT_I_ALIASING; 343 } else { 344 cacheid = CACHEID_VIVT; 345 } 346 347 pr_info("CPU: %s data cache, %s instruction cache\n", 348 cache_is_vivt() ? "VIVT" : 349 cache_is_vipt_aliasing() ? "VIPT aliasing" : 350 cache_is_vipt_nonaliasing() ? "PIPT / VIPT nonaliasing" : "unknown", 351 cache_is_vivt() ? "VIVT" : 352 icache_is_vivt_asid_tagged() ? "VIVT ASID tagged" : 353 icache_is_vipt_aliasing() ? "VIPT aliasing" : 354 icache_is_pipt() ? "PIPT" : 355 cache_is_vipt_nonaliasing() ? "VIPT nonaliasing" : "unknown"); 356 } 357 358 /* 359 * These functions re-use the assembly code in head.S, which 360 * already provide the required functionality. 361 */ 362 extern struct proc_info_list *lookup_processor_type(unsigned int); 363 364 void __init early_print(const char *str, ...) 365 { 366 extern void printascii(const char *); 367 char buf[256]; 368 va_list ap; 369 370 va_start(ap, str); 371 vsnprintf(buf, sizeof(buf), str, ap); 372 va_end(ap); 373 374 #ifdef CONFIG_DEBUG_LL 375 printascii(buf); 376 #endif 377 printk("%s", buf); 378 } 379 380 #ifdef CONFIG_ARM_PATCH_IDIV 381 382 static inline u32 __attribute_const__ sdiv_instruction(void) 383 { 384 if (IS_ENABLED(CONFIG_THUMB2_KERNEL)) { 385 /* "sdiv r0, r0, r1" */ 386 u32 insn = __opcode_thumb32_compose(0xfb90, 0xf0f1); 387 return __opcode_to_mem_thumb32(insn); 388 } 389 390 /* "sdiv r0, r0, r1" */ 391 return __opcode_to_mem_arm(0xe710f110); 392 } 393 394 static inline u32 __attribute_const__ udiv_instruction(void) 395 { 396 if (IS_ENABLED(CONFIG_THUMB2_KERNEL)) { 397 /* "udiv r0, r0, r1" */ 398 u32 insn = __opcode_thumb32_compose(0xfbb0, 0xf0f1); 399 return __opcode_to_mem_thumb32(insn); 400 } 401 402 /* "udiv r0, r0, r1" */ 403 return __opcode_to_mem_arm(0xe730f110); 404 } 405 406 static inline u32 __attribute_const__ bx_lr_instruction(void) 407 { 408 if (IS_ENABLED(CONFIG_THUMB2_KERNEL)) { 409 /* "bx lr; nop" */ 410 u32 insn = __opcode_thumb32_compose(0x4770, 0x46c0); 411 return __opcode_to_mem_thumb32(insn); 412 } 413 414 /* "bx lr" */ 415 return __opcode_to_mem_arm(0xe12fff1e); 416 } 417 418 static void __init patch_aeabi_idiv(void) 419 { 420 extern void __aeabi_uidiv(void); 421 extern void __aeabi_idiv(void); 422 uintptr_t fn_addr; 423 unsigned int mask; 424 425 mask = IS_ENABLED(CONFIG_THUMB2_KERNEL) ? HWCAP_IDIVT : HWCAP_IDIVA; 426 if (!(elf_hwcap & mask)) 427 return; 428 429 pr_info("CPU: div instructions available: patching division code\n"); 430 431 fn_addr = ((uintptr_t)&__aeabi_uidiv) & ~1; 432 asm ("" : "+g" (fn_addr)); 433 ((u32 *)fn_addr)[0] = udiv_instruction(); 434 ((u32 *)fn_addr)[1] = bx_lr_instruction(); 435 flush_icache_range(fn_addr, fn_addr + 8); 436 437 fn_addr = ((uintptr_t)&__aeabi_idiv) & ~1; 438 asm ("" : "+g" (fn_addr)); 439 ((u32 *)fn_addr)[0] = sdiv_instruction(); 440 ((u32 *)fn_addr)[1] = bx_lr_instruction(); 441 flush_icache_range(fn_addr, fn_addr + 8); 442 } 443 444 #else 445 static inline void patch_aeabi_idiv(void) { } 446 #endif 447 448 static void __init cpuid_init_hwcaps(void) 449 { 450 int block; 451 u32 isar5; 452 453 if (cpu_architecture() < CPU_ARCH_ARMv7) 454 return; 455 456 block = cpuid_feature_extract(CPUID_EXT_ISAR0, 24); 457 if (block >= 2) 458 elf_hwcap |= HWCAP_IDIVA; 459 if (block >= 1) 460 elf_hwcap |= HWCAP_IDIVT; 461 462 /* LPAE implies atomic ldrd/strd instructions */ 463 block = cpuid_feature_extract(CPUID_EXT_MMFR0, 0); 464 if (block >= 5) 465 elf_hwcap |= HWCAP_LPAE; 466 467 /* check for supported v8 Crypto instructions */ 468 isar5 = read_cpuid_ext(CPUID_EXT_ISAR5); 469 470 block = cpuid_feature_extract_field(isar5, 4); 471 if (block >= 2) 472 elf_hwcap2 |= HWCAP2_PMULL; 473 if (block >= 1) 474 elf_hwcap2 |= HWCAP2_AES; 475 476 block = cpuid_feature_extract_field(isar5, 8); 477 if (block >= 1) 478 elf_hwcap2 |= HWCAP2_SHA1; 479 480 block = cpuid_feature_extract_field(isar5, 12); 481 if (block >= 1) 482 elf_hwcap2 |= HWCAP2_SHA2; 483 484 block = cpuid_feature_extract_field(isar5, 16); 485 if (block >= 1) 486 elf_hwcap2 |= HWCAP2_CRC32; 487 } 488 489 static void __init elf_hwcap_fixup(void) 490 { 491 unsigned id = read_cpuid_id(); 492 493 /* 494 * HWCAP_TLS is available only on 1136 r1p0 and later, 495 * see also kuser_get_tls_init. 496 */ 497 if (read_cpuid_part() == ARM_CPU_PART_ARM1136 && 498 ((id >> 20) & 3) == 0) { 499 elf_hwcap &= ~HWCAP_TLS; 500 return; 501 } 502 503 /* Verify if CPUID scheme is implemented */ 504 if ((id & 0x000f0000) != 0x000f0000) 505 return; 506 507 /* 508 * If the CPU supports LDREX/STREX and LDREXB/STREXB, 509 * avoid advertising SWP; it may not be atomic with 510 * multiprocessing cores. 511 */ 512 if (cpuid_feature_extract(CPUID_EXT_ISAR3, 12) > 1 || 513 (cpuid_feature_extract(CPUID_EXT_ISAR3, 12) == 1 && 514 cpuid_feature_extract(CPUID_EXT_ISAR4, 20) >= 3)) 515 elf_hwcap &= ~HWCAP_SWP; 516 } 517 518 /* 519 * cpu_init - initialise one CPU. 520 * 521 * cpu_init sets up the per-CPU stacks. 522 */ 523 void notrace cpu_init(void) 524 { 525 #ifndef CONFIG_CPU_V7M 526 unsigned int cpu = smp_processor_id(); 527 struct stack *stk = &stacks[cpu]; 528 529 if (cpu >= NR_CPUS) { 530 pr_crit("CPU%u: bad primary CPU number\n", cpu); 531 BUG(); 532 } 533 534 /* 535 * This only works on resume and secondary cores. For booting on the 536 * boot cpu, smp_prepare_boot_cpu is called after percpu area setup. 537 */ 538 set_my_cpu_offset(per_cpu_offset(cpu)); 539 540 cpu_proc_init(); 541 542 /* 543 * Define the placement constraint for the inline asm directive below. 544 * In Thumb-2, msr with an immediate value is not allowed. 545 */ 546 #ifdef CONFIG_THUMB2_KERNEL 547 #define PLC "r" 548 #else 549 #define PLC "I" 550 #endif 551 552 /* 553 * setup stacks for re-entrant exception handlers 554 */ 555 __asm__ ( 556 "msr cpsr_c, %1\n\t" 557 "add r14, %0, %2\n\t" 558 "mov sp, r14\n\t" 559 "msr cpsr_c, %3\n\t" 560 "add r14, %0, %4\n\t" 561 "mov sp, r14\n\t" 562 "msr cpsr_c, %5\n\t" 563 "add r14, %0, %6\n\t" 564 "mov sp, r14\n\t" 565 "msr cpsr_c, %7\n\t" 566 "add r14, %0, %8\n\t" 567 "mov sp, r14\n\t" 568 "msr cpsr_c, %9" 569 : 570 : "r" (stk), 571 PLC (PSR_F_BIT | PSR_I_BIT | IRQ_MODE), 572 "I" (offsetof(struct stack, irq[0])), 573 PLC (PSR_F_BIT | PSR_I_BIT | ABT_MODE), 574 "I" (offsetof(struct stack, abt[0])), 575 PLC (PSR_F_BIT | PSR_I_BIT | UND_MODE), 576 "I" (offsetof(struct stack, und[0])), 577 PLC (PSR_F_BIT | PSR_I_BIT | FIQ_MODE), 578 "I" (offsetof(struct stack, fiq[0])), 579 PLC (PSR_F_BIT | PSR_I_BIT | SVC_MODE) 580 : "r14"); 581 #endif 582 } 583 584 u32 __cpu_logical_map[NR_CPUS] = { [0 ... NR_CPUS-1] = MPIDR_INVALID }; 585 586 void __init smp_setup_processor_id(void) 587 { 588 int i; 589 u32 mpidr = is_smp() ? read_cpuid_mpidr() & MPIDR_HWID_BITMASK : 0; 590 u32 cpu = MPIDR_AFFINITY_LEVEL(mpidr, 0); 591 592 cpu_logical_map(0) = cpu; 593 for (i = 1; i < nr_cpu_ids; ++i) 594 cpu_logical_map(i) = i == cpu ? 0 : i; 595 596 /* 597 * clear __my_cpu_offset on boot CPU to avoid hang caused by 598 * using percpu variable early, for example, lockdep will 599 * access percpu variable inside lock_release 600 */ 601 set_my_cpu_offset(0); 602 603 pr_info("Booting Linux on physical CPU 0x%x\n", mpidr); 604 } 605 606 struct mpidr_hash mpidr_hash; 607 #ifdef CONFIG_SMP 608 /** 609 * smp_build_mpidr_hash - Pre-compute shifts required at each affinity 610 * level in order to build a linear index from an 611 * MPIDR value. Resulting algorithm is a collision 612 * free hash carried out through shifting and ORing 613 */ 614 static void __init smp_build_mpidr_hash(void) 615 { 616 u32 i, affinity; 617 u32 fs[3], bits[3], ls, mask = 0; 618 /* 619 * Pre-scan the list of MPIDRS and filter out bits that do 620 * not contribute to affinity levels, ie they never toggle. 621 */ 622 for_each_possible_cpu(i) 623 mask |= (cpu_logical_map(i) ^ cpu_logical_map(0)); 624 pr_debug("mask of set bits 0x%x\n", mask); 625 /* 626 * Find and stash the last and first bit set at all affinity levels to 627 * check how many bits are required to represent them. 628 */ 629 for (i = 0; i < 3; i++) { 630 affinity = MPIDR_AFFINITY_LEVEL(mask, i); 631 /* 632 * Find the MSB bit and LSB bits position 633 * to determine how many bits are required 634 * to express the affinity level. 635 */ 636 ls = fls(affinity); 637 fs[i] = affinity ? ffs(affinity) - 1 : 0; 638 bits[i] = ls - fs[i]; 639 } 640 /* 641 * An index can be created from the MPIDR by isolating the 642 * significant bits at each affinity level and by shifting 643 * them in order to compress the 24 bits values space to a 644 * compressed set of values. This is equivalent to hashing 645 * the MPIDR through shifting and ORing. It is a collision free 646 * hash though not minimal since some levels might contain a number 647 * of CPUs that is not an exact power of 2 and their bit 648 * representation might contain holes, eg MPIDR[7:0] = {0x2, 0x80}. 649 */ 650 mpidr_hash.shift_aff[0] = fs[0]; 651 mpidr_hash.shift_aff[1] = MPIDR_LEVEL_BITS + fs[1] - bits[0]; 652 mpidr_hash.shift_aff[2] = 2*MPIDR_LEVEL_BITS + fs[2] - 653 (bits[1] + bits[0]); 654 mpidr_hash.mask = mask; 655 mpidr_hash.bits = bits[2] + bits[1] + bits[0]; 656 pr_debug("MPIDR hash: aff0[%u] aff1[%u] aff2[%u] mask[0x%x] bits[%u]\n", 657 mpidr_hash.shift_aff[0], 658 mpidr_hash.shift_aff[1], 659 mpidr_hash.shift_aff[2], 660 mpidr_hash.mask, 661 mpidr_hash.bits); 662 /* 663 * 4x is an arbitrary value used to warn on a hash table much bigger 664 * than expected on most systems. 665 */ 666 if (mpidr_hash_size() > 4 * num_possible_cpus()) 667 pr_warn("Large number of MPIDR hash buckets detected\n"); 668 sync_cache_w(&mpidr_hash); 669 } 670 #endif 671 672 static void __init setup_processor(void) 673 { 674 struct proc_info_list *list; 675 676 /* 677 * locate processor in the list of supported processor 678 * types. The linker builds this table for us from the 679 * entries in arch/arm/mm/proc-*.S 680 */ 681 list = lookup_processor_type(read_cpuid_id()); 682 if (!list) { 683 pr_err("CPU configuration botched (ID %08x), unable to continue.\n", 684 read_cpuid_id()); 685 while (1); 686 } 687 688 cpu_name = list->cpu_name; 689 __cpu_architecture = __get_cpu_architecture(); 690 691 #ifdef MULTI_CPU 692 processor = *list->proc; 693 #endif 694 #ifdef MULTI_TLB 695 cpu_tlb = *list->tlb; 696 #endif 697 #ifdef MULTI_USER 698 cpu_user = *list->user; 699 #endif 700 #ifdef MULTI_CACHE 701 cpu_cache = *list->cache; 702 #endif 703 704 pr_info("CPU: %s [%08x] revision %d (ARMv%s), cr=%08lx\n", 705 cpu_name, read_cpuid_id(), read_cpuid_id() & 15, 706 proc_arch[cpu_architecture()], get_cr()); 707 708 snprintf(init_utsname()->machine, __NEW_UTS_LEN + 1, "%s%c", 709 list->arch_name, ENDIANNESS); 710 snprintf(elf_platform, ELF_PLATFORM_SIZE, "%s%c", 711 list->elf_name, ENDIANNESS); 712 elf_hwcap = list->elf_hwcap; 713 714 cpuid_init_hwcaps(); 715 patch_aeabi_idiv(); 716 717 #ifndef CONFIG_ARM_THUMB 718 elf_hwcap &= ~(HWCAP_THUMB | HWCAP_IDIVT); 719 #endif 720 #ifdef CONFIG_MMU 721 init_default_cache_policy(list->__cpu_mm_mmu_flags); 722 #endif 723 erratum_a15_798181_init(); 724 725 elf_hwcap_fixup(); 726 727 cacheid_init(); 728 cpu_init(); 729 } 730 731 void __init dump_machine_table(void) 732 { 733 const struct machine_desc *p; 734 735 early_print("Available machine support:\n\nID (hex)\tNAME\n"); 736 for_each_machine_desc(p) 737 early_print("%08x\t%s\n", p->nr, p->name); 738 739 early_print("\nPlease check your kernel config and/or bootloader.\n"); 740 741 while (true) 742 /* can't use cpu_relax() here as it may require MMU setup */; 743 } 744 745 int __init arm_add_memory(u64 start, u64 size) 746 { 747 u64 aligned_start; 748 749 /* 750 * Ensure that start/size are aligned to a page boundary. 751 * Size is rounded down, start is rounded up. 752 */ 753 aligned_start = PAGE_ALIGN(start); 754 if (aligned_start > start + size) 755 size = 0; 756 else 757 size -= aligned_start - start; 758 759 #ifndef CONFIG_ARCH_PHYS_ADDR_T_64BIT 760 if (aligned_start > ULONG_MAX) { 761 pr_crit("Ignoring memory at 0x%08llx outside 32-bit physical address space\n", 762 (long long)start); 763 return -EINVAL; 764 } 765 766 if (aligned_start + size > ULONG_MAX) { 767 pr_crit("Truncating memory at 0x%08llx to fit in 32-bit physical address space\n", 768 (long long)start); 769 /* 770 * To ensure bank->start + bank->size is representable in 771 * 32 bits, we use ULONG_MAX as the upper limit rather than 4GB. 772 * This means we lose a page after masking. 773 */ 774 size = ULONG_MAX - aligned_start; 775 } 776 #endif 777 778 if (aligned_start < PHYS_OFFSET) { 779 if (aligned_start + size <= PHYS_OFFSET) { 780 pr_info("Ignoring memory below PHYS_OFFSET: 0x%08llx-0x%08llx\n", 781 aligned_start, aligned_start + size); 782 return -EINVAL; 783 } 784 785 pr_info("Ignoring memory below PHYS_OFFSET: 0x%08llx-0x%08llx\n", 786 aligned_start, (u64)PHYS_OFFSET); 787 788 size -= PHYS_OFFSET - aligned_start; 789 aligned_start = PHYS_OFFSET; 790 } 791 792 start = aligned_start; 793 size = size & ~(phys_addr_t)(PAGE_SIZE - 1); 794 795 /* 796 * Check whether this memory region has non-zero size or 797 * invalid node number. 798 */ 799 if (size == 0) 800 return -EINVAL; 801 802 memblock_add(start, size); 803 return 0; 804 } 805 806 /* 807 * Pick out the memory size. We look for mem=size@start, 808 * where start and size are "size[KkMm]" 809 */ 810 811 static int __init early_mem(char *p) 812 { 813 static int usermem __initdata = 0; 814 u64 size; 815 u64 start; 816 char *endp; 817 818 /* 819 * If the user specifies memory size, we 820 * blow away any automatically generated 821 * size. 822 */ 823 if (usermem == 0) { 824 usermem = 1; 825 memblock_remove(memblock_start_of_DRAM(), 826 memblock_end_of_DRAM() - memblock_start_of_DRAM()); 827 } 828 829 start = PHYS_OFFSET; 830 size = memparse(p, &endp); 831 if (*endp == '@') 832 start = memparse(endp + 1, NULL); 833 834 arm_add_memory(start, size); 835 836 return 0; 837 } 838 early_param("mem", early_mem); 839 840 static void __init request_standard_resources(const struct machine_desc *mdesc) 841 { 842 struct memblock_region *region; 843 struct resource *res; 844 845 kernel_code.start = virt_to_phys(_text); 846 kernel_code.end = virt_to_phys(_etext - 1); 847 kernel_data.start = virt_to_phys(_sdata); 848 kernel_data.end = virt_to_phys(_end - 1); 849 850 for_each_memblock(memory, region) { 851 res = memblock_virt_alloc(sizeof(*res), 0); 852 res->name = "System RAM"; 853 res->start = __pfn_to_phys(memblock_region_memory_base_pfn(region)); 854 res->end = __pfn_to_phys(memblock_region_memory_end_pfn(region)) - 1; 855 res->flags = IORESOURCE_SYSTEM_RAM | IORESOURCE_BUSY; 856 857 request_resource(&iomem_resource, res); 858 859 if (kernel_code.start >= res->start && 860 kernel_code.end <= res->end) 861 request_resource(res, &kernel_code); 862 if (kernel_data.start >= res->start && 863 kernel_data.end <= res->end) 864 request_resource(res, &kernel_data); 865 } 866 867 if (mdesc->video_start) { 868 video_ram.start = mdesc->video_start; 869 video_ram.end = mdesc->video_end; 870 request_resource(&iomem_resource, &video_ram); 871 } 872 873 /* 874 * Some machines don't have the possibility of ever 875 * possessing lp0, lp1 or lp2 876 */ 877 if (mdesc->reserve_lp0) 878 request_resource(&ioport_resource, &lp0); 879 if (mdesc->reserve_lp1) 880 request_resource(&ioport_resource, &lp1); 881 if (mdesc->reserve_lp2) 882 request_resource(&ioport_resource, &lp2); 883 } 884 885 #if defined(CONFIG_VGA_CONSOLE) || defined(CONFIG_DUMMY_CONSOLE) || \ 886 defined(CONFIG_EFI) 887 struct screen_info screen_info = { 888 .orig_video_lines = 30, 889 .orig_video_cols = 80, 890 .orig_video_mode = 0, 891 .orig_video_ega_bx = 0, 892 .orig_video_isVGA = 1, 893 .orig_video_points = 8 894 }; 895 #endif 896 897 static int __init customize_machine(void) 898 { 899 /* 900 * customizes platform devices, or adds new ones 901 * On DT based machines, we fall back to populating the 902 * machine from the device tree, if no callback is provided, 903 * otherwise we would always need an init_machine callback. 904 */ 905 if (machine_desc->init_machine) 906 machine_desc->init_machine(); 907 908 return 0; 909 } 910 arch_initcall(customize_machine); 911 912 static int __init init_machine_late(void) 913 { 914 struct device_node *root; 915 int ret; 916 917 if (machine_desc->init_late) 918 machine_desc->init_late(); 919 920 root = of_find_node_by_path("/"); 921 if (root) { 922 ret = of_property_read_string(root, "serial-number", 923 &system_serial); 924 if (ret) 925 system_serial = NULL; 926 } 927 928 if (!system_serial) 929 system_serial = kasprintf(GFP_KERNEL, "%08x%08x", 930 system_serial_high, 931 system_serial_low); 932 933 return 0; 934 } 935 late_initcall(init_machine_late); 936 937 #ifdef CONFIG_KEXEC 938 /* 939 * The crash region must be aligned to 128MB to avoid 940 * zImage relocating below the reserved region. 941 */ 942 #define CRASH_ALIGN (128 << 20) 943 944 static inline unsigned long long get_total_mem(void) 945 { 946 unsigned long total; 947 948 total = max_low_pfn - min_low_pfn; 949 return total << PAGE_SHIFT; 950 } 951 952 /** 953 * reserve_crashkernel() - reserves memory are for crash kernel 954 * 955 * This function reserves memory area given in "crashkernel=" kernel command 956 * line parameter. The memory reserved is used by a dump capture kernel when 957 * primary kernel is crashing. 958 */ 959 static void __init reserve_crashkernel(void) 960 { 961 unsigned long long crash_size, crash_base; 962 unsigned long long total_mem; 963 int ret; 964 965 total_mem = get_total_mem(); 966 ret = parse_crashkernel(boot_command_line, total_mem, 967 &crash_size, &crash_base); 968 if (ret) 969 return; 970 971 if (crash_base <= 0) { 972 unsigned long long crash_max = idmap_to_phys((u32)~0); 973 crash_base = memblock_find_in_range(CRASH_ALIGN, crash_max, 974 crash_size, CRASH_ALIGN); 975 if (!crash_base) { 976 pr_err("crashkernel reservation failed - No suitable area found.\n"); 977 return; 978 } 979 } else { 980 unsigned long long start; 981 982 start = memblock_find_in_range(crash_base, 983 crash_base + crash_size, 984 crash_size, SECTION_SIZE); 985 if (start != crash_base) { 986 pr_err("crashkernel reservation failed - memory is in use.\n"); 987 return; 988 } 989 } 990 991 ret = memblock_reserve(crash_base, crash_size); 992 if (ret < 0) { 993 pr_warn("crashkernel reservation failed - memory is in use (0x%lx)\n", 994 (unsigned long)crash_base); 995 return; 996 } 997 998 pr_info("Reserving %ldMB of memory at %ldMB for crashkernel (System RAM: %ldMB)\n", 999 (unsigned long)(crash_size >> 20), 1000 (unsigned long)(crash_base >> 20), 1001 (unsigned long)(total_mem >> 20)); 1002 1003 crashk_res.start = crash_base; 1004 crashk_res.end = crash_base + crash_size - 1; 1005 insert_resource(&iomem_resource, &crashk_res); 1006 } 1007 #else 1008 static inline void reserve_crashkernel(void) {} 1009 #endif /* CONFIG_KEXEC */ 1010 1011 void __init hyp_mode_check(void) 1012 { 1013 #ifdef CONFIG_ARM_VIRT_EXT 1014 sync_boot_mode(); 1015 1016 if (is_hyp_mode_available()) { 1017 pr_info("CPU: All CPU(s) started in HYP mode.\n"); 1018 pr_info("CPU: Virtualization extensions available.\n"); 1019 } else if (is_hyp_mode_mismatched()) { 1020 pr_warn("CPU: WARNING: CPU(s) started in wrong/inconsistent modes (primary CPU mode 0x%x)\n", 1021 __boot_cpu_mode & MODE_MASK); 1022 pr_warn("CPU: This may indicate a broken bootloader or firmware.\n"); 1023 } else 1024 pr_info("CPU: All CPU(s) started in SVC mode.\n"); 1025 #endif 1026 } 1027 1028 void __init setup_arch(char **cmdline_p) 1029 { 1030 const struct machine_desc *mdesc; 1031 1032 setup_processor(); 1033 mdesc = setup_machine_fdt(__atags_pointer); 1034 if (!mdesc) 1035 mdesc = setup_machine_tags(__atags_pointer, __machine_arch_type); 1036 machine_desc = mdesc; 1037 machine_name = mdesc->name; 1038 dump_stack_set_arch_desc("%s", mdesc->name); 1039 1040 if (mdesc->reboot_mode != REBOOT_HARD) 1041 reboot_mode = mdesc->reboot_mode; 1042 1043 init_mm.start_code = (unsigned long) _text; 1044 init_mm.end_code = (unsigned long) _etext; 1045 init_mm.end_data = (unsigned long) _edata; 1046 init_mm.brk = (unsigned long) _end; 1047 1048 /* populate cmd_line too for later use, preserving boot_command_line */ 1049 strlcpy(cmd_line, boot_command_line, COMMAND_LINE_SIZE); 1050 *cmdline_p = cmd_line; 1051 1052 early_fixmap_init(); 1053 early_ioremap_init(); 1054 1055 parse_early_param(); 1056 1057 #ifdef CONFIG_MMU 1058 early_paging_init(mdesc); 1059 #endif 1060 setup_dma_zone(mdesc); 1061 efi_init(); 1062 sanity_check_meminfo(); 1063 arm_memblock_init(mdesc); 1064 1065 early_ioremap_reset(); 1066 1067 paging_init(mdesc); 1068 request_standard_resources(mdesc); 1069 1070 if (mdesc->restart) 1071 arm_pm_restart = mdesc->restart; 1072 1073 unflatten_device_tree(); 1074 1075 arm_dt_init_cpu_maps(); 1076 psci_dt_init(); 1077 xen_early_init(); 1078 #ifdef CONFIG_SMP 1079 if (is_smp()) { 1080 if (!mdesc->smp_init || !mdesc->smp_init()) { 1081 if (psci_smp_available()) 1082 smp_set_ops(&psci_smp_ops); 1083 else if (mdesc->smp) 1084 smp_set_ops(mdesc->smp); 1085 } 1086 smp_init_cpus(); 1087 smp_build_mpidr_hash(); 1088 } 1089 #endif 1090 1091 if (!is_smp()) 1092 hyp_mode_check(); 1093 1094 reserve_crashkernel(); 1095 1096 #ifdef CONFIG_MULTI_IRQ_HANDLER 1097 handle_arch_irq = mdesc->handle_irq; 1098 #endif 1099 1100 #ifdef CONFIG_VT 1101 #if defined(CONFIG_VGA_CONSOLE) 1102 conswitchp = &vga_con; 1103 #elif defined(CONFIG_DUMMY_CONSOLE) 1104 conswitchp = &dummy_con; 1105 #endif 1106 #endif 1107 1108 if (mdesc->init_early) 1109 mdesc->init_early(); 1110 } 1111 1112 1113 static int __init topology_init(void) 1114 { 1115 int cpu; 1116 1117 for_each_possible_cpu(cpu) { 1118 struct cpuinfo_arm *cpuinfo = &per_cpu(cpu_data, cpu); 1119 cpuinfo->cpu.hotpluggable = platform_can_hotplug_cpu(cpu); 1120 register_cpu(&cpuinfo->cpu, cpu); 1121 } 1122 1123 return 0; 1124 } 1125 subsys_initcall(topology_init); 1126 1127 #ifdef CONFIG_HAVE_PROC_CPU 1128 static int __init proc_cpu_init(void) 1129 { 1130 struct proc_dir_entry *res; 1131 1132 res = proc_mkdir("cpu", NULL); 1133 if (!res) 1134 return -ENOMEM; 1135 return 0; 1136 } 1137 fs_initcall(proc_cpu_init); 1138 #endif 1139 1140 static const char *hwcap_str[] = { 1141 "swp", 1142 "half", 1143 "thumb", 1144 "26bit", 1145 "fastmult", 1146 "fpa", 1147 "vfp", 1148 "edsp", 1149 "java", 1150 "iwmmxt", 1151 "crunch", 1152 "thumbee", 1153 "neon", 1154 "vfpv3", 1155 "vfpv3d16", 1156 "tls", 1157 "vfpv4", 1158 "idiva", 1159 "idivt", 1160 "vfpd32", 1161 "lpae", 1162 "evtstrm", 1163 NULL 1164 }; 1165 1166 static const char *hwcap2_str[] = { 1167 "aes", 1168 "pmull", 1169 "sha1", 1170 "sha2", 1171 "crc32", 1172 NULL 1173 }; 1174 1175 static int c_show(struct seq_file *m, void *v) 1176 { 1177 int i, j; 1178 u32 cpuid; 1179 1180 for_each_online_cpu(i) { 1181 /* 1182 * glibc reads /proc/cpuinfo to determine the number of 1183 * online processors, looking for lines beginning with 1184 * "processor". Give glibc what it expects. 1185 */ 1186 seq_printf(m, "processor\t: %d\n", i); 1187 cpuid = is_smp() ? per_cpu(cpu_data, i).cpuid : read_cpuid_id(); 1188 seq_printf(m, "model name\t: %s rev %d (%s)\n", 1189 cpu_name, cpuid & 15, elf_platform); 1190 1191 #if defined(CONFIG_SMP) 1192 seq_printf(m, "BogoMIPS\t: %lu.%02lu\n", 1193 per_cpu(cpu_data, i).loops_per_jiffy / (500000UL/HZ), 1194 (per_cpu(cpu_data, i).loops_per_jiffy / (5000UL/HZ)) % 100); 1195 #else 1196 seq_printf(m, "BogoMIPS\t: %lu.%02lu\n", 1197 loops_per_jiffy / (500000/HZ), 1198 (loops_per_jiffy / (5000/HZ)) % 100); 1199 #endif 1200 /* dump out the processor features */ 1201 seq_puts(m, "Features\t: "); 1202 1203 for (j = 0; hwcap_str[j]; j++) 1204 if (elf_hwcap & (1 << j)) 1205 seq_printf(m, "%s ", hwcap_str[j]); 1206 1207 for (j = 0; hwcap2_str[j]; j++) 1208 if (elf_hwcap2 & (1 << j)) 1209 seq_printf(m, "%s ", hwcap2_str[j]); 1210 1211 seq_printf(m, "\nCPU implementer\t: 0x%02x\n", cpuid >> 24); 1212 seq_printf(m, "CPU architecture: %s\n", 1213 proc_arch[cpu_architecture()]); 1214 1215 if ((cpuid & 0x0008f000) == 0x00000000) { 1216 /* pre-ARM7 */ 1217 seq_printf(m, "CPU part\t: %07x\n", cpuid >> 4); 1218 } else { 1219 if ((cpuid & 0x0008f000) == 0x00007000) { 1220 /* ARM7 */ 1221 seq_printf(m, "CPU variant\t: 0x%02x\n", 1222 (cpuid >> 16) & 127); 1223 } else { 1224 /* post-ARM7 */ 1225 seq_printf(m, "CPU variant\t: 0x%x\n", 1226 (cpuid >> 20) & 15); 1227 } 1228 seq_printf(m, "CPU part\t: 0x%03x\n", 1229 (cpuid >> 4) & 0xfff); 1230 } 1231 seq_printf(m, "CPU revision\t: %d\n\n", cpuid & 15); 1232 } 1233 1234 seq_printf(m, "Hardware\t: %s\n", machine_name); 1235 seq_printf(m, "Revision\t: %04x\n", system_rev); 1236 seq_printf(m, "Serial\t\t: %s\n", system_serial); 1237 1238 return 0; 1239 } 1240 1241 static void *c_start(struct seq_file *m, loff_t *pos) 1242 { 1243 return *pos < 1 ? (void *)1 : NULL; 1244 } 1245 1246 static void *c_next(struct seq_file *m, void *v, loff_t *pos) 1247 { 1248 ++*pos; 1249 return NULL; 1250 } 1251 1252 static void c_stop(struct seq_file *m, void *v) 1253 { 1254 } 1255 1256 const struct seq_operations cpuinfo_op = { 1257 .start = c_start, 1258 .next = c_next, 1259 .stop = c_stop, 1260 .show = c_show 1261 }; 1262