|
@@ -355,7 +355,7 @@ void __init early_print(const char *str, ...)
|
|
|
|
|
|
static void __init cpuid_init_hwcaps(void)
|
|
|
{
|
|
|
- unsigned int divide_instrs;
|
|
|
+ unsigned int divide_instrs, vmsa;
|
|
|
|
|
|
if (cpu_architecture() < CPU_ARCH_ARMv7)
|
|
|
return;
|
|
@@ -368,6 +368,11 @@ static void __init cpuid_init_hwcaps(void)
|
|
|
case 1:
|
|
|
elf_hwcap |= HWCAP_IDIVT;
|
|
|
}
|
|
|
+
|
|
|
+ /* LPAE implies atomic ldrd/strd instructions */
|
|
|
+ vmsa = (read_cpuid_ext(CPUID_EXT_MMFR0) & 0xf) >> 0;
|
|
|
+ if (vmsa >= 5)
|
|
|
+ elf_hwcap |= HWCAP_LPAE;
|
|
|
}
|
|
|
|
|
|
static void __init feat_v6_fixup(void)
|
|
@@ -872,6 +877,7 @@ static const char *hwcap_str[] = {
|
|
|
"vfpv4",
|
|
|
"idiva",
|
|
|
"idivt",
|
|
|
+ "lpae",
|
|
|
NULL
|
|
|
};
|
|
|
|