summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/arm/cpu/cpuinfo.c8
-rw-r--r--arch/arm/include/asm/system_info.h8
2 files changed, 16 insertions, 0 deletions
diff --git a/arch/arm/cpu/cpuinfo.c b/arch/arm/cpu/cpuinfo.c
index 86e19d9..175475b 100644
--- a/arch/arm/cpu/cpuinfo.c
+++ b/arch/arm/cpu/cpuinfo.c
@@ -165,6 +165,14 @@ static int do_cpuinfo(int argc, char *argv[])
} else
cpu_arch = CPU_ARCH_UNKNOWN;
+ /*
+ * Special case for ARMv6 (K/Z) (has v7 compatible MMU, but is v6
+ * otherwise). The below check just matches all ARMv6, as done in the
+ * Linux kernel.
+ */
+ if ((mainid & 0x7f000) == 0x7b000)
+ cpu_arch = CPU_ARCH_ARMv6;
+
switch (cpu_arch) {
case CPU_ARCH_ARMv3:
architecture = "v3";
diff --git a/arch/arm/include/asm/system_info.h b/arch/arm/include/asm/system_info.h
index 25fffd2..a27b79e 100644
--- a/arch/arm/include/asm/system_info.h
+++ b/arch/arm/include/asm/system_info.h
@@ -188,6 +188,14 @@ static inline int arm_early_get_cpu_architecture(void)
cpu_arch = CPU_ARCH_UNKNOWN;
#endif
+ /*
+ * Special case for ARMv6 (K/Z) (has v7 compatible MMU, but is v6
+ * otherwise). The below check just matches all ARMv6, as done in the
+ * Linux kernel.
+ */
+ if ((read_cpuid_id() & 0x7f000) == 0x7b000)
+ cpu_arch = CPU_ARCH_ARMv6;
+
return cpu_arch;
}