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