xref: /arm-trusted-firmware/include/drivers/nxp/gic/gicv3/plat_gic.h (revision 91f16700b400a8c0651d24a598fc48ee2997a0d7)
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