1 /* 2 * Copyright 2020 Broadcom 3 * 4 * SPDX-License-Identifier: Apache-2.0 5 */ 6 7 #ifndef ZEPHYR_INCLUDE_DRIVERS_INTC_GIC_COMMON_PRIV_H_ 8 #define ZEPHYR_INCLUDE_DRIVERS_INTC_GIC_COMMON_PRIV_H_ 9 10 /* Offsets from GICD base or GICR(n) SGI_base */ 11 #define GIC_DIST_IGROUPR 0x0080 12 #define GIC_DIST_ISENABLER 0x0100 13 #define GIC_DIST_ICENABLER 0x0180 14 #define GIC_DIST_ISPENDR 0x0200 15 #define GIC_DIST_ICPENDR 0x0280 16 #define GIC_DIST_ISACTIVER 0x0300 17 #define GIC_DIST_ICACTIVER 0x0380 18 #define GIC_DIST_IPRIORITYR 0x0400 19 #define GIC_DIST_ITARGETSR 0x0800 20 #define GIC_DIST_ICFGR 0x0c00 21 #define GIC_DIST_IGROUPMODR 0x0d00 22 #define GIC_DIST_SGIR 0x0f00 23 24 /* GICv3.1 Support for Extended SPI Range */ 25 #define GIC_ESPI_START 4096 26 #define GIC_ESPI_END 5119 27 #define GIC_DIST_IGROUPRnE 0x1000 28 #define GIC_DIST_ISENABLERnE 0x1200 29 #define GIC_DIST_ICENABLERnE 0x1400 30 #define GIC_DIST_ISPENDRnE 0x1600 31 #define GIC_DIST_ICPENDRnE 0x1800 32 #define GIC_DIST_ISACTIVERnE 0x1a00 33 #define GIC_DIST_ICACTIVERnE 0x1c00 34 #define GIC_DIST_IPRIORITYRnE 0x2000 35 #define GIC_DIST_ICFGRnE 0x3000 36 #define GIC_DIST_IGROUPMODRnE 0x3400 37 38 /* GICD GICR common access macros */ 39 #define IGROUPR(base, n) (base + GIC_DIST_IGROUPR + (n) * 4) 40 #define ISENABLER(base, n) (base + GIC_DIST_ISENABLER + (n) * 4) 41 #define ICENABLER(base, n) (base + GIC_DIST_ICENABLER + (n) * 4) 42 #define ISPENDR(base, n) (base + GIC_DIST_ISPENDR + (n) * 4) 43 #define ICPENDR(base, n) (base + GIC_DIST_ICPENDR + (n) * 4) 44 #define IPRIORITYR(base, n) (base + GIC_DIST_IPRIORITYR + n) 45 #define ITARGETSR(base, n) (base + GIC_DIST_ITARGETSR + (n) * 4) 46 #define ICFGR(base, n) (base + GIC_DIST_ICFGR + (n) * 4) 47 #define IGROUPMODR(base, n) (base + GIC_DIST_IGROUPMODR + (n) * 4) 48 49 /* GICD Extended SPI (GICv3.1) common access macros */ 50 #define IGROUPRnE(base, n) (base + GIC_DIST_IGROUPRnE + (n) * 4) 51 #define ISENABLERnE(base, n) (base + GIC_DIST_ISENABLERnE + (n) * 4) 52 #define ICENABLERnE(base, n) (base + GIC_DIST_ICENABLERnE + (n) * 4) 53 #define ISPENDRnE(base, n) (base + GIC_DIST_ISPENDRnE + (n) * 4) 54 #define ICPENDRnE(base, n) (base + GIC_DIST_ICPENDRnE + (n) * 4) 55 #define IPRIORITYRnE(base, n) (base + GIC_DIST_IPRIORITYRnE + n) 56 #define ICFGRnE(base, n) (base + GIC_DIST_ICFGRnE + (n) * 4) 57 #define IGROUPMODRnE(base, n) (base + GIC_DIST_IGROUPMODRnE + (n) * 4) 58 59 /* 60 * selects redistributor SGI_base for current core for PPI and SGI 61 * selects distributor base for SPI 62 * The macro translates to distributor base for GICv2 and GICv1 63 */ 64 65 #if CONFIG_GIC_VER <= 2 66 #define GET_DIST_BASE(intid) GIC_DIST_BASE 67 #define GIC_IS_ESPI(intid) 0 68 #else 69 #define GET_DIST_BASE(intid) \ 70 ((intid < GIC_SPI_INT_BASE) ? (gic_get_rdist() + GICR_SGI_BASE_OFF) : GIC_DIST_BASE) 71 #define GIC_IS_ESPI(intid) ((intid >= GIC_ESPI_START) && (intid <= GIC_ESPI_END)) 72 #endif 73 #endif /* ZEPHYR_INCLUDE_DRIVERS_INTC_GIC_COMMON_PRIV_H */ 74