mirror of
https://github.com/hardkernel/linux.git
synced 2026-03-26 12:30:23 +09:00
UPSTREAM: ARM: 9269/1: vfp: Add hwcap for FEAT_DotProd
Advanced Dot product is a feature present in AArch32 state for Armv8 and
is represented by ISAR6 identification register.
This feature denotes the presence of UDOT and SDOT 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>
Bug: 282663915
(cherry picked from commit 62ea0d873a)
Change-Id: I27cd1e060ec48ec3302c23b566ef9f50f7dc384e
Signed-off-by: Mark-PK Tsai <mark-pk.tsai@mediatek.com>
This commit is contained in:
committed by
Todd Kjos
parent
49c6c1e40f
commit
33d2a21b81
@@ -30,6 +30,7 @@
|
||||
#define HWCAP_EVTSTRM (1 << 21)
|
||||
#define HWCAP_FPHP (1 << 22)
|
||||
#define HWCAP_ASIMDHP (1 << 23)
|
||||
#define HWCAP_ASIMDDP (1 << 24)
|
||||
|
||||
/*
|
||||
* HWCAP2 flags - for elf_hwcap2 (in kernel) and AT_HWCAP2
|
||||
|
||||
@@ -1250,6 +1250,7 @@ static const char *hwcap_str[] = {
|
||||
"evtstrm",
|
||||
"fphp",
|
||||
"asimdhp",
|
||||
"asimddp",
|
||||
NULL
|
||||
};
|
||||
|
||||
|
||||
@@ -774,6 +774,7 @@ static int __init vfp_init(void)
|
||||
{
|
||||
unsigned int vfpsid;
|
||||
unsigned int cpu_arch = cpu_architecture();
|
||||
unsigned int isar6;
|
||||
|
||||
/*
|
||||
* Enable the access to the VFP on all online CPUs so the
|
||||
@@ -836,6 +837,15 @@ static int __init vfp_init(void)
|
||||
if (((fmrx(MVFR1) & MVFR1_FPHP_MASK) >> MVFR1_FPHP_BIT) == 0x3)
|
||||
elf_hwcap |= HWCAP_FPHP;
|
||||
}
|
||||
|
||||
/*
|
||||
* Check for the presence of Advanced SIMD Dot Product
|
||||
* instructions.
|
||||
*/
|
||||
isar6 = read_cpuid_ext(CPUID_EXT_ISAR6);
|
||||
if (cpuid_feature_extract_field(isar6, 4) == 0x1)
|
||||
elf_hwcap |= HWCAP_ASIMDDP;
|
||||
|
||||
/* Extract the architecture version on pre-cpuid scheme */
|
||||
} else {
|
||||
if (vfpsid & FPSID_NODOUBLE) {
|
||||
|
||||
Reference in New Issue
Block a user