xref: /rk3399_ARM-atf/include/drivers/arm/gic_common.h (revision 994421a6dea5f6dbcdf2114026ce0549c810bd9b)
1df373737SAchin Gupta /*
2*5875f266SAlexei Fedorov  * Copyright (c) 2015-2020, ARM Limited and Contributors. All rights reserved.
3df373737SAchin Gupta  *
482cb2c1aSdp-arm  * SPDX-License-Identifier: BSD-3-Clause
5df373737SAchin Gupta  */
6df373737SAchin Gupta 
7c3cf06f1SAntonio Nino Diaz #ifndef GIC_COMMON_H
8c3cf06f1SAntonio Nino Diaz #define GIC_COMMON_H
9df373737SAchin Gupta 
1009d40e0eSAntonio Nino Diaz #include <lib/utils_def.h>
1103b645edSJeenu Viswambharan 
12df373737SAchin Gupta /*******************************************************************************
13df373737SAchin Gupta  * GIC Distributor interface general definitions
14df373737SAchin Gupta  ******************************************************************************/
15df373737SAchin Gupta /* Constants to categorise interrupts */
168782922cSAntonio Nino Diaz #define MIN_SGI_ID		U(0)
178782922cSAntonio Nino Diaz #define MIN_SEC_SGI_ID		U(8)
188782922cSAntonio Nino Diaz #define MIN_PPI_ID		U(16)
198782922cSAntonio Nino Diaz #define MIN_SPI_ID		U(32)
208782922cSAntonio Nino Diaz #define MAX_SPI_ID		U(1019)
21ebf1ca10SSoby Mathew 
228782922cSAntonio Nino Diaz #define TOTAL_SPI_INTR_NUM	(MAX_SPI_ID - MIN_SPI_ID + U(1))
23ebf1ca10SSoby Mathew #define TOTAL_PCPU_INTR_NUM	(MIN_SPI_ID - MIN_SGI_ID)
24df373737SAchin Gupta 
25df373737SAchin Gupta /* Mask for the priority field common to all GIC interfaces */
268782922cSAntonio Nino Diaz #define GIC_PRI_MASK			U(0xff)
27df373737SAchin Gupta 
2822966106SJeenu Viswambharan /* Mask for the configuration field common to all GIC interfaces */
298782922cSAntonio Nino Diaz #define GIC_CFG_MASK			U(0x3)
3022966106SJeenu Viswambharan 
31df373737SAchin Gupta /* Constant to indicate a spurious interrupt in all GIC versions */
328782922cSAntonio Nino Diaz #define GIC_SPURIOUS_INTERRUPT		U(1023)
33df373737SAchin Gupta 
3417e84eedSJeenu Viswambharan /* Interrupt configurations: 2-bit fields with LSB reserved */
3517e84eedSJeenu Viswambharan #define GIC_INTR_CFG_LEVEL		(0 << 1)
3617e84eedSJeenu Viswambharan #define GIC_INTR_CFG_EDGE		(1 << 1)
37c639e8ebSJeenu Viswambharan 
3835cd9e81SJeenu Viswambharan /* Highest possible interrupt priorities */
3903b645edSJeenu Viswambharan #define GIC_HIGHEST_SEC_PRIORITY	U(0x00)
4003b645edSJeenu Viswambharan #define GIC_HIGHEST_NS_PRIORITY		U(0x80)
41df373737SAchin Gupta 
42df373737SAchin Gupta /*******************************************************************************
43*5875f266SAlexei Fedorov  * Common GIC Distributor interface register offsets
44df373737SAchin Gupta  ******************************************************************************/
458782922cSAntonio Nino Diaz #define GICD_CTLR		U(0x0)
468782922cSAntonio Nino Diaz #define GICD_TYPER		U(0x4)
478782922cSAntonio Nino Diaz #define GICD_IIDR		U(0x8)
488782922cSAntonio Nino Diaz #define GICD_IGROUPR		U(0x80)
498782922cSAntonio Nino Diaz #define GICD_ISENABLER		U(0x100)
508782922cSAntonio Nino Diaz #define GICD_ICENABLER		U(0x180)
518782922cSAntonio Nino Diaz #define GICD_ISPENDR		U(0x200)
528782922cSAntonio Nino Diaz #define GICD_ICPENDR		U(0x280)
538782922cSAntonio Nino Diaz #define GICD_ISACTIVER		U(0x300)
548782922cSAntonio Nino Diaz #define GICD_ICACTIVER		U(0x380)
558782922cSAntonio Nino Diaz #define GICD_IPRIORITYR		U(0x400)
568782922cSAntonio Nino Diaz #define GICD_ICFGR		U(0xc00)
578782922cSAntonio Nino Diaz #define GICD_NSACR		U(0xe00)
58df373737SAchin Gupta 
59df373737SAchin Gupta /* GICD_CTLR bit definitions */
60df373737SAchin Gupta #define CTLR_ENABLE_G0_SHIFT		0
618782922cSAntonio Nino Diaz #define CTLR_ENABLE_G0_MASK		U(0x1)
628782922cSAntonio Nino Diaz #define CTLR_ENABLE_G0_BIT		BIT_32(CTLR_ENABLE_G0_SHIFT)
63df373737SAchin Gupta 
64df373737SAchin Gupta /*******************************************************************************
65*5875f266SAlexei Fedorov  * Common GIC Distributor interface register constants
66df373737SAchin Gupta  ******************************************************************************/
67df373737SAchin Gupta #define PIDR2_ARCH_REV_SHIFT	4
688782922cSAntonio Nino Diaz #define PIDR2_ARCH_REV_MASK	U(0xf)
69df373737SAchin Gupta 
70*5875f266SAlexei Fedorov /* GIC revision as reported by PIDR2.ArchRev register field */
718782922cSAntonio Nino Diaz #define ARCH_REV_GICV1		U(0x1)
72*5875f266SAlexei Fedorov #define ARCH_REV_GICV2		U(0x2)
73*5875f266SAlexei Fedorov #define ARCH_REV_GICV3		U(0x3)
74*5875f266SAlexei Fedorov #define ARCH_REV_GICV4		U(0x4)
75df373737SAchin Gupta 
76df373737SAchin Gupta #define IGROUPR_SHIFT		5
77df373737SAchin Gupta #define ISENABLER_SHIFT		5
78df373737SAchin Gupta #define ICENABLER_SHIFT		ISENABLER_SHIFT
79df373737SAchin Gupta #define ISPENDR_SHIFT		5
80df373737SAchin Gupta #define ICPENDR_SHIFT		ISPENDR_SHIFT
81df373737SAchin Gupta #define ISACTIVER_SHIFT		5
82df373737SAchin Gupta #define ICACTIVER_SHIFT		ISACTIVER_SHIFT
83df373737SAchin Gupta #define IPRIORITYR_SHIFT	2
84fc529feeSJeenu Viswambharan #define ITARGETSR_SHIFT		2
85df373737SAchin Gupta #define ICFGR_SHIFT		4
86df373737SAchin Gupta #define NSACR_SHIFT		4
87df373737SAchin Gupta 
88df373737SAchin Gupta /* GICD_TYPER shifts and masks */
898782922cSAntonio Nino Diaz #define TYPER_IT_LINES_NO_SHIFT	U(0)
908782922cSAntonio Nino Diaz #define TYPER_IT_LINES_NO_MASK	U(0x1f)
91df373737SAchin Gupta 
92df373737SAchin Gupta /* Value used to initialize Normal world interrupt priorities four at a time */
93df373737SAchin Gupta #define GICD_IPRIORITYR_DEF_VAL			\
94df373737SAchin Gupta 	(GIC_HIGHEST_NS_PRIORITY	|	\
95df373737SAchin Gupta 	(GIC_HIGHEST_NS_PRIORITY << 8)	|	\
96df373737SAchin Gupta 	(GIC_HIGHEST_NS_PRIORITY << 16)	|	\
97df373737SAchin Gupta 	(GIC_HIGHEST_NS_PRIORITY << 24))
98df373737SAchin Gupta 
99c3cf06f1SAntonio Nino Diaz #endif /* GIC_COMMON_H */
100