ARM: 9272/1: vfp: Add hwcap for FEAT_AA32I8MM
authorAmit Daniel Kachhap <amit.kachhap@arm.com>
Thu, 17 Nov 2022 05:58:31 +0000 (06:58 +0100)
committerRussell King (Oracle) <rmk+kernel@armlinux.org.uk>
Mon, 28 Nov 2022 11:57:34 +0000 (11:57 +0000)
Int8 matrix multiplication (FEAT_AA32I8MM) is a feature present in AArch32 state for Armv8 and is represented by ISAR6.I8MM identification register.

This feature denotes the presence of VSMMLA, VSUDOT, VUMMLA, VUSMMLA and
VUSDOT 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 14e260e..46833c6 100644 (file)
@@ -33,6 +33,7 @@
 #define HWCAP_ASIMDDP  (1 << 24)
 #define HWCAP_ASIMDFHM (1 << 25)
 #define HWCAP_ASIMDBF16        (1 << 26)
+#define HWCAP_I8MM     (1 << 27)
 
 /*
  * HWCAP2 flags - for elf_hwcap2 (in kernel) and AT_HWCAP2
index 070067c..5807fa0 100644 (file)
@@ -1254,6 +1254,7 @@ static const char *hwcap_str[] = {
        "asimddp",
        "asimdfhm",
        "asimdbf16",
+       "i8mm",
        NULL
 };
 
index ff574cb..2811104 100644 (file)
@@ -857,6 +857,12 @@ static int __init vfp_init(void)
                 */
                if (cpuid_feature_extract_field(isar6, 20) == 0x1)
                        elf_hwcap |= HWCAP_ASIMDBF16;
+               /*
+                * Check for the presence of Advanced SIMD and floating point
+                * Int8 matrix multiplication instructions instructions.
+                */
+               if (cpuid_feature_extract_field(isar6, 24) == 0x1)
+                       elf_hwcap |= HWCAP_I8MM;
 
        /* Extract the architecture version on pre-cpuid scheme */
        } else {