* [PATCH 0/2] Disable 32-bit EL0 for Apple A10(X), T2
@ 2024-09-06 16:59 Nick Chan
2024-09-06 16:59 ` [PATCH 1/2] arm64: cputype: Add CPU types for A7-A11, T2 SoCs Nick Chan
2024-09-06 16:59 ` [PATCH 2/2] arm64: cpufeature: Pretend that Apple A10(X), T2 does not support 32-bit EL0 Nick Chan
0 siblings, 2 replies; 3+ messages in thread
From: Nick Chan @ 2024-09-06 16:59 UTC (permalink / raw)
To: Catalin Marinas, Will Deacon, linux-arm-kernel, linux-kernel
Cc: asahi, ~postmarketos/upstreaming, Nick Chan
Hi,
Apple's A10(X), T2 SoCs consists of pairs of performance and efficiency
cores. However, only one of the core types may be active at a given time,
and to software, it appears as logical cores that could switch between
P-mode and E-mode, depending on the p-state.
Unforunately, only the performance cores can execute 32-bit EL0. To
software, this results in logical cores that lose ability to execute
32-bit EL0 when the p-state is below a certain value.
Since these CPU cores only supported 16K pages, many AArch32
executables will not run anyways. This series disables 32-bit EL0 for
these SoCs.
Nick Chan
---
Nick Chan (2):
arm64: cputype: Add CPU types for A7-A11, T2 SoCs
arm64: cpufeature: Pretend that Apple A10(X), T2 does not support
32-bit EL0
arch/arm64/include/asm/cputype.h | 42 +++++++++++++++++++++++---------
arch/arm64/kernel/cpufeature.c | 25 +++++++++++++++++++
2 files changed, 55 insertions(+), 12 deletions(-)
base-commit: 9aaeb87ce1e966169a57f53a02ba05b30880ffb8
--
2.46.0
^ permalink raw reply [flat|nested] 3+ messages in thread* [PATCH 1/2] arm64: cputype: Add CPU types for A7-A11, T2 SoCs
2024-09-06 16:59 [PATCH 0/2] Disable 32-bit EL0 for Apple A10(X), T2 Nick Chan
@ 2024-09-06 16:59 ` Nick Chan
2024-09-06 16:59 ` [PATCH 2/2] arm64: cpufeature: Pretend that Apple A10(X), T2 does not support 32-bit EL0 Nick Chan
1 sibling, 0 replies; 3+ messages in thread
From: Nick Chan @ 2024-09-06 16:59 UTC (permalink / raw)
To: Catalin Marinas, Will Deacon, linux-arm-kernel, linux-kernel
Cc: asahi, ~postmarketos/upstreaming, Nick Chan
A10(X), T2 types will be used soon, and the rest are added for
documentation purposes.
The A9 is made in two different fabs and those have different part
numbers, and the TSMC cores are also used in A9X, so it cannot use
the usual naming scheme.
The A10(X), T2 performance/efficiency core pairs appears as single
logical cores to software, so both the performance and efficiency
core codenames needs to be included.
Signed-off-by: Nick Chan <towinchenmi@gmail.com>
---
arch/arm64/include/asm/cputype.h | 42 +++++++++++++++++++++++---------
1 file changed, 30 insertions(+), 12 deletions(-)
diff --git a/arch/arm64/include/asm/cputype.h b/arch/arm64/include/asm/cputype.h
index 5a7dfeb8e8eb..f1720158a54f 100644
--- a/arch/arm64/include/asm/cputype.h
+++ b/arch/arm64/include/asm/cputype.h
@@ -129,18 +129,27 @@
#define HISI_CPU_PART_TSV110 0xD01
-#define APPLE_CPU_PART_M1_ICESTORM 0x022
-#define APPLE_CPU_PART_M1_FIRESTORM 0x023
-#define APPLE_CPU_PART_M1_ICESTORM_PRO 0x024
-#define APPLE_CPU_PART_M1_FIRESTORM_PRO 0x025
-#define APPLE_CPU_PART_M1_ICESTORM_MAX 0x028
-#define APPLE_CPU_PART_M1_FIRESTORM_MAX 0x029
-#define APPLE_CPU_PART_M2_BLIZZARD 0x032
-#define APPLE_CPU_PART_M2_AVALANCHE 0x033
-#define APPLE_CPU_PART_M2_BLIZZARD_PRO 0x034
-#define APPLE_CPU_PART_M2_AVALANCHE_PRO 0x035
-#define APPLE_CPU_PART_M2_BLIZZARD_MAX 0x038
-#define APPLE_CPU_PART_M2_AVALANCHE_MAX 0x039
+#define APPLE_CPU_PART_A7_CYCLONE 0x1
+#define APPLE_CPU_PART_A8_TYPHOON 0x2
+#define APPLE_CPU_PART_A8X_TYPHOON 0x3
+#define APPLE_CPU_PART_SAMSUNG_TWISTER 0x4 /* Used in Samsung A9 */
+#define APPLE_CPU_PART_TSMC_TWISTER 0x5 /* Used in TSMC A9 and A9X */
+#define APPLE_CPU_PART_A10_T2_HURRICANE_ZEPHYR 0x6
+#define APPLE_CPU_PART_A10X_HURRICANE_ZEPHYR 0x7
+#define APPLE_CPU_PART_A11_MONSOON 0x8
+#define APPLE_CPU_PART_A11_MISTRAL 0x9
+#define APPLE_CPU_PART_M1_ICESTORM 0x022
+#define APPLE_CPU_PART_M1_FIRESTORM 0x023
+#define APPLE_CPU_PART_M1_ICESTORM_PRO 0x024
+#define APPLE_CPU_PART_M1_FIRESTORM_PRO 0x025
+#define APPLE_CPU_PART_M1_ICESTORM_MAX 0x028
+#define APPLE_CPU_PART_M1_FIRESTORM_MAX 0x029
+#define APPLE_CPU_PART_M2_BLIZZARD 0x032
+#define APPLE_CPU_PART_M2_AVALANCHE 0x033
+#define APPLE_CPU_PART_M2_BLIZZARD_PRO 0x034
+#define APPLE_CPU_PART_M2_AVALANCHE_PRO 0x035
+#define APPLE_CPU_PART_M2_BLIZZARD_MAX 0x038
+#define APPLE_CPU_PART_M2_AVALANCHE_MAX 0x039
#define AMPERE_CPU_PART_AMPERE1 0xAC3
#define AMPERE_CPU_PART_AMPERE1A 0xAC4
@@ -200,6 +209,15 @@
#define MIDR_NVIDIA_CARMEL MIDR_CPU_MODEL(ARM_CPU_IMP_NVIDIA, NVIDIA_CPU_PART_CARMEL)
#define MIDR_FUJITSU_A64FX MIDR_CPU_MODEL(ARM_CPU_IMP_FUJITSU, FUJITSU_CPU_PART_A64FX)
#define MIDR_HISI_TSV110 MIDR_CPU_MODEL(ARM_CPU_IMP_HISI, HISI_CPU_PART_TSV110)
+#define MIDR_APPLE_A7_CYCLONE MIDR_CPU_MODEL(ARM_CPU_IMP_APPLE, APPLE_CPU_PART_A7_CYCLONE)
+#define MIDR_APPLE_A8_TYPHOON MIDR_CPU_MODEL(ARM_CPU_IMP_APPLE, APPLE_CPU_PART_A8_TYPHOON)
+#define MIDR_APPLE_A8X_TYPHOON MIDR_CPU_MODEL(ARM_CPU_IMP_APPLE, APPLE_CPU_PART_A8X_TYPHOON)
+#define MIDR_APPLE_SAMSUNG_TWISTER MIDR_CPU_MODEL(ARM_CPU_IMP_APPLE, APPLE_CPU_PART_SAMSUNG_TWISTER)
+#define MIDR_APPLE_TSMC_TWISTER MIDR_CPU_MODEL(ARM_CPU_IMP_APPLE, APPLE_CPU_PART_TSMC_TWISTER)
+#define MIDR_APPLE_A10_T2_HURRICANE_ZEPHYR MIDR_CPU_MODEL(ARM_CPU_IMP_APPLE, APPLE_CPU_PART_A10_T2_HURRICANE_ZEPHYR)
+#define MIDR_APPLE_A10X_HURRICANE_ZEPHYR MIDR_CPU_MODEL(ARM_CPU_IMP_APPLE, APPLE_CPU_PART_A10X_HURRICANE_ZEPHYR)
+#define MIDR_APPLE_A11_MONSOON MIDR_CPU_MODEL(ARM_CPU_IMP_APPLE, APPLE_CPU_PART_A11_MONSOON)
+#define MIDR_APPLE_A11_MISTRAL MIDR_CPU_MODEL(ARM_CPU_IMP_APPLE, APPLE_CPU_PART_A11_MISTRAL)
#define MIDR_APPLE_M1_ICESTORM MIDR_CPU_MODEL(ARM_CPU_IMP_APPLE, APPLE_CPU_PART_M1_ICESTORM)
#define MIDR_APPLE_M1_FIRESTORM MIDR_CPU_MODEL(ARM_CPU_IMP_APPLE, APPLE_CPU_PART_M1_FIRESTORM)
#define MIDR_APPLE_M1_ICESTORM_PRO MIDR_CPU_MODEL(ARM_CPU_IMP_APPLE, APPLE_CPU_PART_M1_ICESTORM_PRO)
--
2.46.0
^ permalink raw reply [flat|nested] 3+ messages in thread
* [PATCH 2/2] arm64: cpufeature: Pretend that Apple A10(X), T2 does not support 32-bit EL0
2024-09-06 16:59 [PATCH 0/2] Disable 32-bit EL0 for Apple A10(X), T2 Nick Chan
2024-09-06 16:59 ` [PATCH 1/2] arm64: cputype: Add CPU types for A7-A11, T2 SoCs Nick Chan
@ 2024-09-06 16:59 ` Nick Chan
1 sibling, 0 replies; 3+ messages in thread
From: Nick Chan @ 2024-09-06 16:59 UTC (permalink / raw)
To: Catalin Marinas, Will Deacon, linux-arm-kernel, linux-kernel
Cc: asahi, ~postmarketos/upstreaming, Nick Chan
The Apple A10(X), T2 consists of logical cores that can switch
between P-mode and E-mode based on the frequency. However, only
P-mode supported 32-bit EL0.
Trying to support 32-bit EL0 on a CPU that can only execute it in certain
states is a bad idea. The A10(X), T2 only supports 16KB page size anyway so
many AArch32 executables won't run anyways. Pretend that it does not
support 32-bit EL0 at all.
Signed-off-by: Nick Chan <towinchenmi@gmail.com>
---
arch/arm64/kernel/cpufeature.c | 25 +++++++++++++++++++++++++
1 file changed, 25 insertions(+)
diff --git a/arch/arm64/kernel/cpufeature.c b/arch/arm64/kernel/cpufeature.c
index 718728a85430..458bcbc4f328 100644
--- a/arch/arm64/kernel/cpufeature.c
+++ b/arch/arm64/kernel/cpufeature.c
@@ -3529,6 +3529,29 @@ void __init setup_boot_cpu_features(void)
setup_boot_cpu_capabilities();
}
+static void __init bad_aarch32_el0_fixup(void)
+{
+#ifdef CONFIG_ARCH_APPLE
+ static const struct midr_range bad_aarch32_el0[] = {
+ MIDR_ALL_VERSIONS(MIDR_APPLE_A10_T2_HURRICANE_ZEPHYR),
+ MIDR_ALL_VERSIONS(MIDR_APPLE_A10X_HURRICANE_ZEPHYR),
+ {}
+ };
+
+ if (is_midr_in_range_list(read_cpuid_id(), bad_aarch32_el0)) {
+ struct arm64_ftr_reg *regp;
+
+ regp = get_arm64_ftr_reg(SYS_ID_AA64PFR0_EL1);
+ if (!regp)
+ return;
+ u64 val = (regp->sys_val & ~ID_AA64PFR0_EL1_EL0_MASK)
+ | ID_AA64PFR0_EL1_EL0_IMP;
+
+ update_cpu_ftr_reg(regp, val);
+ }
+#endif
+}
+
static void __init setup_system_capabilities(void)
{
/*
@@ -3562,6 +3585,8 @@ static void __init setup_system_capabilities(void)
void __init setup_system_features(void)
{
+ bad_aarch32_el0_fixup();
+
setup_system_capabilities();
kpti_install_ng_mappings();
--
2.46.0
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2024-09-06 17:07 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-09-06 16:59 [PATCH 0/2] Disable 32-bit EL0 for Apple A10(X), T2 Nick Chan
2024-09-06 16:59 ` [PATCH 1/2] arm64: cputype: Add CPU types for A7-A11, T2 SoCs Nick Chan
2024-09-06 16:59 ` [PATCH 2/2] arm64: cpufeature: Pretend that Apple A10(X), T2 does not support 32-bit EL0 Nick Chan
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®