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