Commit a469abd0 authored by Will Deacon's avatar Will Deacon

ARM: elf: add new hwcap for identifying atomic ldrd/strd instructions

CPUs implementing LPAE have atomic ldrd/strd instructions, meaning that
userspace software can avoid having to use the exclusive variants of
these instructions if they wish.

This patch advertises the atomicity of these instructions via the
hwcaps, so userspace can detect this CPU feature.
Reported-by: default avatarVladimir Danushevsky <vladimir.danushevsky@oracle.com>
Signed-off-by: default avatarWill Deacon <will.deacon@arm.com>
parent e38a5175
...@@ -25,6 +25,6 @@ ...@@ -25,6 +25,6 @@
#define HWCAP_IDIVT (1 << 18) #define HWCAP_IDIVT (1 << 18)
#define HWCAP_VFPD32 (1 << 19) /* set if VFP has 32 regs (not 16) */ #define HWCAP_VFPD32 (1 << 19) /* set if VFP has 32 regs (not 16) */
#define HWCAP_IDIV (HWCAP_IDIVA | HWCAP_IDIVT) #define HWCAP_IDIV (HWCAP_IDIVA | HWCAP_IDIVT)
#define HWCAP_LPAE (1 << 20)
#endif /* _UAPI__ASMARM_HWCAP_H */ #endif /* _UAPI__ASMARM_HWCAP_H */
...@@ -355,7 +355,7 @@ void __init early_print(const char *str, ...) ...@@ -355,7 +355,7 @@ void __init early_print(const char *str, ...)
static void __init cpuid_init_hwcaps(void) static void __init cpuid_init_hwcaps(void)
{ {
unsigned int divide_instrs; unsigned int divide_instrs, vmsa;
if (cpu_architecture() < CPU_ARCH_ARMv7) if (cpu_architecture() < CPU_ARCH_ARMv7)
return; return;
...@@ -368,6 +368,11 @@ static void __init cpuid_init_hwcaps(void) ...@@ -368,6 +368,11 @@ static void __init cpuid_init_hwcaps(void)
case 1: case 1:
elf_hwcap |= HWCAP_IDIVT; 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) static void __init feat_v6_fixup(void)
...@@ -872,6 +877,7 @@ static const char *hwcap_str[] = { ...@@ -872,6 +877,7 @@ static const char *hwcap_str[] = {
"vfpv4", "vfpv4",
"idiva", "idiva",
"idivt", "idivt",
"lpae",
NULL NULL
}; };
......
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