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