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