Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge branch 'for-next/sysregs' into for-next/core

* for-next/sysregs: (28 commits)
arm64/sysreg: Convert ID_AA64ZFR0_EL1 to automatic generation
arm64/sysreg: Convert ID_AA64SMFR0_EL1 to automatic generation
arm64/sysreg: Convert LORID_EL1 to automatic generation
arm64/sysreg: Convert LORC_EL1 to automatic generation
arm64/sysreg: Convert LORN_EL1 to automatic generation
arm64/sysreg: Convert LOREA_EL1 to automatic generation
arm64/sysreg: Convert LORSA_EL1 to automatic generation
arm64/sysreg: Convert ID_AA64ISAR2_EL1 to automatic generation
arm64/sysreg: Convert ID_AA64ISAR1_EL1 to automatic generation
arm64/sysreg: Convert GMID to automatic generation
arm64/sysreg: Convert DCZID_EL0 to automatic generation
arm64/sysreg: Convert CTR_EL0 to automatic generation
arm64/sysreg: Add _EL1 into ID_AA64ISAR2_EL1 definition names
arm64/sysreg: Add _EL1 into ID_AA64ISAR1_EL1 definition names
arm64/sysreg: Remove defines for RPRES enumeration
arm64/sysreg: Standardise naming for ID_AA64ZFR0_EL1 fields
arm64/sysreg: Standardise naming for ID_AA64SMFR0_EL1 enums
arm64/sysreg: Standardise naming for WFxT defines
arm64/sysreg: Make BHB clear feature defines match the architecture
arm64/sysreg: Align pointer auth enumeration defines with architecture
...

