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