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

Reply via email to