+457 -315
+2 -2
arch/arm64/include/asm/asm_pointer_auth.h
··· 59 59 60 60 .macro __ptrauth_keys_init_cpu tsk, tmp1, tmp2, tmp3 61 61 mrs \tmp1, id_aa64isar1_el1 62 - ubfx \tmp1, \tmp1, #ID_AA64ISAR1_APA_SHIFT, #8 62 + ubfx \tmp1, \tmp1, #ID_AA64ISAR1_EL1_APA_SHIFT, #8 63 63 mrs_s \tmp2, SYS_ID_AA64ISAR2_EL1 64 - ubfx \tmp2, \tmp2, #ID_AA64ISAR2_APA3_SHIFT, #4 64 + ubfx \tmp2, \tmp2, #ID_AA64ISAR2_EL1_APA3_SHIFT, #4 65 65 orr \tmp1, \tmp1, \tmp2 66 66 cbz \tmp1, .Lno_addr_auth\@ 67 67 mov_q \tmp1, (SCTLR_ELx_ENIA | SCTLR_ELx_ENIB | \
+13 -28
arch/arm64/include/asm/cache.h
··· 5 5 #ifndef __ASM_CACHE_H 6 6 #define __ASM_CACHE_H 7 7 8 - #include <asm/cputype.h> 9 - #include <asm/mte-def.h> 10 - 11 - #define CTR_L1IP_SHIFT 14 12 - #define CTR_L1IP_MASK 3 13 - #define CTR_DMINLINE_SHIFT 16 14 - #define CTR_IMINLINE_SHIFT 0 15 - #define CTR_IMINLINE_MASK 0xf 16 - #define CTR_ERG_SHIFT 20 17 - #define CTR_CWG_SHIFT 24 18 - #define CTR_CWG_MASK 15 19 - #define CTR_IDC_SHIFT 28 20 - #define CTR_DIC_SHIFT 29 21 - 22 - #define CTR_CACHE_MINLINE_MASK \ 23 - (0xf << CTR_DMINLINE_SHIFT | CTR_IMINLINE_MASK << CTR_IMINLINE_SHIFT) 24 - 25 - #define CTR_L1IP(ctr) (((ctr) >> CTR_L1IP_SHIFT) & CTR_L1IP_MASK) 26 - 27 - #define ICACHE_POLICY_VPIPT 0 28 - #define ICACHE_POLICY_RESERVED 1 29 - #define ICACHE_POLICY_VIPT 2 30 - #define ICACHE_POLICY_PIPT 3 31 - 32 8 #define L1_CACHE_SHIFT (6) 33 9 #define L1_CACHE_BYTES (1 << L1_CACHE_SHIFT) 34 - 35 10 36 11 #define CLIDR_LOUU_SHIFT 27 37 12 #define CLIDR_LOC_SHIFT 24 ··· 30 55 #include <linux/bitops.h> 31 56 #include <linux/kasan-enabled.h> 32 57 58 + #include <asm/cputype.h> 59 + #include <asm/mte-def.h> 60 + #include <asm/sysreg.h> 61 + 33 62 #ifdef CONFIG_KASAN_SW_TAGS 34 63 #define ARCH_SLAB_MINALIGN (1ULL << KASAN_SHADOW_SCALE_SHIFT) 35 64 #elif defined(CONFIG_KASAN_HW_TAGS) ··· 44 65 } 45 66 #define arch_slab_minalign() arch_slab_minalign() 46 67 #endif 68 + 69 + #define CTR_CACHE_MINLINE_MASK \ 70 + (0xf << CTR_EL0_DMINLINE_SHIFT | \ 71 + CTR_EL0_IMINLINE_MASK << CTR_EL0_IMINLINE_SHIFT) 72 + 73 + #define CTR_L1IP(ctr) SYS_FIELD_GET(CTR_EL0, L1Ip, ctr) 47 74 48 75 #define ICACHEF_ALIASING 0 49 76 #define ICACHEF_VPIPT 1 ··· 71 86 72 87 static inline u32 cache_type_cwg(void) 73 88 { 74 - return (read_cpuid_cachetype() >> CTR_CWG_SHIFT) & CTR_CWG_MASK; 89 + return (read_cpuid_cachetype() >> CTR_EL0_CWG_SHIFT) & CTR_EL0_CWG_MASK; 75 90 } 76 91 77 92 #define __read_mostly __section(".data..read_mostly") ··· 105 120 { 106 121 u32 ctr = read_cpuid_cachetype(); 107 122 108 - if (!(ctr & BIT(CTR_IDC_SHIFT))) { 123 + if (!(ctr & BIT(CTR_EL0_IDC_SHIFT))) { 109 124 u64 clidr = read_sysreg(clidr_el1); 110 125 111 126 if (CLIDR_LOC(clidr) == 0 || 112 127 (CLIDR_LOUIS(clidr) == 0 && CLIDR_LOUU(clidr) == 0)) 113 - ctr |= BIT(CTR_IDC_SHIFT); 128 + ctr |= BIT(CTR_EL0_IDC_SHIFT); 114 129 } 115 130 116 131 return ctr;
+1 -1
arch/arm64/include/asm/cpufeature.h
··· 673 673 isar2 = read_sanitised_ftr_reg(SYS_ID_AA64ISAR2_EL1); 674 674 675 675 return cpuid_feature_extract_unsigned_field(isar2, 676 - ID_AA64ISAR2_CLEARBHB_SHIFT); 676 + ID_AA64ISAR2_EL1_BC_SHIFT); 677 677 } 678 678 679 679 const struct cpumask *system_32bit_el0_cpumask(void);
+1 -1
arch/arm64/include/asm/el2_setup.h
··· 161 161 mov x1, #0 // SMCR controls 162 162 163 163 mrs_s x2, SYS_ID_AA64SMFR0_EL1 164 - ubfx x2, x2, #ID_AA64SMFR0_FA64_SHIFT, #1 // Full FP in SM? 164 + ubfx x2, x2, #ID_AA64SMFR0_EL1_FA64_SHIFT, #1 // Full FP in SM? 165 165 cbz x2, .Lskip_sme_fa64_\@ 166 166 167 167 orr x1, x1, SMCR_ELx_FA64_MASK
+5 -119
arch/arm64/include/asm/sysreg.h
··· 192 192 193 193 #define SYS_ID_AA64PFR0_EL1 sys_reg(3, 0, 0, 4, 0) 194 194 #define SYS_ID_AA64PFR1_EL1 sys_reg(3, 0, 0, 4, 1) 195 - #define SYS_ID_AA64ZFR0_EL1 sys_reg(3, 0, 0, 4, 4) 196 - #define SYS_ID_AA64SMFR0_EL1 sys_reg(3, 0, 0, 4, 5) 197 195 198 196 #define SYS_ID_AA64DFR0_EL1 sys_reg(3, 0, 0, 5, 0) 199 197 #define SYS_ID_AA64DFR1_EL1 sys_reg(3, 0, 0, 5, 1) 200 198 201 199 #define SYS_ID_AA64AFR0_EL1 sys_reg(3, 0, 0, 5, 4) 202 200 #define SYS_ID_AA64AFR1_EL1 sys_reg(3, 0, 0, 5, 5) 203 - 204 - #define SYS_ID_AA64ISAR1_EL1 sys_reg(3, 0, 0, 6, 1) 205 - #define SYS_ID_AA64ISAR2_EL1 sys_reg(3, 0, 0, 6, 2) 206 201 207 202 #define SYS_ID_AA64MMFR0_EL1 sys_reg(3, 0, 0, 7, 0) 208 203 #define SYS_ID_AA64MMFR1_EL1 sys_reg(3, 0, 0, 7, 1) ··· 405 410 #define SYS_MAIR_EL1 sys_reg(3, 0, 10, 2, 0) 406 411 #define SYS_AMAIR_EL1 sys_reg(3, 0, 10, 3, 0) 407 412 408 - #define SYS_LORSA_EL1 sys_reg(3, 0, 10, 4, 0) 409 - #define SYS_LOREA_EL1 sys_reg(3, 0, 10, 4, 1) 410 - #define SYS_LORN_EL1 sys_reg(3, 0, 10, 4, 2) 411 - #define SYS_LORC_EL1 sys_reg(3, 0, 10, 4, 3) 412 - #define SYS_LORID_EL1 sys_reg(3, 0, 10, 4, 7) 413 - 414 413 #define SYS_VBAR_EL1 sys_reg(3, 0, 12, 0, 0) 415 414 #define SYS_DISR_EL1 sys_reg(3, 0, 12, 1, 1) 416 415 ··· 443 454 #define SYS_CNTKCTL_EL1 sys_reg(3, 0, 14, 1, 0) 444 455 445 456 #define SYS_CCSIDR_EL1 sys_reg(3, 1, 0, 0, 0) 446 - #define SYS_GMID_EL1 sys_reg(3, 1, 0, 0, 4) 447 457 #define SYS_AIDR_EL1 sys_reg(3, 1, 0, 0, 7) 448 458 449 459 #define SMIDR_EL1_IMPLEMENTER_SHIFT 24 450 460 #define SMIDR_EL1_SMPS_SHIFT 15 451 461 #define SMIDR_EL1_AFFINITY_SHIFT 0 452 - 453 - #define SYS_CTR_EL0 sys_reg(3, 3, 0, 0, 1) 454 - #define SYS_DCZID_EL0 sys_reg(3, 3, 0, 0, 7) 455 462 456 463 #define SYS_RNDR_EL0 sys_reg(3, 3, 2, 4, 0) 457 464 #define SYS_RNDRRS_EL0 sys_reg(3, 3, 2, 4, 1) ··· 689 704 /* Position the attr at the correct index */ 690 705 #define MAIR_ATTRIDX(attr, idx) ((attr) << ((idx) * 8)) 691 706 692 - /* id_aa64isar1 */ 693 - #define ID_AA64ISAR1_I8MM_SHIFT 52 694 - #define ID_AA64ISAR1_DGH_SHIFT 48 695 - #define ID_AA64ISAR1_BF16_SHIFT 44 696 - #define ID_AA64ISAR1_SPECRES_SHIFT 40 697 - #define ID_AA64ISAR1_SB_SHIFT 36 698 - #define ID_AA64ISAR1_FRINTTS_SHIFT 32 699 - #define ID_AA64ISAR1_GPI_SHIFT 28 700 - #define ID_AA64ISAR1_GPA_SHIFT 24 701 - #define ID_AA64ISAR1_LRCPC_SHIFT 20 702 - #define ID_AA64ISAR1_FCMA_SHIFT 16 703 - #define ID_AA64ISAR1_JSCVT_SHIFT 12 704 - #define ID_AA64ISAR1_API_SHIFT 8 705 - #define ID_AA64ISAR1_APA_SHIFT 4 706 - #define ID_AA64ISAR1_DPB_SHIFT 0 707 - 708 - #define ID_AA64ISAR1_APA_NI 0x0 709 - #define ID_AA64ISAR1_APA_ARCHITECTED 0x1 710 - #define ID_AA64ISAR1_APA_ARCH_EPAC 0x2 711 - #define ID_AA64ISAR1_APA_ARCH_EPAC2 0x3 712 - #define ID_AA64ISAR1_APA_ARCH_EPAC2_FPAC 0x4 713 - #define ID_AA64ISAR1_APA_ARCH_EPAC2_FPAC_CMB 0x5 714 - #define ID_AA64ISAR1_API_NI 0x0 715 - #define ID_AA64ISAR1_API_IMP_DEF 0x1 716 - #define ID_AA64ISAR1_API_IMP_DEF_EPAC 0x2 717 - #define ID_AA64ISAR1_API_IMP_DEF_EPAC2 0x3 718 - #define ID_AA64ISAR1_API_IMP_DEF_EPAC2_FPAC 0x4 719 - #define ID_AA64ISAR1_API_IMP_DEF_EPAC2_FPAC_CMB 0x5 720 - #define ID_AA64ISAR1_GPA_NI 0x0 721 - #define ID_AA64ISAR1_GPA_ARCHITECTED 0x1 722 - #define ID_AA64ISAR1_GPI_NI 0x0 723 - #define ID_AA64ISAR1_GPI_IMP_DEF 0x1 724 - 725 - /* id_aa64isar2 */ 726 - #define ID_AA64ISAR2_CLEARBHB_SHIFT 28 727 - #define ID_AA64ISAR2_APA3_SHIFT 12 728 - #define ID_AA64ISAR2_GPA3_SHIFT 8 729 - #define ID_AA64ISAR2_RPRES_SHIFT 4 730 - #define ID_AA64ISAR2_WFXT_SHIFT 0 731 - 732 - #define ID_AA64ISAR2_RPRES_8BIT 0x0 733 - #define ID_AA64ISAR2_RPRES_12BIT 0x1 734 - /* 735 - * Value 0x1 has been removed from the architecture, and is 736 - * reserved, but has not yet been removed from the ARM ARM 737 - * as of ARM DDI 0487G.b. 738 - */ 739 - #define ID_AA64ISAR2_WFXT_NI 0x0 740 - #define ID_AA64ISAR2_WFXT_SUPPORTED 0x2 741 - 742 - #define ID_AA64ISAR2_APA3_NI 0x0 743 - #define ID_AA64ISAR2_APA3_ARCHITECTED 0x1 744 - #define ID_AA64ISAR2_APA3_ARCH_EPAC 0x2 745 - #define ID_AA64ISAR2_APA3_ARCH_EPAC2 0x3 746 - #define ID_AA64ISAR2_APA3_ARCH_EPAC2_FPAC 0x4 747 - #define ID_AA64ISAR2_APA3_ARCH_EPAC2_FPAC_CMB 0x5 748 - 749 - #define ID_AA64ISAR2_GPA3_NI 0x0 750 - #define ID_AA64ISAR2_GPA3_ARCHITECTED 0x1 751 - 752 707 /* id_aa64pfr0 */ 753 708 #define ID_AA64PFR0_CSV3_SHIFT 60 754 709 #define ID_AA64PFR0_CSV2_SHIFT 56 ··· 735 810 #define ID_AA64PFR1_MTE_EL0 0x1 736 811 #define ID_AA64PFR1_MTE 0x2 737 812 #define ID_AA64PFR1_MTE_ASYMM 0x3 738 - 739 - /* id_aa64zfr0 */ 740 - #define ID_AA64ZFR0_F64MM_SHIFT 56 741 - #define ID_AA64ZFR0_F32MM_SHIFT 52 742 - #define ID_AA64ZFR0_I8MM_SHIFT 44 743 - #define ID_AA64ZFR0_SM4_SHIFT 40 744 - #define ID_AA64ZFR0_SHA3_SHIFT 32 745 - #define ID_AA64ZFR0_BF16_SHIFT 20 746 - #define ID_AA64ZFR0_BITPERM_SHIFT 16 747 - #define ID_AA64ZFR0_AES_SHIFT 4 748 - #define ID_AA64ZFR0_SVEVER_SHIFT 0 749 - 750 - #define ID_AA64ZFR0_F64MM 0x1 751 - #define ID_AA64ZFR0_F32MM 0x1 752 - #define ID_AA64ZFR0_I8MM 0x1 753 - #define ID_AA64ZFR0_BF16 0x1 754 - #define ID_AA64ZFR0_SM4 0x1 755 - #define ID_AA64ZFR0_SHA3 0x1 756 - #define ID_AA64ZFR0_BITPERM 0x1 757 - #define ID_AA64ZFR0_AES 0x1 758 - #define ID_AA64ZFR0_AES_PMULL 0x2 759 - #define ID_AA64ZFR0_SVEVER_SVE2 0x1 760 - 761 - /* id_aa64smfr0 */ 762 - #define ID_AA64SMFR0_FA64_SHIFT 63 763 - #define ID_AA64SMFR0_I16I64_SHIFT 52 764 - #define ID_AA64SMFR0_F64F64_SHIFT 48 765 - #define ID_AA64SMFR0_I8I32_SHIFT 36 766 - #define ID_AA64SMFR0_F16F32_SHIFT 35 767 - #define ID_AA64SMFR0_B16F32_SHIFT 34 768 - #define ID_AA64SMFR0_F32F32_SHIFT 32 769 - 770 - #define ID_AA64SMFR0_FA64 0x1 771 - #define ID_AA64SMFR0_I16I64 0xf 772 - #define ID_AA64SMFR0_F64F64 0x1 773 - #define ID_AA64SMFR0_I8I32 0xf 774 - #define ID_AA64SMFR0_F16F32 0x1 775 - #define ID_AA64SMFR0_B16F32 0x1 776 - #define ID_AA64SMFR0_F32F32 0x1 777 813 778 814 /* id_aa64mmfr0 */ 779 815 #define ID_AA64MMFR0_ECV_SHIFT 60 ··· 970 1084 #define MVFR2_FPMISC_SHIFT 4 971 1085 #define MVFR2_SIMDMISC_SHIFT 0 972 1086 973 - #define DCZID_DZP_SHIFT 4 974 - #define DCZID_BS_SHIFT 0 975 - 976 1087 #define CPACR_EL1_FPEN_EL1EN (BIT(20)) /* enable EL1 access */ 977 1088 #define CPACR_EL1_FPEN_EL0EN (BIT(21)) /* enable EL0 access, if EL1EN set */ 978 1089 ··· 1004 1121 #define SYS_RGSR_EL1_SEED_MASK 0xffffUL 1005 1122 1006 1123 /* GMID_EL1 field definitions */ 1007 - #define SYS_GMID_EL1_BS_SHIFT 0 1008 - #define SYS_GMID_EL1_BS_SIZE 4 1124 + #define GMID_EL1_BS_SHIFT 0 1125 + #define GMID_EL1_BS_SIZE 4 1009 1126 1010 1127 /* TFSR{,E0}_EL1 bit definitions */ 1011 1128 #define SYS_TFSR_EL1_TF0_SHIFT 0 ··· 1206 1323 }) 1207 1324 1208 1325 #endif 1326 + 1327 + #define SYS_FIELD_GET(reg, field, val) \ 1328 + FIELD_GET(reg##_##field##_MASK, val) 1209 1329 1210 1330 #define SYS_FIELD_PREP(reg, field, val) \ 1211 1331 FIELD_PREP(reg##_##field##_MASK, val)
+1 -1
arch/arm64/kernel/alternative.c
··· 121 121 122 122 ctr_el0 = read_sanitised_ftr_reg(SYS_CTR_EL0); 123 123 d_size = 4 << cpuid_feature_extract_unsigned_field(ctr_el0, 124 - CTR_DMINLINE_SHIFT); 124 + CTR_EL0_DminLine_SHIFT); 125 125 cur = start & ~(d_size - 1); 126 126 do { 127 127 /*
+1 -1
arch/arm64/kernel/cpu_errata.c
··· 187 187 int scope) 188 188 { 189 189 u32 midr = read_cpuid_id(); 190 - bool has_dic = read_cpuid_cachetype() & BIT(CTR_DIC_SHIFT); 190 + bool has_dic = read_cpuid_cachetype() & BIT(CTR_EL0_DIC_SHIFT); 191 191 const struct midr_range range = MIDR_ALL_VERSIONS(MIDR_NEOVERSE_N1); 192 192 193 193 WARN_ON(scope != SCOPE_LOCAL_CPU || preemptible());
+110 -110
arch/arm64/kernel/cpufeature.c
··· 210 210 }; 211 211 212 212 static const struct arm64_ftr_bits ftr_id_aa64isar1[] = { 213 - ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR1_I8MM_SHIFT, 4, 0), 214 - ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR1_DGH_SHIFT, 4, 0), 215 - ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR1_BF16_SHIFT, 4, 0), 216 - ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR1_SPECRES_SHIFT, 4, 0), 217 - ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR1_SB_SHIFT, 4, 0), 218 - ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR1_FRINTTS_SHIFT, 4, 0), 213 + ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR1_EL1_I8MM_SHIFT, 4, 0), 214 + ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR1_EL1_DGH_SHIFT, 4, 0), 215 + ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR1_EL1_BF16_SHIFT, 4, 0), 216 + ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR1_EL1_SPECRES_SHIFT, 4, 0), 217 + ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR1_EL1_SB_SHIFT, 4, 0), 218 + ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR1_EL1_FRINTTS_SHIFT, 4, 0), 219 219 ARM64_FTR_BITS(FTR_VISIBLE_IF_IS_ENABLED(CONFIG_ARM64_PTR_AUTH), 220 - FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR1_GPI_SHIFT, 4, 0), 220 + FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR1_EL1_GPI_SHIFT, 4, 0), 221 221 ARM64_FTR_BITS(FTR_VISIBLE_IF_IS_ENABLED(CONFIG_ARM64_PTR_AUTH), 222 - FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR1_GPA_SHIFT, 4, 0), 223 - ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR1_LRCPC_SHIFT, 4, 0), 224 - ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR1_FCMA_SHIFT, 4, 0), 225 - ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR1_JSCVT_SHIFT, 4, 0), 222 + FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR1_EL1_GPA_SHIFT, 4, 0), 223 + ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR1_EL1_LRCPC_SHIFT, 4, 0), 224 + ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR1_EL1_FCMA_SHIFT, 4, 0), 225 + ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR1_EL1_JSCVT_SHIFT, 4, 0), 226 226 ARM64_FTR_BITS(FTR_VISIBLE_IF_IS_ENABLED(CONFIG_ARM64_PTR_AUTH), 227 - FTR_STRICT, FTR_EXACT, ID_AA64ISAR1_API_SHIFT, 4, 0), 227 + FTR_STRICT, FTR_EXACT, ID_AA64ISAR1_EL1_API_SHIFT, 4, 0), 228 228 ARM64_FTR_BITS(FTR_VISIBLE_IF_IS_ENABLED(CONFIG_ARM64_PTR_AUTH), 229 - FTR_STRICT, FTR_EXACT, ID_AA64ISAR1_APA_SHIFT, 4, 0), 230 - ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR1_DPB_SHIFT, 4, 0), 229 + FTR_STRICT, FTR_EXACT, ID_AA64ISAR1_EL1_APA_SHIFT, 4, 0), 230 + ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR1_EL1_DPB_SHIFT, 4, 0), 231 231 ARM64_FTR_END, 232 232 }; 233 233 234 234 static const struct arm64_ftr_bits ftr_id_aa64isar2[] = { 235 - ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_HIGHER_SAFE, ID_AA64ISAR2_CLEARBHB_SHIFT, 4, 0), 235 + ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_HIGHER_SAFE, ID_AA64ISAR2_EL1_BC_SHIFT, 4, 0), 236 236 ARM64_FTR_BITS(FTR_VISIBLE_IF_IS_ENABLED(CONFIG_ARM64_PTR_AUTH), 237 - FTR_STRICT, FTR_EXACT, ID_AA64ISAR2_APA3_SHIFT, 4, 0), 237 + FTR_STRICT, FTR_EXACT, ID_AA64ISAR2_EL1_APA3_SHIFT, 4, 0), 238 238 ARM64_FTR_BITS(FTR_VISIBLE_IF_IS_ENABLED(CONFIG_ARM64_PTR_AUTH), 239 - FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR2_GPA3_SHIFT, 4, 0), 240 - ARM64_FTR_BITS(FTR_VISIBLE, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64ISAR2_RPRES_SHIFT, 4, 0), 241 - ARM64_FTR_BITS(FTR_VISIBLE, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64ISAR2_WFXT_SHIFT, 4, 0), 239 + FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR2_EL1_GPA3_SHIFT, 4, 0), 240 + ARM64_FTR_BITS(FTR_VISIBLE, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64ISAR2_EL1_RPRES_SHIFT, 4, 0), 241 + ARM64_FTR_BITS(FTR_VISIBLE, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64ISAR2_EL1_WFxT_SHIFT, 4, 0), 242 242 ARM64_FTR_END, 243 243 }; 244 244 ··· 277 277 278 278 static const struct arm64_ftr_bits ftr_id_aa64zfr0[] = { 279 279 ARM64_FTR_BITS(FTR_VISIBLE_IF_IS_ENABLED(CONFIG_ARM64_SVE), 280 - FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ZFR0_F64MM_SHIFT, 4, 0), 280 + FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ZFR0_EL1_F64MM_SHIFT, 4, 0), 281 281 ARM64_FTR_BITS(FTR_VISIBLE_IF_IS_ENABLED(CONFIG_ARM64_SVE), 282 - FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ZFR0_F32MM_SHIFT, 4, 0), 282 + FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ZFR0_EL1_F32MM_SHIFT, 4, 0), 283 283 ARM64_FTR_BITS(FTR_VISIBLE_IF_IS_ENABLED(CONFIG_ARM64_SVE), 284 - FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ZFR0_I8MM_SHIFT, 4, 0), 284 + FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ZFR0_EL1_I8MM_SHIFT, 4, 0), 285 285 ARM64_FTR_BITS(FTR_VISIBLE_IF_IS_ENABLED(CONFIG_ARM64_SVE), 286 - FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ZFR0_SM4_SHIFT, 4, 0), 286 + FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ZFR0_EL1_SM4_SHIFT, 4, 0), 287 287 ARM64_FTR_BITS(FTR_VISIBLE_IF_IS_ENABLED(CONFIG_ARM64_SVE), 288 - FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ZFR0_SHA3_SHIFT, 4, 0), 288 + FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ZFR0_EL1_SHA3_SHIFT, 4, 0), 289 289 ARM64_FTR_BITS(FTR_VISIBLE_IF_IS_ENABLED(CONFIG_ARM64_SVE), 290 - FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ZFR0_BF16_SHIFT, 4, 0), 290 + FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ZFR0_EL1_BF16_SHIFT, 4, 0), 291 291 ARM64_FTR_BITS(FTR_VISIBLE_IF_IS_ENABLED(CONFIG_ARM64_SVE), 292 - FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ZFR0_BITPERM_SHIFT, 4, 0), 292 + FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ZFR0_EL1_BitPerm_SHIFT, 4, 0), 293 293 ARM64_FTR_BITS(FTR_VISIBLE_IF_IS_ENABLED(CONFIG_ARM64_SVE), 294 - FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ZFR0_AES_SHIFT, 4, 0), 294 + FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ZFR0_EL1_AES_SHIFT, 4, 0), 295 295 ARM64_FTR_BITS(FTR_VISIBLE_IF_IS_ENABLED(CONFIG_ARM64_SVE), 296 - FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ZFR0_SVEVER_SHIFT, 4, 0), 296 + FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ZFR0_EL1_SVEver_SHIFT, 4, 0), 297 297 ARM64_FTR_END, 298 298 }; 299 299 300 300 static const struct arm64_ftr_bits ftr_id_aa64smfr0[] = { 301 301 ARM64_FTR_BITS(FTR_VISIBLE_IF_IS_ENABLED(CONFIG_ARM64_SME), 302 - FTR_STRICT, FTR_EXACT, ID_AA64SMFR0_FA64_SHIFT, 1, 0), 302 + FTR_STRICT, FTR_EXACT, ID_AA64SMFR0_EL1_FA64_SHIFT, 1, 0), 303 303 ARM64_FTR_BITS(FTR_VISIBLE_IF_IS_ENABLED(CONFIG_ARM64_SME), 304 - FTR_STRICT, FTR_EXACT, ID_AA64SMFR0_I16I64_SHIFT, 4, 0), 304 + FTR_STRICT, FTR_EXACT, ID_AA64SMFR0_EL1_I16I64_SHIFT, 4, 0), 305 305 ARM64_FTR_BITS(FTR_VISIBLE_IF_IS_ENABLED(CONFIG_ARM64_SME), 306 - FTR_STRICT, FTR_EXACT, ID_AA64SMFR0_F64F64_SHIFT, 1, 0), 306 + FTR_STRICT, FTR_EXACT, ID_AA64SMFR0_EL1_F64F64_SHIFT, 1, 0), 307 307 ARM64_FTR_BITS(FTR_VISIBLE_IF_IS_ENABLED(CONFIG_ARM64_SME), 308 - FTR_STRICT, FTR_EXACT, ID_AA64SMFR0_I8I32_SHIFT, 4, 0), 308 + FTR_STRICT, FTR_EXACT, ID_AA64SMFR0_EL1_I8I32_SHIFT, 4, 0), 309 309 ARM64_FTR_BITS(FTR_VISIBLE_IF_IS_ENABLED(CONFIG_ARM64_SME), 310 - FTR_STRICT, FTR_EXACT, ID_AA64SMFR0_F16F32_SHIFT, 1, 0), 310 + FTR_STRICT, FTR_EXACT, ID_AA64SMFR0_EL1_F16F32_SHIFT, 1, 0), 311 311 ARM64_FTR_BITS(FTR_VISIBLE_IF_IS_ENABLED(CONFIG_ARM64_SME), 312 - FTR_STRICT, FTR_EXACT, ID_AA64SMFR0_B16F32_SHIFT, 1, 0), 312 + FTR_STRICT, FTR_EXACT, ID_AA64SMFR0_EL1_B16F32_SHIFT, 1, 0), 313 313 ARM64_FTR_BITS(FTR_VISIBLE_IF_IS_ENABLED(CONFIG_ARM64_SME), 314 - FTR_STRICT, FTR_EXACT, ID_AA64SMFR0_F32F32_SHIFT, 1, 0), 314 + FTR_STRICT, FTR_EXACT, ID_AA64SMFR0_EL1_F32F32_SHIFT, 1, 0), 315 315 ARM64_FTR_END, 316 316 }; 317 317 ··· 397 397 398 398 static const struct arm64_ftr_bits ftr_ctr[] = { 399 399 ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_EXACT, 31, 1, 1), /* RES1 */ 400 - ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, CTR_DIC_SHIFT, 1, 1), 401 - ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, CTR_IDC_SHIFT, 1, 1), 402 - ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_HIGHER_OR_ZERO_SAFE, CTR_CWG_SHIFT, 4, 0), 403 - ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_HIGHER_OR_ZERO_SAFE, CTR_ERG_SHIFT, 4, 0), 404 - ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, CTR_DMINLINE_SHIFT, 4, 1), 400 + ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, CTR_EL0_DIC_SHIFT, 1, 1), 401 + ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, CTR_EL0_IDC_SHIFT, 1, 1), 402 + ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_HIGHER_OR_ZERO_SAFE, CTR_EL0_CWG_SHIFT, 4, 0), 403 + ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_HIGHER_OR_ZERO_SAFE, CTR_EL0_ERG_SHIFT, 4, 0), 404 + ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, CTR_EL0_DminLine_SHIFT, 4, 1), 405 405 /* 406 406 * Linux can handle differing I-cache policies. Userspace JITs will 407 407 * make use of *minLine. 408 408 * If we have differing I-cache policies, report it as the weakest - VIPT. 409 409 */ 410 - ARM64_FTR_BITS(FTR_VISIBLE, FTR_NONSTRICT, FTR_EXACT, CTR_L1IP_SHIFT, 2, ICACHE_POLICY_VIPT), /* L1Ip */ 411 - ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, CTR_IMINLINE_SHIFT, 4, 0), 410 + ARM64_FTR_BITS(FTR_VISIBLE, FTR_NONSTRICT, FTR_EXACT, CTR_EL0_L1Ip_SHIFT, 2, CTR_EL0_L1Ip_VIPT), /* L1Ip */ 411 + ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, CTR_EL0_IminLine_SHIFT, 4, 0), 412 412 ARM64_FTR_END, 413 413 }; 414 414 ··· 454 454 }; 455 455 456 456 static const struct arm64_ftr_bits ftr_dczid[] = { 457 - ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_EXACT, DCZID_DZP_SHIFT, 1, 1), 458 - ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, DCZID_BS_SHIFT, 4, 0), 457 + ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_EXACT, DCZID_EL0_DZP_SHIFT, 1, 1), 458 + ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, DCZID_EL0_BS_SHIFT, 4, 0), 459 459 ARM64_FTR_END, 460 460 }; 461 461 462 462 static const struct arm64_ftr_bits ftr_gmid[] = { 463 - ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, SYS_GMID_EL1_BS_SHIFT, 4, 0), 463 + ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, GMID_EL1_BS_SHIFT, 4, 0), 464 464 ARM64_FTR_END, 465 465 }; 466 466 ··· 1481 1481 else 1482 1482 ctr = read_cpuid_effective_cachetype(); 1483 1483 1484 - return ctr & BIT(CTR_IDC_SHIFT); 1484 + return ctr & BIT(CTR_EL0_IDC_SHIFT); 1485 1485 } 1486 1486 1487 1487 static void cpu_emulate_effective_ctr(const struct arm64_cpu_capabilities *__unused) ··· 1492 1492 * to the CTR_EL0 on this CPU and emulate it with the real/safe 1493 1493 * value. 1494 1494 */ 1495 - if (!(read_cpuid_cachetype() & BIT(CTR_IDC_SHIFT))) 1495 + if (!(read_cpuid_cachetype() & BIT(CTR_EL0_IDC_SHIFT))) 1496 1496 sysreg_clear_set(sctlr_el1, SCTLR_EL1_UCT, 0); 1497 1497 } 1498 1498 ··· 1506 1506 else 1507 1507 ctr = read_cpuid_cachetype(); 1508 1508 1509 - return ctr & BIT(CTR_DIC_SHIFT); 1509 + return ctr & BIT(CTR_EL0_DIC_SHIFT); 1510 1510 } 1511 1511 1512 1512 static bool __maybe_unused ··· 2189 2189 .type = ARM64_CPUCAP_SYSTEM_FEATURE, 2190 2190 .matches = has_cpuid_feature, 2191 2191 .sys_reg = SYS_ID_AA64ISAR1_EL1, 2192 - .field_pos = ID_AA64ISAR1_DPB_SHIFT, 2192 + .field_pos = ID_AA64ISAR1_EL1_DPB_SHIFT, 2193 2193 .field_width = 4, 2194 2194 .min_field_value = 1, 2195 2195 }, ··· 2200 2200 .matches = has_cpuid_feature, 2201 2201 .sys_reg = SYS_ID_AA64ISAR1_EL1, 2202 2202 .sign = FTR_UNSIGNED, 2203 - .field_pos = ID_AA64ISAR1_DPB_SHIFT, 2203 + .field_pos = ID_AA64ISAR1_EL1_DPB_SHIFT, 2204 2204 .field_width = 4, 2205 2205 .min_field_value = 2, 2206 2206 }, ··· 2360 2360 .type = ARM64_CPUCAP_SYSTEM_FEATURE, 2361 2361 .matches = has_cpuid_feature, 2362 2362 .sys_reg = SYS_ID_AA64ISAR1_EL1, 2363 - .field_pos = ID_AA64ISAR1_SB_SHIFT, 2363 + .field_pos = ID_AA64ISAR1_EL1_SB_SHIFT, 2364 2364 .field_width = 4, 2365 2365 .sign = FTR_UNSIGNED, 2366 2366 .min_field_value = 1, ··· 2372 2372 .type = ARM64_CPUCAP_BOOT_CPU_FEATURE, 2373 2373 .sys_reg = SYS_ID_AA64ISAR1_EL1, 2374 2374 .sign = FTR_UNSIGNED, 2375 - .field_pos = ID_AA64ISAR1_APA_SHIFT, 2375 + .field_pos = ID_AA64ISAR1_EL1_APA_SHIFT, 2376 2376 .field_width = 4, 2377 - .min_field_value = ID_AA64ISAR1_APA_ARCHITECTED, 2377 + .min_field_value = ID_AA64ISAR1_EL1_APA_PAuth, 2378 2378 .matches = has_address_auth_cpucap, 2379 2379 }, 2380 2380 { ··· 2383 2383 .type = ARM64_CPUCAP_BOOT_CPU_FEATURE, 2384 2384 .sys_reg = SYS_ID_AA64ISAR2_EL1, 2385 2385 .sign = FTR_UNSIGNED, 2386 - .field_pos = ID_AA64ISAR2_APA3_SHIFT, 2386 + .field_pos = ID_AA64ISAR2_EL1_APA3_SHIFT, 2387 2387 .field_width = 4, 2388 - .min_field_value = ID_AA64ISAR2_APA3_ARCHITECTED, 2388 + .min_field_value = ID_AA64ISAR2_EL1_APA3_PAuth, 2389 2389 .matches = has_address_auth_cpucap, 2390 2390 }, 2391 2391 { ··· 2394 2394 .type = ARM64_CPUCAP_BOOT_CPU_FEATURE, 2395 2395 .sys_reg = SYS_ID_AA64ISAR1_EL1, 2396 2396 .sign = FTR_UNSIGNED, 2397 - .field_pos = ID_AA64ISAR1_API_SHIFT, 2397 + .field_pos = ID_AA64ISAR1_EL1_API_SHIFT, 2398 2398 .field_width = 4, 2399 - .min_field_value = ID_AA64ISAR1_API_IMP_DEF, 2399 + .min_field_value = ID_AA64ISAR1_EL1_API_PAuth, 2400 2400 .matches = has_address_auth_cpucap, 2401 2401 }, 2402 2402 { ··· 2410 2410 .type = ARM64_CPUCAP_SYSTEM_FEATURE, 2411 2411 .sys_reg = SYS_ID_AA64ISAR1_EL1, 2412 2412 .sign = FTR_UNSIGNED, 2413 - .field_pos = ID_AA64ISAR1_GPA_SHIFT, 2413 + .field_pos = ID_AA64ISAR1_EL1_GPA_SHIFT, 2414 2414 .field_width = 4, 2415 - .min_field_value = ID_AA64ISAR1_GPA_ARCHITECTED, 2415 + .min_field_value = ID_AA64ISAR1_EL1_GPA_IMP, 2416 2416 .matches = has_cpuid_feature, 2417 2417 }, 2418 2418 { ··· 2421 2421 .type = ARM64_CPUCAP_SYSTEM_FEATURE, 2422 2422 .sys_reg = SYS_ID_AA64ISAR2_EL1, 2423 2423 .sign = FTR_UNSIGNED, 2424 - .field_pos = ID_AA64ISAR2_GPA3_SHIFT, 2424 + .field_pos = ID_AA64ISAR2_EL1_GPA3_SHIFT, 2425 2425 .field_width = 4, 2426 - .min_field_value = ID_AA64ISAR2_GPA3_ARCHITECTED, 2426 + .min_field_value = ID_AA64ISAR2_EL1_GPA3_IMP, 2427 2427 .matches = has_cpuid_feature, 2428 2428 }, 2429 2429 { ··· 2432 2432 .type = ARM64_CPUCAP_SYSTEM_FEATURE, 2433 2433 .sys_reg = SYS_ID_AA64ISAR1_EL1, 2434 2434 .sign = FTR_UNSIGNED, 2435 - .field_pos = ID_AA64ISAR1_GPI_SHIFT, 2435 + .field_pos = ID_AA64ISAR1_EL1_GPI_SHIFT, 2436 2436 .field_width = 4, 2437 - .min_field_value = ID_AA64ISAR1_GPI_IMP_DEF, 2437 + .min_field_value = ID_AA64ISAR1_EL1_GPI_IMP, 2438 2438 .matches = has_cpuid_feature, 2439 2439 }, 2440 2440 { ··· 2535 2535 .type = ARM64_CPUCAP_SYSTEM_FEATURE, 2536 2536 .sys_reg = SYS_ID_AA64ISAR1_EL1, 2537 2537 .sign = FTR_UNSIGNED, 2538 - .field_pos = ID_AA64ISAR1_LRCPC_SHIFT, 2538 + .field_pos = ID_AA64ISAR1_EL1_LRCPC_SHIFT, 2539 2539 .field_width = 4, 2540 2540 .matches = has_cpuid_feature, 2541 2541 .min_field_value = 1, ··· 2560 2560 .capability = ARM64_SME_FA64, 2561 2561 .sys_reg = SYS_ID_AA64SMFR0_EL1, 2562 2562 .sign = FTR_UNSIGNED, 2563 - .field_pos = ID_AA64SMFR0_FA64_SHIFT, 2563 + .field_pos = ID_AA64SMFR0_EL1_FA64_SHIFT, 2564 2564 .field_width = 1, 2565 - .min_field_value = ID_AA64SMFR0_FA64, 2565 + .min_field_value = ID_AA64SMFR0_EL1_FA64_IMP, 2566 2566 .matches = has_cpuid_feature, 2567 2567 .cpu_enable = fa64_kernel_enable, 2568 2568 }, ··· 2573 2573 .type = ARM64_CPUCAP_SYSTEM_FEATURE, 2574 2574 .sys_reg = SYS_ID_AA64ISAR2_EL1, 2575 2575 .sign = FTR_UNSIGNED, 2576 - .field_pos = ID_AA64ISAR2_WFXT_SHIFT, 2576 + .field_pos = ID_AA64ISAR2_EL1_WFxT_SHIFT, 2577 2577 .field_width = 4, 2578 2578 .matches = has_cpuid_feature, 2579 - .min_field_value = ID_AA64ISAR2_WFXT_SUPPORTED, 2579 + .min_field_value = ID_AA64ISAR2_EL1_WFxT_IMP, 2580 2580 }, 2581 2581 {}, 2582 2582 }; ··· 2617 2617 #ifdef CONFIG_ARM64_PTR_AUTH 2618 2618 static const struct arm64_cpu_capabilities ptr_auth_hwcap_addr_matches[] = { 2619 2619 { 2620 - HWCAP_CPUID_MATCH(SYS_ID_AA64ISAR1_EL1, ID_AA64ISAR1_APA_SHIFT, 2620 + HWCAP_CPUID_MATCH(SYS_ID_AA64ISAR1_EL1, ID_AA64ISAR1_EL1_APA_SHIFT, 2621 2621 4, FTR_UNSIGNED, 2622 - ID_AA64ISAR1_APA_ARCHITECTED) 2622 + ID_AA64ISAR1_EL1_APA_PAuth) 2623 2623 }, 2624 2624 { 2625 - HWCAP_CPUID_MATCH(SYS_ID_AA64ISAR2_EL1, ID_AA64ISAR2_APA3_SHIFT, 2626 - 4, FTR_UNSIGNED, ID_AA64ISAR2_APA3_ARCHITECTED) 2625 + HWCAP_CPUID_MATCH(SYS_ID_AA64ISAR2_EL1, ID_AA64ISAR2_EL1_APA3_SHIFT, 2626 + 4, FTR_UNSIGNED, ID_AA64ISAR2_EL1_APA3_PAuth) 2627 2627 }, 2628 2628 { 2629 - HWCAP_CPUID_MATCH(SYS_ID_AA64ISAR1_EL1, ID_AA64ISAR1_API_SHIFT, 2630 - 4, FTR_UNSIGNED, ID_AA64ISAR1_API_IMP_DEF) 2629 + HWCAP_CPUID_MATCH(SYS_ID_AA64ISAR1_EL1, ID_AA64ISAR1_EL1_API_SHIFT, 2630 + 4, FTR_UNSIGNED, ID_AA64ISAR1_EL1_API_PAuth) 2631 2631 }, 2632 2632 {}, 2633 2633 }; 2634 2634 2635 2635 static const struct arm64_cpu_capabilities ptr_auth_hwcap_gen_matches[] = { 2636 2636 { 2637 - HWCAP_CPUID_MATCH(SYS_ID_AA64ISAR1_EL1, ID_AA64ISAR1_GPA_SHIFT, 2638 - 4, FTR_UNSIGNED, ID_AA64ISAR1_GPA_ARCHITECTED) 2637 + HWCAP_CPUID_MATCH(SYS_ID_AA64ISAR1_EL1, ID_AA64ISAR1_EL1_GPA_SHIFT, 2638 + 4, FTR_UNSIGNED, ID_AA64ISAR1_EL1_GPA_IMP) 2639 2639 }, 2640 2640 { 2641 - HWCAP_CPUID_MATCH(SYS_ID_AA64ISAR2_EL1, ID_AA64ISAR2_GPA3_SHIFT, 2642 - 4, FTR_UNSIGNED, ID_AA64ISAR2_GPA3_ARCHITECTED) 2641 + HWCAP_CPUID_MATCH(SYS_ID_AA64ISAR2_EL1, ID_AA64ISAR2_EL1_GPA3_SHIFT, 2642 + 4, FTR_UNSIGNED, ID_AA64ISAR2_EL1_GPA3_IMP) 2643 2643 }, 2644 2644 { 2645 - HWCAP_CPUID_MATCH(SYS_ID_AA64ISAR1_EL1, ID_AA64ISAR1_GPI_SHIFT, 2646 - 4, FTR_UNSIGNED, ID_AA64ISAR1_GPI_IMP_DEF) 2645 + HWCAP_CPUID_MATCH(SYS_ID_AA64ISAR1_EL1, ID_AA64ISAR1_EL1_GPI_SHIFT, 2646 + 4, FTR_UNSIGNED, ID_AA64ISAR1_EL1_GPI_IMP) 2647 2647 }, 2648 2648 {}, 2649 2649 }; ··· 2671 2671 HWCAP_CAP(SYS_ID_AA64PFR0_EL1, ID_AA64PFR0_ASIMD_SHIFT, 4, FTR_SIGNED, 0, CAP_HWCAP, KERNEL_HWCAP_ASIMD), 2672 2672 HWCAP_CAP(SYS_ID_AA64PFR0_EL1, ID_AA64PFR0_ASIMD_SHIFT, 4, FTR_SIGNED, 1, CAP_HWCAP, KERNEL_HWCAP_ASIMDHP), 2673 2673 HWCAP_CAP(SYS_ID_AA64PFR0_EL1, ID_AA64PFR0_DIT_SHIFT, 4, FTR_SIGNED, 1, CAP_HWCAP, KERNEL_HWCAP_DIT), 2674 - HWCAP_CAP(SYS_ID_AA64ISAR1_EL1, ID_AA64ISAR1_DPB_SHIFT, 4, FTR_UNSIGNED, 1, CAP_HWCAP, KERNEL_HWCAP_DCPOP), 2675 - HWCAP_CAP(SYS_ID_AA64ISAR1_EL1, ID_AA64ISAR1_DPB_SHIFT, 4, FTR_UNSIGNED, 2, CAP_HWCAP, KERNEL_HWCAP_DCPODP), 2676 - HWCAP_CAP(SYS_ID_AA64ISAR1_EL1, ID_AA64ISAR1_JSCVT_SHIFT, 4, FTR_UNSIGNED, 1, CAP_HWCAP, KERNEL_HWCAP_JSCVT), 2677 - HWCAP_CAP(SYS_ID_AA64ISAR1_EL1, ID_AA64ISAR1_FCMA_SHIFT, 4, FTR_UNSIGNED, 1, CAP_HWCAP, KERNEL_HWCAP_FCMA), 2678 - HWCAP_CAP(SYS_ID_AA64ISAR1_EL1, ID_AA64ISAR1_LRCPC_SHIFT, 4, FTR_UNSIGNED, 1, CAP_HWCAP, KERNEL_HWCAP_LRCPC), 2679 - HWCAP_CAP(SYS_ID_AA64ISAR1_EL1, ID_AA64ISAR1_LRCPC_SHIFT, 4, FTR_UNSIGNED, 2, CAP_HWCAP, KERNEL_HWCAP_ILRCPC), 2680 - HWCAP_CAP(SYS_ID_AA64ISAR1_EL1, ID_AA64ISAR1_FRINTTS_SHIFT, 4, FTR_UNSIGNED, 1, CAP_HWCAP, KERNEL_HWCAP_FRINT), 2681 - HWCAP_CAP(SYS_ID_AA64ISAR1_EL1, ID_AA64ISAR1_SB_SHIFT, 4, FTR_UNSIGNED, 1, CAP_HWCAP, KERNEL_HWCAP_SB), 2682 - HWCAP_CAP(SYS_ID_AA64ISAR1_EL1, ID_AA64ISAR1_BF16_SHIFT, 4, FTR_UNSIGNED, 1, CAP_HWCAP, KERNEL_HWCAP_BF16), 2683 - HWCAP_CAP(SYS_ID_AA64ISAR1_EL1, ID_AA64ISAR1_DGH_SHIFT, 4, FTR_UNSIGNED, 1, CAP_HWCAP, KERNEL_HWCAP_DGH), 2684 - HWCAP_CAP(SYS_ID_AA64ISAR1_EL1, ID_AA64ISAR1_I8MM_SHIFT, 4, FTR_UNSIGNED, 1, CAP_HWCAP, KERNEL_HWCAP_I8MM), 2674 + HWCAP_CAP(SYS_ID_AA64ISAR1_EL1, ID_AA64ISAR1_EL1_DPB_SHIFT, 4, FTR_UNSIGNED, 1, CAP_HWCAP, KERNEL_HWCAP_DCPOP), 2675 + HWCAP_CAP(SYS_ID_AA64ISAR1_EL1, ID_AA64ISAR1_EL1_DPB_SHIFT, 4, FTR_UNSIGNED, 2, CAP_HWCAP, KERNEL_HWCAP_DCPODP), 2676 + HWCAP_CAP(SYS_ID_AA64ISAR1_EL1, ID_AA64ISAR1_EL1_JSCVT_SHIFT, 4, FTR_UNSIGNED, 1, CAP_HWCAP, KERNEL_HWCAP_JSCVT), 2677 + HWCAP_CAP(SYS_ID_AA64ISAR1_EL1, ID_AA64ISAR1_EL1_FCMA_SHIFT, 4, FTR_UNSIGNED, 1, CAP_HWCAP, KERNEL_HWCAP_FCMA), 2678 + HWCAP_CAP(SYS_ID_AA64ISAR1_EL1, ID_AA64ISAR1_EL1_LRCPC_SHIFT, 4, FTR_UNSIGNED, 1, CAP_HWCAP, KERNEL_HWCAP_LRCPC), 2679 + HWCAP_CAP(SYS_ID_AA64ISAR1_EL1, ID_AA64ISAR1_EL1_LRCPC_SHIFT, 4, FTR_UNSIGNED, 2, CAP_HWCAP, KERNEL_HWCAP_ILRCPC), 2680 + HWCAP_CAP(SYS_ID_AA64ISAR1_EL1, ID_AA64ISAR1_EL1_FRINTTS_SHIFT, 4, FTR_UNSIGNED, 1, CAP_HWCAP, KERNEL_HWCAP_FRINT), 2681 + HWCAP_CAP(SYS_ID_AA64ISAR1_EL1, ID_AA64ISAR1_EL1_SB_SHIFT, 4, FTR_UNSIGNED, 1, CAP_HWCAP, KERNEL_HWCAP_SB), 2682 + HWCAP_CAP(SYS_ID_AA64ISAR1_EL1, ID_AA64ISAR1_EL1_BF16_SHIFT, 4, FTR_UNSIGNED, 1, CAP_HWCAP, KERNEL_HWCAP_BF16), 2683 + HWCAP_CAP(SYS_ID_AA64ISAR1_EL1, ID_AA64ISAR1_EL1_DGH_SHIFT, 4, FTR_UNSIGNED, 1, CAP_HWCAP, KERNEL_HWCAP_DGH), 2684 + HWCAP_CAP(SYS_ID_AA64ISAR1_EL1, ID_AA64ISAR1_EL1_I8MM_SHIFT, 4, FTR_UNSIGNED, 1, CAP_HWCAP, KERNEL_HWCAP_I8MM), 2685 2685 HWCAP_CAP(SYS_ID_AA64MMFR2_EL1, ID_AA64MMFR2_AT_SHIFT, 4, FTR_UNSIGNED, 1, CAP_HWCAP, KERNEL_HWCAP_USCAT), 2686 2686 #ifdef CONFIG_ARM64_SVE 2687 2687 HWCAP_CAP(SYS_ID_AA64PFR0_EL1, ID_AA64PFR0_SVE_SHIFT, 4, FTR_UNSIGNED, ID_AA64PFR0_SVE, CAP_HWCAP, KERNEL_HWCAP_SVE), 2688 - HWCAP_CAP(SYS_ID_AA64ZFR0_EL1, ID_AA64ZFR0_SVEVER_SHIFT, 4, FTR_UNSIGNED, ID_AA64ZFR0_SVEVER_SVE2, CAP_HWCAP, KERNEL_HWCAP_SVE2), 2689 - HWCAP_CAP(SYS_ID_AA64ZFR0_EL1, ID_AA64ZFR0_AES_SHIFT, 4, FTR_UNSIGNED, ID_AA64ZFR0_AES, CAP_HWCAP, KERNEL_HWCAP_SVEAES), 2690 - HWCAP_CAP(SYS_ID_AA64ZFR0_EL1, ID_AA64ZFR0_AES_SHIFT, 4, FTR_UNSIGNED, ID_AA64ZFR0_AES_PMULL, CAP_HWCAP, KERNEL_HWCAP_SVEPMULL), 2691 - HWCAP_CAP(SYS_ID_AA64ZFR0_EL1, ID_AA64ZFR0_BITPERM_SHIFT, 4, FTR_UNSIGNED, ID_AA64ZFR0_BITPERM, CAP_HWCAP, KERNEL_HWCAP_SVEBITPERM), 2692 - HWCAP_CAP(SYS_ID_AA64ZFR0_EL1, ID_AA64ZFR0_BF16_SHIFT, 4, FTR_UNSIGNED, ID_AA64ZFR0_BF16, CAP_HWCAP, KERNEL_HWCAP_SVEBF16), 2693 - HWCAP_CAP(SYS_ID_AA64ZFR0_EL1, ID_AA64ZFR0_SHA3_SHIFT, 4, FTR_UNSIGNED, ID_AA64ZFR0_SHA3, CAP_HWCAP, KERNEL_HWCAP_SVESHA3), 2694 - HWCAP_CAP(SYS_ID_AA64ZFR0_EL1, ID_AA64ZFR0_SM4_SHIFT, 4, FTR_UNSIGNED, ID_AA64ZFR0_SM4, CAP_HWCAP, KERNEL_HWCAP_SVESM4), 2695 - HWCAP_CAP(SYS_ID_AA64ZFR0_EL1, ID_AA64ZFR0_I8MM_SHIFT, 4, FTR_UNSIGNED, ID_AA64ZFR0_I8MM, CAP_HWCAP, KERNEL_HWCAP_SVEI8MM), 2696 - HWCAP_CAP(SYS_ID_AA64ZFR0_EL1, ID_AA64ZFR0_F32MM_SHIFT, 4, FTR_UNSIGNED, ID_AA64ZFR0_F32MM, CAP_HWCAP, KERNEL_HWCAP_SVEF32MM), 2697 - HWCAP_CAP(SYS_ID_AA64ZFR0_EL1, ID_AA64ZFR0_F64MM_SHIFT, 4, FTR_UNSIGNED, ID_AA64ZFR0_F64MM, CAP_HWCAP, KERNEL_HWCAP_SVEF64MM), 2688 + HWCAP_CAP(SYS_ID_AA64ZFR0_EL1, ID_AA64ZFR0_EL1_SVEver_SHIFT, 4, FTR_UNSIGNED, ID_AA64ZFR0_EL1_SVEver_SVE2, CAP_HWCAP, KERNEL_HWCAP_SVE2), 2689 + HWCAP_CAP(SYS_ID_AA64ZFR0_EL1, ID_AA64ZFR0_EL1_AES_SHIFT, 4, FTR_UNSIGNED, ID_AA64ZFR0_EL1_AES_IMP, CAP_HWCAP, KERNEL_HWCAP_SVEAES), 2690 + HWCAP_CAP(SYS_ID_AA64ZFR0_EL1, ID_AA64ZFR0_EL1_AES_SHIFT, 4, FTR_UNSIGNED, ID_AA64ZFR0_EL1_AES_PMULL128, CAP_HWCAP, KERNEL_HWCAP_SVEPMULL), 2691 + HWCAP_CAP(SYS_ID_AA64ZFR0_EL1, ID_AA64ZFR0_EL1_BitPerm_SHIFT, 4, FTR_UNSIGNED, ID_AA64ZFR0_EL1_BitPerm_IMP, CAP_HWCAP, KERNEL_HWCAP_SVEBITPERM), 2692 + HWCAP_CAP(SYS_ID_AA64ZFR0_EL1, ID_AA64ZFR0_EL1_BF16_SHIFT, 4, FTR_UNSIGNED, ID_AA64ZFR0_EL1_BF16_IMP, CAP_HWCAP, KERNEL_HWCAP_SVEBF16), 2693 + HWCAP_CAP(SYS_ID_AA64ZFR0_EL1, ID_AA64ZFR0_EL1_SHA3_SHIFT, 4, FTR_UNSIGNED, ID_AA64ZFR0_EL1_SHA3_IMP, CAP_HWCAP, KERNEL_HWCAP_SVESHA3), 2694 + HWCAP_CAP(SYS_ID_AA64ZFR0_EL1, ID_AA64ZFR0_EL1_SM4_SHIFT, 4, FTR_UNSIGNED, ID_AA64ZFR0_EL1_SM4_IMP, CAP_HWCAP, KERNEL_HWCAP_SVESM4), 2695 + HWCAP_CAP(SYS_ID_AA64ZFR0_EL1, ID_AA64ZFR0_EL1_I8MM_SHIFT, 4, FTR_UNSIGNED, ID_AA64ZFR0_EL1_I8MM_IMP, CAP_HWCAP, KERNEL_HWCAP_SVEI8MM), 2696 + HWCAP_CAP(SYS_ID_AA64ZFR0_EL1, ID_AA64ZFR0_EL1_F32MM_SHIFT, 4, FTR_UNSIGNED, ID_AA64ZFR0_EL1_F32MM_IMP, CAP_HWCAP, KERNEL_HWCAP_SVEF32MM), 2697 + HWCAP_CAP(SYS_ID_AA64ZFR0_EL1, ID_AA64ZFR0_EL1_F64MM_SHIFT, 4, FTR_UNSIGNED, ID_AA64ZFR0_EL1_F64MM_IMP, CAP_HWCAP, KERNEL_HWCAP_SVEF64MM), 2698 2698 #endif 2699 2699 HWCAP_CAP(SYS_ID_AA64PFR1_EL1, ID_AA64PFR1_SSBS_SHIFT, 4, FTR_UNSIGNED, ID_AA64PFR1_SSBS_PSTATE_INSNS, CAP_HWCAP, KERNEL_HWCAP_SSBS), 2700 2700 #ifdef CONFIG_ARM64_BTI ··· 2710 2710 #endif /* CONFIG_ARM64_MTE */ 2711 2711 HWCAP_CAP(SYS_ID_AA64MMFR0_EL1, ID_AA64MMFR0_ECV_SHIFT, 4, FTR_UNSIGNED, 1, CAP_HWCAP, KERNEL_HWCAP_ECV), 2712 2712 HWCAP_CAP(SYS_ID_AA64MMFR1_EL1, ID_AA64MMFR1_AFP_SHIFT, 4, FTR_UNSIGNED, 1, CAP_HWCAP, KERNEL_HWCAP_AFP), 2713 - HWCAP_CAP(SYS_ID_AA64ISAR2_EL1, ID_AA64ISAR2_RPRES_SHIFT, 4, FTR_UNSIGNED, 1, CAP_HWCAP, KERNEL_HWCAP_RPRES), 2714 - HWCAP_CAP(SYS_ID_AA64ISAR2_EL1, ID_AA64ISAR2_WFXT_SHIFT, 4, FTR_UNSIGNED, ID_AA64ISAR2_WFXT_SUPPORTED, CAP_HWCAP, KERNEL_HWCAP_WFXT), 2713 + HWCAP_CAP(SYS_ID_AA64ISAR2_EL1, ID_AA64ISAR2_EL1_RPRES_SHIFT, 4, FTR_UNSIGNED, 1, CAP_HWCAP, KERNEL_HWCAP_RPRES), 2714 + HWCAP_CAP(SYS_ID_AA64ISAR2_EL1, ID_AA64ISAR2_EL1_WFxT_SHIFT, 4, FTR_UNSIGNED, ID_AA64ISAR2_EL1_WFxT_IMP, CAP_HWCAP, KERNEL_HWCAP_WFXT), 2715 2715 #ifdef CONFIG_ARM64_SME 2716 2716 HWCAP_CAP(SYS_ID_AA64PFR1_EL1, ID_AA64PFR1_SME_SHIFT, 4, FTR_UNSIGNED, ID_AA64PFR1_SME, CAP_HWCAP, KERNEL_HWCAP_SME), 2717 - HWCAP_CAP(SYS_ID_AA64SMFR0_EL1, ID_AA64SMFR0_FA64_SHIFT, 1, FTR_UNSIGNED, ID_AA64SMFR0_FA64, CAP_HWCAP, KERNEL_HWCAP_SME_FA64), 2718 - HWCAP_CAP(SYS_ID_AA64SMFR0_EL1, ID_AA64SMFR0_I16I64_SHIFT, 4, FTR_UNSIGNED, ID_AA64SMFR0_I16I64, CAP_HWCAP, KERNEL_HWCAP_SME_I16I64), 2719 - HWCAP_CAP(SYS_ID_AA64SMFR0_EL1, ID_AA64SMFR0_F64F64_SHIFT, 1, FTR_UNSIGNED, ID_AA64SMFR0_F64F64, CAP_HWCAP, KERNEL_HWCAP_SME_F64F64), 2720 - HWCAP_CAP(SYS_ID_AA64SMFR0_EL1, ID_AA64SMFR0_I8I32_SHIFT, 4, FTR_UNSIGNED, ID_AA64SMFR0_I8I32, CAP_HWCAP, KERNEL_HWCAP_SME_I8I32), 2721 - HWCAP_CAP(SYS_ID_AA64SMFR0_EL1, ID_AA64SMFR0_F16F32_SHIFT, 1, FTR_UNSIGNED, ID_AA64SMFR0_F16F32, CAP_HWCAP, KERNEL_HWCAP_SME_F16F32), 2722 - HWCAP_CAP(SYS_ID_AA64SMFR0_EL1, ID_AA64SMFR0_B16F32_SHIFT, 1, FTR_UNSIGNED, ID_AA64SMFR0_B16F32, CAP_HWCAP, KERNEL_HWCAP_SME_B16F32), 2723 - HWCAP_CAP(SYS_ID_AA64SMFR0_EL1, ID_AA64SMFR0_F32F32_SHIFT, 1, FTR_UNSIGNED, ID_AA64SMFR0_F32F32, CAP_HWCAP, KERNEL_HWCAP_SME_F32F32), 2717 + HWCAP_CAP(SYS_ID_AA64SMFR0_EL1, ID_AA64SMFR0_EL1_FA64_SHIFT, 1, FTR_UNSIGNED, ID_AA64SMFR0_EL1_FA64_IMP, CAP_HWCAP, KERNEL_HWCAP_SME_FA64), 2718 + HWCAP_CAP(SYS_ID_AA64SMFR0_EL1, ID_AA64SMFR0_EL1_I16I64_SHIFT, 4, FTR_UNSIGNED, ID_AA64SMFR0_EL1_I16I64_IMP, CAP_HWCAP, KERNEL_HWCAP_SME_I16I64), 2719 + HWCAP_CAP(SYS_ID_AA64SMFR0_EL1, ID_AA64SMFR0_EL1_F64F64_SHIFT, 1, FTR_UNSIGNED, ID_AA64SMFR0_EL1_F64F64_IMP, CAP_HWCAP, KERNEL_HWCAP_SME_F64F64), 2720 + HWCAP_CAP(SYS_ID_AA64SMFR0_EL1, ID_AA64SMFR0_EL1_I8I32_SHIFT, 4, FTR_UNSIGNED, ID_AA64SMFR0_EL1_I8I32_IMP, CAP_HWCAP, KERNEL_HWCAP_SME_I8I32), 2721 + HWCAP_CAP(SYS_ID_AA64SMFR0_EL1, ID_AA64SMFR0_EL1_F16F32_SHIFT, 1, FTR_UNSIGNED, ID_AA64SMFR0_EL1_F16F32_IMP, CAP_HWCAP, KERNEL_HWCAP_SME_F16F32), 2722 + HWCAP_CAP(SYS_ID_AA64SMFR0_EL1, ID_AA64SMFR0_EL1_B16F32_SHIFT, 1, FTR_UNSIGNED, ID_AA64SMFR0_EL1_B16F32_IMP, CAP_HWCAP, KERNEL_HWCAP_SME_B16F32), 2723 + HWCAP_CAP(SYS_ID_AA64SMFR0_EL1, ID_AA64SMFR0_EL1_F32F32_SHIFT, 1, FTR_UNSIGNED, ID_AA64SMFR0_EL1_F32F32_IMP, CAP_HWCAP, KERNEL_HWCAP_SME_F32F32), 2724 2724 #endif /* CONFIG_ARM64_SME */ 2725 2725 {}, 2726 2726 };
+18 -11
arch/arm64/kernel/cpuinfo.c
··· 33 33 DEFINE_PER_CPU(struct cpuinfo_arm64, cpu_data); 34 34 static struct cpuinfo_arm64 boot_cpu_data; 35 35 36 - static const char *icache_policy_str[] = { 37 - [ICACHE_POLICY_VPIPT] = "VPIPT", 38 - [ICACHE_POLICY_RESERVED] = "RESERVED/UNKNOWN", 39 - [ICACHE_POLICY_VIPT] = "VIPT", 40 - [ICACHE_POLICY_PIPT] = "PIPT", 41 - }; 36 + static inline const char *icache_policy_str(int l1ip) 37 + { 38 + switch (l1ip) { 39 + case CTR_EL0_L1Ip_VPIPT: 40 + return "VPIPT"; 41 + case CTR_EL0_L1Ip_VIPT: 42 + return "VIPT"; 43 + case CTR_EL0_L1Ip_PIPT: 44 + return "PIPT"; 45 + default: 46 + return "RESERVED/UNKNOWN"; 47 + } 48 + } 42 49 43 50 unsigned long __icache_flags; 44 51 ··· 362 355 u32 l1ip = CTR_L1IP(info->reg_ctr); 363 356 364 357 switch (l1ip) { 365 - case ICACHE_POLICY_PIPT: 358 + case CTR_EL0_L1Ip_PIPT: 366 359 break; 367 - case ICACHE_POLICY_VPIPT: 360 + case CTR_EL0_L1Ip_VPIPT: 368 361 set_bit(ICACHEF_VPIPT, &__icache_flags); 369 362 break; 370 - case ICACHE_POLICY_RESERVED: 371 - case ICACHE_POLICY_VIPT: 363 + case CTR_EL0_L1Ip_VIPT: 364 + default: 372 365 /* Assume aliasing */ 373 366 set_bit(ICACHEF_ALIASING, &__icache_flags); 374 367 break; 375 368 } 376 369 377 - pr_info("Detected %s I-cache on CPU%d\n", icache_policy_str[l1ip], cpu); 370 + pr_info("Detected %s I-cache on CPU%d\n", icache_policy_str(l1ip), cpu); 378 371 } 379 372 380 373 static void __cpuinfo_store_cpu_32bit(struct cpuinfo_32bit *info)
+7 -7
arch/arm64/kernel/idreg-override.c
··· 53 53 .name = "id_aa64pfr1", 54 54 .override = &id_aa64pfr1_override, 55 55 .fields = { 56 - { "bt", ID_AA64PFR1_BT_SHIFT }, 56 + { "bt", ID_AA64PFR1_BT_SHIFT }, 57 57 { "mte", ID_AA64PFR1_MTE_SHIFT}, 58 58 {} 59 59 }, ··· 63 63 .name = "id_aa64isar1", 64 64 .override = &id_aa64isar1_override, 65 65 .fields = { 66 - { "gpi", ID_AA64ISAR1_GPI_SHIFT }, 67 - { "gpa", ID_AA64ISAR1_GPA_SHIFT }, 68 - { "api", ID_AA64ISAR1_API_SHIFT }, 69 - { "apa", ID_AA64ISAR1_APA_SHIFT }, 66 + { "gpi", ID_AA64ISAR1_EL1_GPI_SHIFT }, 67 + { "gpa", ID_AA64ISAR1_EL1_GPA_SHIFT }, 68 + { "api", ID_AA64ISAR1_EL1_API_SHIFT }, 69 + { "apa", ID_AA64ISAR1_EL1_APA_SHIFT }, 70 70 {} 71 71 }, 72 72 }; ··· 75 75 .name = "id_aa64isar2", 76 76 .override = &id_aa64isar2_override, 77 77 .fields = { 78 - { "gpa3", ID_AA64ISAR2_GPA3_SHIFT }, 79 - { "apa3", ID_AA64ISAR2_APA3_SHIFT }, 78 + { "gpa3", ID_AA64ISAR2_EL1_GPA3_SHIFT }, 79 + { "apa3", ID_AA64ISAR2_EL1_APA3_SHIFT }, 80 80 {} 81 81 }, 82 82 };
+3 -3
arch/arm64/kernel/traps.c
··· 579 579 580 580 if (cpus_have_const_cap(ARM64_WORKAROUND_1542419)) { 581 581 /* Hide DIC so that we can trap the unnecessary maintenance...*/ 582 - val &= ~BIT(CTR_DIC_SHIFT); 582 + val &= ~BIT(CTR_EL0_DIC_SHIFT); 583 583 584 584 /* ... and fake IminLine to reduce the number of traps. */ 585 - val &= ~CTR_IMINLINE_MASK; 586 - val |= (PAGE_SHIFT - 2) & CTR_IMINLINE_MASK; 585 + val &= ~CTR_EL0_IminLine_MASK; 586 + val |= (PAGE_SHIFT - 2) & CTR_EL0_IminLine_MASK; 587 587 } 588 588 589 589 pt_regs_write_reg(regs, rt, val);
+16 -16
arch/arm64/kvm/hyp/include/nvhe/fixed_config.h
··· 176 176 ) 177 177 178 178 #define PVM_ID_AA64ISAR1_ALLOW (\ 179 - ARM64_FEATURE_MASK(ID_AA64ISAR1_DPB) | \ 180 - ARM64_FEATURE_MASK(ID_AA64ISAR1_APA) | \ 181 - ARM64_FEATURE_MASK(ID_AA64ISAR1_API) | \ 182 - ARM64_FEATURE_MASK(ID_AA64ISAR1_JSCVT) | \ 183 - ARM64_FEATURE_MASK(ID_AA64ISAR1_FCMA) | \ 184 - ARM64_FEATURE_MASK(ID_AA64ISAR1_LRCPC) | \ 185 - ARM64_FEATURE_MASK(ID_AA64ISAR1_GPA) | \ 186 - ARM64_FEATURE_MASK(ID_AA64ISAR1_GPI) | \ 187 - ARM64_FEATURE_MASK(ID_AA64ISAR1_FRINTTS) | \ 188 - ARM64_FEATURE_MASK(ID_AA64ISAR1_SB) | \ 189 - ARM64_FEATURE_MASK(ID_AA64ISAR1_SPECRES) | \ 190 - ARM64_FEATURE_MASK(ID_AA64ISAR1_BF16) | \ 191 - ARM64_FEATURE_MASK(ID_AA64ISAR1_DGH) | \ 192 - ARM64_FEATURE_MASK(ID_AA64ISAR1_I8MM) \ 179 + ARM64_FEATURE_MASK(ID_AA64ISAR1_EL1_DPB) | \ 180 + ARM64_FEATURE_MASK(ID_AA64ISAR1_EL1_APA) | \ 181 + ARM64_FEATURE_MASK(ID_AA64ISAR1_EL1_API) | \ 182 + ARM64_FEATURE_MASK(ID_AA64ISAR1_EL1_JSCVT) | \ 183 + ARM64_FEATURE_MASK(ID_AA64ISAR1_EL1_FCMA) | \ 184 + ARM64_FEATURE_MASK(ID_AA64ISAR1_EL1_LRCPC) | \ 185 + ARM64_FEATURE_MASK(ID_AA64ISAR1_EL1_GPA) | \ 186 + ARM64_FEATURE_MASK(ID_AA64ISAR1_EL1_GPI) | \ 187 + ARM64_FEATURE_MASK(ID_AA64ISAR1_EL1_FRINTTS) | \ 188 + ARM64_FEATURE_MASK(ID_AA64ISAR1_EL1_SB) | \ 189 + ARM64_FEATURE_MASK(ID_AA64ISAR1_EL1_SPECRES) | \ 190 + ARM64_FEATURE_MASK(ID_AA64ISAR1_EL1_BF16) | \ 191 + ARM64_FEATURE_MASK(ID_AA64ISAR1_EL1_DGH) | \ 192 + ARM64_FEATURE_MASK(ID_AA64ISAR1_EL1_I8MM) \ 193 193 ) 194 194 195 195 #define PVM_ID_AA64ISAR2_ALLOW (\ 196 - ARM64_FEATURE_MASK(ID_AA64ISAR2_GPA3) | \ 197 - ARM64_FEATURE_MASK(ID_AA64ISAR2_APA3) \ 196 + ARM64_FEATURE_MASK(ID_AA64ISAR2_EL1_GPA3) | \ 197 + ARM64_FEATURE_MASK(ID_AA64ISAR2_EL1_APA3) \ 198 198 ) 199 199 200 200 u64 pvm_read_id_reg(const struct kvm_vcpu *vcpu, u32 id);
+6 -6
arch/arm64/kvm/hyp/nvhe/sys_regs.c
··· 173 173 u64 allow_mask = PVM_ID_AA64ISAR1_ALLOW; 174 174 175 175 if (!vcpu_has_ptrauth(vcpu)) 176 - allow_mask &= ~(ARM64_FEATURE_MASK(ID_AA64ISAR1_APA) | 177 - ARM64_FEATURE_MASK(ID_AA64ISAR1_API) | 178 - ARM64_FEATURE_MASK(ID_AA64ISAR1_GPA) | 179 - ARM64_FEATURE_MASK(ID_AA64ISAR1_GPI)); 176 + allow_mask &= ~(ARM64_FEATURE_MASK(ID_AA64ISAR1_EL1_APA) | 177 + ARM64_FEATURE_MASK(ID_AA64ISAR1_EL1_API) | 178 + ARM64_FEATURE_MASK(ID_AA64ISAR1_EL1_GPA) | 179 + ARM64_FEATURE_MASK(ID_AA64ISAR1_EL1_GPI)); 180 180 181 181 return id_aa64isar1_el1_sys_val & allow_mask; 182 182 } ··· 186 186 u64 allow_mask = PVM_ID_AA64ISAR2_ALLOW; 187 187 188 188 if (!vcpu_has_ptrauth(vcpu)) 189 - allow_mask &= ~(ARM64_FEATURE_MASK(ID_AA64ISAR2_APA3) | 190 - ARM64_FEATURE_MASK(ID_AA64ISAR2_GPA3)); 189 + allow_mask &= ~(ARM64_FEATURE_MASK(ID_AA64ISAR2_EL1_APA3) | 190 + ARM64_FEATURE_MASK(ID_AA64ISAR2_EL1_GPA3)); 191 191 192 192 return id_aa64isar2_el1_sys_val & allow_mask; 193 193 }
+7 -7
arch/arm64/kvm/sys_regs.c
··· 1136 1136 break; 1137 1137 case SYS_ID_AA64ISAR1_EL1: 1138 1138 if (!vcpu_has_ptrauth(vcpu)) 1139 - val &= ~(ARM64_FEATURE_MASK(ID_AA64ISAR1_APA) | 1140 - ARM64_FEATURE_MASK(ID_AA64ISAR1_API) | 1141 - ARM64_FEATURE_MASK(ID_AA64ISAR1_GPA) | 1142 - ARM64_FEATURE_MASK(ID_AA64ISAR1_GPI)); 1139 + val &= ~(ARM64_FEATURE_MASK(ID_AA64ISAR1_EL1_APA) | 1140 + ARM64_FEATURE_MASK(ID_AA64ISAR1_EL1_API) | 1141 + ARM64_FEATURE_MASK(ID_AA64ISAR1_EL1_GPA) | 1142 + ARM64_FEATURE_MASK(ID_AA64ISAR1_EL1_GPI)); 1143 1143 break; 1144 1144 case SYS_ID_AA64ISAR2_EL1: 1145 1145 if (!vcpu_has_ptrauth(vcpu)) 1146 - val &= ~(ARM64_FEATURE_MASK(ID_AA64ISAR2_APA3) | 1147 - ARM64_FEATURE_MASK(ID_AA64ISAR2_GPA3)); 1146 + val &= ~(ARM64_FEATURE_MASK(ID_AA64ISAR2_EL1_APA3) | 1147 + ARM64_FEATURE_MASK(ID_AA64ISAR2_EL1_GPA3)); 1148 1148 if (!cpus_have_final_cap(ARM64_HAS_WFXT)) 1149 - val &= ~ARM64_FEATURE_MASK(ID_AA64ISAR2_WFXT); 1149 + val &= ~ARM64_FEATURE_MASK(ID_AA64ISAR2_EL1_WFxT); 1150 1150 break; 1151 1151 case SYS_ID_AA64DFR0_EL1: 1152 1152 /* Limit debug to ARMv8.0 */
+1 -1
arch/arm64/lib/mte.S
··· 18 18 */ 19 19 .macro multitag_transfer_size, reg, tmp 20 20 mrs_s \reg, SYS_GMID_EL1 21 - ubfx \reg, \reg, #SYS_GMID_EL1_BS_SHIFT, #SYS_GMID_EL1_BS_SIZE 21 + ubfx \reg, \reg, #GMID_EL1_BS_SHIFT, #GMID_EL1_BS_SIZE 22 22 mov \tmp, #4 23 23 lsl \reg, \tmp, \reg 24 24 .endm
+1 -1
arch/arm64/tools/gen-sysreg.awk
··· 88 88 89 89 # skip blank lines and comment lines 90 90 /^$/ { next } 91 - /^#/ { next } 91 + /^[\t ]*#/ { next } 92 92 93 93 /^SysregFields/ { 94 94 change_block("SysregFields", "None", "SysregFields")
+264
arch/arm64/tools/sysreg
··· 46 46 # feature that introduces them (eg, FEAT_LS64_ACCDATA introduces enumeration 47 47 # item ACCDATA) though it may be more taseful to do something else. 48 48 49 + Sysreg ID_AA64ZFR0_EL1 3 0 0 4 4 50 + Res0 63:60 51 + Enum 59:56 F64MM 52 + 0b0000 NI 53 + 0b0001 IMP 54 + EndEnum 55 + Enum 55:52 F32MM 56 + 0b0000 NI 57 + 0b0001 IMP 58 + EndEnum 59 + Res0 51:48 60 + Enum 47:44 I8MM 61 + 0b0000 NI 62 + 0b0001 IMP 63 + EndEnum 64 + Enum 43:40 SM4 65 + 0b0000 NI 66 + 0b0001 IMP 67 + EndEnum 68 + Res0 39:36 69 + Enum 35:32 SHA3 70 + 0b0000 NI 71 + 0b0001 IMP 72 + EndEnum 73 + Res0 31:24 74 + Enum 23:20 BF16 75 + 0b0000 NI 76 + 0b0001 IMP 77 + 0b0010 EBF16 78 + EndEnum 79 + Enum 19:16 BitPerm 80 + 0b0000 NI 81 + 0b0001 IMP 82 + EndEnum 83 + Res0 15:8 84 + Enum 7:4 AES 85 + 0b0000 NI 86 + 0b0001 IMP 87 + 0b0010 PMULL128 88 + EndEnum 89 + Enum 3:0 SVEver 90 + 0b0000 IMP 91 + 0b0001 SVE2 92 + EndEnum 93 + EndSysreg 94 + 95 + Sysreg ID_AA64SMFR0_EL1 3 0 0 4 5 96 + Enum 63 FA64 97 + 0b0 NI 98 + 0b1 IMP 99 + EndEnum 100 + Res0 62:60 101 + Field 59:56 SMEver 102 + Enum 55:52 I16I64 103 + 0b0000 NI 104 + 0b1111 IMP 105 + EndEnum 106 + Res0 51:49 107 + Enum 48 F64F64 108 + 0b0 NI 109 + 0b1 IMP 110 + EndEnum 111 + Res0 47:40 112 + Enum 39:36 I8I32 113 + 0b0000 NI 114 + 0b1111 IMP 115 + EndEnum 116 + Enum 35 F16F32 117 + 0b0 NI 118 + 0b1 IMP 119 + EndEnum 120 + Enum 34 B16F32 121 + 0b0 NI 122 + 0b1 IMP 123 + EndEnum 124 + Res0 33 125 + Enum 32 F32F32 126 + 0b0 NI 127 + 0b1 IMP 128 + EndEnum 129 + Res0 31:0 130 + EndSysreg 131 + 49 132 Sysreg ID_AA64ISAR0_EL1 3 0 0 6 0 50 133 Enum 63:60 RNDR 51 134 0b0000 NI ··· 195 112 0b0010 PMULL 196 113 EndEnum 197 114 Res0 3:0 115 + EndSysreg 116 + 117 + Sysreg ID_AA64ISAR1_EL1 3 0 0 6 1 118 + Enum 63:60 LS64 119 + 0b0000 NI 120 + 0b0001 LS64 121 + 0b0010 LS64_V 122 + 0b0011 LS64_ACCDATA 123 + EndEnum 124 + Enum 59:56 XS 125 + 0b0000 NI 126 + 0b0001 IMP 127 + EndEnum 128 + Enum 55:52 I8MM 129 + 0b0000 NI 130 + 0b0001 IMP 131 + EndEnum 132 + Enum 51:48 DGH 133 + 0b0000 NI 134 + 0b0001 IMP 135 + EndEnum 136 + Enum 47:44 BF16 137 + 0b0000 NI 138 + 0b0001 IMP 139 + 0b0010 EBF16 140 + EndEnum 141 + Enum 43:40 SPECRES 142 + 0b0000 NI 143 + 0b0001 IMP 144 + EndEnum 145 + Enum 39:36 SB 146 + 0b0000 NI 147 + 0b0001 IMP 148 + EndEnum 149 + Enum 35:32 FRINTTS 150 + 0b0000 NI 151 + 0b0001 IMP 152 + EndEnum 153 + Enum 31:28 GPI 154 + 0b0000 NI 155 + 0b0001 IMP 156 + EndEnum 157 + Enum 27:24 GPA 158 + 0b0000 NI 159 + 0b0001 IMP 160 + EndEnum 161 + Enum 23:20 LRCPC 162 + 0b0000 NI 163 + 0b0001 IMP 164 + 0b0010 LRCPC2 165 + EndEnum 166 + Enum 19:16 FCMA 167 + 0b0000 NI 168 + 0b0001 IMP 169 + EndEnum 170 + Enum 15:12 JSCVT 171 + 0b0000 NI 172 + 0b0001 IMP 173 + EndEnum 174 + Enum 11:8 API 175 + 0b0000 NI 176 + 0b0001 PAuth 177 + 0b0010 EPAC 178 + 0b0011 PAuth2 179 + 0b0100 FPAC 180 + 0b0101 FPACCOMBINE 181 + EndEnum 182 + Enum 7:4 APA 183 + 0b0000 NI 184 + 0b0001 PAuth 185 + 0b0010 EPAC 186 + 0b0011 PAuth2 187 + 0b0100 FPAC 188 + 0b0101 FPACCOMBINE 189 + EndEnum 190 + Enum 3:0 DPB 191 + 0b0000 NI 192 + 0b0001 IMP 193 + 0b0010 DPB2 194 + EndEnum 195 + EndSysreg 196 + 197 + Sysreg ID_AA64ISAR2_EL1 3 0 0 6 2 198 + Res0 63:28 199 + Enum 27:24 PAC_frac 200 + 0b0000 NI 201 + 0b0001 IMP 202 + EndEnum 203 + Enum 23:20 BC 204 + 0b0000 NI 205 + 0b0001 IMP 206 + EndEnum 207 + Enum 19:16 MOPS 208 + 0b0000 NI 209 + 0b0001 IMP 210 + EndEnum 211 + Enum 15:12 APA3 212 + 0b0000 NI 213 + 0b0001 PAuth 214 + 0b0010 EPAC 215 + 0b0011 PAuth2 216 + 0b0100 FPAC 217 + 0b0101 FPACCOMBINE 218 + EndEnum 219 + Enum 11:8 GPA3 220 + 0b0000 NI 221 + 0b0001 IMP 222 + EndEnum 223 + Enum 7:4 RPRES 224 + 0b0000 NI 225 + 0b0001 IMP 226 + EndEnum 227 + Enum 3:0 WFxT 228 + 0b0000 NI 229 + 0b0010 IMP 230 + EndEnum 198 231 EndSysreg 199 232 200 233 Sysreg SCTLR_EL1 3 0 1 0 0 ··· 456 257 Field 2:0 Ctype1 457 258 EndSysreg 458 259 260 + Sysreg GMID_EL1 3 1 0 0 4 261 + Res0 63:4 262 + Field 3:0 BS 263 + EndSysreg 264 + 459 265 Sysreg SMIDR_EL1 3 1 0 0 6 460 266 Res0 63:32 461 267 Field 31:24 IMPLEMENTER ··· 475 271 Field 4 TnD 476 272 Field 3:1 Level 477 273 Field 0 InD 274 + EndSysreg 275 + 276 + Sysreg CTR_EL0 3 3 0 0 1 277 + Res0 63:38 278 + Field 37:32 TminLine 279 + Res1 31 280 + Res0 30 281 + Field 29 DIC 282 + Field 28 IDC 283 + Field 27:24 CWG 284 + Field 23:20 ERG 285 + Field 19:16 DminLine 286 + Enum 15:14 L1Ip 287 + 0b00 VPIPT 288 + # This is named as AIVIVT in the ARM but documented as reserved 289 + 0b01 RESERVED 290 + 0b10 VIPT 291 + 0b11 PIPT 292 + EndEnum 293 + Res0 13:4 294 + Field 3:0 IminLine 295 + EndSysreg 296 + 297 + Sysreg DCZID_EL0 3 3 0 0 7 298 + Res0 63:5 299 + Field 4 DZP 300 + Field 3:0 BS 478 301 EndSysreg 479 302 480 303 Sysreg SVCR 3 3 4 2 2 ··· 597 366 598 367 Sysreg TTBR1_EL1 3 0 2 0 1 599 368 Fields TTBRx_EL1 369 + EndSysreg 370 + 371 + Sysreg LORSA_EL1 3 0 10 4 0 372 + Res0 63:52 373 + Field 51:16 SA 374 + Res0 15:1 375 + Field 0 Valid 376 + EndSysreg 377 + 378 + Sysreg LOREA_EL1 3 0 10 4 1 379 + Res0 63:52 380 + Field 51:48 EA_51_48 381 + Field 47:16 EA_47_16 382 + Res0 15:0 383 + EndSysreg 384 + 385 + Sysreg LORN_EL1 3 0 10 4 2 386 + Res0 63:8 387 + Field 7:0 Num 388 + EndSysreg 389 + 390 + Sysreg LORC_EL1 3 0 10 4 3 391 + Res0 63:10 392 + Field 9:2 DS 393 + Res0 1 394 + Field 0 EN 395 + EndSysreg 396 + 397 + Sysreg LORID_EL1 3 0 10 4 7 398 + Res0 63:24 399 + Field 23:16 LD 400 + Res0 15:8 401 + Field 7:0 LR 600 402 EndSysreg