1 /*
2  * Copyright (c) 2013-2016, ARM Limited and Contributors. All rights reserved.
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  */
6 
7 #ifndef __GIC_V3_H__
8 #define __GIC_V3_H__
9 
10 /******************************************************************************
11  * THIS DRIVER IS DEPRECATED. For GICv2 systems, use the driver in gicv2.h
12  * and for GICv3 systems, use the driver in gicv3.h.
13  *****************************************************************************/
14 #if ERROR_DEPRECATED
15 #error " The legacy ARM GIC driver is deprecated."
16 #endif
17 
18 #include <mmio.h>
19 #include <stdint.h>
20 #include <types.h>
21 
22 
23 /* GICv3 Re-distributor interface registers & shifts */
24 #define GICR_PCPUBASE_SHIFT	0x11
25 #define GICR_TYPER		0x08
26 #define GICR_WAKER		0x14
27 
28 /* GICR_WAKER bit definitions */
29 #define WAKER_CA		(U(1) << 2)
30 #define WAKER_PS		(U(1) << 1)
31 
32 /* GICR_TYPER bit definitions */
33 #define GICR_TYPER_AFF_SHIFT	32
34 #define GICR_TYPER_AFF_MASK	0xffffffff
35 #define GICR_TYPER_LAST		(U(1) << 4)
36 
37 /* GICv3 ICC_SRE register bit definitions*/
38 #define ICC_SRE_EN		(U(1) << 3)
39 #define ICC_SRE_SRE		(U(1) << 0)
40 
41 /*******************************************************************************
42  * GICv3 defintions
43  ******************************************************************************/
44 #define GICV3_AFFLVL_MASK	0xff
45 #define GICV3_AFF0_SHIFT	0
46 #define GICV3_AFF1_SHIFT	8
47 #define GICV3_AFF2_SHIFT	16
48 #define GICV3_AFF3_SHIFT	24
49 #define GICV3_AFFINITY_MASK	0xffffffff
50 
51 /*******************************************************************************
52  * Function prototypes
53  ******************************************************************************/
54 uintptr_t gicv3_get_rdist(uintptr_t gicr_base, u_register_t mpidr);
55 
56 /*******************************************************************************
57  * GIC Redistributor interface accessors
58  ******************************************************************************/
gicr_read_waker(uintptr_t base)59 static inline uint32_t gicr_read_waker(uintptr_t base)
60 {
61 	return mmio_read_32(base + GICR_WAKER);
62 }
63 
gicr_write_waker(uintptr_t base,uint32_t val)64 static inline void gicr_write_waker(uintptr_t base, uint32_t val)
65 {
66 	mmio_write_32(base + GICR_WAKER, val);
67 }
68 
gicr_read_typer(uintptr_t base)69 static inline uint64_t gicr_read_typer(uintptr_t base)
70 {
71 	return mmio_read_64(base + GICR_TYPER);
72 }
73 
74 
75 #endif /* __GIC_V3_H__ */
76