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 14e260e2d6d0c30c2614be1f49ab1ac211308d81..46833c668ec2f83b9c5cbb50fcda2f967392e0c7 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 070067cb6c77a4202f35945918602dcbc8ef9644..5807fa0217853e0f4d2bb14a9e68e25936286212 100644 (file)
@@ -1254,6 +1254,7 @@ static const char *hwcap_str[] = {
        "asimddp",
        "asimdfhm",
        "asimdbf16",
+       "i8mm",
        NULL
 };
 
index ff574cb8a0b9200f6e5b8b418b1eecdd2dbd019c..281110423871caef60ccb9877a9447e7c9877880 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 {