Commit 80708677 authored by Mark Rutland's avatar Mark Rutland Committed by Will Deacon

arm64: log physical ID of boot CPU

In certain debugging scenarios it's useful to know the physical ID (i.e.
the MPIDR_EL1.Aff* fields) of the boot CPU, but we don't currently log
this as we do for 32-bit ARM kernels.

This patch makes the kernel log the physical ID of the boot CPU early in
the boot process. The CPU logical map initialisation is folded in to
smp_setup_processor_id (which contrary to its name is also called by UP
kernels). This is called before setup_arch, so should not adversely
affect existing cpu_logical_map users.
Acked-by: default avatarSudeep Holla <sudeep.holla@arm.com>
Acked-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
Acked-by: default avatarLorenzo Pieralisis <lorenzo.pieralisi@arm.com>
Signed-off-by: default avatarMark Rutland <mark.rutland@arm.com>
Signed-off-by: default avatarWill Deacon <will.deacon@arm.com>
parent 12ac3efe
...@@ -116,12 +116,16 @@ void __init early_print(const char *str, ...) ...@@ -116,12 +116,16 @@ void __init early_print(const char *str, ...)
void __init smp_setup_processor_id(void) void __init smp_setup_processor_id(void)
{ {
u64 mpidr = read_cpuid_mpidr() & MPIDR_HWID_BITMASK;
cpu_logical_map(0) = mpidr;
/* /*
* clear __my_cpu_offset on boot CPU to avoid hang caused by * clear __my_cpu_offset on boot CPU to avoid hang caused by
* using percpu variable early, for example, lockdep will * using percpu variable early, for example, lockdep will
* access percpu variable inside lock_release * access percpu variable inside lock_release
*/ */
set_my_cpu_offset(0); set_my_cpu_offset(0);
pr_info("Booting Linux on physical CPU 0x%lx\n", (unsigned long)mpidr);
} }
bool arch_match_cpu_phys_id(int cpu, u64 phys_id) bool arch_match_cpu_phys_id(int cpu, u64 phys_id)
...@@ -399,7 +403,6 @@ void __init setup_arch(char **cmdline_p) ...@@ -399,7 +403,6 @@ void __init setup_arch(char **cmdline_p)
psci_init(); psci_init();
cpu_logical_map(0) = read_cpuid_mpidr() & MPIDR_HWID_BITMASK;
cpu_read_bootcpu_ops(); cpu_read_bootcpu_ops();
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
smp_init_cpus(); smp_init_cpus();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment