Home | History | Annotate | Line # | Download | only in cortex
      1 /*	$NetBSD: gic_reg.h,v 1.12 2020/11/22 19:53:47 jmcneill Exp $	*/
      2 /*-
      3  * Copyright (c) 2012 The NetBSD Foundation, Inc.
      4  * All rights reserved.
      5  *
      6  * This code is derived from software contributed to The NetBSD Foundation
      7  * by Matt Thomas of 3am Software Foundry.
      8  *
      9  * Redistribution and use in source and binary forms, with or without
     10  * modification, are permitted provided that the following conditions
     11  * are met:
     12  * 1. Redistributions of source code must retain the above copyright
     13  *    notice, this list of conditions and the following disclaimer.
     14  * 2. Redistributions in binary form must reproduce the above copyright
     15  *    notice, this list of conditions and the following disclaimer in the
     16  *    documentation and/or other materials provided with the distribution.
     17  *
     18  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
     19  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
     20  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     21  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
     22  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     23  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     24  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     25  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     26  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     27  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     28  * POSSIBILITY OF SUCH DAMAGE.
     29  */
     30 
     31 /*
     32  * ARM Generic Interrupt Controller Register Definitions
     33  *
     34  * These registers are accessible through a dedicated internal bus.
     35  * All accesses must be done in a little-endian manner.
     36  * The base address of the pages containing these registers is defined
     37  * by the pins PERIPHBASE[31:13] which can be obtained by doing a
     38  *	MRC p15,4,<Rd>,c15,c0,0; Read Configuration Base Address Register
     39  *	(except cortex-A9 uniprocessor)
     40  *
     41  * GIC is used by all Cortex-A cores except the A8.
     42  */
     43 
     44 #ifndef _ARM_CORTEX_GICREG_H_
     45 #define	_ARM_CORTEX_GICREG_H_
     46 
     47 #define	GICC_BASE	0x0100	// Offset in PeriphBase
     48 
     49 #define	GICC_CTRL	0x0000	// CPU Interface Control Register
     50 #define	GICC_PMR	0x0004	// Interrupt Priority Mask Register
     51 #define	GICC_BPR	0x0008	// Binary Point Register
     52 #define	GICC_IAR	0x000C	// Interrupt Acknowledge Register
     53 #define	GICC_EOIR	0x0010	// End Of Interrupt Register (WO)
     54 #define	GICC_RPR	0x0014	// Running Priority Register
     55 #define	GICC_HPPIR	0x0018	// Highest Priority Pending Interrupt Registers
     56 #define	GICC_ABPR	0x001C	// Aliased Binary Point Register
     57 #define	GICC_AIAR	0x0020	// Aliased Interrupt Acknowledge Register
     58 #define	GICC_AEOIR	0x0024	// Aliased End Of Interrupt Register
     59 #define	GICC_AHPPIR	0x0028	// Aliased Highest Priority Pending Interrupt Registers
     60 #define	GICC_APR0	0x00D0	// Active Priorites Register 0
     61 #define	GICC_APR1	0x00D4	// Active Priorites Register 1
     62 #define	GICC_APR2	0x00D8	// Active Priorites Register 2
     63 #define	GICC_APR3	0x00DC	// Active Priorites Register 3
     64 #define	GICC_NSAPR0	0x00E0	// Non-secure Active Priorities Register 0
     65 #define	GICC_NSAPR1	0x00E4	// Non-secure Active Priorities Register 1
     66 #define	GICC_NSAPR2	0x00E8	// Non-secure Active Priorities Register 2
     67 #define	GICC_NSAPR3	0x00EC	// Non-secure Active Priorities Register 3
     68 #define	GICC_IIDR	0x00FC	// CPU Interface Identification Register
     69 #define	GICC_DIR	0x1000	// Deactivate Interrupt Register
     70 
     71 
     72 #define	GICC_CTRL_V1_Enable		__BIT(0) // GICv1
     73 
     74 #define	GICC_CTRL_V2_EnableGrp0		__BIT(0) // GICv2 !Secure | Secure
     75 #define	GICC_CTRL_V2_EnableGrp1		__BIT(1) // GICv2 !Secure | Secure
     76 
     77 #define	GICC_CTRL_V2S_EOImodeNS		__BIT(9) // GICv2 Secure
     78 #define	GICC_CTRL_V2S_IRQBypDisGrp1	__BIT(6) // GICv2 Secure
     79 #define	GICC_CTRL_V2S_FIQBypDisGrp1	__BIT(4) // GICv2 Secure
     80 
     81 #define	GICC_CTRL_V2NS_EOImodeNS	__BIT(10) // GICv2 !Secure
     82 #define	GICC_CTRL_V2NS_EOImodeS		__BIT(9) // GICv2 !Secure
     83 #define	GICC_CTRL_V2NS_IRQBypDisGrp1	__BIT(8) // GICv2 !Secure
     84 #define	GICC_CTRL_V2NS_FIQBypDisGrp1	__BIT(7) // GICv2 !Secure
     85 #define	GICC_CTRL_V2NS_IRQBypDisGrp0	__BIT(6) // GICv2 !Secure
     86 #define	GICC_CTRL_V2NS_FIQBypDisGrp0	__BIT(5) // GICv2 !Secure
     87 #define	GICC_CTRL_V2NS_CPBR		__BIT(4) // GICv2 !Secure
     88 #define	GICC_CTRL_V2NS_FIQEn		__BIT(3) // GICv2 !Secure
     89 #define	GICC_CTRL_V2NS_AckCtl		__BIT(2) // GICv2 !Secure
     90 
     91 #define	GICC_PMR_PRIORITY		__BITS(7,0)
     92 #define	GICC_PMR_PRIORITIES		256
     93 #define	GICC_PMR_NS_PRIORITIES		128
     94 #define	GICC_PMR_NONSECURE		0x80
     95 #define	GICC_PMR_8_LEVELS		0x1f
     96 #define	GICC_PMR_16_LEVELS		0x0f
     97 #define	GICC_PMR_32_LEVELS		0x07
     98 #define	GICC_PMR_64_LEVELS		0x03
     99 #define	GICC_PMR_128_LEVELS		0x01
    100 
    101 #define	GICC_IAR_CPUID			__BITS(12,10)
    102 #define	GICC_IAR_IRQ			__BITS(9,0)
    103 #define	GICC_IAR_IRQ_SPURIOUS		1023
    104 #define	GICC_IAR_IRQ_SSPURIOUS		1022	// Secure
    105 
    106 #define	GICC_EOIR_CPUID			__BITS(12,10)
    107 #define	GICC_EOIR_InterruptID		__BITS(9,0)
    108 
    109 #define	GICC_HPPIR_CPUID		__BITS(12,10)
    110 #define	GICC_HPPIR_PendIntID		__BITS(9,0)
    111 
    112 #define	GICC_IIDR_ProductID		__BITS(31,20)
    113 #define	GICC_IIDR_ArchVersion		__BITS(19,16)
    114 #define	GICC_IIDR_Revision		__BITS(15,12)
    115 #define	GICC_IIDR_Implementer		__BITS(11,0)
    116 
    117 #define	GICC_DIR_CPUID			__BITS(12,10)
    118 #define	GICC_DIR_InterruptID		__BITS(9,0)
    119 
    120 #define	GICD_BASE		0x1000 // Offset from PeriphBase
    121 
    122 #define	GICD_CTRL		0x000 // Distributor Control Register
    123 #define	GICD_TYPER		0x004 // Interrupt Controller Type Register
    124 #define	GICD_IIDR		0x008 // Distributor Implementer Identification Register
    125 #define	GICD_IGROUPRn(n)	(0x080+4*(n)) // Interrupt Group Registers
    126 #define	GICD_ISENABLERn(n)	(0x100+4*(n)) // Interrupt Set-Enable Registers
    127 #define	GICD_ICENABLERn(n)	(0x180+4*(n)) // Interrupt Clear-Enable Registers
    128 #define	GICD_ISPENDRn(n)	(0x200+4*(n)) // Interrupt Set-Pending Registers
    129 #define	GICD_ICPENDRn(n)	(0x280+4*(n)) // Interrupt Clear-Pending Registers
    130 #define	GICD_ISACTIVERn(n)	(0x300+4*(n)) // GICv2 Interrupt Set-Active Registers
    131 #define	GICD_ICACTIVERn(n)	(0x380+4*(n)) // Interrupt Clear-Active Registers
    132 #define	GICD_IPRIORITYRn(n)	(0x400+4*(n)) // Interrupt Priority Registers
    133 
    134 #define	GICD_ITARGETSRn(n)	(0x800+4*(n)) // Interrupt Processor Targets Registers
    135 #define	GICD_ICFGRn(n)		(0xC00+4*(n)) // Interrupt Configuration Registers
    136 #define	GICD_IGRPMODRn(n)	(0xD00+4*(n)) // Interrupt Group Modifier Registers
    137 #define	GICD_NSACRn(n)		(0xE00+4*(n)) // Non-secure Access Control Registers, optional
    138 #define	GICD_SGIR		0xF00 // Software Generated Interrupt Register
    139 #define	GICD_CPENDSGIR(n)	(0xF10+4*(n)) // SGI Clear-Pending Registers
    140 #define	GICD_SPENDSGIR(n)	(0xF20+4*(n)) // SGI Set-Pending Registers
    141 #define	GICD_IROUTER(n)		(0x6000+8*(n)) // Interrupt Routing Registers
    142 
    143 #define	GICD_CTRL_RWP			__BIT(31)	// GICv3
    144 #define	GICD_CTRL_E1NWF			__BIT(7)	// GICv3
    145 #define	GICD_CTRL_DS			__BIT(6)	// GICv3
    146 #define	GICD_CTRL_ARE_NS		__BIT(4)	// GICv3
    147 #define	GICD_CTRL_EnableGrp1S		__BIT(2)	// Secure only
    148 #define	GICD_CTRL_EnableGrp1A		__BIT(1)	// GICv3
    149 #define	GICD_CTRL_Enable		__BIT(0)
    150 
    151 #define	GICD_TYPER_No1N			__BIT(25)	// GICv3
    152 #define	GICD_TYPER_A3V			__BIT(24)	// GICv3
    153 #define	GICD_TYPER_IDbits		__BITS(23,19)	// GICv3
    154 #define	GICD_TYPER_DVIS			__BIT(18)	// GICv3
    155 #define	GICD_TYPER_LPIS			__BIT(17)	// GICv3
    156 #define	GICD_TYPER_MBIS			__BIT(16)	// GICv3
    157 #define	GICD_TYPER_LSPI			__BITS(15,11)
    158 #define	GICD_TYPER_SecurityExtn		__BIT(10)
    159 #define	GICD_TYPER_CPUNumber		__BITS(7,5)
    160 #define	GICD_TYPER_ITLinesNumber	__BITS(4,0)	// 32*(N+1)
    161 #define	GICD_TYPER_LINES(n)		MIN(32*(__SHIFTOUT((n), GICD_TYPER_ITLinesNumber) + 1), 1020)
    162 
    163 #define	GICD_IIDR_ProductID		__BITS(31,24)
    164 #define	GICD_IIDR_Variant		__BITS(19,16)
    165 #define	GICD_IIDR_Revision		__BITS(15,12)
    166 #define	GICD_IIDR_Implementer		__BITS(11,0)
    167 
    168 /*
    169  * This register is byte-accessible but always little-endian.
    170  */
    171 #define	GICD_IPRIORITYR_Byte3		__BITS(31,24)
    172 #define	GICD_IPRIORITYR_Byte1		__BITS(23,16)
    173 #define	GICD_IPRIORITYR_Byte2		__BITS(15,8)
    174 #define	GICD_IPRIORITYR_Byte0		__BITS(7,0)
    175 
    176 /*
    177  * This register is byte-accessible but always little-endian.
    178  */
    179 #define	GICD_ITARGETSR_Byte3		__BITS(31,24)
    180 #define	GICD_ITARGETSR_Byte1		__BITS(23,16)
    181 #define	GICD_ITARGETSR_Byte2		__BITS(15,8)
    182 #define	GICD_ITARGETSR_Byte0		__BITS(7,0)
    183 
    184 #define	GICD_SGIR_TargetListFilter	__BITS(25,24)
    185 #define	GICD_SGIR_TargetListFilter_List	__SHIFTIN(0, GICD_SGIR_TargetListFilter)
    186 #define	GICD_SGIR_TargetListFilter_NotMe __SHIFTIN(1, GICD_SGIR_TargetListFilter)
    187 #define	GICD_SGIR_TargetListFilter_Me	__SHIFTIN(2, GICD_SGIR_TargetListFilter)
    188 #define	GICD_SGIR_TargetList		__BITS(23,16)
    189 #define	GICD_SGIR_NSATT			__BIT(15)
    190 #define	GICD_SGIR_SGIINTID		__BITS(3,0)
    191 
    192 #define	GICD_IROUTER_Aff3		__BITS(39,32)
    193 #define	GICD_IROUTER_Interrupt_Routing_mode __BIT(31)
    194 #define	GICD_IROUTER_Aff2		__BITS(23,16)
    195 #define	GICD_IROUTER_Aff1		__BITS(15,8)
    196 #define	GICD_IROUTER_Aff0		__BITS(7,0)
    197 
    198 #define	GICR_CTLR		0x0000	// Redistributor Control Register
    199 #define	GICR_IIDR		0x0004	// Implementor Identification Register
    200 #define	GICR_TYPER		0x0008	// Redistributor Type Register
    201 #define	GICR_STATUSR		0x0010	// Error Reporting Status Register, optional
    202 #define	GICR_WAKER		0x0014	// Redistributor Wake Register
    203 #define	GICR_SETLPIR		0x0040	// Set LPI Pending Register
    204 #define	GICR_CLRLPIR		0x0048	// Clear LPI Pending Register
    205 #define	GICR_PROPBASER		0x0070	// Redistributor Properties Base Address Register
    206 #define	GICR_PENDBASER		0x0078	// Redistributor LPI Pending Table Base Address Register
    207 #define	GICR_INVLPIR		0x00A0	// Redistributor Invalidate LPI Register
    208 #define	GICR_INVALLR		0x00B0	// Redistributor Invalidate All Register
    209 #define	GICR_SYNCR		0x00C0	// Redistributor Synchronize Register
    210 
    211 #define	GICR_IGROUPR0		0x10080	// Interrupt Group Register 0
    212 #define	GICR_ISENABLER0		0x10100	// Interrupt Set-Enable Register 0
    213 #define	GICR_ICENABLER0		0x10180	// Interrupt Clear-Enable Register 0
    214 #define	GICR_ISPENDR0		0x10200	// Interrupt Set-Pend Register 0
    215 #define	GICR_ICPENDR0		0x10280	// Interrupt Clear-Pend Register 0
    216 #define	GICR_ISACTIVER0		0x10300	// Interrupt Set-Active Register 0
    217 #define	GICR_ICACTIVER0		0x10380	// Interrupt Clear-Active Register 0
    218 #define	GICR_IPRIORITYRn(n)	(0x10400+4*(n)) // Interrupt Priority Registers
    219 #define	GICR_ICFGRn(n)		(0x10C00+4*(n)) // SGI (0) / PPI (1) Configuration Register
    220 #define	GICR_IGRPMODR0		0x10D00	// Interrupt Group Modifier Register 0
    221 #define	GICR_NSACR		0x10E00	// Non-Secure Access Control Register
    222 
    223 #define	GICR_CTLR_UWP			__BIT(31)
    224 #define	GICR_CTLR_DPG1S			__BIT(26)
    225 #define	GICR_CTLR_DPG1NS		__BIT(25)
    226 #define	GICR_CTLR_DPG0			__BIT(24)
    227 #define	GICR_CTLR_RWP			__BIT(3)
    228 #define	GICR_CTLR_Enable_LPIs		__BIT(0)
    229 
    230 #define	GICR_TYPER_Affinity_Value	__BITS(63,32)
    231 #define	GICR_TYPER_Affinity_Value_Aff3	__BITS(63,56)
    232 #define	GICR_TYPER_Affinity_Value_Aff2	__BITS(55,48)
    233 #define	GICR_TYPER_Affinity_Value_Aff1	__BITS(47,40)
    234 #define	GICR_TYPER_Affinity_Value_Aff0	__BITS(39,32)
    235 #define	GICR_TYPER_CommonLPIAff		__BITS(25,24)
    236 #define	GICR_TYPER_Processor_Number	__BITS(23,8)
    237 #define	GICR_TYPER_DPGS			__BIT(5)
    238 #define	GICR_TYPER_Last			__BIT(4)
    239 #define	GICR_TYPER_DirectLPI		__BIT(3)
    240 #define	GICR_TYPER_VLPIS		__BIT(1)
    241 #define	GICR_TYPER_PLPIS		__BIT(0)
    242 
    243 #define	GICR_WAKER_ChildrenAsleep	__BIT(2)
    244 #define	GICR_WAKER_ProcessorSleep	__BIT(1)
    245 
    246 #define	GICR_PROPBASER_OuterCache	__BITS(58,56)
    247 #define	GICR_PROPBASER_Physical_Address	__BITS(51,12)
    248 #define	GICR_PROPBASER_Shareability	__BITS(11,10)
    249 #define	GICR_PROPBASER_InnerCache	__BITS(9,7)
    250 #define	GICR_PROPBASER_IDbits		__BITS(4,0)
    251 
    252 #define	GICR_PENDBASER_PTZ		__BIT(62)
    253 #define	GICR_PENDBASER_OuterCache	__BITS(58,56)
    254 #define	GICR_PENDBASER_Physical_Address	__BITS(51,16)
    255 #define	GICR_PENDBASER_Shareability	__BITS(11,10)
    256 #define	GICR_PENDBASER_InnerCache	__BITS(9,7)
    257 
    258 #define	GICR_Shareability_NS		0	// Non-shareable
    259 #define	GICR_Shareability_IS		1	// Inner Shareable
    260 #define	GICR_Shareability_OS		2	// Outer Shareable
    261 
    262 #define	GICR_Cache_DEVICE_nGnRnE	0	// Device-nGnRnE
    263 #define	GICR_Cache_NORMAL_NC		1	// Non-cacheable
    264 #define	GICR_Cache_NORMAL_RA_WT		2	// Cacheable Read-allocate, Write-through
    265 #define	GICR_Cache_NORMAL_RA_WB		3	// Cacheable Read-allocate, Write-back
    266 #define	GICR_Cache_NORMAL_WA_WT		4	// Cacheable Write-allocate, Write-through
    267 #define	GICR_Cache_NORMAL_WA_WB		5	// Cacheable Write-allocate, Write-back
    268 #define	GICR_Cache_NORMAL_RA_WA_WT	6	// Cacheable Read-allocate, Write-allocate, Write-through
    269 #define	GICR_Cache_NORMAL_RA_WA_WB	7	// Cacheable Read-allocate, Write-allocate, Write-back
    270 
    271 /*
    272  * GICv3 Locality-specific Peripheral Interrupts
    273  */
    274 
    275 #define	GIC_LPI_BASE			0x2000	// Base LPI INTID
    276 
    277 #define	GIC_LPICONF_Priority		__BITS(7,2)
    278 #define	GIC_LPICONF_Res1		__BIT(1)
    279 #define	GIC_LPICONF_Enable		__BIT(0)
    280 
    281 /*
    282  * GICv1 names
    283  */
    284 #define	GICv1_ICDDCR		GICD_CTLR
    285 #define	GICv1_ICDICTR		GICD_TYPER
    286 #define	GICv1_ICDIIDR		GICD_IIDR
    287 #define	GICv1_ICDISRn(n)	GICD_IGROUPRn(n)
    288 #define	GICv1_ICDABRn(n)	GICD_ISACTIVERn(n)
    289 #define	GICv1_ICDISERn(n)	GICD_ISENABLERn(n)
    290 #define	GICv1_ICDICERn(n)	GICD_ICENABLERn(n)
    291 #define	GICv1_ICDISPRn(n)	GICD_ISPENDRn(n)
    292 #define	GICv1_ICDICPRn(n)	GICD_ICPENDRn(n)
    293 #define	GICv1_ICDIPRn(n)	GICD_IPRIORITYRn(n)
    294 #define	GICv1_ICDIPTRn(n)	GICD_ITARGETSRn(n)
    295 #define	GICv1_ICDICRn(n)	GICD_ICFGRn(n)
    296 #define	GICv1_ICDSGIR		GICD_SGIR
    297 
    298 #define	GICv1_ICCICR		GICC_CTLR
    299 #define	GICv1_ICCPMR		GICC_PMR
    300 #define	GICv1_ICCBPR		GICC_BPR
    301 #define	GICv1_ICCIAR		GICC_IAR
    302 #define	GICv1_ICCEOIR		GICC_EOIR
    303 #define	GICv1_ICCRPR		GICC_RPR
    304 #define	GICv1_ICCABPR		GICC_ABPR
    305 #define	GICv1_ICCHPIR		GICC_HPPIR
    306 #define	GICv1_ICCIIDR		GICC_IIDR
    307 
    308 /*
    309  * GICv2m (MSI)
    310  */
    311 
    312 #define GIC_MSI_TYPER		0x0008
    313 #define GIC_MSI_SETSPI		0x0040
    314 #define GIC_MSI_PIDR2		0x0fe8
    315 #define GIC_MSI_IIDR		0x0ffc
    316 
    317 #define GIC_MSI_TYPER_BASE	__BITS(25,16)	// Starting SPI of MSIs
    318 #define GIC_MSI_TYPER_NUMBER	__BITS(9,0)	// Count of MSIs
    319 
    320 /*
    321  * GICv3 Interrupt Translation Service (ITS)
    322  */
    323 
    324 #define	GITS_CTLR		0x00000		// ITS control register
    325 #define	GITS_IIDR		0x00004		// ITS Identification register
    326 #define	GITS_TYPER		0x00008		// ITS Type register
    327 #define	GITS_CBASER		0x00080		// ITS Command Queue Descriptor
    328 #define	GITS_CWRITER		0x00088		// ITS Write register
    329 #define	GITS_CREADR		0x00090		// ITS Read register
    330 #define	GITS_BASERn(n)		(0x00100+8*(n))	// ITS Translation Table Descriptors
    331 #define	GITS_PIDR2		0x0FFE8		// ITS Peripheral ID2 Register
    332 #define	GITS_TRANSLATER		0x10040		// ITS Translation register
    333 
    334 #define	GITS_CTLR_Quiescent		__BIT(31)
    335 #define	GITS_CTLR_ITS_Number		__BITS(7,4)
    336 #define	GITS_CTLR_ImDe			__BIT(1)
    337 #define	GITS_CTLR_Enabled		__BIT(0)
    338 
    339 #define	GITS_IIDR_ProductID		__BITS(31,24)
    340 #define	GITS_IIDR_Variant		__BITS(19,16)
    341 #define	GITS_IIDR_Revision		__BITS(15,12)
    342 #define	GITS_IIDR_Implementor		__BITS(11,0)
    343 
    344 #define	GITS_TYPER_VMOVP		__BIT(37)
    345 #define	GITS_TYPER_CIL			__BIT(36)
    346 #define	GITS_TYPER_CIDbits		__BITS(35,32)
    347 #define	GITS_TYPER_HCC			__BITS(31,24)
    348 #define	GITS_TYPER_PTA			__BIT(19)
    349 #define	GITS_TYPER_SEIS			__BIT(18)
    350 #define	GITS_TYPER_Devbits		__BITS(17,13)
    351 #define	GITS_TYPER_ID_bits		__BITS(12,8)
    352 #define	GITS_TYPER_ITT_entry_size	__BITS(7,4)
    353 #define	GITS_TYPER_CCT			__BIT(2)
    354 #define	GITS_TYPER_Virtual		__BIT(1)
    355 #define	GITS_TYPER_Physical		__BIT(0)
    356 
    357 #define	GITS_CBASER_Valid		__BIT(63)
    358 #define	GITS_CBASER_InnerCache		__BITS(61,59)
    359 #define	GITS_CBASER_OuterCache		__BITS(55,53)
    360 #define	GITS_CBASER_Physical_Address	__BITS(51,12)
    361 #define	GITS_CBASER_Shareability	__BITS(11,10)
    362 #define	GITS_CBASER_Size		__BITS(7,0)
    363 
    364 #define	GITS_CWRITER_Offset		__BITS(19,5)
    365 #define	GITS_CWRITER_Retry		__BIT(0)
    366 
    367 #define	GITS_CREADR_Offset		__BITS(19,5)
    368 #define	GITS_CREADR_Stalled		__BIT(0)
    369 
    370 #define	GITS_BASER_Valid		__BIT(63)
    371 #define	GITS_BASER_Indirect		__BIT(62)
    372 #define	GITS_BASER_InnerCache		__BITS(61,59)
    373 #define	GITS_BASER_Type			__BITS(58,56)
    374 #define	GITS_BASER_OuterCache		__BITS(55,53)
    375 #define	GITS_BASER_Entry_Size		__BITS(52,48)
    376 #define	GITS_BASER_Physical_Address	__BITS(47,12)
    377 #define	GITS_BASER_Shareability		__BITS(11,10)
    378 #define	GITS_BASER_Page_Size		__BITS(9,8)
    379 #define	GITS_BASER_Size			__BITS(7,0)
    380 
    381 #define	GITS_Shareability_NS		0	// Non-shareable
    382 #define	GITS_Shareability_IS		1	// Inner Shareable
    383 #define	GITS_Shareability_OS		2	// Outer Shareable
    384 
    385 #define	GITS_Cache_DEVICE_nGnRnE	0	// Device-nGnRnE
    386 #define	GITS_Cache_NORMAL_NC		1	// Non-cacheable
    387 #define	GITS_Cache_NORMAL_RA_WT		2	// Cacheable Read-allocate, Write-through
    388 #define	GITS_Cache_NORMAL_RA_WB		3	// Cacheable Read-allocate, Write-back
    389 #define	GITS_Cache_NORMAL_WA_WT		4	// Cacheable Write-allocate, Write-through
    390 #define	GITS_Cache_NORMAL_WA_WB		5	// Cacheable Write-allocate, Write-back
    391 #define	GITS_Cache_NORMAL_RA_WA_WT	6	// Cacheable Read-allocate, Write-allocate, Write-through
    392 #define	GITS_Cache_NORMAL_RA_WA_WB	7	// Cacheable Read-allocate, Write-allocate, Write-back
    393 
    394 #define	GITS_Type_Unimplemented		0	// Unimplemented
    395 #define	GITS_Type_Devices		1	// Devices table
    396 #define	GITS_Type_vPEs			2	// vPEs table
    397 #define	GITS_Type_InterruptCollections	4	// Interrupt collections table
    398 
    399 #define	GITS_Page_Size_4KB		0
    400 #define	GITS_Page_Size_16KB		1
    401 #define	GITS_Page_Size_64KB		2
    402 
    403 struct gicv3_its_command {
    404 	uint64_t	dw[4];
    405 };
    406 
    407 #define	GITS_CMD_MOVI			0x01
    408 #define	GITS_CMD_INT			0x03
    409 #define	GITS_CMD_CLEAR			0x04
    410 #define	GITS_CMD_SYNC			0x05
    411 #define	GITS_CMD_MAPD			0x08
    412 #define	GITS_CMD_MAPC			0x09
    413 #define	GITS_CMD_MAPTI			0x0A
    414 #define	GITS_CMD_MAPI			0x0B
    415 #define	GITS_CMD_INV			0x0C
    416 #define	GITS_CMD_INVALL			0x0D
    417 #define	GITS_CMD_MOVALL			0x0E
    418 #define	GITS_CMD_DISCARD		0x0F
    419 #define	GITS_CMD_VMOVI			0x21
    420 #define	GITS_CMD_VMOVP			0x22
    421 #define	GITS_CMD_VSYNC			0x25
    422 #define	GITS_CMD_VMAPP			0x29
    423 #define	GITS_CMD_VMAPTI			0x2A
    424 #define	GITS_CMD_VMAPI			0x2B
    425 #define	GITS_CMD_VINVALL		0x2D
    426 
    427 #endif /* !_ARM_CORTEX_GICREG_H_ */
    428