Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/arch/aarch64/include Add GICv3 system registers



details:   https://anonhg.NetBSD.org/src/rev/e70eebbdc485
branches:  trunk
changeset: 365236:e70eebbdc485
user:      jmcneill <jmcneill%NetBSD.org@localhost>
date:      Wed Aug 08 19:00:53 2018 +0000

description:
Add GICv3 system registers

diffstat:

 sys/arch/aarch64/include/armreg.h |  75 ++++++++++++++++++++++++++++++++++----
 1 files changed, 66 insertions(+), 9 deletions(-)

diffs (99 lines):

diff -r 4d5d65ca3c58 -r e70eebbdc485 sys/arch/aarch64/include/armreg.h
--- a/sys/arch/aarch64/include/armreg.h Wed Aug 08 07:50:12 2018 +0000
+++ b/sys/arch/aarch64/include/armreg.h Wed Aug 08 19:00:53 2018 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: armreg.h,v 1.14 2018/08/05 07:49:02 skrll Exp $ */
+/* $NetBSD: armreg.h,v 1.15 2018/08/08 19:00:53 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2014 The NetBSD Foundation, Inc.
@@ -66,6 +66,11 @@
 
 #define AARCH64REG_WRITEIMM_INLINE(regname)                    \
        AARCH64REG_WRITEIMM_INLINE2(regname, regname)
+
+#define AARCH64REG_READWRITE_INLINE2(regname, regdesc)         \
+       AARCH64REG_READ_INLINE2(regname, regdesc)               \
+       AARCH64REG_WRITE_INLINE2(regname, regdesc)
+
 /*
  * System registers available at EL0 (user)
  */
@@ -951,17 +956,69 @@
 #define         ID_AA64PFR0_EL1_EL0_64          1
 #define         ID_AA64PFR0_EL1_EL0_64_32       2
 
+/*
+ * GICv3 system registers
+ */
+AARCH64REG_READWRITE_INLINE2(icc_sre_el1, s3_0_c12_c12_5)
+AARCH64REG_READWRITE_INLINE2(icc_ctlr_el1, s3_0_c12_c12_4)
+AARCH64REG_READWRITE_INLINE2(icc_pmr_el1, s3_0_c4_c6_0)
+AARCH64REG_READWRITE_INLINE2(icc_bpr0_el1, s3_0_c12_c8_3)
+AARCH64REG_READWRITE_INLINE2(icc_bpr1_el1, s3_0_c12_c12_3)
+AARCH64REG_READWRITE_INLINE2(icc_igrpen0_el1, s3_0_c12_c12_6)
+AARCH64REG_READWRITE_INLINE2(icc_igrpen1_el1, s3_0_c12_c12_7)
+AARCH64REG_READWRITE_INLINE2(icc_eoir0_el1, s3_0_c12_c8_1)
+AARCH64REG_READWRITE_INLINE2(icc_eoir1_el1, s3_0_c12_c12_1)
+AARCH64REG_READWRITE_INLINE2(icc_sgi1r_el1, s3_0_c12_c11_5)
+AARCH64REG_READ_INLINE2(icc_iar1_el1, s3_0_c12_c12_0)
+
 // ICC_SRE_EL1: Interrupt Controller System Register Enable register
-#define        ICC_SRE_EL1_SRE          __BIT(0)
-#define        ICC_SRE_EL1_DFB          __BIT(1)
-#define        ICC_SRE_EL1_DIB          __BIT(2)
+#define        ICC_SRE_EL1_DIB         __BIT(2)
+#define        ICC_SRE_EL1_DFB         __BIT(1)
+#define        ICC_SRE_EL1_SRE         __BIT(0)
+
+// ICC_BPR[01]_EL1: Interrupt Controller Binary Point Register 0/1
+#define        ICC_BPR_EL1_BinaryPoint __BITS(2,0)
+
+// ICC_CTLR_EL1: Interrupt Controller Control Register
+#define        ICC_CTLR_EL1_A3V        __BIT(15)
+#define        ICC_CTLR_EL1_SEIS       __BIT(14)
+#define        ICC_CTLR_EL1_IDbits     __BITS(13,11)
+#define        ICC_CTLR_EL1_PRIbits    __BITS(10,8)
+#define        ICC_CTLR_EL1_PMHE       __BIT(6)
+#define        ICC_CTLR_EL1_EOImode    __BIT(1)
+#define        ICC_CTLR_EL1_CBPR       __BIT(0)
 
-// ICC_SRE_EL2: Interrupt Controller System Register Enable register
-#define        ICC_SRE_EL2_SRE          __BIT(0)
-#define        ICC_SRE_EL2_DFB          __BIT(1)
-#define        ICC_SRE_EL2_DIB          __BIT(2)
-#define        ICC_SRE_EL2_EN           __BIT(3)
+// ICC_IGRPEN[01]_EL1: Interrupt Controller Interrupt Group 0/1 Enable register
+#define        ICC_IGRPEN_EL1_Enable   __BIT(0)
+
+// ICC_SGI[01]R_EL1: Interrupt Controller Software Generated Interrupt Group 0/1 Register
+#define        ICC_SGIR_EL1_Aff3       __BITS(55,48)
+#define        ICC_SGIR_EL1_IRM        __BIT(40)
+#define        ICC_SGIR_EL1_Aff2       __BITS(39,32)
+#define        ICC_SGIR_EL1_INTID      __BITS(27,24)
+#define        ICC_SGIR_EL1_Aff1       __BITS(23,16)
+#define        ICC_SGIR_EL1_TargetList __BITS(15,0)
+#define        ICC_SGIR_EL1_Aff        (ICC_SGIR_EL1_Aff3|ICC_SGIR_EL1_Aff2|ICC_SGIR_EL1_Aff1)
+
+// ICC_IAR[01]_EL1: Interrupt Controller Interrupt Acknowledge Register 0/1
+#define        ICC_IAR_INTID           __BITS(23,0)
+#define        ICC_IAR_INTID_SPURIOUS  1023
 
+/*
+ * GICv3 REGISTER ACCESS
+ */
+
+#define        icc_sre_read            reg_icc_sre_el1_read
+#define        icc_sre_write           reg_icc_sre_el1_write
+#define        icc_pmr_write           reg_icc_pmr_el1_write
+#define        icc_bpr0_write          reg_icc_bpr0_el1_write
+#define        icc_bpr1_write          reg_icc_bpr1_el1_write
+#define        icc_ctlr_read           reg_icc_ctlr_el1_read
+#define        icc_ctlr_write          reg_icc_ctlr_el1_write
+#define        icc_igrpen1_write       reg_icc_igrpen1_el1_write
+#define        icc_sgi1r_write         reg_icc_sgi1r_el1_write
+#define        icc_iar1_read           reg_icc_iar1_el1_read
+#define        icc_eoi1r_write         reg_icc_eoir1_el1_write
 
 /*
  * GENERIC TIMER REGISTER ACCESS



Home | Main Index | Thread Index | Old Index