xref: /rk3399_ARM-atf/drivers/arm/gic/v2/gicv2_private.h (revision c3cf06f1a3a9b9ee8ac7a0ae505f95c45f7dca84)
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 
7*c3cf06f1SAntonio Nino Diaz #ifndef GICV2_PRIVATE_H
8*c3cf06f1SAntonio Nino Diaz #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 void gicv2_secure_spis_configure_props(uintptr_t gicd_base,
19c639e8ebSJeenu Viswambharan 		const interrupt_prop_t *interrupt_props,
20c639e8ebSJeenu Viswambharan 		unsigned int interrupt_props_num);
21c639e8ebSJeenu Viswambharan void gicv2_secure_ppi_sgi_setup_props(uintptr_t gicd_base,
22c639e8ebSJeenu Viswambharan 		const interrupt_prop_t *interrupt_props,
23c639e8ebSJeenu Viswambharan 		unsigned int interrupt_props_num);
24464ce2bbSSoby Mathew unsigned int gicv2_get_cpuif_id(uintptr_t base);
25464ce2bbSSoby Mathew 
26464ce2bbSSoby Mathew /*******************************************************************************
27464ce2bbSSoby Mathew  * GIC Distributor interface accessors for reading entire registers
28464ce2bbSSoby Mathew  ******************************************************************************/
29464ce2bbSSoby Mathew static inline unsigned int gicd_read_pidr2(uintptr_t base)
30464ce2bbSSoby Mathew {
31464ce2bbSSoby Mathew 	return mmio_read_32(base + GICD_PIDR2_GICV2);
32464ce2bbSSoby Mathew }
33464ce2bbSSoby Mathew 
34464ce2bbSSoby Mathew /*******************************************************************************
358db978b5SJeenu Viswambharan  * GIC Distributor interface accessors for writing entire registers
368db978b5SJeenu Viswambharan  ******************************************************************************/
37fc529feeSJeenu Viswambharan static inline unsigned int gicd_get_itargetsr(uintptr_t base, unsigned int id)
38fc529feeSJeenu Viswambharan {
39fc529feeSJeenu Viswambharan 	return mmio_read_8(base + GICD_ITARGETSR + id);
40fc529feeSJeenu Viswambharan }
41fc529feeSJeenu Viswambharan 
42fc529feeSJeenu Viswambharan static inline void gicd_set_itargetsr(uintptr_t base, unsigned int id,
43fc529feeSJeenu Viswambharan 		unsigned int target)
44fc529feeSJeenu Viswambharan {
453fea9c8bSAntonio Nino Diaz 	uint8_t val = target & GIC_TARGET_CPU_MASK;
463fea9c8bSAntonio Nino Diaz 
473fea9c8bSAntonio Nino Diaz 	mmio_write_8(base + GICD_ITARGETSR + id, val);
48fc529feeSJeenu Viswambharan }
49fc529feeSJeenu Viswambharan 
508db978b5SJeenu Viswambharan static inline void gicd_write_sgir(uintptr_t base, unsigned int val)
518db978b5SJeenu Viswambharan {
528db978b5SJeenu Viswambharan 	mmio_write_32(base + GICD_SGIR, val);
538db978b5SJeenu Viswambharan }
548db978b5SJeenu Viswambharan 
558db978b5SJeenu Viswambharan /*******************************************************************************
56464ce2bbSSoby Mathew  * GIC CPU interface accessors for reading entire registers
57464ce2bbSSoby Mathew  ******************************************************************************/
58464ce2bbSSoby Mathew 
59464ce2bbSSoby Mathew static inline unsigned int gicc_read_ctlr(uintptr_t base)
60464ce2bbSSoby Mathew {
61464ce2bbSSoby Mathew 	return mmio_read_32(base + GICC_CTLR);
62464ce2bbSSoby Mathew }
63464ce2bbSSoby Mathew 
64464ce2bbSSoby Mathew static inline unsigned int gicc_read_pmr(uintptr_t base)
65464ce2bbSSoby Mathew {
66464ce2bbSSoby Mathew 	return mmio_read_32(base + GICC_PMR);
67464ce2bbSSoby Mathew }
68464ce2bbSSoby Mathew 
69464ce2bbSSoby Mathew static inline unsigned int gicc_read_BPR(uintptr_t base)
70464ce2bbSSoby Mathew {
71464ce2bbSSoby Mathew 	return mmio_read_32(base + GICC_BPR);
72464ce2bbSSoby Mathew }
73464ce2bbSSoby Mathew 
74464ce2bbSSoby Mathew static inline unsigned int gicc_read_IAR(uintptr_t base)
75464ce2bbSSoby Mathew {
76464ce2bbSSoby Mathew 	return mmio_read_32(base + GICC_IAR);
77464ce2bbSSoby Mathew }
78464ce2bbSSoby Mathew 
79464ce2bbSSoby Mathew static inline unsigned int gicc_read_EOIR(uintptr_t base)
80464ce2bbSSoby Mathew {
81464ce2bbSSoby Mathew 	return mmio_read_32(base + GICC_EOIR);
82464ce2bbSSoby Mathew }
83464ce2bbSSoby Mathew 
84464ce2bbSSoby Mathew static inline unsigned int gicc_read_hppir(uintptr_t base)
85464ce2bbSSoby Mathew {
86464ce2bbSSoby Mathew 	return mmio_read_32(base + GICC_HPPIR);
87464ce2bbSSoby Mathew }
88464ce2bbSSoby Mathew 
89464ce2bbSSoby Mathew static inline unsigned int gicc_read_ahppir(uintptr_t base)
90464ce2bbSSoby Mathew {
91464ce2bbSSoby Mathew 	return mmio_read_32(base + GICC_AHPPIR);
92464ce2bbSSoby Mathew }
93464ce2bbSSoby Mathew 
94464ce2bbSSoby Mathew static inline unsigned int gicc_read_dir(uintptr_t base)
95464ce2bbSSoby Mathew {
96464ce2bbSSoby Mathew 	return mmio_read_32(base + GICC_DIR);
97464ce2bbSSoby Mathew }
98464ce2bbSSoby Mathew 
99464ce2bbSSoby Mathew static inline unsigned int gicc_read_iidr(uintptr_t base)
100464ce2bbSSoby Mathew {
101464ce2bbSSoby Mathew 	return mmio_read_32(base + GICC_IIDR);
102464ce2bbSSoby Mathew }
103464ce2bbSSoby Mathew 
104eb68ea9bSJeenu Viswambharan static inline unsigned int gicc_read_rpr(uintptr_t base)
105eb68ea9bSJeenu Viswambharan {
106eb68ea9bSJeenu Viswambharan 	return mmio_read_32(base + GICC_RPR);
107eb68ea9bSJeenu Viswambharan }
108eb68ea9bSJeenu Viswambharan 
109464ce2bbSSoby Mathew /*******************************************************************************
110464ce2bbSSoby Mathew  * GIC CPU interface accessors for writing entire registers
111464ce2bbSSoby Mathew  ******************************************************************************/
112464ce2bbSSoby Mathew 
113464ce2bbSSoby Mathew static inline void gicc_write_ctlr(uintptr_t base, unsigned int val)
114464ce2bbSSoby Mathew {
115464ce2bbSSoby Mathew 	mmio_write_32(base + GICC_CTLR, val);
116464ce2bbSSoby Mathew }
117464ce2bbSSoby Mathew 
118464ce2bbSSoby Mathew static inline void gicc_write_pmr(uintptr_t base, unsigned int val)
119464ce2bbSSoby Mathew {
120464ce2bbSSoby Mathew 	mmio_write_32(base + GICC_PMR, val);
121464ce2bbSSoby Mathew }
122464ce2bbSSoby Mathew 
123464ce2bbSSoby Mathew static inline void gicc_write_BPR(uintptr_t base, unsigned int val)
124464ce2bbSSoby Mathew {
125464ce2bbSSoby Mathew 	mmio_write_32(base + GICC_BPR, val);
126464ce2bbSSoby Mathew }
127464ce2bbSSoby Mathew 
128464ce2bbSSoby Mathew 
129464ce2bbSSoby Mathew static inline void gicc_write_IAR(uintptr_t base, unsigned int val)
130464ce2bbSSoby Mathew {
131464ce2bbSSoby Mathew 	mmio_write_32(base + GICC_IAR, val);
132464ce2bbSSoby Mathew }
133464ce2bbSSoby Mathew 
134464ce2bbSSoby Mathew static inline void gicc_write_EOIR(uintptr_t base, unsigned int val)
135464ce2bbSSoby Mathew {
136464ce2bbSSoby Mathew 	mmio_write_32(base + GICC_EOIR, val);
137464ce2bbSSoby Mathew }
138464ce2bbSSoby Mathew 
139464ce2bbSSoby Mathew static inline void gicc_write_hppir(uintptr_t base, unsigned int val)
140464ce2bbSSoby Mathew {
141464ce2bbSSoby Mathew 	mmio_write_32(base + GICC_HPPIR, val);
142464ce2bbSSoby Mathew }
143464ce2bbSSoby Mathew 
144464ce2bbSSoby Mathew static inline void gicc_write_dir(uintptr_t base, unsigned int val)
145464ce2bbSSoby Mathew {
146464ce2bbSSoby Mathew 	mmio_write_32(base + GICC_DIR, val);
147464ce2bbSSoby Mathew }
148464ce2bbSSoby Mathew 
149*c3cf06f1SAntonio Nino Diaz #endif /* GICV2_PRIVATE_H */
150