1*91f16700Schasinglulu /* 2*91f16700Schasinglulu * Copyright (c) 2015-2020, ARM Limited and Contributors. All rights reserved. 3*91f16700Schasinglulu * 4*91f16700Schasinglulu * SPDX-License-Identifier: BSD-3-Clause 5*91f16700Schasinglulu */ 6*91f16700Schasinglulu 7*91f16700Schasinglulu #ifndef GIC_COMMON_H 8*91f16700Schasinglulu #define GIC_COMMON_H 9*91f16700Schasinglulu 10*91f16700Schasinglulu #include <lib/utils_def.h> 11*91f16700Schasinglulu 12*91f16700Schasinglulu /******************************************************************************* 13*91f16700Schasinglulu * GIC Distributor interface general definitions 14*91f16700Schasinglulu ******************************************************************************/ 15*91f16700Schasinglulu /* Constants to categorise interrupts */ 16*91f16700Schasinglulu #define MIN_SGI_ID U(0) 17*91f16700Schasinglulu #define MIN_SEC_SGI_ID U(8) 18*91f16700Schasinglulu #define MIN_PPI_ID U(16) 19*91f16700Schasinglulu #define MIN_SPI_ID U(32) 20*91f16700Schasinglulu #define MAX_SPI_ID U(1019) 21*91f16700Schasinglulu 22*91f16700Schasinglulu #define TOTAL_SPI_INTR_NUM (MAX_SPI_ID - MIN_SPI_ID + U(1)) 23*91f16700Schasinglulu #define TOTAL_PCPU_INTR_NUM (MIN_SPI_ID - MIN_SGI_ID) 24*91f16700Schasinglulu 25*91f16700Schasinglulu /* Mask for the priority field common to all GIC interfaces */ 26*91f16700Schasinglulu #define GIC_PRI_MASK U(0xff) 27*91f16700Schasinglulu 28*91f16700Schasinglulu /* Mask for the configuration field common to all GIC interfaces */ 29*91f16700Schasinglulu #define GIC_CFG_MASK U(0x3) 30*91f16700Schasinglulu 31*91f16700Schasinglulu /* Constant to indicate a spurious interrupt in all GIC versions */ 32*91f16700Schasinglulu #define GIC_SPURIOUS_INTERRUPT U(1023) 33*91f16700Schasinglulu 34*91f16700Schasinglulu /* Interrupt configurations: 2-bit fields with LSB reserved */ 35*91f16700Schasinglulu #define GIC_INTR_CFG_LEVEL (0 << 1) 36*91f16700Schasinglulu #define GIC_INTR_CFG_EDGE (1 << 1) 37*91f16700Schasinglulu 38*91f16700Schasinglulu /* Highest possible interrupt priorities */ 39*91f16700Schasinglulu #define GIC_HIGHEST_SEC_PRIORITY U(0x00) 40*91f16700Schasinglulu #define GIC_HIGHEST_NS_PRIORITY U(0x80) 41*91f16700Schasinglulu 42*91f16700Schasinglulu /******************************************************************************* 43*91f16700Schasinglulu * Common GIC Distributor interface register offsets 44*91f16700Schasinglulu ******************************************************************************/ 45*91f16700Schasinglulu #define GICD_CTLR U(0x0) 46*91f16700Schasinglulu #define GICD_TYPER U(0x4) 47*91f16700Schasinglulu #define GICD_IIDR U(0x8) 48*91f16700Schasinglulu #define GICD_IGROUPR U(0x80) 49*91f16700Schasinglulu #define GICD_ISENABLER U(0x100) 50*91f16700Schasinglulu #define GICD_ICENABLER U(0x180) 51*91f16700Schasinglulu #define GICD_ISPENDR U(0x200) 52*91f16700Schasinglulu #define GICD_ICPENDR U(0x280) 53*91f16700Schasinglulu #define GICD_ISACTIVER U(0x300) 54*91f16700Schasinglulu #define GICD_ICACTIVER U(0x380) 55*91f16700Schasinglulu #define GICD_IPRIORITYR U(0x400) 56*91f16700Schasinglulu #define GICD_ICFGR U(0xc00) 57*91f16700Schasinglulu #define GICD_NSACR U(0xe00) 58*91f16700Schasinglulu 59*91f16700Schasinglulu /* GICD_CTLR bit definitions */ 60*91f16700Schasinglulu #define CTLR_ENABLE_G0_SHIFT 0 61*91f16700Schasinglulu #define CTLR_ENABLE_G0_MASK U(0x1) 62*91f16700Schasinglulu #define CTLR_ENABLE_G0_BIT BIT_32(CTLR_ENABLE_G0_SHIFT) 63*91f16700Schasinglulu 64*91f16700Schasinglulu /******************************************************************************* 65*91f16700Schasinglulu * Common GIC Distributor interface register constants 66*91f16700Schasinglulu ******************************************************************************/ 67*91f16700Schasinglulu #define PIDR2_ARCH_REV_SHIFT 4 68*91f16700Schasinglulu #define PIDR2_ARCH_REV_MASK U(0xf) 69*91f16700Schasinglulu 70*91f16700Schasinglulu /* GIC revision as reported by PIDR2.ArchRev register field */ 71*91f16700Schasinglulu #define ARCH_REV_GICV1 U(0x1) 72*91f16700Schasinglulu #define ARCH_REV_GICV2 U(0x2) 73*91f16700Schasinglulu #define ARCH_REV_GICV3 U(0x3) 74*91f16700Schasinglulu #define ARCH_REV_GICV4 U(0x4) 75*91f16700Schasinglulu 76*91f16700Schasinglulu #define IGROUPR_SHIFT 5 77*91f16700Schasinglulu #define ISENABLER_SHIFT 5 78*91f16700Schasinglulu #define ICENABLER_SHIFT ISENABLER_SHIFT 79*91f16700Schasinglulu #define ISPENDR_SHIFT 5 80*91f16700Schasinglulu #define ICPENDR_SHIFT ISPENDR_SHIFT 81*91f16700Schasinglulu #define ISACTIVER_SHIFT 5 82*91f16700Schasinglulu #define ICACTIVER_SHIFT ISACTIVER_SHIFT 83*91f16700Schasinglulu #define IPRIORITYR_SHIFT 2 84*91f16700Schasinglulu #define ITARGETSR_SHIFT 2 85*91f16700Schasinglulu #define ICFGR_SHIFT 4 86*91f16700Schasinglulu #define NSACR_SHIFT 4 87*91f16700Schasinglulu 88*91f16700Schasinglulu /* GICD_TYPER shifts and masks */ 89*91f16700Schasinglulu #define TYPER_IT_LINES_NO_SHIFT U(0) 90*91f16700Schasinglulu #define TYPER_IT_LINES_NO_MASK U(0x1f) 91*91f16700Schasinglulu 92*91f16700Schasinglulu /* Value used to initialize Normal world interrupt priorities four at a time */ 93*91f16700Schasinglulu #define GICD_IPRIORITYR_DEF_VAL \ 94*91f16700Schasinglulu (GIC_HIGHEST_NS_PRIORITY | \ 95*91f16700Schasinglulu (GIC_HIGHEST_NS_PRIORITY << 8) | \ 96*91f16700Schasinglulu (GIC_HIGHEST_NS_PRIORITY << 16) | \ 97*91f16700Schasinglulu (GIC_HIGHEST_NS_PRIORITY << 24)) 98*91f16700Schasinglulu 99*91f16700Schasinglulu #endif /* GIC_COMMON_H */ 100