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