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