Message ID | 20241209094310.6.I722621804be859e4ae4b7479ce191c5e3367b37c@changeid (mailing list archive) |
---|---|
State | Not Applicable |
Headers | show |
Series | arm64: errata: Add Qualcomm CPUs to the Spectre mitigation lists | expand |
On Mon, Dec 09, 2024 at 09:43:16AM -0800, Douglas Anderson wrote: > Qualcomm Kryo 600-series Gold cores appear to have a derivative of an > ARM Cortex A78 / ARM Cortex X1 in them. Since these need Spectre > mitigation then the Kyro 600-series Gold/Prime cores also should need > Spectre mitigation. > > Signed-off-by: Douglas Anderson <dianders@chromium.org> > --- > Yes. I know. This patch DOESN'T COMPILE because > MIDR_QCOM_KRYO_6XX_GOLD and MIDR_QCOM_KRYO_6XX_PRIME are not > defined. Those value needs to come from Qualcomm or from testing on > hardware, which I don't have. Qualcomm needs to chime in to confirm > that this Spectre mitigation is correct anyway, though. I'm including > this patch so it's obvious that I think these cores also need the > mitigation. SM8350 (Kryo 680) identifies itself as 0x41/0xd44 (Prime), 0x41/0xd41 (Gold) and 0x41/0xd05 (Silver) > > arch/arm64/kernel/proton-pack.c | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/arch/arm64/kernel/proton-pack.c b/arch/arm64/kernel/proton-pack.c > index 212481726f04..67aa54017dea 100644 > --- a/arch/arm64/kernel/proton-pack.c > +++ b/arch/arm64/kernel/proton-pack.c > @@ -860,6 +860,8 @@ u8 spectre_bhb_loop_affected(int scope) > MIDR_ALL_VERSIONS(MIDR_CORTEX_X2), > MIDR_ALL_VERSIONS(MIDR_NEOVERSE_N2), > MIDR_ALL_VERSIONS(MIDR_NEOVERSE_V1), > + MIDR_ALL_VERSIONS(MIDR_QCOM_KRYO_6XX_GOLD), > + MIDR_ALL_VERSIONS(MIDR_QCOM_KRYO_6XX_PRIME), > {}, > }; > static const struct midr_range spectre_bhb_k24_list[] = { > -- > 2.47.0.338.g60cca15819-goog >
Hi Douglas, kernel test robot noticed the following build errors: [auto build test ERROR on arm64/for-next/core] [also build test ERROR on arm-perf/for-next/perf kvmarm/next soc/for-next arm/for-next arm/fixes linus/master v6.13-rc2 next-20241210] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Douglas-Anderson/arm64-errata-Add-QCOM_KRYO_4XX_GOLD-to-the-spectre_bhb_k24_list/20241210-014833 base: https://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux.git for-next/core patch link: https://lore.kernel.org/r/20241209094310.6.I722621804be859e4ae4b7479ce191c5e3367b37c%40changeid patch subject: [PATCH 6/6] arm64: errata: Add QCOM_KRYO_6XX_GOLD/PRIME to the spectre_bhb_k32_list config: arm64-allnoconfig (https://download.01.org/0day-ci/archive/20241211/202412110032.Sku0iZvD-lkp@intel.com/config) compiler: aarch64-linux-gcc (GCC) 14.2.0 reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20241211/202412110032.Sku0iZvD-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202412110032.Sku0iZvD-lkp@intel.com/ All errors (new ones prefixed by >>): In file included from arch/arm64/include/asm/cache.h:43, from include/linux/cache.h:6, from include/linux/jiffies.h:5, from include/linux/ktime.h:25, from include/linux/timer.h:6, from include/linux/workqueue.h:9, from include/linux/bpf.h:10, from arch/arm64/kernel/proton-pack.c:21: arch/arm64/kernel/proton-pack.c: In function 'spectre_bhb_loop_affected': >> arch/arm64/kernel/proton-pack.c:863:43: error: 'MIDR_QCOM_KRYO_6XX_GOLD' undeclared (first use in this function); did you mean 'MIDR_QCOM_KRYO_4XX_GOLD'? 863 | MIDR_ALL_VERSIONS(MIDR_QCOM_KRYO_6XX_GOLD), | ^~~~~~~~~~~~~~~~~~~~~~~ arch/arm64/include/asm/cputype.h:251:26: note: in definition of macro 'MIDR_RANGE' 251 | .model = m, \ | ^ arch/arm64/kernel/proton-pack.c:863:25: note: in expansion of macro 'MIDR_ALL_VERSIONS' 863 | MIDR_ALL_VERSIONS(MIDR_QCOM_KRYO_6XX_GOLD), | ^~~~~~~~~~~~~~~~~ arch/arm64/kernel/proton-pack.c:863:43: note: each undeclared identifier is reported only once for each function it appears in 863 | MIDR_ALL_VERSIONS(MIDR_QCOM_KRYO_6XX_GOLD), | ^~~~~~~~~~~~~~~~~~~~~~~ arch/arm64/include/asm/cputype.h:251:26: note: in definition of macro 'MIDR_RANGE' 251 | .model = m, \ | ^ arch/arm64/kernel/proton-pack.c:863:25: note: in expansion of macro 'MIDR_ALL_VERSIONS' 863 | MIDR_ALL_VERSIONS(MIDR_QCOM_KRYO_6XX_GOLD), | ^~~~~~~~~~~~~~~~~ >> arch/arm64/kernel/proton-pack.c:864:43: error: 'MIDR_QCOM_KRYO_6XX_PRIME' undeclared (first use in this function); did you mean 'MIDR_QCOM_KRYO_3XX_SILVER'? 864 | MIDR_ALL_VERSIONS(MIDR_QCOM_KRYO_6XX_PRIME), | ^~~~~~~~~~~~~~~~~~~~~~~~ arch/arm64/include/asm/cputype.h:251:26: note: in definition of macro 'MIDR_RANGE' 251 | .model = m, \ | ^ arch/arm64/kernel/proton-pack.c:864:25: note: in expansion of macro 'MIDR_ALL_VERSIONS' 864 | MIDR_ALL_VERSIONS(MIDR_QCOM_KRYO_6XX_PRIME), | ^~~~~~~~~~~~~~~~~ arch/arm64/kernel/proton-pack.c:872:43: error: 'MIDR_QCOM_KRYO_5XX_GOLD' undeclared (first use in this function); did you mean 'MIDR_QCOM_KRYO_4XX_GOLD'? 872 | MIDR_ALL_VERSIONS(MIDR_QCOM_KRYO_5XX_GOLD), | ^~~~~~~~~~~~~~~~~~~~~~~ arch/arm64/include/asm/cputype.h:251:26: note: in definition of macro 'MIDR_RANGE' 251 | .model = m, \ | ^ arch/arm64/kernel/proton-pack.c:872:25: note: in expansion of macro 'MIDR_ALL_VERSIONS' 872 | MIDR_ALL_VERSIONS(MIDR_QCOM_KRYO_5XX_GOLD), | ^~~~~~~~~~~~~~~~~ vim +863 arch/arm64/kernel/proton-pack.c 843 844 /* 845 * This must be called with SCOPE_LOCAL_CPU for each type of CPU, before any 846 * SCOPE_SYSTEM call will give the right answer. 847 */ 848 u8 spectre_bhb_loop_affected(int scope) 849 { 850 u8 k = 0; 851 static u8 max_bhb_k; 852 853 if (scope == SCOPE_LOCAL_CPU) { 854 static const struct midr_range spectre_bhb_k32_list[] = { 855 MIDR_ALL_VERSIONS(MIDR_CORTEX_A78), 856 MIDR_ALL_VERSIONS(MIDR_CORTEX_A78AE), 857 MIDR_ALL_VERSIONS(MIDR_CORTEX_A78C), 858 MIDR_ALL_VERSIONS(MIDR_CORTEX_X1), 859 MIDR_ALL_VERSIONS(MIDR_CORTEX_A710), 860 MIDR_ALL_VERSIONS(MIDR_CORTEX_X2), 861 MIDR_ALL_VERSIONS(MIDR_NEOVERSE_N2), 862 MIDR_ALL_VERSIONS(MIDR_NEOVERSE_V1), > 863 MIDR_ALL_VERSIONS(MIDR_QCOM_KRYO_6XX_GOLD), > 864 MIDR_ALL_VERSIONS(MIDR_QCOM_KRYO_6XX_PRIME), 865 {}, 866 }; 867 static const struct midr_range spectre_bhb_k24_list[] = { 868 MIDR_ALL_VERSIONS(MIDR_CORTEX_A76), 869 MIDR_ALL_VERSIONS(MIDR_CORTEX_A77), 870 MIDR_ALL_VERSIONS(MIDR_NEOVERSE_N1), 871 MIDR_ALL_VERSIONS(MIDR_QCOM_KRYO_4XX_GOLD), 872 MIDR_ALL_VERSIONS(MIDR_QCOM_KRYO_5XX_GOLD), 873 {}, 874 }; 875 static const struct midr_range spectre_bhb_k11_list[] = { 876 MIDR_ALL_VERSIONS(MIDR_AMPERE1), 877 {}, 878 }; 879 static const struct midr_range spectre_bhb_k8_list[] = { 880 MIDR_ALL_VERSIONS(MIDR_CORTEX_A72), 881 MIDR_ALL_VERSIONS(MIDR_CORTEX_A57), 882 {}, 883 }; 884 885 if (is_midr_in_range_list(read_cpuid_id(), spectre_bhb_k32_list)) 886 k = 32; 887 else if (is_midr_in_range_list(read_cpuid_id(), spectre_bhb_k24_list)) 888 k = 24; 889 else if (is_midr_in_range_list(read_cpuid_id(), spectre_bhb_k11_list)) 890 k = 11; 891 else if (is_midr_in_range_list(read_cpuid_id(), spectre_bhb_k8_list)) 892 k = 8; 893 894 max_bhb_k = max(max_bhb_k, k); 895 } else { 896 k = max_bhb_k; 897 } 898 899 return k; 900 } 901
Hi, On Mon, Dec 9, 2024 at 3:09 PM Dmitry Baryshkov <dmitry.baryshkov@linaro.org> wrote: > > On Mon, Dec 09, 2024 at 09:43:16AM -0800, Douglas Anderson wrote: > > Qualcomm Kryo 600-series Gold cores appear to have a derivative of an > > ARM Cortex A78 / ARM Cortex X1 in them. Since these need Spectre > > mitigation then the Kyro 600-series Gold/Prime cores also should need > > Spectre mitigation. > > > > Signed-off-by: Douglas Anderson <dianders@chromium.org> > > --- > > Yes. I know. This patch DOESN'T COMPILE because > > MIDR_QCOM_KRYO_6XX_GOLD and MIDR_QCOM_KRYO_6XX_PRIME are not > > defined. Those value needs to come from Qualcomm or from testing on > > hardware, which I don't have. Qualcomm needs to chime in to confirm > > that this Spectre mitigation is correct anyway, though. I'm including > > this patch so it's obvious that I think these cores also need the > > mitigation. > > SM8350 (Kryo 680) identifies itself as 0x41/0xd44 (Prime), 0x41/0xd41 > (Gold) and 0x41/0xd05 (Silver) Wow, all standard ARM cores. OK, I guess we can drop this patch too then. Nice! -Doug
diff --git a/arch/arm64/kernel/proton-pack.c b/arch/arm64/kernel/proton-pack.c index 212481726f04..67aa54017dea 100644 --- a/arch/arm64/kernel/proton-pack.c +++ b/arch/arm64/kernel/proton-pack.c @@ -860,6 +860,8 @@ u8 spectre_bhb_loop_affected(int scope) MIDR_ALL_VERSIONS(MIDR_CORTEX_X2), MIDR_ALL_VERSIONS(MIDR_NEOVERSE_N2), MIDR_ALL_VERSIONS(MIDR_NEOVERSE_V1), + MIDR_ALL_VERSIONS(MIDR_QCOM_KRYO_6XX_GOLD), + MIDR_ALL_VERSIONS(MIDR_QCOM_KRYO_6XX_PRIME), {}, }; static const struct midr_range spectre_bhb_k24_list[] = {
Qualcomm Kryo 600-series Gold cores appear to have a derivative of an ARM Cortex A78 / ARM Cortex X1 in them. Since these need Spectre mitigation then the Kyro 600-series Gold/Prime cores also should need Spectre mitigation. Signed-off-by: Douglas Anderson <dianders@chromium.org> --- Yes. I know. This patch DOESN'T COMPILE because MIDR_QCOM_KRYO_6XX_GOLD and MIDR_QCOM_KRYO_6XX_PRIME are not defined. Those value needs to come from Qualcomm or from testing on hardware, which I don't have. Qualcomm needs to chime in to confirm that this Spectre mitigation is correct anyway, though. I'm including this patch so it's obvious that I think these cores also need the mitigation. arch/arm64/kernel/proton-pack.c | 2 ++ 1 file changed, 2 insertions(+)