xref: /rk3399_ARM-atf/include/drivers/arm/gic_common.h (revision c3cf06f1a3a9b9ee8ac7a0ae505f95c45f7dca84)
1df373737SAchin Gupta /*
217e84eedSJeenu Viswambharan  * Copyright (c) 2015-2018, ARM Limited and Contributors. All rights reserved.
3df373737SAchin Gupta  *
482cb2c1aSdp-arm  * SPDX-License-Identifier: BSD-3-Clause
5df373737SAchin Gupta  */
6df373737SAchin Gupta 
7*c3cf06f1SAntonio Nino Diaz #ifndef GIC_COMMON_H
8*c3cf06f1SAntonio Nino Diaz #define GIC_COMMON_H
9df373737SAchin Gupta 
1003b645edSJeenu Viswambharan #include <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 
38df373737SAchin Gupta /* Constants to categorise priorities */
3903b645edSJeenu Viswambharan #define GIC_HIGHEST_SEC_PRIORITY	U(0x00)
4003b645edSJeenu Viswambharan #define GIC_LOWEST_SEC_PRIORITY		U(0x7f)
4103b645edSJeenu Viswambharan #define GIC_HIGHEST_NS_PRIORITY		U(0x80)
4203b645edSJeenu Viswambharan #define GIC_LOWEST_NS_PRIORITY		U(0xfe) /* 0xff would disable all interrupts */
43df373737SAchin Gupta 
44df373737SAchin Gupta /*******************************************************************************
45df373737SAchin Gupta  * GIC Distributor interface register offsets that are common to GICv3 & GICv2
46df373737SAchin Gupta  ******************************************************************************/
478782922cSAntonio Nino Diaz #define GICD_CTLR		U(0x0)
488782922cSAntonio Nino Diaz #define GICD_TYPER		U(0x4)
498782922cSAntonio Nino Diaz #define GICD_IIDR		U(0x8)
508782922cSAntonio Nino Diaz #define GICD_IGROUPR		U(0x80)
518782922cSAntonio Nino Diaz #define GICD_ISENABLER		U(0x100)
528782922cSAntonio Nino Diaz #define GICD_ICENABLER		U(0x180)
538782922cSAntonio Nino Diaz #define GICD_ISPENDR		U(0x200)
548782922cSAntonio Nino Diaz #define GICD_ICPENDR		U(0x280)
558782922cSAntonio Nino Diaz #define GICD_ISACTIVER		U(0x300)
568782922cSAntonio Nino Diaz #define GICD_ICACTIVER		U(0x380)
578782922cSAntonio Nino Diaz #define GICD_IPRIORITYR		U(0x400)
588782922cSAntonio Nino Diaz #define GICD_ICFGR		U(0xc00)
598782922cSAntonio Nino Diaz #define GICD_NSACR		U(0xe00)
60df373737SAchin Gupta 
61df373737SAchin Gupta /* GICD_CTLR bit definitions */
62df373737SAchin Gupta #define CTLR_ENABLE_G0_SHIFT		0
638782922cSAntonio Nino Diaz #define CTLR_ENABLE_G0_MASK		U(0x1)
648782922cSAntonio Nino Diaz #define CTLR_ENABLE_G0_BIT		BIT_32(CTLR_ENABLE_G0_SHIFT)
65df373737SAchin Gupta 
66df373737SAchin Gupta 
67df373737SAchin Gupta /*******************************************************************************
68df373737SAchin Gupta  * GIC Distributor interface register constants that are common to GICv3 & GICv2
69df373737SAchin Gupta  ******************************************************************************/
70df373737SAchin Gupta #define PIDR2_ARCH_REV_SHIFT	4
718782922cSAntonio Nino Diaz #define PIDR2_ARCH_REV_MASK	U(0xf)
72df373737SAchin Gupta 
73df373737SAchin Gupta /* GICv3 revision as reported by the PIDR2 register */
748782922cSAntonio Nino Diaz #define ARCH_REV_GICV3		U(0x3)
75df373737SAchin Gupta /* GICv2 revision as reported by the PIDR2 register */
768782922cSAntonio Nino Diaz #define ARCH_REV_GICV2		U(0x2)
7764deed19SEtienne Carriere /* GICv1 revision as reported by the PIDR2 register */
788782922cSAntonio Nino Diaz #define ARCH_REV_GICV1		U(0x1)
79df373737SAchin Gupta 
80df373737SAchin Gupta #define IGROUPR_SHIFT		5
81df373737SAchin Gupta #define ISENABLER_SHIFT		5
82df373737SAchin Gupta #define ICENABLER_SHIFT		ISENABLER_SHIFT
83df373737SAchin Gupta #define ISPENDR_SHIFT		5
84df373737SAchin Gupta #define ICPENDR_SHIFT		ISPENDR_SHIFT
85df373737SAchin Gupta #define ISACTIVER_SHIFT		5
86df373737SAchin Gupta #define ICACTIVER_SHIFT		ISACTIVER_SHIFT
87df373737SAchin Gupta #define IPRIORITYR_SHIFT	2
88fc529feeSJeenu Viswambharan #define ITARGETSR_SHIFT		2
89df373737SAchin Gupta #define ICFGR_SHIFT		4
90df373737SAchin Gupta #define NSACR_SHIFT		4
91df373737SAchin Gupta 
92df373737SAchin Gupta /* GICD_TYPER shifts and masks */
938782922cSAntonio Nino Diaz #define TYPER_IT_LINES_NO_SHIFT	U(0)
948782922cSAntonio Nino Diaz #define TYPER_IT_LINES_NO_MASK	U(0x1f)
95df373737SAchin Gupta 
96df373737SAchin Gupta /* Value used to initialize Normal world interrupt priorities four at a time */
97df373737SAchin Gupta #define GICD_IPRIORITYR_DEF_VAL			\
98df373737SAchin Gupta 	(GIC_HIGHEST_NS_PRIORITY	|	\
99df373737SAchin Gupta 	(GIC_HIGHEST_NS_PRIORITY << 8)	|	\
100df373737SAchin Gupta 	(GIC_HIGHEST_NS_PRIORITY << 16)	|	\
101df373737SAchin Gupta 	(GIC_HIGHEST_NS_PRIORITY << 24))
102df373737SAchin Gupta 
103*c3cf06f1SAntonio Nino Diaz #endif /* GIC_COMMON_H */
104