aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm64/include/asm/cache.h
diff options
context:
space:
mode:
authorMark Brown <broonie@kernel.org>2022-08-18 22:36:13 +0100
committerWill Deacon <will@kernel.org>2022-08-23 11:26:01 +0100
commit53d2d84a1f6d68e036adab71df8e0f37cd2724f6 (patch)
treeb05ac940956fbe1673ce34f5c55bc75d9ff67e39 /arch/arm64/include/asm/cache.h
parentarm64/sysreg: Guard SYS_FIELD_ macros for asm (diff)
downloadlinux-dev-53d2d84a1f6d68e036adab71df8e0f37cd2724f6.tar.xz
linux-dev-53d2d84a1f6d68e036adab71df8e0f37cd2724f6.zip
arm64/cache: Fix cache_type_cwg() for register generation
Ard noticed that since we converted CTR_EL0 to automatic generation we have been seeing errors on some systems handling the value of cache_type_cwg() such as CPU features: No Cache Writeback Granule information, assuming 128 This is because the manual definition of CTR_EL0_CWG_MASK was done without a shift while our convention is to define the mask after shifting. This means that the user in cache_type_cwg() was broken as it was written for the manually written shift then mask. Fix this by converting to use SYS_FIELD_GET(). The only other field where the _MASK for this register is used is IminLine which is at offset 0 so unaffected. Fixes: 9a3634d02301 ("arm64/sysreg: Convert CTR_EL0 to automatic generation") Reported-by: Ard Biesheuvel <ardb@kernel.org> Signed-off-by: Mark Brown <broonie@kernel.org> Link: https://lore.kernel.org/r/20220818213613.733091-4-broonie@kernel.org Signed-off-by: Will Deacon <will@kernel.org>
Diffstat (limited to '')
-rw-r--r--arch/arm64/include/asm/cache.h2
1 files changed, 1 insertions, 1 deletions
diff --git a/arch/arm64/include/asm/cache.h b/arch/arm64/include/asm/cache.h
index ca9b487112cc..34256bda0da9 100644
--- a/arch/arm64/include/asm/cache.h
+++ b/arch/arm64/include/asm/cache.h
@@ -71,7 +71,7 @@ static __always_inline int icache_is_vpipt(void)
static inline u32 cache_type_cwg(void)
{
- return (read_cpuid_cachetype() >> CTR_EL0_CWG_SHIFT) & CTR_EL0_CWG_MASK;
+ return SYS_FIELD_GET(CTR_EL0, CWG, read_cpuid_cachetype());
}
#define __read_mostly __section(".data..read_mostly")