Module Name: src Committed By: skrll Date: Sun Sep 24 10:13:44 UTC 2023
Modified Files: src/sys/arch/aarch64/include: armreg.h Log Message: Add a bunch of system registers and their bit / bit field definitions. Taken from ryo's nvmm branch with updates from me. To generate a diff of this commit: cvs rdiff -u -r1.64 -r1.65 src/sys/arch/aarch64/include/armreg.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/aarch64/include/armreg.h diff -u src/sys/arch/aarch64/include/armreg.h:1.64 src/sys/arch/aarch64/include/armreg.h:1.65 --- src/sys/arch/aarch64/include/armreg.h:1.64 Sat May 6 21:53:26 2023 +++ src/sys/arch/aarch64/include/armreg.h Sun Sep 24 10:13:44 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: armreg.h,v 1.64 2023/05/06 21:53:26 andvar Exp $ */ +/* $NetBSD: armreg.h,v 1.65 2023/09/24 10:13:44 skrll Exp $ */ /*- * Copyright (c) 2014 The NetBSD Foundation, Inc. @@ -229,7 +229,13 @@ AARCH64REG_READ_INLINE(clidr_el1) #define CLIDR_TYPE_IDCACHE 3 // Separate inst and data caches #define CLIDR_TYPE_UNIFIEDCACHE 4 // Unified cache +AARCH64REG_READ_INLINE(contextidr_el1) +AARCH64REG_WRITE_INLINE(contextidr_el1) + AARCH64REG_READ_INLINE(currentel) + +#define CURRENTEL_EL __BITS(3,2) // Current exception Level + AARCH64REG_READ_INLINE(id_aa64afr0_el1) AARCH64REG_READ_INLINE(id_aa64afr1_el1) AARCH64REG_READ_INLINE(id_aa64dfr0_el1) @@ -661,6 +667,8 @@ AARCH64REG_WRITE_INLINE(esr_el1) #define ESR_EC_CP14_DT 0x06 // A32: LDC/STC access to CP14 #define ESR_EC_FP_ACCESS 0x07 // AXX: Access to SIMD/FP Registers #define ESR_EC_FPID 0x08 // A32: MCR/MRC access to CP10 !EC=7 +#define ESR_EC_PAUTH 0x09 // A64: Pointer auth trap (FEAT_PAUTH) +#define ESR_EC_LS64 0x0a // AXX: LD64B/ST64B instruction (FEAT_LS64) // XXXNH #define ESR_EC_CP14_RRT 0x0c // A32: MRRC access to CP14 #define ESR_EC_BTE_A64 0x0d // A64: Branch Target Exception (V8.5) #define ESR_EC_ILL_STATE 0x0e // AXX: Illegal Execution State @@ -671,29 +679,54 @@ AARCH64REG_WRITE_INLINE(esr_el1) #define ESR_EC_HVC_A64 0x16 // A64: HVC Instruction Execution #define ESR_EC_SMC_A64 0x17 // A64: SMC Instruction Execution #define ESR_EC_SYS_REG 0x18 // A64: MSR/MRS/SYS instruction (!EC0/1/7) -#define ESR_EC_INSN_ABT_EL0 0x20 // AXX: Instruction Abort (EL0) -#define ESR_EC_INSN_ABT_EL1 0x21 // AXX: Instruction Abort (EL1) +#define ESR_EC_SVE 0x19 // AXX: SVE Instruction Execution (FEAT_SVE) +#define ESR_EC_PAUTH_ERET 0x1a // A64: ERET/ERETAA/ERETAB (FEAT_PAUTH and FEAT_NV) +#define ESR_EC_TME 0x1b // A64: TSTART instruction (FEAT_TME) +#define ESR_EC_FRAC 0x1c // A64: Pointer auth trap (FEAT_FPAC) +#define ESR_EC_SME 0x1d // AXX: Access to SME (FEAT_SME) +#define ESR_EC_RME 0x1e // A64: Granule Protection Check (FEAT_RME) +#define ESR_EC_INSN_ABT_EL_LOW 0x20 // AXX: Instruction Abort from lower level +#define ESR_EC_INSN_ABT_EL_CUR 0x21 // AXX: Instruction Abort from current level #define ESR_EC_PC_ALIGNMENT 0x22 // AXX: Misaligned PC -#define ESR_EC_DATA_ABT_EL0 0x24 // AXX: Data Abort (EL0) -#define ESR_EC_DATA_ABT_EL1 0x25 // AXX: Data Abort (EL1) -#define ESR_EC_SP_ALIGNMENT 0x26 // AXX: Misaligned SP +#define ESR_EC_DATA_ABT_EL_LOW 0x24 // AXX: Data Abort from lower level +#define ESR_EC_DATA_ABT_EL_CUR 0x25 // AXX: Data Abort from current level +#define ESR_EC_SP_ALIGNMENT 0x26 // AXX: Misaligned SP +#define ESR_EC_MOPS 0x27 // A64: Memory Operation Exception (FEAT_MOPS) #define ESR_EC_FP_TRAP_A32 0x28 // A32: FP Exception #define ESR_EC_FP_TRAP_A64 0x2c // A64: FP Exception -#define ESR_EC_SERROR 0x2f // AXX: SError Interrupt -#define ESR_EC_BRKPNT_EL0 0x30 // AXX: Breakpoint Exception (EL0) -#define ESR_EC_BRKPNT_EL1 0x31 // AXX: Breakpoint Exception (EL1) -#define ESR_EC_SW_STEP_EL0 0x32 // AXX: Software Step (EL0) -#define ESR_EC_SW_STEP_EL1 0x33 // AXX: Software Step (EL1) -#define ESR_EC_WTCHPNT_EL0 0x34 // AXX: Watchpoint (EL0) -#define ESR_EC_WTCHPNT_EL1 0x35 // AXX: Watchpoint (EL1) +#define ESR_EC_SERROR 0x2f // AXX: SError Interrupt +#define ESR_EC_BRKPNT_EL_LOW 0x30 // AXX: Breakpoint Exception from lower level +#define ESR_EC_BRKPNT_EL_CUR 0x31 // AXX: Breakpoint Exception from current level +#define ESR_EC_SW_STEP_EL_LOW 0x32 // AXX: Software Step from lower level +#define ESR_EC_SW_STEP_EL_CUR 0x33 // AXX: Software Step from current level +#define ESR_EC_WTCHPNT_EL_LOW 0x34 // AXX: Watchpoint from lower level +#define ESR_EC_WTCHPNT_EL_CUR 0x35 // AXX: Watchpoint from current level #define ESR_EC_BKPT_INSN_A32 0x38 // A32: BKPT Instruction Execution #define ESR_EC_VECTOR_CATCH 0x3a // A32: Vector Catch Exception #define ESR_EC_BKPT_INSN_A64 0x3c // A64: BKPT Instruction Execution +/* alias for EL1 kernel */ +#define ESR_EC_INSN_ABT_EL0 ESR_EC_INSN_ABT_EL_LOW +#define ESR_EC_INSN_ABT_EL1 ESR_EC_INSN_ABT_EL_CUR +#define ESR_EC_DATA_ABT_EL0 ESR_EC_DATA_ABT_EL_LOW +#define ESR_EC_DATA_ABT_EL1 ESR_EC_DATA_ABT_EL_CUR +#define ESR_EC_BRKPNT_EL0 ESR_EC_BRKPNT_EL_LOW +#define ESR_EC_BRKPNT_EL1 ESR_EC_BRKPNT_EL_CUR +#define ESR_EC_SW_STEP_EL0 ESR_EC_SW_STEP_EL_LOW +#define ESR_EC_SW_STEP_EL1 ESR_EC_SW_STEP_EL_CUR +#define ESR_EC_WTCHPNT_EL0 ESR_EC_WTCHPNT_EL_LOW +#define ESR_EC_WTCHPNT_EL1 ESR_EC_WTCHPNT_EL_CUR #define ESR_IL __BIT(25) // Instruction Length (1=32-bit) #define ESR_ISS __BITS(24,0) // Instruction Specific Syndrome #define ESR_ISS_CV __BIT(24) // common #define ESR_ISS_COND __BITS(23,20) // common #define ESR_ISS_WFX_TRAP_INSN __BIT(0) // for ESR_EC_WFX +#define ESR_ISS_SYSREG_OP0 __BITS(21,20) // for ESR_EC_SYS_REG +#define ESR_ISS_SYSREG_OP2 __BITS(19,17) // for ESR_EC_SYS_REG +#define ESR_ISS_SYSREG_OP1 __BITS(16,14) // for ESR_EC_SYS_REG +#define ESR_ISS_SYSREG_CRN __BITS(13,10) // for ESR_EC_SYS_REG +#define ESR_ISS_SYSREG_RT __BITS(9,5) // for ESR_EC_SYS_REG +#define ESR_ISS_SYSREG_CRM __BITS(4,1) // for ESR_EC_SYS_REG +#define ESR_ISS_SYSREG_DIRECTION __BIT(0) // for ESR_EC_SYS_REG #define ESR_ISS_MRC_OPC2 __BITS(19,17) // for ESR_EC_CP15_RT #define ESR_ISS_MRC_OPC1 __BITS(16,14) // for ESR_EC_CP15_RT #define ESR_ISS_MRC_CRN __BITS(13,10) // for ESR_EC_CP15_RT @@ -713,7 +746,7 @@ AARCH64REG_WRITE_INLINE(esr_el1) #define ESR_ISS_DATAABORT_ISV __BIT(24) // for ESC_RC_DATA_ABT_EL[01] #define ESR_ISS_DATAABORT_SAS __BITS(23,22) // for ESC_RC_DATA_ABT_EL[01] #define ESR_ISS_DATAABORT_SSE __BIT(21) // for ESC_RC_DATA_ABT_EL[01] -#define ESR_ISS_DATAABORT_SRT __BITS(19,16) // for ESC_RC_DATA_ABT_EL[01] +#define ESR_ISS_DATAABORT_SRT __BITS(20,16) // for ESC_RC_DATA_ABT_EL[01] #define ESR_ISS_DATAABORT_SF __BIT(15) // for ESC_RC_DATA_ABT_EL[01] #define ESR_ISS_DATAABORT_AR __BIT(14) // for ESC_RC_DATA_ABT_EL[01] #define ESR_ISS_DATAABORT_EA __BIT(9) // for ESC_RC_DATA_ABT_EL[01] @@ -758,6 +791,101 @@ AARCH64REG_WRITE_INLINE(esr_el1) AARCH64REG_READ_INLINE(far_el1) // Fault Address Register AARCH64REG_WRITE_INLINE(far_el1) +AARCH64REG_READ_INLINE(far_el2) +AARCH64REG_WRITE_INLINE(far_el2) + +AARCH64REG_READ_INLINE(hcr_el2) // Hypervisor Configuration Register +AARCH64REG_WRITE_INLINE(hcr_el2) + +#define HCR_EL2_TWEDEL __BITS(63,60) // TWE Delay (FEAT_TWED) +#define HCR_EL2_TWEDEN __BIT(59) // TWE Delay Enable (FEAT_TWED) +#define HCR_EL2_TID5 __BIT(58) // Trap ID group 5 (FEAT_MTE2) +#define HCR_EL2_DCT __BIT(57) // Default Cacheability Tagging (FEAT_MTE2) +#define HCR_EL2_ATA __BIT(56) // Allocation Tag Access (FEAT_MTE2) +#define HCR_EL2_TTLBOS __BIT(55) // Trap TLB maintenance OS (FEAT_EVT) +#define HCR_EL2_TTLBIS __BIT(54) // Trap TLB maintenance IS (FEAT_EVT) +#define HCR_EL2_ENSCXT __BIT(53) // Enable SCXTNUM_EL[01] access (FEAT_CSV2) +#define HCR_EL2_TOCU __BIT(52) // Trap PoU cache maintenance +#define HCR_EL2_AMVOFFEN __BIT(51) // Activity Monitors Virtual Offsets Enable (FEAT_AMUv1p1) +#define HCR_EL2_TICAB __BIT(50) // Trap IC all broadcast maintenance. +#define HCR_EL2_TID4 __BIT(49) // Trap ID group 4 (FEAT_EVT) +#define HCR_EL2_GPF __BIT(48) // Granule Protection Faults (FEAT_RME) +#define HCR_EL2_FIEN __BIT(47) // Fault Injection Enable (FEAT_RASv1p1) +#define HCR_EL2_FWB __BIT(46) // Forced Write-Back (FEAT_S2FWB) +#define HCR_EL2_NV2 __BIT(45) // Nested Virtualization (FEAT_NV2) +#define HCR_EL2_AT __BIT(44) // Address Translation (FEAT_NV) +#define HCR_EL2_NV1 __BIT(43) // Nested Virtualization (FEAT_NV2/FEAT_NV) +#define HCR_EL2_NV __BIT(42) // Nested Virtualization (FEAT_NV2/FEAT_NV) +#define HCR_EL2_API __BIT(41) // Pointer Authentication instruction (FEAT_PAuth) +#define HCR_EL2_APK __BIT(40) // Pointer Authentication key (FEAT_PAuth) +#define HCR_EL2_TME __BIT(39) // TME enable (FEAT_TME) +#define HCR_EL2_MIOCNCE __BIT(38) // Mismatched Inner/Outer Cacheable Non-Coherency Enable, +#define HCR_EL2_TEA __BIT(37) // Route synchronous External abort exceptions to EL2 (FEAT_RAS) +#define HCR_EL2_TERR __BIT(36) // Trap accesses of Error Record registers (FEAT_RAS) +#define HCR_EL2_TLOR __BIT(35) // Trap LOR registers (FEAT_LOR) +#define HCR_EL2_VHE __BIT(34) // EL2 Host (FEAT_VHE) +#define HCR_EL2_ID __BIT(33) // stage2 IC disable +#define HCR_EL2_CD __BIT(32) // stage2 DC disable +#define HCR_EL2_RW __BIT(31) // register width +#define HCR_EL2_TRVM __BIT(30) // trap VM control regs read +#define HCR_EL2_HCD __BIT(29) // HVC disable +#define HCR_EL2_TDZ __BIT(28) // trap DC ZVA +#define HCR_EL2_TGE __BIT(27) // trap general exceptions +#define HCR_EL2_TVM __BIT(26) // trap VM control regs write +#define HCR_EL2_TTLB __BIT(25) // trap TLB maintanance op +#define HCR_EL2_TPU __BIT(24) // trap IC {IVAU,IALLU,IALLUIS},DC CVAU +#define HCR_EL2_TPC __BIT(23) // trap DC {IVAC,CIVAC,CVAC} +#define HCR_EL2_TSW __BIT(22) // trap DC {ISW,CSW,CISW} +#define HCR_EL2_TACR __BIT(21) // trap ACTRL_EL1 access +#define HCR_EL2_TIDCP __BIT(20) // trap IMPLEMENTATION DEFINED system regs +#define HCR_EL2_TSC __BIT(19) // trap SMC +#define HCR_EL2_TID3 __BIT(18) // trap ID group3 regs +#define HCR_EL2_TID2 __BIT(17) // trap ID group2 regs +#define HCR_EL2_TID1 __BIT(16) // trap ID group1 regs +#define HCR_EL2_TID0 __BIT(15) // trap ID group0 regs +#define HCR_EL2_TWE __BIT(14) // trap WFE +#define HCR_EL2_TWI __BIT(13) // trap WFI +#define HCR_EL2_DC __BIT(12) // default cacheablility +#define HCR_EL2_BSU __BITS(11,10) // barrier shareability upgrade +#define HCR_EL2_FB __BIT(9) // force broadcast TLBI and IC +#define HCR_EL2_VSE __BIT(8) // inject Virtual SError +#define HCR_EL2_VI __BIT(7) // inject Virtual IRQ +#define HCR_EL2_VF __BIT(6) // inject Virtual FIQ +#define HCR_EL2_AMO __BIT(5) // trap SError/AsyncAbort +#define HCR_EL2_IMO __BIT(4) // trap IRQ +#define HCR_EL2_FMO __BIT(3) // trap FIQ +#define HCR_EL2_PTW __BIT(2) // Protect table walk +#define HCR_EL2_SWIO __BIT(1) // override DC ISW to DC CISW +#define HCR_EL2_VM __BIT(0) // enable stage2 translation + +AARCH64REG_READ_INLINE(hpfar_el2) // Hypervisor IPA Fault Address Register +AARCH64REG_WRITE_INLINE(hpfar_el2) + +#define HPFAR_EL2_NS __BIT(63) // Faulting IPA address space (FEAT_SEL2) +#define HPFAR_EL2_FIPA_D128 __BITS(47,4) // Faulting Intermediate Physical Address Bits [55:12] +#define HPFAR_EL2_FIPA __BITS(43,4) // Faulting Intermediate Physical Address Bits [51:12] +#define HPFAR_EL2_FIPA_BITSHIFT 12 + + +AARCH64REG_READ_INLINE(hstr_el2) // Hypervisor System Trap Register +AARCH64REG_WRITE_INLINE(hstr_el2) + +#define HSTR_EL2_T15 __BIT(15) +// __BIT(14) Res0 +#define HSTR_EL2_T13 __BIT(13) +#define HSTR_EL2_T12 __BIT(12) +#define HSTR_EL2_T11 __BIT(11) +#define HSTR_EL2_T10 __BIT(10) +#define HSTR_EL2_T9 __BIT(9) +#define HSTR_EL2_T8 __BIT(8) +#define HSTR_EL2_T7 __BIT(7) +#define HSTR_EL2_T6 __BIT(6) +#define HSTR_EL2_T5 __BIT(5) +// __BIT(4) Res0 +#define HSTR_EL2_T3 __BIT(3) +#define HSTR_EL2_T2 __BIT(2) +#define HSTR_EL2_T1 __BIT(1) +#define HSTR_EL2_T0 __BIT(0) AARCH64REG_READ_INLINE2(l2ctlr_el1, s3_1_c11_c0_2) // Cortex-A53,57,72,73 AARCH64REG_WRITE_INLINE2(l2ctlr_el1, s3_1_c11_c0_2) // Cortex-A53,57,72,73 @@ -770,6 +898,12 @@ AARCH64REG_WRITE_INLINE2(l2ctlr_el1, s3_ AARCH64REG_READ_INLINE(mair_el1) // Memory Attribute Indirection Register AARCH64REG_WRITE_INLINE(mair_el1) +AARCH64REG_READ_INLINE(mair_el2) +AARCH64REG_WRITE_INLINE(mair_el2) +AARCH64REG_READ_INLINE(amair_el1) // Auxiliary MAIR +AARCH64REG_WRITE_INLINE(amair_el1) +AARCH64REG_READ_INLINE(amair_el2) +AARCH64REG_WRITE_INLINE(amair_el2) #define MAIR_ATTR0 __BITS(7,0) #define MAIR_ATTR1 __BITS(15,8) @@ -791,6 +925,7 @@ AARCH64REG_WRITE_INLINE(par_el1) #define PAR_ATTR __BITS(63,56) // F=0 memory attributes #define PAR_PA __BITS(51,12) // F=0 physical address #define PAR_PA_SHIFT 12 +#define PAR_PA_LOWMASK __BITS(11,0) #define PAR_NS __BIT(9) // F=0 non-secure #define PAR_SH __BITS(8,7) // F=0 shareability attribute #define PAR_SH_NONE 0 @@ -808,13 +943,19 @@ AARCH64REG_WRITE_INLINE(rmr_el1) AARCH64REG_READ_INLINE(rvbar_el1) // Reset Vector Base Address Register AARCH64REG_WRITE_INLINE(rvbar_el1) -AARCH64REG_ATWRITE_INLINE(s1e0r); // Address Translate Stages 1 -AARCH64REG_ATWRITE_INLINE(s1e0w); -AARCH64REG_ATWRITE_INLINE(s1e1r); -AARCH64REG_ATWRITE_INLINE(s1e1w); +AARCH64REG_ATWRITE_INLINE(s1e0r) // Address Translate Stages 1 EL0 +AARCH64REG_ATWRITE_INLINE(s1e0w) +AARCH64REG_ATWRITE_INLINE(s1e1r) // Address Translate Stages 1 EL1 +AARCH64REG_ATWRITE_INLINE(s1e1w) +AARCH64REG_ATWRITE_INLINE(s12e0r) // Address Translate Stages 1 and 2 EL0 +AARCH64REG_ATWRITE_INLINE(s12e0w) +AARCH64REG_ATWRITE_INLINE(s12e1r) // Address Translate Stages 1 and 2 EL1 +AARCH64REG_ATWRITE_INLINE(s12e1w) AARCH64REG_READ_INLINE(sctlr_el1) // System Control Register AARCH64REG_WRITE_INLINE(sctlr_el1) +AARCH64REG_READ_INLINE(sctlr_el2) +AARCH64REG_WRITE_INLINE(sctlr_el2) #define SCTLR_RES0 0xc8222400 // Reserved ARMv8.0, write 0 #define SCTLR_RES1 0x30d00800 // Reserved ARMv8.0, write 1 @@ -869,6 +1010,8 @@ reg_sp_read(void) AARCH64REG_READ_INLINE(sp_el0) // EL0 Stack Pointer AARCH64REG_WRITE_INLINE(sp_el0) +AARCH64REG_READ_INLINE(sp_el1) // EL1 Stack Pointer +AARCH64REG_WRITE_INLINE(sp_el1) AARCH64REG_READ_INLINE(spsel) // Stack Pointer Select AARCH64REG_WRITE_INLINE(spsel) @@ -921,10 +1064,12 @@ AARCH64REG_WRITE_INLINE(spsr_el1) #define SPSR_M_FIQ32 0x11 #define SPSR_M_USR32 0x10 +#define SPSR_USER_P(spsr) (((spsr) & (SPSR_M & ~SPSR_A32)) == 0) +#define SPSR_PRIVILEGED_P(spsr) (!SPSR_USER_P((spsr))) + AARCH64REG_READ_INLINE(tcr_el1) // Translation Control Register AARCH64REG_WRITE_INLINE(tcr_el1) - /* TCR_EL1 - Translation Control Register */ #define TCR_TCMA1 __BIT(58) /* ARMv8.5-MemTag control when ADDR[59:55] = 0b11111 */ #define TCR_TCMA0 __BIT(57) /* ARMv8.5-MemTag control when ADDR[59:55] = 0b00000 */ @@ -999,15 +1144,60 @@ AARCH64REG_WRITE_INLINE(tcr_el1) #define TCR_EPD0 __BIT(7) /* Walk Disable for TTBR0 */ #define TCR_T0SZ __BITS(5,0) /* Size offset for TTBR0_EL1 */ +AARCH64REG_READ_INLINE(tcr_el2) // Translation Control Register EL2 +AARCH64REG_WRITE_INLINE(tcr_el2) + +/* TCR_EL2 - Translation Control Register */ +// __BITS(63, 34) // Res0 +#define TCR_EL2_MTX __BIT(33) // Extended memory tag checking +#define TCR_EL2_DS __BIT(32) // 52-bit output address (FEAT_LPA2) +// __BIT(31) // Res1 +#define TCR_EL2_TCMA __BIT(30) // Unchecked accesses control (FEAT_MTE2) +#define TCR_EL2_TBID __BIT(29) // Top Byte Instruction ddress matching (FEAT_PAuth) +#define TCR_EL2_HWU62 __BIT(28) // Hardware use bit 62 (FEAT_HPDS2) +#define TCR_EL2_HWU61 __BIT(27) // Hardware use bit 61 (FEAT_HPDS2) +#define TCR_EL2_HWU60 __BIT(26) // Hardware use bit 60 (FEAT_HPDS2) +#define TCR_EL2_HWU59 __BIT(25) // Hardware use bit 59 (FEAT_HPDS2) +#define TCR_EL2_HPD __BIT(24) // Hierarchical Permission Disables (FEAT_HPDS) +// __BIT(23) // Res1 +#define TCR_EL2_HD __BIT(22) // Hardware management of dirty state (FEAT_HAFDBS) +#define TCR_EL2_HA __BIT(21) // Hardware Access flag update (FEAT_HAFDBS) +#define TCR_EL2_TBI __BIT(20) // Top Byte Ignored +// __BIT(19) // Res1 +#define TCR_EL2_PS __BITS(18,16) // Physical Address Size +#define TCR_EL2_TG0 __BITS(15,14) // TTBR0_EL2 Granule size +#define TCR_EL2_TG0_4KB __SHIFTIN(0,TCR_EL2_TG0) // 4KB page size +#define TCR_EL2_TG0_64KB __SHIFTIN(1,TCR_EL2_TG0) // 64KB page size +#define TCR_EL2_TG0_16KB __SHIFTIN(2,TCR_EL2_TG0) // 16KB page size +#define TCR_EL2_SH0 __BITS(13,12) // TTBR0_EL2 Shareability attribute +#define TCR_EL2_SH0_NONE __SHIFTIN(0,TCR_EL2_SH0) // non-shareable +#define TCR_EL2_SH0_OUTER __SHIFTIN(2,TCR_EL2_SH0) // Outer shareable +#define TCR_EL2_SH0_INNER __SHIFTIN(3,TCR_EL2_SH0) // Inner shareable +#define TCR_EL2_ORGN0 __BITS(11,10) // TTBR0_EL2 Outer cacheability attribute +#define TCR_EL2_ORGN0_NC __SHIFTIN(0,TCR_EL2_ORGN0) // Non Cacheable +#define TCR_EL2_ORGN0_WB_WA __SHIFTIN(1,TCR_EL2_ORGN0) // WriteBack WriteAllocate +#define TCR_EL2_ORGN0_WT __SHIFTIN(2,TCR_EL2_ORGN0) // WriteThrough +#define TCR_EL2_ORGN0_WB __SHIFTIN(3,TCR_EL2_ORGN0) // WriteBack +#define TCR_EL2_IRGN0 __BITS(9,8) // TTBR0_EL2 Inner cacheability attribute +#define TCR_EL2_IRGN0_NC __SHIFTIN(0,TCR_EL2_IRGN0) // Non Cacheable +#define TCR_EL2_IRGN0_WB_WA __SHIFTIN(1,TCR_EL2_IRGN0) // WriteBack WriteAllocate +#define TCR_EL2_IRGN0_WT __SHIFTIN(2,TCR_EL2_IRGN0) // WriteThrough +#define TCR_EL2_IRGN0_WB __SHIFTIN(3,TCR_EL2_IRGN0) // WriteBack +#define TCR_EL2_T0SZ __BITS(5,0) // TTBR0_EL2 Size offset + AARCH64REG_READ_INLINE(tpidr_el1) // Thread ID Register (EL1) AARCH64REG_WRITE_INLINE(tpidr_el1) +AARCH64REG_READ_INLINE(tpidr_el2) // Thread ID Register (EL2) +AARCH64REG_WRITE_INLINE(tpidr_el2) AARCH64REG_WRITE_INLINE(tpidrro_el0) // Thread ID Register (RO for EL0) -AARCH64REG_READ_INLINE(ttbr0_el1) // Translation Table Base Register 0 EL1 +AARCH64REG_READ_INLINE(ttbr0_el1) // Translation Table Base Register 0 EL1 AARCH64REG_WRITE_INLINE(ttbr0_el1) +AARCH64REG_READ_INLINE(ttbr0_el2) // Translation Table Base Register 0 EL2 +AARCH64REG_WRITE_INLINE(ttbr0_el2) -AARCH64REG_READ_INLINE(ttbr1_el1) // Translation Table Base Register 1 EL1 +AARCH64REG_READ_INLINE(ttbr1_el1) // Translation Table Base Register 1 EL1 AARCH64REG_WRITE_INLINE(ttbr1_el1) #define TTBR_ASID __BITS(63,48) @@ -1015,6 +1205,53 @@ AARCH64REG_WRITE_INLINE(ttbr1_el1) AARCH64REG_READ_INLINE(vbar_el1) // Vector Base Address Register AARCH64REG_WRITE_INLINE(vbar_el1) +AARCH64REG_READ_INLINE(vbar_el2) +AARCH64REG_WRITE_INLINE(vbar_el2) + +AARCH64REG_READ_INLINE(vpidr_el2) // Virtualization Processor ID Register +AARCH64REG_WRITE_INLINE(vpidr_el2) +AARCH64REG_READ_INLINE(vmpidr_el2) // Virtualization Multiprocessor ID Register +AARCH64REG_WRITE_INLINE(vmpidr_el2) +AARCH64REG_READ_INLINE(vtcr_el2) // Virtualization Translation Control Register +AARCH64REG_WRITE_INLINE(vtcr_el2) + +#define VTCR_EL2_HAFT __BIT(44) // Hardware managed Access Flag (FEAT_HAFT) +// __BITS(43, 42) // Res0 +#define VTCR_EL2_TL0 __BIT(41) // TopLevel0 permission attribute control (FEAT_THE) +#define VTCR_EL2_GCSH __BIT(40) // Assured translations for guarded control stacks (FEAT_THE+FEAT_GCS) +// __BIT(39) // Res0 +#define VTCR_EL2_D128 __BIT(38) // VMSAv9-128 (FEAT_D128) +#define VTCR_EL2_S2POE __BIT(37) // Enable stage 2 Permission Overlay (FEAT_S2POE) +#define VTCR_EL2_S2PIE __BIT(36) // Select Permission Model. (FEAT_S2PIE) +#define VTCR_EL2_TL1 __BIT(35) // TopLevel1 permission attribute control (FEAT_THE) +#define VTCR_EL2_AO __BIT(34) // AssuredOnly attribute enable (FEAT_THE) +#define VTCR_EL2_SL2 __BIT(33) // Stage 2 starting level (FEAT_LPA2) +#define VTCR_EL2_DS __BIT(32) // 52-bit output address (FEAT_LPA2) +// __BIT(31) // Res1 +#define VTCR_EL2_NSA __BIT(30) // Non-secure S2 translation output address space (FEAT_SEL2) +#define VTCR_EL2_NSW __BIT(29) // Non-secure S2 translation table address space (FEAT_SEL2) +#define VTCR_EL2_HWU62 __BIT(28) // Hardware use bit 62 (FEAT_HPDS2) +#define VTCR_EL2_HWU61 __BIT(27) // Hardware use bit 61 (FEAT_HPDS2) +#define VTCR_EL2_HWU60 __BIT(26) // Hardware use bit 60 (FEAT_HPDS2) +#define VTCR_EL2_HWU59 __BIT(25) // Hardware use bit 59 (FEAT_HPDS2) +// __BITS(24, 23) // Res0 +#define VTCR_EL2_HD __BIT(22) // Hardware Dirty state management (FEAT_HAFDBS) +#define VTCR_EL2_HA __BIT(21) // Hardware Access flag management (FEAT_HAFDBS) +#define VTCR_EL2_VS __BIT(19) // VMID size (FEAT_VMID16) +#define VTCR_EL2_PS __BITS(18,16) // Physical address Size +#define VTCR_EL2_TG0 __BITS(15,14) // VTTBR_EL2 Granule size +#define VTCR_EL2_SH0 __BITS(13,12) // V{,S}TTBR_EL2 shareability attribute +#define VTCR_EL2_ORGN0 __BITS(11,10) // V{,S}TTBR_EL2 outer cacheability +#define VTCR_EL2_IRGN0 __BITS(9,8) // V{,S}TTBR_EL2 inner cacheability +#define VTCR_EL2_SL0 __BITS(7,6) // Start Level of S2 translation lookup. +#define VTCR_EL2_T0SZ __BITS(5,0) // VTTBR_EL2 Size offset + + +AARCH64REG_READ_INLINE(vttbr_el2) // Virtualization Translation Table Base Register +AARCH64REG_WRITE_INLINE(vttbr_el2) + +#define VTTBR_VIMD __BITS(55,48) +#define VTTBR_BADDR __BITS(47,0) /* * From here on, these are DEBUG registers