aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMark Rutland <mark.rutland@arm.com>2015-03-13 12:14:37 -0400
committerWill Deacon <will.deacon@arm.com>2015-03-17 12:59:15 -0400
commit667f3fd3950c123fd62d3b15d9db80926e75f1f0 (patch)
tree77f5c7f935b06e5bfa0df3c907f0adc352c61bbc
parent424a383824faecce246691694fd5546859dac511 (diff)
arm64: log CPU boot modes
We currently don't log the boot mode for arm64 as we do for arm, and without KVM the user is provided with no indication as to which mode(s) CPUs were booted in, which can seriously hinder debugging in some cases. Add logging to the boot path once all CPUs are up. Where CPUs are mismatched in violation of the boot protocol, WARN and set a taint (as we do for CPU other CPU feature mismatches) given that the firmware/bootloader is buggy and should be fixed. Cc: Catalin Marinas <catalin.marinas@arm.com> Cc: Marc Zyngier <marc.zyngier@arm.com> Tested-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> Reviewed-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> Signed-off-by: Mark Rutland <mark.rutland@arm.com> Signed-off-by: Will Deacon <will.deacon@arm.com>
-rw-r--r--arch/arm64/kernel/setup.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/arch/arm64/kernel/setup.c b/arch/arm64/kernel/setup.c
index 781f4697dc26..14808947bf46 100644
--- a/arch/arm64/kernel/setup.c
+++ b/arch/arm64/kernel/setup.c
@@ -62,6 +62,7 @@
62#include <asm/memblock.h> 62#include <asm/memblock.h>
63#include <asm/psci.h> 63#include <asm/psci.h>
64#include <asm/efi.h> 64#include <asm/efi.h>
65#include <asm/virt.h>
65 66
66unsigned int processor_id; 67unsigned int processor_id;
67EXPORT_SYMBOL(processor_id); 68EXPORT_SYMBOL(processor_id);
@@ -207,8 +208,20 @@ static void __init smp_build_mpidr_hash(void)
207} 208}
208#endif 209#endif
209 210
211static void __init hyp_mode_check(void)
212{
213 if (is_hyp_mode_available())
214 pr_info("CPU: All CPU(s) started at EL2\n");
215 else if (is_hyp_mode_mismatched())
216 WARN_TAINT(1, TAINT_CPU_OUT_OF_SPEC,
217 "CPU: CPUs started in inconsistent modes");
218 else
219 pr_info("CPU: All CPU(s) started at EL1\n");
220}
221
210void __init do_post_cpus_up_work(void) 222void __init do_post_cpus_up_work(void)
211{ 223{
224 hyp_mode_check();
212 apply_alternatives_all(); 225 apply_alternatives_all();
213} 226}
214 227