xref: /rk3399_ARM-atf/drivers/arm/gic/v2/gicv2_private.h (revision 3fea9c8b8e8e255fc68c273defb5fc846ea2a689)
1464ce2bbSSoby Mathew /*
2eb68ea9bSJeenu Viswambharan  * Copyright (c) 2015-2017, ARM Limited and Contributors. All rights reserved.
3464ce2bbSSoby Mathew  *
482cb2c1aSdp-arm  * SPDX-License-Identifier: BSD-3-Clause
5464ce2bbSSoby Mathew  */
6464ce2bbSSoby Mathew 
7464ce2bbSSoby Mathew #ifndef __GICV2_PRIVATE_H__
8464ce2bbSSoby Mathew #define __GICV2_PRIVATE_H__
9464ce2bbSSoby Mathew 
10464ce2bbSSoby Mathew #include <gicv2.h>
11464ce2bbSSoby Mathew #include <mmio.h>
12464ce2bbSSoby Mathew #include <stdint.h>
13464ce2bbSSoby Mathew 
14464ce2bbSSoby Mathew /*******************************************************************************
15464ce2bbSSoby Mathew  * Private function prototypes
16464ce2bbSSoby Mathew  ******************************************************************************/
17464ce2bbSSoby Mathew void gicv2_spis_configure_defaults(uintptr_t gicd_base);
18c639e8ebSJeenu Viswambharan #if !ERROR_DEPRECATED
19464ce2bbSSoby Mathew void gicv2_secure_spis_configure(uintptr_t gicd_base,
20464ce2bbSSoby Mathew 				     unsigned int num_ints,
21464ce2bbSSoby Mathew 				     const unsigned int *sec_intr_list);
22464ce2bbSSoby Mathew void gicv2_secure_ppi_sgi_setup(uintptr_t gicd_base,
23464ce2bbSSoby Mathew 					unsigned int num_ints,
24464ce2bbSSoby Mathew 					const unsigned int *sec_intr_list);
25c639e8ebSJeenu Viswambharan #endif
26c639e8ebSJeenu Viswambharan void gicv2_secure_spis_configure_props(uintptr_t gicd_base,
27c639e8ebSJeenu Viswambharan 		const interrupt_prop_t *interrupt_props,
28c639e8ebSJeenu Viswambharan 		unsigned int interrupt_props_num);
29c639e8ebSJeenu Viswambharan void gicv2_secure_ppi_sgi_setup_props(uintptr_t gicd_base,
30c639e8ebSJeenu Viswambharan 		const interrupt_prop_t *interrupt_props,
31c639e8ebSJeenu Viswambharan 		unsigned int interrupt_props_num);
32464ce2bbSSoby Mathew unsigned int gicv2_get_cpuif_id(uintptr_t base);
33464ce2bbSSoby Mathew 
34464ce2bbSSoby Mathew /*******************************************************************************
35464ce2bbSSoby Mathew  * GIC Distributor interface accessors for reading entire registers
36464ce2bbSSoby Mathew  ******************************************************************************/
37464ce2bbSSoby Mathew static inline unsigned int gicd_read_pidr2(uintptr_t base)
38464ce2bbSSoby Mathew {
39464ce2bbSSoby Mathew 	return mmio_read_32(base + GICD_PIDR2_GICV2);
40464ce2bbSSoby Mathew }
41464ce2bbSSoby Mathew 
42464ce2bbSSoby Mathew /*******************************************************************************
438db978b5SJeenu Viswambharan  * GIC Distributor interface accessors for writing entire registers
448db978b5SJeenu Viswambharan  ******************************************************************************/
45fc529feeSJeenu Viswambharan static inline unsigned int gicd_get_itargetsr(uintptr_t base, unsigned int id)
46fc529feeSJeenu Viswambharan {
47fc529feeSJeenu Viswambharan 	return mmio_read_8(base + GICD_ITARGETSR + id);
48fc529feeSJeenu Viswambharan }
49fc529feeSJeenu Viswambharan 
50fc529feeSJeenu Viswambharan static inline void gicd_set_itargetsr(uintptr_t base, unsigned int id,
51fc529feeSJeenu Viswambharan 		unsigned int target)
52fc529feeSJeenu Viswambharan {
53*3fea9c8bSAntonio Nino Diaz 	uint8_t val = target & GIC_TARGET_CPU_MASK;
54*3fea9c8bSAntonio Nino Diaz 
55*3fea9c8bSAntonio Nino Diaz 	mmio_write_8(base + GICD_ITARGETSR + id, val);
56fc529feeSJeenu Viswambharan }
57fc529feeSJeenu Viswambharan 
588db978b5SJeenu Viswambharan static inline void gicd_write_sgir(uintptr_t base, unsigned int val)
598db978b5SJeenu Viswambharan {
608db978b5SJeenu Viswambharan 	mmio_write_32(base + GICD_SGIR, val);
618db978b5SJeenu Viswambharan }
628db978b5SJeenu Viswambharan 
638db978b5SJeenu Viswambharan /*******************************************************************************
64464ce2bbSSoby Mathew  * GIC CPU interface accessors for reading entire registers
65464ce2bbSSoby Mathew  ******************************************************************************/
66464ce2bbSSoby Mathew 
67464ce2bbSSoby Mathew static inline unsigned int gicc_read_ctlr(uintptr_t base)
68464ce2bbSSoby Mathew {
69464ce2bbSSoby Mathew 	return mmio_read_32(base + GICC_CTLR);
70464ce2bbSSoby Mathew }
71464ce2bbSSoby Mathew 
72464ce2bbSSoby Mathew static inline unsigned int gicc_read_pmr(uintptr_t base)
73464ce2bbSSoby Mathew {
74464ce2bbSSoby Mathew 	return mmio_read_32(base + GICC_PMR);
75464ce2bbSSoby Mathew }
76464ce2bbSSoby Mathew 
77464ce2bbSSoby Mathew static inline unsigned int gicc_read_BPR(uintptr_t base)
78464ce2bbSSoby Mathew {
79464ce2bbSSoby Mathew 	return mmio_read_32(base + GICC_BPR);
80464ce2bbSSoby Mathew }
81464ce2bbSSoby Mathew 
82464ce2bbSSoby Mathew static inline unsigned int gicc_read_IAR(uintptr_t base)
83464ce2bbSSoby Mathew {
84464ce2bbSSoby Mathew 	return mmio_read_32(base + GICC_IAR);
85464ce2bbSSoby Mathew }
86464ce2bbSSoby Mathew 
87464ce2bbSSoby Mathew static inline unsigned int gicc_read_EOIR(uintptr_t base)
88464ce2bbSSoby Mathew {
89464ce2bbSSoby Mathew 	return mmio_read_32(base + GICC_EOIR);
90464ce2bbSSoby Mathew }
91464ce2bbSSoby Mathew 
92464ce2bbSSoby Mathew static inline unsigned int gicc_read_hppir(uintptr_t base)
93464ce2bbSSoby Mathew {
94464ce2bbSSoby Mathew 	return mmio_read_32(base + GICC_HPPIR);
95464ce2bbSSoby Mathew }
96464ce2bbSSoby Mathew 
97464ce2bbSSoby Mathew static inline unsigned int gicc_read_ahppir(uintptr_t base)
98464ce2bbSSoby Mathew {
99464ce2bbSSoby Mathew 	return mmio_read_32(base + GICC_AHPPIR);
100464ce2bbSSoby Mathew }
101464ce2bbSSoby Mathew 
102464ce2bbSSoby Mathew static inline unsigned int gicc_read_dir(uintptr_t base)
103464ce2bbSSoby Mathew {
104464ce2bbSSoby Mathew 	return mmio_read_32(base + GICC_DIR);
105464ce2bbSSoby Mathew }
106464ce2bbSSoby Mathew 
107464ce2bbSSoby Mathew static inline unsigned int gicc_read_iidr(uintptr_t base)
108464ce2bbSSoby Mathew {
109464ce2bbSSoby Mathew 	return mmio_read_32(base + GICC_IIDR);
110464ce2bbSSoby Mathew }
111464ce2bbSSoby Mathew 
112eb68ea9bSJeenu Viswambharan static inline unsigned int gicc_read_rpr(uintptr_t base)
113eb68ea9bSJeenu Viswambharan {
114eb68ea9bSJeenu Viswambharan 	return mmio_read_32(base + GICC_RPR);
115eb68ea9bSJeenu Viswambharan }
116eb68ea9bSJeenu Viswambharan 
117464ce2bbSSoby Mathew /*******************************************************************************
118464ce2bbSSoby Mathew  * GIC CPU interface accessors for writing entire registers
119464ce2bbSSoby Mathew  ******************************************************************************/
120464ce2bbSSoby Mathew 
121464ce2bbSSoby Mathew static inline void gicc_write_ctlr(uintptr_t base, unsigned int val)
122464ce2bbSSoby Mathew {
123464ce2bbSSoby Mathew 	mmio_write_32(base + GICC_CTLR, val);
124464ce2bbSSoby Mathew }
125464ce2bbSSoby Mathew 
126464ce2bbSSoby Mathew static inline void gicc_write_pmr(uintptr_t base, unsigned int val)
127464ce2bbSSoby Mathew {
128464ce2bbSSoby Mathew 	mmio_write_32(base + GICC_PMR, val);
129464ce2bbSSoby Mathew }
130464ce2bbSSoby Mathew 
131464ce2bbSSoby Mathew static inline void gicc_write_BPR(uintptr_t base, unsigned int val)
132464ce2bbSSoby Mathew {
133464ce2bbSSoby Mathew 	mmio_write_32(base + GICC_BPR, val);
134464ce2bbSSoby Mathew }
135464ce2bbSSoby Mathew 
136464ce2bbSSoby Mathew 
137464ce2bbSSoby Mathew static inline void gicc_write_IAR(uintptr_t base, unsigned int val)
138464ce2bbSSoby Mathew {
139464ce2bbSSoby Mathew 	mmio_write_32(base + GICC_IAR, val);
140464ce2bbSSoby Mathew }
141464ce2bbSSoby Mathew 
142464ce2bbSSoby Mathew static inline void gicc_write_EOIR(uintptr_t base, unsigned int val)
143464ce2bbSSoby Mathew {
144464ce2bbSSoby Mathew 	mmio_write_32(base + GICC_EOIR, val);
145464ce2bbSSoby Mathew }
146464ce2bbSSoby Mathew 
147464ce2bbSSoby Mathew static inline void gicc_write_hppir(uintptr_t base, unsigned int val)
148464ce2bbSSoby Mathew {
149464ce2bbSSoby Mathew 	mmio_write_32(base + GICC_HPPIR, val);
150464ce2bbSSoby Mathew }
151464ce2bbSSoby Mathew 
152464ce2bbSSoby Mathew static inline void gicc_write_dir(uintptr_t base, unsigned int val)
153464ce2bbSSoby Mathew {
154464ce2bbSSoby Mathew 	mmio_write_32(base + GICC_DIR, val);
155464ce2bbSSoby Mathew }
156464ce2bbSSoby Mathew 
157464ce2bbSSoby Mathew #endif /* __GICV2_PRIVATE_H__ */
158