xref: /arm-trusted-firmware/drivers/arm/gic/v2/gicv2_private.h (revision 91f16700b400a8c0651d24a598fc48ee2997a0d7)
1*91f16700Schasinglulu /*
2*91f16700Schasinglulu  * Copyright (c) 2015-2017, ARM Limited and Contributors. All rights reserved.
3*91f16700Schasinglulu  *
4*91f16700Schasinglulu  * SPDX-License-Identifier: BSD-3-Clause
5*91f16700Schasinglulu  */
6*91f16700Schasinglulu 
7*91f16700Schasinglulu #ifndef GICV2_PRIVATE_H
8*91f16700Schasinglulu #define GICV2_PRIVATE_H
9*91f16700Schasinglulu 
10*91f16700Schasinglulu #include <stdint.h>
11*91f16700Schasinglulu 
12*91f16700Schasinglulu #include <drivers/arm/gicv2.h>
13*91f16700Schasinglulu #include <lib/mmio.h>
14*91f16700Schasinglulu 
15*91f16700Schasinglulu /*******************************************************************************
16*91f16700Schasinglulu  * Private function prototypes
17*91f16700Schasinglulu  ******************************************************************************/
18*91f16700Schasinglulu void gicv2_spis_configure_defaults(uintptr_t gicd_base);
19*91f16700Schasinglulu void gicv2_secure_spis_configure_props(uintptr_t gicd_base,
20*91f16700Schasinglulu 		const interrupt_prop_t *interrupt_props,
21*91f16700Schasinglulu 		unsigned int interrupt_props_num);
22*91f16700Schasinglulu void gicv2_secure_ppi_sgi_setup_props(uintptr_t gicd_base,
23*91f16700Schasinglulu 		const interrupt_prop_t *interrupt_props,
24*91f16700Schasinglulu 		unsigned int interrupt_props_num);
25*91f16700Schasinglulu unsigned int gicv2_get_cpuif_id(uintptr_t base);
26*91f16700Schasinglulu 
27*91f16700Schasinglulu /*******************************************************************************
28*91f16700Schasinglulu  * GIC Distributor interface accessors for reading entire registers
29*91f16700Schasinglulu  ******************************************************************************/
30*91f16700Schasinglulu static inline unsigned int gicd_read_pidr2(uintptr_t base)
31*91f16700Schasinglulu {
32*91f16700Schasinglulu 	return mmio_read_32(base + GICD_PIDR2_GICV2);
33*91f16700Schasinglulu }
34*91f16700Schasinglulu 
35*91f16700Schasinglulu /*******************************************************************************
36*91f16700Schasinglulu  * GIC Distributor interface accessors for writing entire registers
37*91f16700Schasinglulu  ******************************************************************************/
38*91f16700Schasinglulu static inline unsigned int gicd_get_itargetsr(uintptr_t base, unsigned int id)
39*91f16700Schasinglulu {
40*91f16700Schasinglulu 	return mmio_read_8(base + GICD_ITARGETSR + id);
41*91f16700Schasinglulu }
42*91f16700Schasinglulu 
43*91f16700Schasinglulu static inline void gicd_set_itargetsr(uintptr_t base, unsigned int id,
44*91f16700Schasinglulu 		unsigned int target)
45*91f16700Schasinglulu {
46*91f16700Schasinglulu 	uint8_t val = target & GIC_TARGET_CPU_MASK;
47*91f16700Schasinglulu 
48*91f16700Schasinglulu 	mmio_write_8(base + GICD_ITARGETSR + id, val);
49*91f16700Schasinglulu }
50*91f16700Schasinglulu 
51*91f16700Schasinglulu static inline void gicd_write_sgir(uintptr_t base, unsigned int val)
52*91f16700Schasinglulu {
53*91f16700Schasinglulu 	mmio_write_32(base + GICD_SGIR, val);
54*91f16700Schasinglulu }
55*91f16700Schasinglulu 
56*91f16700Schasinglulu /*******************************************************************************
57*91f16700Schasinglulu  * GIC CPU interface accessors for reading entire registers
58*91f16700Schasinglulu  ******************************************************************************/
59*91f16700Schasinglulu 
60*91f16700Schasinglulu static inline unsigned int gicc_read_ctlr(uintptr_t base)
61*91f16700Schasinglulu {
62*91f16700Schasinglulu 	return mmio_read_32(base + GICC_CTLR);
63*91f16700Schasinglulu }
64*91f16700Schasinglulu 
65*91f16700Schasinglulu static inline unsigned int gicc_read_pmr(uintptr_t base)
66*91f16700Schasinglulu {
67*91f16700Schasinglulu 	return mmio_read_32(base + GICC_PMR);
68*91f16700Schasinglulu }
69*91f16700Schasinglulu 
70*91f16700Schasinglulu static inline unsigned int gicc_read_BPR(uintptr_t base)
71*91f16700Schasinglulu {
72*91f16700Schasinglulu 	return mmio_read_32(base + GICC_BPR);
73*91f16700Schasinglulu }
74*91f16700Schasinglulu 
75*91f16700Schasinglulu static inline unsigned int gicc_read_IAR(uintptr_t base)
76*91f16700Schasinglulu {
77*91f16700Schasinglulu 	return mmio_read_32(base + GICC_IAR);
78*91f16700Schasinglulu }
79*91f16700Schasinglulu 
80*91f16700Schasinglulu static inline unsigned int gicc_read_EOIR(uintptr_t base)
81*91f16700Schasinglulu {
82*91f16700Schasinglulu 	return mmio_read_32(base + GICC_EOIR);
83*91f16700Schasinglulu }
84*91f16700Schasinglulu 
85*91f16700Schasinglulu static inline unsigned int gicc_read_hppir(uintptr_t base)
86*91f16700Schasinglulu {
87*91f16700Schasinglulu 	return mmio_read_32(base + GICC_HPPIR);
88*91f16700Schasinglulu }
89*91f16700Schasinglulu 
90*91f16700Schasinglulu static inline unsigned int gicc_read_ahppir(uintptr_t base)
91*91f16700Schasinglulu {
92*91f16700Schasinglulu 	return mmio_read_32(base + GICC_AHPPIR);
93*91f16700Schasinglulu }
94*91f16700Schasinglulu 
95*91f16700Schasinglulu static inline unsigned int gicc_read_dir(uintptr_t base)
96*91f16700Schasinglulu {
97*91f16700Schasinglulu 	return mmio_read_32(base + GICC_DIR);
98*91f16700Schasinglulu }
99*91f16700Schasinglulu 
100*91f16700Schasinglulu static inline unsigned int gicc_read_iidr(uintptr_t base)
101*91f16700Schasinglulu {
102*91f16700Schasinglulu 	return mmio_read_32(base + GICC_IIDR);
103*91f16700Schasinglulu }
104*91f16700Schasinglulu 
105*91f16700Schasinglulu static inline unsigned int gicc_read_rpr(uintptr_t base)
106*91f16700Schasinglulu {
107*91f16700Schasinglulu 	return mmio_read_32(base + GICC_RPR);
108*91f16700Schasinglulu }
109*91f16700Schasinglulu 
110*91f16700Schasinglulu /*******************************************************************************
111*91f16700Schasinglulu  * GIC CPU interface accessors for writing entire registers
112*91f16700Schasinglulu  ******************************************************************************/
113*91f16700Schasinglulu 
114*91f16700Schasinglulu static inline void gicc_write_ctlr(uintptr_t base, unsigned int val)
115*91f16700Schasinglulu {
116*91f16700Schasinglulu 	mmio_write_32(base + GICC_CTLR, val);
117*91f16700Schasinglulu }
118*91f16700Schasinglulu 
119*91f16700Schasinglulu static inline void gicc_write_pmr(uintptr_t base, unsigned int val)
120*91f16700Schasinglulu {
121*91f16700Schasinglulu 	mmio_write_32(base + GICC_PMR, val);
122*91f16700Schasinglulu }
123*91f16700Schasinglulu 
124*91f16700Schasinglulu static inline void gicc_write_BPR(uintptr_t base, unsigned int val)
125*91f16700Schasinglulu {
126*91f16700Schasinglulu 	mmio_write_32(base + GICC_BPR, val);
127*91f16700Schasinglulu }
128*91f16700Schasinglulu 
129*91f16700Schasinglulu 
130*91f16700Schasinglulu static inline void gicc_write_IAR(uintptr_t base, unsigned int val)
131*91f16700Schasinglulu {
132*91f16700Schasinglulu 	mmio_write_32(base + GICC_IAR, val);
133*91f16700Schasinglulu }
134*91f16700Schasinglulu 
135*91f16700Schasinglulu static inline void gicc_write_EOIR(uintptr_t base, unsigned int val)
136*91f16700Schasinglulu {
137*91f16700Schasinglulu 	mmio_write_32(base + GICC_EOIR, val);
138*91f16700Schasinglulu }
139*91f16700Schasinglulu 
140*91f16700Schasinglulu static inline void gicc_write_hppir(uintptr_t base, unsigned int val)
141*91f16700Schasinglulu {
142*91f16700Schasinglulu 	mmio_write_32(base + GICC_HPPIR, val);
143*91f16700Schasinglulu }
144*91f16700Schasinglulu 
145*91f16700Schasinglulu static inline void gicc_write_dir(uintptr_t base, unsigned int val)
146*91f16700Schasinglulu {
147*91f16700Schasinglulu 	mmio_write_32(base + GICC_DIR, val);
148*91f16700Schasinglulu }
149*91f16700Schasinglulu 
150*91f16700Schasinglulu #endif /* GICV2_PRIVATE_H */
151