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 extern void its_enable_defaults(void); 96 97 #endif /* _ASMARM64_GIC_V3_ITS_H_ */ 98