xref: /rk3399_ARM-atf/include/drivers/nxp/gic/gicv3/plat_gic.h (revision 050a99a62f1df4de589be077b5b5fffe3c93afc7)
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