1*91f16700Schasinglulu /* 2*91f16700Schasinglulu * Copyright 2021-2022 NXP 3*91f16700Schasinglulu * 4*91f16700Schasinglulu * SPDX-License-Identifier: BSD-3-Clause 5*91f16700Schasinglulu * 6*91f16700Schasinglulu */ 7*91f16700Schasinglulu 8*91f16700Schasinglulu #ifndef PLAT_GICV3_H 9*91f16700Schasinglulu #define PLAT_GICV3_H 10*91f16700Schasinglulu 11*91f16700Schasinglulu #include <drivers/arm/gicv3.h> 12*91f16700Schasinglulu 13*91f16700Schasinglulu /* offset between redistributors */ 14*91f16700Schasinglulu #define GIC_RD_OFFSET 0x00020000 15*91f16700Schasinglulu /* offset between SGI's */ 16*91f16700Schasinglulu #define GIC_SGI_OFFSET 0x00020000 17*91f16700Schasinglulu /* offset from rd base to sgi base */ 18*91f16700Schasinglulu #define GIC_RD_2_SGI_OFFSET 0x00010000 19*91f16700Schasinglulu 20*91f16700Schasinglulu /* register offsets */ 21*91f16700Schasinglulu #define GICD_CTLR_OFFSET 0x0 22*91f16700Schasinglulu #define GICD_CLR_SPI_SR 0x58 23*91f16700Schasinglulu #define GICD_IGROUPR_2 0x88 24*91f16700Schasinglulu #define GICD_ISENABLER_1 0x104 25*91f16700Schasinglulu #define GICD_ICENABLER_1 0x184 26*91f16700Schasinglulu #define GICD_ISENABLER_2 0x108 27*91f16700Schasinglulu #define GICD_ICENABLER_2 0x188 28*91f16700Schasinglulu #define GICD_ISENABLER_3 0x10c 29*91f16700Schasinglulu #define GICD_ICENABLER_3 0x18c 30*91f16700Schasinglulu #define GICD_ICPENDR_2 0x288 31*91f16700Schasinglulu #define GICD_ICACTIVER_2 0x388 32*91f16700Schasinglulu #define GICD_IPRIORITYR_22 0x458 33*91f16700Schasinglulu #define GICD_ICFGR_5 0xC14 34*91f16700Schasinglulu #define GICD_IGRPMODR_2 0xD08 35*91f16700Schasinglulu 36*91f16700Schasinglulu #define GICD_IROUTER60_OFFSET 0x61e0 37*91f16700Schasinglulu #define GICD_IROUTER76_OFFSET 0x6260 38*91f16700Schasinglulu #define GICD_IROUTER89_OFFSET 0x62C8 39*91f16700Schasinglulu #define GICD_IROUTER112_OFFSET 0x6380 40*91f16700Schasinglulu #define GICD_IROUTER113_OFFSET 0x6388 41*91f16700Schasinglulu 42*91f16700Schasinglulu #define GICR_ICENABLER0_OFFSET 0x180 43*91f16700Schasinglulu #define GICR_CTLR_OFFSET 0x0 44*91f16700Schasinglulu #define GICR_IGROUPR0_OFFSET 0x80 45*91f16700Schasinglulu #define GICR_IGRPMODR0_OFFSET 0xD00 46*91f16700Schasinglulu #define GICR_IPRIORITYR3_OFFSET 0x40C 47*91f16700Schasinglulu #define GICR_ICPENDR0_OFFSET 0x280 48*91f16700Schasinglulu #define GICR_ISENABLER0_OFFSET 0x100 49*91f16700Schasinglulu #define GICR_TYPER_OFFSET 0x8 50*91f16700Schasinglulu #define GICR_WAKER_OFFSET 0x14 51*91f16700Schasinglulu #define GICR_ICACTIVER0_OFFSET 0x380 52*91f16700Schasinglulu #define GICR_ICFGR0_OFFSET 0xC00 53*91f16700Schasinglulu 54*91f16700Schasinglulu /* bitfield masks */ 55*91f16700Schasinglulu #define GICD_CTLR_EN_GRP_MASK 0x7 56*91f16700Schasinglulu #define GICD_CTLR_EN_GRP_1NS 0x2 57*91f16700Schasinglulu #define GICD_CTLR_EN_GRP_1S 0x4 58*91f16700Schasinglulu #define GICD_CTLR_EN_GRP_0 0x1 59*91f16700Schasinglulu #define GICD_CTLR_ARE_S_MASK 0x10 60*91f16700Schasinglulu #define GICD_CTLR_RWP 0x80000000 61*91f16700Schasinglulu 62*91f16700Schasinglulu #define GICR_ICENABLER0_SGI15 0x00008000 63*91f16700Schasinglulu #define GICR_CTLR_RWP 0x8 64*91f16700Schasinglulu #define GICR_IGROUPR0_SGI15 0x00008000 65*91f16700Schasinglulu #define GICR_IGRPMODR0_SGI15 0x00008000 66*91f16700Schasinglulu #define GICR_ISENABLER0_SGI15 0x00008000 67*91f16700Schasinglulu #define GICR_IPRIORITYR3_SGI15_MASK 0xFF000000 68*91f16700Schasinglulu #define GICR_ICPENDR0_SGI15 0x8000 69*91f16700Schasinglulu 70*91f16700Schasinglulu #define GIC_SPI_89_MASK 0x02000000 71*91f16700Schasinglulu #define GIC_SPI89_PRIORITY_MASK 0xFF00 72*91f16700Schasinglulu #define GIC_IRM_SPI89 0x80000000 73*91f16700Schasinglulu 74*91f16700Schasinglulu #define GICD_IROUTER_VALUE 0x100 75*91f16700Schasinglulu #define GICD_ISENABLER_1_VALUE 0x10000000 76*91f16700Schasinglulu #define GICD_ISENABLER_2_VALUE 0x100 77*91f16700Schasinglulu #define GICD_ISENABLER_3_VALUE 0x20100 78*91f16700Schasinglulu #define GICR_WAKER_SLEEP_BIT 0x2 79*91f16700Schasinglulu #define GICR_WAKER_ASLEEP (1 << 2 | 1 << 1) 80*91f16700Schasinglulu 81*91f16700Schasinglulu #define ICC_SRE_EL3_SRE 0x1 82*91f16700Schasinglulu #define ICC_IGRPEN0_EL1_EN 0x1 83*91f16700Schasinglulu #define ICC_CTLR_EL3_CBPR_EL1S 0x1 84*91f16700Schasinglulu #define ICC_CTLR_EL3_RM 0x20 85*91f16700Schasinglulu #define ICC_CTLR_EL3_EOIMODE_EL3 0x4 86*91f16700Schasinglulu #define ICC_CTLR_EL3_PMHE 0x40 87*91f16700Schasinglulu #define ICC_PMR_EL1_P_FILTER 0xFF 88*91f16700Schasinglulu #define ICC_IAR0_EL1_SGI15 0xF 89*91f16700Schasinglulu #define ICC_SGI0R_EL1_INTID 0x0F000000 90*91f16700Schasinglulu #define ICC_IAR0_INTID_SPI_89 0x59 91*91f16700Schasinglulu 92*91f16700Schasinglulu #define ICC_IGRPEN1_EL1 S3_0_C12_C12_7 93*91f16700Schasinglulu #define ICC_PMR_EL1 S3_0_C4_C6_0 94*91f16700Schasinglulu #define ICC_SRE_EL3 S3_6_C12_C12_5 95*91f16700Schasinglulu #define ICC_CTLR_EL3 S3_6_C12_C12_4 96*91f16700Schasinglulu #define ICC_SRE_EL2 S3_4_C12_C9_5 97*91f16700Schasinglulu #define ICC_CTLR_EL1 S3_0_C12_C12_4 98*91f16700Schasinglulu 99*91f16700Schasinglulu #ifndef __ASSEMBLER__ 100*91f16700Schasinglulu 101*91f16700Schasinglulu /* GIC common API's */ 102*91f16700Schasinglulu typedef unsigned int (*my_core_pos_fn)(void); 103*91f16700Schasinglulu 104*91f16700Schasinglulu void plat_ls_gic_driver_init(const uintptr_t nxp_gicd_addr, 105*91f16700Schasinglulu const uintptr_t nxp_gicr_addr, 106*91f16700Schasinglulu uint8_t plat_core_count, 107*91f16700Schasinglulu interrupt_prop_t *ls_interrupt_props, 108*91f16700Schasinglulu uint8_t ls_interrupt_prop_count, 109*91f16700Schasinglulu uintptr_t *target_mask_array, 110*91f16700Schasinglulu mpidr_hash_fn mpidr_to_core_pos); 111*91f16700Schasinglulu //void plat_ls_gic_driver_init(void); 112*91f16700Schasinglulu void plat_ls_gic_init(void); 113*91f16700Schasinglulu void plat_ls_gic_cpuif_enable(void); 114*91f16700Schasinglulu void plat_ls_gic_cpuif_disable(void); 115*91f16700Schasinglulu void plat_ls_gic_redistif_on(void); 116*91f16700Schasinglulu void plat_ls_gic_redistif_off(void); 117*91f16700Schasinglulu void plat_gic_pcpu_init(void); 118*91f16700Schasinglulu #endif 119*91f16700Schasinglulu 120*91f16700Schasinglulu #endif /* PLAT_GICV3_H */ 121