|
@@ -55,6 +55,7 @@
|
|
|
#include <asm/traps.h>
|
|
|
#include <asm/unwind.h>
|
|
|
#include <asm/memblock.h>
|
|
|
+#include <asm/virt.h>
|
|
|
|
|
|
#if defined(CONFIG_DEPRECATED_PARAM_STRUCT)
|
|
|
#include "compat.h"
|
|
@@ -937,6 +938,21 @@ static int __init meminfo_cmp(const void *_a, const void *_b)
|
|
|
return cmp < 0 ? -1 : cmp > 0 ? 1 : 0;
|
|
|
}
|
|
|
|
|
|
+void __init hyp_mode_check(void)
|
|
|
+{
|
|
|
+#ifdef CONFIG_ARM_VIRT_EXT
|
|
|
+ if (is_hyp_mode_available()) {
|
|
|
+ pr_info("CPU: All CPU(s) started in HYP mode.\n");
|
|
|
+ pr_info("CPU: Virtualization extensions available.\n");
|
|
|
+ } else if (is_hyp_mode_mismatched()) {
|
|
|
+ pr_warn("CPU: WARNING: CPU(s) started in wrong/inconsistent modes (primary CPU mode 0x%x)\n",
|
|
|
+ __boot_cpu_mode & MODE_MASK);
|
|
|
+ pr_warn("CPU: This may indicate a broken bootloader or firmware.\n");
|
|
|
+ } else
|
|
|
+ pr_info("CPU: All CPU(s) started in SVC mode.\n");
|
|
|
+#endif
|
|
|
+}
|
|
|
+
|
|
|
void __init setup_arch(char **cmdline_p)
|
|
|
{
|
|
|
struct machine_desc *mdesc;
|
|
@@ -980,6 +996,10 @@ void __init setup_arch(char **cmdline_p)
|
|
|
if (is_smp())
|
|
|
smp_init_cpus();
|
|
|
#endif
|
|
|
+
|
|
|
+ if (!is_smp())
|
|
|
+ hyp_mode_check();
|
|
|
+
|
|
|
reserve_crashkernel();
|
|
|
|
|
|
tcm_init();
|