ARM: 9271/1: vfp: Add hwcap for FEAT_AA32BF16
authorAmit Daniel Kachhap <amit.kachhap@arm.com>
Thu, 17 Nov 2022 05:42:07 +0000 (06:42 +0100)
committerRussell King (Oracle) <rmk+kernel@armlinux.org.uk>
Mon, 28 Nov 2022 11:57:33 +0000 (11:57 +0000)
Advanced SIMD BFloat16 (FEAT_AA32BF16) is a feature present in AArch32
state for Armv8 and is represented by ISAR6.BF16 identification
register.

This feature denotes the presence of VCVT, VCVTB, VCVTT, VDOT, VFMAB,
VFMAT and VMMLA instructions and hence adding a hwcap will enable the
userspace to check it before trying to use those instructions.

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>
arch/arm/include/uapi/asm/hwcap.h
arch/arm/kernel/setup.c
arch/arm/vfp/vfpmodule.c

index 3d168d4f2a51e48fceb9b72b7fd10fc406062a19..14e260e2d6d0c30c2614be1f49ab1ac211308d81 100644 (file)
@@ -32,6 +32,7 @@
 #define HWCAP_ASIMDHP  (1 << 23)
 #define HWCAP_ASIMDDP  (1 << 24)
 #define HWCAP_ASIMDFHM (1 << 25)
+#define HWCAP_ASIMDBF16        (1 << 26)
 
 /*
  * HWCAP2 flags - for elf_hwcap2 (in kernel) and AT_HWCAP2
index d88c1326f529a98eca63b5c3a0891dc07423fb9e..070067cb6c77a4202f35945918602dcbc8ef9644 100644 (file)
@@ -1253,6 +1253,7 @@ static const char *hwcap_str[] = {
        "asimdhp",
        "asimddp",
        "asimdfhm",
+       "asimdbf16",
        NULL
 };
 
index 404c4f9011329300038c499f22f7ce50e0e169d8..ff574cb8a0b9200f6e5b8b418b1eecdd2dbd019c 100644 (file)
@@ -851,6 +851,12 @@ static int __init vfp_init(void)
                 */
                if (cpuid_feature_extract_field(isar6, 8) == 0x1)
                        elf_hwcap |= HWCAP_ASIMDFHM;
+               /*
+                * Check for the presence of Advanced SIMD Bfloat16
+                * floating point instructions.
+                */
+               if (cpuid_feature_extract_field(isar6, 20) == 0x1)
+                       elf_hwcap |= HWCAP_ASIMDBF16;
 
        /* Extract the architecture version on pre-cpuid scheme */
        } else {