blob: 0fbdab0a2c1fe11f3622c52ba0729fd05c3da644 [file] [log] [blame]
Soby Mathewe063d3c2015-10-07 09:45:27 +01001/*
Jeenu Viswambharanb1e957e2017-09-22 08:32:09 +01002 * Copyright (c) 2015-2017, ARM Limited and Contributors. All rights reserved.
Soby Mathewe063d3c2015-10-07 09:45:27 +01003 *
dp-armfa3cf0b2017-05-03 09:38:09 +01004 * SPDX-License-Identifier: BSD-3-Clause
Soby Mathewe063d3c2015-10-07 09:45:27 +01005 */
6
Antonio Nino Diaz5eb88372018-11-08 10:20:19 +00007#ifndef GICV2_PRIVATE_H
8#define GICV2_PRIVATE_H
Soby Mathewe063d3c2015-10-07 09:45:27 +01009
Soby Mathewe063d3c2015-10-07 09:45:27 +010010#include <stdint.h>
11
Antonio Nino Diaze0f90632018-12-14 00:18:21 +000012#include <drivers/arm/gicv2.h>
13#include <lib/mmio.h>
14
Soby Mathewe063d3c2015-10-07 09:45:27 +010015/*******************************************************************************
16 * Private function prototypes
17 ******************************************************************************/
18void gicv2_spis_configure_defaults(uintptr_t gicd_base);
Jeenu Viswambharanaeb267c2017-09-22 08:32:09 +010019void gicv2_secure_spis_configure_props(uintptr_t gicd_base,
20 const interrupt_prop_t *interrupt_props,
21 unsigned int interrupt_props_num);
22void gicv2_secure_ppi_sgi_setup_props(uintptr_t gicd_base,
23 const interrupt_prop_t *interrupt_props,
24 unsigned int interrupt_props_num);
Soby Mathewe063d3c2015-10-07 09:45:27 +010025unsigned int gicv2_get_cpuif_id(uintptr_t base);
26
27/*******************************************************************************
28 * GIC Distributor interface accessors for reading entire registers
29 ******************************************************************************/
30static inline unsigned int gicd_read_pidr2(uintptr_t base)
31{
32 return mmio_read_32(base + GICD_PIDR2_GICV2);
33}
34
35/*******************************************************************************
Jeenu Viswambharanab14e9b2017-09-22 08:32:09 +010036 * GIC Distributor interface accessors for writing entire registers
37 ******************************************************************************/
Jeenu Viswambharandce70b32017-09-22 08:32:09 +010038static inline unsigned int gicd_get_itargetsr(uintptr_t base, unsigned int id)
39{
40 return mmio_read_8(base + GICD_ITARGETSR + id);
41}
42
43static inline void gicd_set_itargetsr(uintptr_t base, unsigned int id,
44 unsigned int target)
45{
Antonio Nino Diazca994e72018-08-21 10:02:33 +010046 uint8_t val = target & GIC_TARGET_CPU_MASK;
47
48 mmio_write_8(base + GICD_ITARGETSR + id, val);
Jeenu Viswambharandce70b32017-09-22 08:32:09 +010049}
50
Jeenu Viswambharanab14e9b2017-09-22 08:32:09 +010051static inline void gicd_write_sgir(uintptr_t base, unsigned int val)
52{
53 mmio_write_32(base + GICD_SGIR, val);
54}
55
56/*******************************************************************************
Soby Mathewe063d3c2015-10-07 09:45:27 +010057 * GIC CPU interface accessors for reading entire registers
58 ******************************************************************************/
59
60static inline unsigned int gicc_read_ctlr(uintptr_t base)
61{
62 return mmio_read_32(base + GICC_CTLR);
63}
64
65static inline unsigned int gicc_read_pmr(uintptr_t base)
66{
67 return mmio_read_32(base + GICC_PMR);
68}
69
70static inline unsigned int gicc_read_BPR(uintptr_t base)
71{
72 return mmio_read_32(base + GICC_BPR);
73}
74
75static inline unsigned int gicc_read_IAR(uintptr_t base)
76{
77 return mmio_read_32(base + GICC_IAR);
78}
79
80static inline unsigned int gicc_read_EOIR(uintptr_t base)
81{
82 return mmio_read_32(base + GICC_EOIR);
83}
84
85static inline unsigned int gicc_read_hppir(uintptr_t base)
86{
87 return mmio_read_32(base + GICC_HPPIR);
88}
89
90static inline unsigned int gicc_read_ahppir(uintptr_t base)
91{
92 return mmio_read_32(base + GICC_AHPPIR);
93}
94
95static inline unsigned int gicc_read_dir(uintptr_t base)
96{
97 return mmio_read_32(base + GICC_DIR);
98}
99
100static inline unsigned int gicc_read_iidr(uintptr_t base)
101{
102 return mmio_read_32(base + GICC_IIDR);
103}
104
Jeenu Viswambharanb1e957e2017-09-22 08:32:09 +0100105static inline unsigned int gicc_read_rpr(uintptr_t base)
106{
107 return mmio_read_32(base + GICC_RPR);
108}
109
Soby Mathewe063d3c2015-10-07 09:45:27 +0100110/*******************************************************************************
111 * GIC CPU interface accessors for writing entire registers
112 ******************************************************************************/
113
114static inline void gicc_write_ctlr(uintptr_t base, unsigned int val)
115{
116 mmio_write_32(base + GICC_CTLR, val);
117}
118
119static inline void gicc_write_pmr(uintptr_t base, unsigned int val)
120{
121 mmio_write_32(base + GICC_PMR, val);
122}
123
124static inline void gicc_write_BPR(uintptr_t base, unsigned int val)
125{
126 mmio_write_32(base + GICC_BPR, val);
127}
128
129
130static inline void gicc_write_IAR(uintptr_t base, unsigned int val)
131{
132 mmio_write_32(base + GICC_IAR, val);
133}
134
135static inline void gicc_write_EOIR(uintptr_t base, unsigned int val)
136{
137 mmio_write_32(base + GICC_EOIR, val);
138}
139
140static inline void gicc_write_hppir(uintptr_t base, unsigned int val)
141{
142 mmio_write_32(base + GICC_HPPIR, val);
143}
144
145static inline void gicc_write_dir(uintptr_t base, unsigned int val)
146{
147 mmio_write_32(base + GICC_DIR, val);
148}
149
Antonio Nino Diaz5eb88372018-11-08 10:20:19 +0000150#endif /* GICV2_PRIVATE_H */