1050a99a6SPankaj Gupta /* 2*9755fd2eSBiwen Li * Copyright 2021-2022 NXP 3050a99a6SPankaj Gupta * 4050a99a6SPankaj Gupta * SPDX-License-Identifier: BSD-3-Clause 5050a99a6SPankaj Gupta * 6050a99a6SPankaj Gupta */ 7050a99a6SPankaj Gupta 8050a99a6SPankaj Gupta #ifndef PLAT_GICV3_H 9050a99a6SPankaj Gupta #define PLAT_GICV3_H 10050a99a6SPankaj Gupta 11050a99a6SPankaj Gupta #include <drivers/arm/gicv3.h> 12050a99a6SPankaj Gupta 13050a99a6SPankaj Gupta /* offset between redistributors */ 14050a99a6SPankaj Gupta #define GIC_RD_OFFSET 0x00020000 15050a99a6SPankaj Gupta /* offset between SGI's */ 16050a99a6SPankaj Gupta #define GIC_SGI_OFFSET 0x00020000 17050a99a6SPankaj Gupta /* offset from rd base to sgi base */ 18050a99a6SPankaj Gupta #define GIC_RD_2_SGI_OFFSET 0x00010000 19050a99a6SPankaj Gupta 20050a99a6SPankaj Gupta /* register offsets */ 21050a99a6SPankaj Gupta #define GICD_CTLR_OFFSET 0x0 22050a99a6SPankaj Gupta #define GICD_CLR_SPI_SR 0x58 23050a99a6SPankaj Gupta #define GICD_IGROUPR_2 0x88 24*9755fd2eSBiwen Li #define GICD_ISENABLER_1 0x104 25*9755fd2eSBiwen Li #define GICD_ICENABLER_1 0x184 26050a99a6SPankaj Gupta #define GICD_ISENABLER_2 0x108 27050a99a6SPankaj Gupta #define GICD_ICENABLER_2 0x188 28*9755fd2eSBiwen Li #define GICD_ISENABLER_3 0x10c 29*9755fd2eSBiwen Li #define GICD_ICENABLER_3 0x18c 30050a99a6SPankaj Gupta #define GICD_ICPENDR_2 0x288 31050a99a6SPankaj Gupta #define GICD_ICACTIVER_2 0x388 32050a99a6SPankaj Gupta #define GICD_IPRIORITYR_22 0x458 33050a99a6SPankaj Gupta #define GICD_ICFGR_5 0xC14 34050a99a6SPankaj Gupta #define GICD_IGRPMODR_2 0xD08 35050a99a6SPankaj Gupta 36050a99a6SPankaj Gupta #define GICD_IROUTER60_OFFSET 0x61e0 37050a99a6SPankaj Gupta #define GICD_IROUTER76_OFFSET 0x6260 38050a99a6SPankaj Gupta #define GICD_IROUTER89_OFFSET 0x62C8 39050a99a6SPankaj Gupta #define GICD_IROUTER112_OFFSET 0x6380 40050a99a6SPankaj Gupta #define GICD_IROUTER113_OFFSET 0x6388 41050a99a6SPankaj Gupta 42050a99a6SPankaj Gupta #define GICR_ICENABLER0_OFFSET 0x180 43050a99a6SPankaj Gupta #define GICR_CTLR_OFFSET 0x0 44050a99a6SPankaj Gupta #define GICR_IGROUPR0_OFFSET 0x80 45050a99a6SPankaj Gupta #define GICR_IGRPMODR0_OFFSET 0xD00 46050a99a6SPankaj Gupta #define GICR_IPRIORITYR3_OFFSET 0x40C 47050a99a6SPankaj Gupta #define GICR_ICPENDR0_OFFSET 0x280 48050a99a6SPankaj Gupta #define GICR_ISENABLER0_OFFSET 0x100 49050a99a6SPankaj Gupta #define GICR_TYPER_OFFSET 0x8 50050a99a6SPankaj Gupta #define GICR_WAKER_OFFSET 0x14 51050a99a6SPankaj Gupta #define GICR_ICACTIVER0_OFFSET 0x380 52050a99a6SPankaj Gupta #define GICR_ICFGR0_OFFSET 0xC00 53050a99a6SPankaj Gupta 54050a99a6SPankaj Gupta /* bitfield masks */ 55050a99a6SPankaj Gupta #define GICD_CTLR_EN_GRP_MASK 0x7 56050a99a6SPankaj Gupta #define GICD_CTLR_EN_GRP_1NS 0x2 57050a99a6SPankaj Gupta #define GICD_CTLR_EN_GRP_1S 0x4 58050a99a6SPankaj Gupta #define GICD_CTLR_EN_GRP_0 0x1 59050a99a6SPankaj Gupta #define GICD_CTLR_ARE_S_MASK 0x10 60050a99a6SPankaj Gupta #define GICD_CTLR_RWP 0x80000000 61050a99a6SPankaj Gupta 62050a99a6SPankaj Gupta #define GICR_ICENABLER0_SGI15 0x00008000 63050a99a6SPankaj Gupta #define GICR_CTLR_RWP 0x8 64050a99a6SPankaj Gupta #define GICR_IGROUPR0_SGI15 0x00008000 65050a99a6SPankaj Gupta #define GICR_IGRPMODR0_SGI15 0x00008000 66050a99a6SPankaj Gupta #define GICR_ISENABLER0_SGI15 0x00008000 67050a99a6SPankaj Gupta #define GICR_IPRIORITYR3_SGI15_MASK 0xFF000000 68050a99a6SPankaj Gupta #define GICR_ICPENDR0_SGI15 0x8000 69050a99a6SPankaj Gupta 70050a99a6SPankaj Gupta #define GIC_SPI_89_MASK 0x02000000 71050a99a6SPankaj Gupta #define GIC_SPI89_PRIORITY_MASK 0xFF00 72050a99a6SPankaj Gupta #define GIC_IRM_SPI89 0x80000000 73050a99a6SPankaj Gupta 74050a99a6SPankaj Gupta #define GICD_IROUTER_VALUE 0x100 75*9755fd2eSBiwen Li #define GICD_ISENABLER_1_VALUE 0x10000000 76*9755fd2eSBiwen Li #define GICD_ISENABLER_2_VALUE 0x100 77*9755fd2eSBiwen Li #define GICD_ISENABLER_3_VALUE 0x20100 78050a99a6SPankaj Gupta #define GICR_WAKER_SLEEP_BIT 0x2 79050a99a6SPankaj Gupta #define GICR_WAKER_ASLEEP (1 << 2 | 1 << 1) 80050a99a6SPankaj Gupta 81050a99a6SPankaj Gupta #define ICC_SRE_EL3_SRE 0x1 82050a99a6SPankaj Gupta #define ICC_IGRPEN0_EL1_EN 0x1 83050a99a6SPankaj Gupta #define ICC_CTLR_EL3_CBPR_EL1S 0x1 84050a99a6SPankaj Gupta #define ICC_CTLR_EL3_RM 0x20 85050a99a6SPankaj Gupta #define ICC_CTLR_EL3_EOIMODE_EL3 0x4 86050a99a6SPankaj Gupta #define ICC_CTLR_EL3_PMHE 0x40 87050a99a6SPankaj Gupta #define ICC_PMR_EL1_P_FILTER 0xFF 88050a99a6SPankaj Gupta #define ICC_IAR0_EL1_SGI15 0xF 89050a99a6SPankaj Gupta #define ICC_SGI0R_EL1_INTID 0x0F000000 90050a99a6SPankaj Gupta #define ICC_IAR0_INTID_SPI_89 0x59 91050a99a6SPankaj Gupta 92050a99a6SPankaj Gupta #define ICC_IGRPEN1_EL1 S3_0_C12_C12_7 93050a99a6SPankaj Gupta #define ICC_PMR_EL1 S3_0_C4_C6_0 94050a99a6SPankaj Gupta #define ICC_SRE_EL3 S3_6_C12_C12_5 95050a99a6SPankaj Gupta #define ICC_CTLR_EL3 S3_6_C12_C12_4 96050a99a6SPankaj Gupta #define ICC_SRE_EL2 S3_4_C12_C9_5 97050a99a6SPankaj Gupta #define ICC_CTLR_EL1 S3_0_C12_C12_4 98050a99a6SPankaj Gupta 99050a99a6SPankaj Gupta #ifndef __ASSEMBLER__ 100050a99a6SPankaj Gupta 101050a99a6SPankaj Gupta /* GIC common API's */ 102050a99a6SPankaj Gupta typedef unsigned int (*my_core_pos_fn)(void); 103050a99a6SPankaj Gupta 104050a99a6SPankaj Gupta void plat_ls_gic_driver_init(const uintptr_t nxp_gicd_addr, 105050a99a6SPankaj Gupta const uintptr_t nxp_gicr_addr, 106050a99a6SPankaj Gupta uint8_t plat_core_count, 107050a99a6SPankaj Gupta interrupt_prop_t *ls_interrupt_props, 108050a99a6SPankaj Gupta uint8_t ls_interrupt_prop_count, 109050a99a6SPankaj Gupta uintptr_t *target_mask_array, 110050a99a6SPankaj Gupta mpidr_hash_fn mpidr_to_core_pos); 111050a99a6SPankaj Gupta //void plat_ls_gic_driver_init(void); 112050a99a6SPankaj Gupta void plat_ls_gic_init(void); 113050a99a6SPankaj Gupta void plat_ls_gic_cpuif_enable(void); 114050a99a6SPankaj Gupta void plat_ls_gic_cpuif_disable(void); 115050a99a6SPankaj Gupta void plat_ls_gic_redistif_on(void); 116050a99a6SPankaj Gupta void plat_ls_gic_redistif_off(void); 117050a99a6SPankaj Gupta void plat_gic_pcpu_init(void); 118050a99a6SPankaj Gupta #endif 119050a99a6SPankaj Gupta 120050a99a6SPankaj Gupta #endif /* PLAT_GICV3_H */ 121