xref: /kvm-unit-tests/lib/arm64/asm/gic-v3-its.h (revision ba74b1063d21003ff7de7a84af121af2d3663c1f)
1 /*
2  * All ITS* defines are lifted from include/linux/irqchip/arm-gic-v3.h
3  *
4  * Copyright (C) 2020, Red Hat Inc, Eric Auger <eric.auger@redhat.com>
5  *
6  * This work is licensed under the terms of the GNU LGPL, version 2.
7  */
8 #ifndef _ASMARM64_GIC_V3_ITS_H_
9 #define _ASMARM64_GIC_V3_ITS_H_
10 
11 #ifndef _ASMARM_GIC_H_
12 #error Do not directly include <asm/gic-v3-its.h>. Include <asm/gic.h>
13 #endif
14 
15 struct its_typer {
16 	unsigned int ite_size;
17 	unsigned int eventid_bits;
18 	unsigned int deviceid_bits;
19 	unsigned int collid_bits;
20 	bool pta;
21 	bool phys_lpi;
22 	bool virt_lpi;
23 };
24 
25 struct its_baser {
26 	int index;
27 	size_t psz;
28 	int esz;
29 	bool indirect;
30 	void *table_addr;
31 };
32 
33 #define GITS_BASER_NR_REGS		8
34 
35 struct its_data {
36 	void *base;
37 	struct its_typer typer;
38 	struct its_baser device_baser;
39 	struct its_baser coll_baser;
40 	struct its_cmd_block *cmd_base;
41 	struct its_cmd_block *cmd_write;
42 };
43 
44 extern struct its_data its_data;
45 
46 #define gicv3_its_base()		(its_data.base)
47 
48 #define GITS_CTLR			0x0000
49 #define GITS_IIDR			0x0004
50 #define GITS_TYPER			0x0008
51 #define GITS_CBASER			0x0080
52 #define GITS_CWRITER			0x0088
53 #define GITS_CREADR			0x0090
54 #define GITS_BASER			0x0100
55 
56 #define GITS_TYPER_PLPIS		BIT(0)
57 #define GITS_TYPER_VLPIS		BIT(1)
58 #define GITS_TYPER_ITT_ENTRY_SIZE	GENMASK_ULL(7, 4)
59 #define GITS_TYPER_ITT_ENTRY_SIZE_SHIFT	4
60 #define GITS_TYPER_IDBITS		GENMASK_ULL(12, 8)
61 #define GITS_TYPER_IDBITS_SHIFT		8
62 #define GITS_TYPER_DEVBITS		GENMASK_ULL(17, 13)
63 #define GITS_TYPER_DEVBITS_SHIFT	13
64 #define GITS_TYPER_PTA			BIT(19)
65 #define GITS_TYPER_CIDBITS		GENMASK_ULL(35, 32)
66 #define GITS_TYPER_CIDBITS_SHIFT	32
67 #define GITS_TYPER_CIL			BIT(36)
68 
69 #define GITS_CTLR_ENABLE		(1U << 0)
70 
71 #define GITS_CBASER_VALID		(1UL << 63)
72 
73 #define GITS_BASER_VALID		BIT(63)
74 #define GITS_BASER_INDIRECT		BIT(62)
75 #define GITS_BASER_TYPE_SHIFT		(56)
76 #define GITS_BASER_TYPE(r)		(((r) >> GITS_BASER_TYPE_SHIFT) & 7)
77 #define GITS_BASER_ENTRY_SIZE_SHIFT	(48)
78 #define GITS_BASER_ENTRY_SIZE(r)	((((r) >> GITS_BASER_ENTRY_SIZE_SHIFT) & 0x1f) + 1)
79 #define GITS_BASER_PAGE_SIZE_SHIFT	(8)
80 #define GITS_BASER_PAGE_SIZE_4K		(0UL << GITS_BASER_PAGE_SIZE_SHIFT)
81 #define GITS_BASER_PAGE_SIZE_16K	(1UL << GITS_BASER_PAGE_SIZE_SHIFT)
82 #define GITS_BASER_PAGE_SIZE_64K	(2UL << GITS_BASER_PAGE_SIZE_SHIFT)
83 #define GITS_BASER_PAGE_SIZE_MASK	(3UL << GITS_BASER_PAGE_SIZE_SHIFT)
84 #define GITS_BASER_PAGES_MAX		256
85 #define GITS_BASER_PAGES_SHIFT		(0)
86 #define GITS_BASER_NR_PAGES(r)		(((r) & 0xff) + 1)
87 #define GITS_BASER_PHYS_ADDR_MASK	0xFFFFFFFFF000
88 #define GITS_BASER_TYPE_NONE		0
89 #define GITS_BASER_TYPE_DEVICE		1
90 #define GITS_BASER_TYPE_COLLECTION	4
91 
92 extern void its_parse_typer(void);
93 extern void its_init(void);
94 extern int its_baser_lookup(int i, struct its_baser *baser);
95 
96 #endif /* _ASMARM64_GIC_V3_ITS_H_ */
97