Skip to content

Commit 79d82cb

Browse files
Anshuman Khandualctmarinas
authored andcommitted
arm64/kexec: Test page size support with new TGRAN range values
The commit 26f5538 ("arm64/mm: Fix __enable_mmu() for new TGRAN range values") had already switched into testing ID_AA64MMFR0_TGRAN range values. This just changes system_supports_[4|16|64]kb_granule() helpers to perform similar range tests as well. While here, it standardizes page size specific supported min and max TGRAN values. Cc: Will Deacon <[email protected]> Cc: James Morse <[email protected]> Cc: [email protected] Cc: [email protected] Signed-off-by: Anshuman Khandual <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Catalin Marinas <[email protected]>
1 parent ff11764 commit 79d82cb

File tree

2 files changed

+22
-15
lines changed

2 files changed

+22
-15
lines changed

arch/arm64/include/asm/cpufeature.h

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -657,7 +657,8 @@ static inline bool system_supports_4kb_granule(void)
657657
val = cpuid_feature_extract_unsigned_field(mmfr0,
658658
ID_AA64MMFR0_TGRAN4_SHIFT);
659659

660-
return val == ID_AA64MMFR0_TGRAN4_SUPPORTED;
660+
return (val >= ID_AA64MMFR0_TGRAN4_SUPPORTED_MIN) &&
661+
(val <= ID_AA64MMFR0_TGRAN4_SUPPORTED_MAX);
661662
}
662663

663664
static inline bool system_supports_64kb_granule(void)
@@ -669,7 +670,8 @@ static inline bool system_supports_64kb_granule(void)
669670
val = cpuid_feature_extract_unsigned_field(mmfr0,
670671
ID_AA64MMFR0_TGRAN64_SHIFT);
671672

672-
return val == ID_AA64MMFR0_TGRAN64_SUPPORTED;
673+
return (val >= ID_AA64MMFR0_TGRAN64_SUPPORTED_MIN) &&
674+
(val <= ID_AA64MMFR0_TGRAN64_SUPPORTED_MAX);
673675
}
674676

675677
static inline bool system_supports_16kb_granule(void)
@@ -681,7 +683,8 @@ static inline bool system_supports_16kb_granule(void)
681683
val = cpuid_feature_extract_unsigned_field(mmfr0,
682684
ID_AA64MMFR0_TGRAN16_SHIFT);
683685

684-
return val == ID_AA64MMFR0_TGRAN16_SUPPORTED;
686+
return (val >= ID_AA64MMFR0_TGRAN16_SUPPORTED_MIN) &&
687+
(val <= ID_AA64MMFR0_TGRAN16_SUPPORTED_MAX);
685688
}
686689

687690
static inline bool system_supports_mixed_endian_el0(void)

arch/arm64/include/asm/sysreg.h

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -847,12 +847,16 @@
847847
#define ID_AA64MMFR0_ASID_SHIFT 4
848848
#define ID_AA64MMFR0_PARANGE_SHIFT 0
849849

850-
#define ID_AA64MMFR0_TGRAN4_NI 0xf
851-
#define ID_AA64MMFR0_TGRAN4_SUPPORTED 0x0
852-
#define ID_AA64MMFR0_TGRAN64_NI 0xf
853-
#define ID_AA64MMFR0_TGRAN64_SUPPORTED 0x0
854-
#define ID_AA64MMFR0_TGRAN16_NI 0x0
855-
#define ID_AA64MMFR0_TGRAN16_SUPPORTED 0x1
850+
#define ID_AA64MMFR0_TGRAN4_NI 0xf
851+
#define ID_AA64MMFR0_TGRAN4_SUPPORTED_MIN 0x0
852+
#define ID_AA64MMFR0_TGRAN4_SUPPORTED_MAX 0x7
853+
#define ID_AA64MMFR0_TGRAN64_NI 0xf
854+
#define ID_AA64MMFR0_TGRAN64_SUPPORTED_MIN 0x0
855+
#define ID_AA64MMFR0_TGRAN64_SUPPORTED_MAX 0x7
856+
#define ID_AA64MMFR0_TGRAN16_NI 0x0
857+
#define ID_AA64MMFR0_TGRAN16_SUPPORTED_MIN 0x1
858+
#define ID_AA64MMFR0_TGRAN16_SUPPORTED_MAX 0xf
859+
856860
#define ID_AA64MMFR0_PARANGE_48 0x5
857861
#define ID_AA64MMFR0_PARANGE_52 0x6
858862

@@ -1028,16 +1032,16 @@
10281032

10291033
#if defined(CONFIG_ARM64_4K_PAGES)
10301034
#define ID_AA64MMFR0_TGRAN_SHIFT ID_AA64MMFR0_TGRAN4_SHIFT
1031-
#define ID_AA64MMFR0_TGRAN_SUPPORTED_MIN ID_AA64MMFR0_TGRAN4_SUPPORTED
1032-
#define ID_AA64MMFR0_TGRAN_SUPPORTED_MAX 0x7
1035+
#define ID_AA64MMFR0_TGRAN_SUPPORTED_MIN ID_AA64MMFR0_TGRAN4_SUPPORTED_MIN
1036+
#define ID_AA64MMFR0_TGRAN_SUPPORTED_MAX ID_AA64MMFR0_TGRAN4_SUPPORTED_MAX
10331037
#elif defined(CONFIG_ARM64_16K_PAGES)
10341038
#define ID_AA64MMFR0_TGRAN_SHIFT ID_AA64MMFR0_TGRAN16_SHIFT
1035-
#define ID_AA64MMFR0_TGRAN_SUPPORTED_MIN ID_AA64MMFR0_TGRAN16_SUPPORTED
1036-
#define ID_AA64MMFR0_TGRAN_SUPPORTED_MAX 0xF
1039+
#define ID_AA64MMFR0_TGRAN_SUPPORTED_MIN ID_AA64MMFR0_TGRAN16_SUPPORTED_MIN
1040+
#define ID_AA64MMFR0_TGRAN_SUPPORTED_MAX ID_AA64MMFR0_TGRAN16_SUPPORTED_MAX
10371041
#elif defined(CONFIG_ARM64_64K_PAGES)
10381042
#define ID_AA64MMFR0_TGRAN_SHIFT ID_AA64MMFR0_TGRAN64_SHIFT
1039-
#define ID_AA64MMFR0_TGRAN_SUPPORTED_MIN ID_AA64MMFR0_TGRAN64_SUPPORTED
1040-
#define ID_AA64MMFR0_TGRAN_SUPPORTED_MAX 0x7
1043+
#define ID_AA64MMFR0_TGRAN_SUPPORTED_MIN ID_AA64MMFR0_TGRAN64_SUPPORTED_MIN
1044+
#define ID_AA64MMFR0_TGRAN_SUPPORTED_MAX ID_AA64MMFR0_TGRAN64_SUPPORTED_MAX
10411045
#endif
10421046

10431047
#define MVFR2_FPMISC_SHIFT 4

0 commit comments

Comments
 (0)