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