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