Speculation Barrier(FEAT_SB) is a feature present in AArch32 state for
Armv8 and is represented by ISAR6.SB identification register.
This feature denotes the presence of SB instruction and hence adding a
hwcap will enable the userspace to check it before trying to use this
instruction.
This commit adds the ID feature bit detection, and uses elf_hwcap2
accordingly.
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Amit Daniel Kachhap <amit.kachhap@arm.com>
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
 #define HWCAP2_SHA1    (1 << 2)
 #define HWCAP2_SHA2    (1 << 3)
 #define HWCAP2_CRC32   (1 << 4)
+#define HWCAP2_SB      (1 << 5)
 
 #endif /* _UAPI__ASMARM_HWCAP_H */
 
 {
        int block;
        u32 isar5;
+       u32 isar6;
 
        if (cpu_architecture() < CPU_ARCH_ARMv7)
                return;
        block = cpuid_feature_extract_field(isar5, 16);
        if (block >= 1)
                elf_hwcap2 |= HWCAP2_CRC32;
+
+       /* Check for Speculation barrier instruction */
+       isar6 = read_cpuid_ext(CPUID_EXT_ISAR6);
+       block = cpuid_feature_extract_field(isar6, 12);
+       if (block >= 1)
+               elf_hwcap2 |= HWCAP2_SB;
 }
 
 static void __init elf_hwcap_fixup(void)
        "sha1",
        "sha2",
        "crc32",
+       "sb",
        NULL
 };