1 /* 2 * Copyright 2020 Broadcom 3 * Copyright 2025 Arm Limited and/or its affiliates <open-source-office@arm.com> 4 * 5 * SPDX-License-Identifier: Apache-2.0 6 */ 7 8 #ifndef ZEPHYR_INCLUDE_DRIVERS_INTC_GICV3_PRIV_H_ 9 #define ZEPHYR_INCLUDE_DRIVERS_INTC_GICV3_PRIV_H_ 10 11 #include <zephyr/types.h> 12 #include <zephyr/device.h> 13 #include <zephyr/sys/atomic.h> 14 15 /* Cache and Share ability for ITS & Redistributor LPI state tables */ 16 #define GIC_BASER_CACHE_NGNRNE 0x0UL /* Device-nGnRnE */ 17 #define GIC_BASER_CACHE_INNERLIKE 0x0UL /* Same as Inner Cacheability. */ 18 #define GIC_BASER_CACHE_NCACHEABLE 0x1UL /* Non-cacheable */ 19 #define GIC_BASER_CACHE_RAWT 0x2UL /* Cacheable R-allocate, W-through */ 20 #define GIC_BASER_CACHE_RAWB 0x3UL /* Cacheable R-allocate, W-back */ 21 #define GIC_BASER_CACHE_WAWT 0x4UL /* Cacheable W-allocate, W-through */ 22 #define GIC_BASER_CACHE_WAWB 0x5UL /* Cacheable W-allocate, W-back */ 23 #define GIC_BASER_CACHE_RAWAWT 0x6UL /* Cacheable R-allocate, W-allocate, W-through */ 24 #define GIC_BASER_CACHE_RAWAWB 0x7UL /* Cacheable R-allocate, W-allocate, W-back */ 25 #define GIC_BASER_SHARE_NO 0x0UL /* Non-shareable */ 26 #define GIC_BASER_SHARE_INNER 0x1UL /* Inner Shareable */ 27 #define GIC_BASER_SHARE_OUTER 0x2UL /* Outer Shareable */ 28 29 /* SGI base is at 64K offset from Redistributor */ 30 #define GICR_SGI_BASE_OFF 0x10000 31 32 /* GICR registers offset from RD_base(n) */ 33 #define GICR_CTLR 0x0000 34 #define GICR_IIDR 0x0004 35 #define GICR_TYPER 0x0008 36 #define GICR_STATUSR 0x0010 37 #define GICR_WAKER 0x0014 38 #define GICR_PWRR 0x0024 39 #define GICR_PROPBASER 0x0070 40 #define GICR_PENDBASER 0x0078 41 42 /* Register bit definitions */ 43 44 /* GICD_CTLR Interrupt group definitions */ 45 #define GICD_CTLR_ENABLE_G0 0 46 #define GICD_CTLR_ENABLE_G1NS 1 47 #define GICD_CTLR_ENABLE_G1S 2 48 #define GICD_CTRL_ARE_S 4 49 #define GICD_CTRL_ARE_NS 5 50 #define GICD_CTRL_NS 6 51 #define GICD_CGRL_E1NWF 7 52 53 /* GICD_CTLR Register write progress bit */ 54 #define GICD_CTLR_RWP 31 55 56 /* GICR_CTLR */ 57 #define GICR_CTLR_ENABLE_LPIS BIT(0) 58 #define GICR_CTLR_RWP 3 59 60 /* GICR_IIDR */ 61 #define GICR_IIDR_PRODUCT_ID_SHIFT 24 62 #define GICR_IIDR_PRODUCT_ID_MASK 0xFFUL 63 #define GICR_IIDR_PRODUCT_ID_GET(_val) MASK_GET(_val, GICR_IIDR_PRODUCT_ID) 64 65 /* GICR_TYPER */ 66 #define GICR_TYPER_AFFINITY_VALUE_SHIFT 32 67 #define GICR_TYPER_AFFINITY_VALUE_MASK 0xFFFFFFFFUL 68 #define GICR_TYPER_AFFINITY_VALUE_GET(_val) MASK_GET(_val, GICR_TYPER_AFFINITY_VALUE) 69 #define GICR_TYPER_LAST_SHIFT 4 70 #define GICR_TYPER_LAST_MASK 0x1UL 71 #define GICR_TYPER_LAST_GET(_val) MASK_GET(_val, GICR_TYPER_LAST) 72 #define GICR_TYPER_PROCESSOR_NUMBER_SHIFT 8 73 #define GICR_TYPER_PROCESSOR_NUMBER_MASK 0xFFFFUL 74 #define GICR_TYPER_PROCESSOR_NUMBER_GET(_val) MASK_GET(_val, GICR_TYPER_PROCESSOR_NUMBER) 75 76 /* GICR_WAKER */ 77 #define GICR_WAKER_PS 1 78 #define GICR_WAKER_CA 2 79 80 /* GICR_PWRR */ 81 #define GICR_PWRR_RDPD 0 82 #define GICR_PWRR_RDAG 1 83 #define GICR_PWRR_RDGPO 3 84 85 /* GICR_PROPBASER */ 86 #define GITR_PROPBASER_ID_BITS_MASK 0x1fUL 87 #define GITR_PROPBASER_INNER_CACHE_SHIFT 7 88 #define GITR_PROPBASER_INNER_CACHE_MASK 0x7UL 89 #define GITR_PROPBASER_SHAREABILITY_SHIFT 10 90 #define GITR_PROPBASER_SHAREABILITY_MASK 0x3UL 91 #define GITR_PROPBASER_ADDR_SHIFT 12 92 #define GITR_PROPBASER_ADDR_MASK 0xFFFFFFFFFFUL 93 #define GITR_PROPBASER_OUTER_CACHE_SHIFT 56 94 #define GITR_PROPBASER_OUTER_CACHE_MASK 0x7UL 95 96 /* GICR_PENDBASER */ 97 #define GITR_PENDBASER_INNER_CACHE_SHIFT 7 98 #define GITR_PENDBASER_INNER_CACHE_MASK 0x7UL 99 #define GITR_PENDBASER_SHAREABILITY_SHIFT 10 100 #define GITR_PENDBASER_SHAREABILITY_MASK 0x3UL 101 #define GITR_PENDBASER_ADDR_SHIFT 16 102 #define GITR_PENDBASER_ADDR_MASK 0xFFFFFFFFFUL 103 #define GITR_PENDBASER_OUTER_CACHE_SHIFT 56 104 #define GITR_PENDBASER_OUTER_CACHE_MASK 0x7UL 105 #define GITR_PENDBASER_PTZ BIT64(62) 106 107 /* GITCD_IROUTER */ 108 #define GIC_DIST_IROUTER 0x6000 109 #define IROUTER(base, n) (base + GIC_DIST_IROUTER + (n) * 8) 110 111 /* 112 * ITS registers, offsets from ITS_base 113 */ 114 #define GITS_CTLR 0x0000 115 #define GITS_IIDR 0x0004 116 #define GITS_TYPER 0x0008 117 #define GITS_STATUSR 0x0040 118 #define GITS_UMSIR 0x0048 119 #define GITS_CBASER 0x0080 120 #define GITS_CWRITER 0x0088 121 #define GITS_CREADR 0x0090 122 #define GITS_BASER(n) (0x0100 + ((n) * 8)) 123 124 #define GITS_TRANSLATER 0x10040 125 126 /* ITS CTLR register */ 127 #define GITS_CTLR_ENABLED_SHIFT 0 128 #define GITS_CTLR_ENABLED_MASK 0x1UL 129 #define GITS_CTLR_ITS_NUMBER_SHIFT 4 130 #define GITS_CTLR_ITS_NUMBER_MASK 0xfUL 131 #define GITS_CTLR_QUIESCENT_SHIFT 31 132 #define GITS_CTLR_QUIESCENT_MASK 0x1UL 133 134 #define GITS_CTLR_ENABLED_GET(_val) MASK_GET(_val, GITS_CTLR_ENABLED) 135 #define GITS_CTLR_QUIESCENT_GET(_val) MASK_GET(_val, GITS_CTLR_QUIESCENT) 136 137 /* ITS TYPER register */ 138 #define GITS_TYPER_PHY_SHIFT 0 139 #define GITS_TYPER_PHY_MASK 0x1UL 140 #define GITS_TYPER_VIRT_SHIFT 1 141 #define GITS_TYPER_VIRT_MASK 0x1UL 142 #define GITS_TYPER_ITT_ENTRY_SIZE_SHIFT 4 143 #define GITS_TYPER_ITT_ENTRY_SIZE_MASK 0xfUL 144 #define GITS_TYPER_IDBITS_SHIFT 8 145 #define GITS_TYPER_IDBITS_MASK 0x1fUL 146 #define GITS_TYPER_DEVBITS_SHIFT 13 147 #define GITS_TYPER_DEVBITS_MASK 0x1fUL 148 #define GITS_TYPER_SEIS_SHIFT 18 149 #define GITS_TYPER_SEIS_MASK 0x1UL 150 #define GITS_TYPER_PTA_SHIFT 19 151 #define GITS_TYPER_PTA_MASK 0x1UL 152 #define GITS_TYPER_HCC_SHIFT 24 153 #define GITS_TYPER_HCC_MASK 0xffUL 154 #define GITS_TYPER_CIDBITS_SHIFT 32 155 #define GITS_TYPER_CIDBITS_MASK 0xfUL 156 #define GITS_TYPER_CIL_SHIFT 36 157 #define GITS_TYPER_CIL_MASK 0x1UL 158 159 #define GITS_TYPER_ITT_ENTRY_SIZE_GET(_val) MASK_GET(_val, GITS_TYPER_ITT_ENTRY_SIZE) 160 #define GITS_TYPER_PTA_GET(_val) MASK_GET(_val, GITS_TYPER_PTA) 161 #define GITS_TYPER_HCC_GET(_val) MASK_GET(_val, GITS_TYPER_HCC) 162 #define GITS_TYPER_DEVBITS_GET(_val) MASK_GET(_val, GITS_TYPER_DEVBITS) 163 164 /* ITS COMMON BASER / CBASER register */ 165 166 /* ITS CBASER register */ 167 #define GITS_CBASER_SIZE_SHIFT 0 168 #define GITS_CBASER_SIZE_MASK 0xffUL 169 #define GITS_CBASER_SHAREABILITY_SHIFT 10 170 #define GITS_CBASER_SHAREABILITY_MASK 0x3UL 171 #define GITS_CBASER_ADDR_SHIFT 12 172 #define GITS_CBASER_ADDR_MASK 0xfffffffffUL 173 #define GITS_CBASER_OUTER_CACHE_SHIFT 53 174 #define GITS_CBASER_OUTER_CACHE_MASK 0x7UL 175 #define GITS_CBASER_INNER_CACHE_SHIFT 59 176 #define GITS_CBASER_INNER_CACHE_MASK 0x7UL 177 #define GITS_CBASER_VALID_SHIFT 63 178 #define GITS_CBASER_VALID_MASK 0x1UL 179 180 /* ITS BASER<n> register */ 181 #define GITS_BASER_SIZE_SHIFT 0 182 #define GITS_BASER_SIZE_MASK 0xffUL 183 #define GITS_BASER_PAGE_SIZE_SHIFT 8 184 #define GITS_BASER_PAGE_SIZE_MASK 0x3UL 185 #define GITS_BASER_PAGE_SIZE_4K 0 186 #define GITS_BASER_PAGE_SIZE_16K 1 187 #define GITS_BASER_PAGE_SIZE_64K 2 188 #define GITS_BASER_SHAREABILITY_SHIFT 10 189 #define GITS_BASER_SHAREABILITY_MASK 0x3UL 190 #define GITS_BASER_ADDR_SHIFT 12 191 #define GITS_BASER_ADDR_MASK 0xfffffffff 192 #define GITS_BASER_ENTRY_SIZE_SHIFT 48 193 #define GITS_BASER_ENTRY_SIZE_MASK 0x1fUL 194 #define GITS_BASER_OUTER_CACHE_SHIFT 53 195 #define GITS_BASER_OUTER_CACHE_MASK 0x7UL 196 #define GITS_BASER_TYPE_SHIFT 56 197 #define GITS_BASER_TYPE_MASK 0x7UL 198 #define GITS_BASER_INNER_CACHE_SHIFT 59 199 #define GITS_BASER_INNER_CACHE_MASK 0x7UL 200 #define GITS_BASER_INDIRECT_SHIFT 62 201 #define GITS_BASER_INDIRECT_MASK 0x1UL 202 #define GITS_BASER_VALID_SHIFT 63 203 #define GITS_BASER_VALID_MASK 0x1UL 204 205 #define GITS_BASER_TYPE_NONE 0 206 #define GITS_BASER_TYPE_DEVICE 1 207 #define GITS_BASER_TYPE_COLLECTION 4 208 209 #define GITS_BASER_TYPE_GET(_val) MASK_GET(_val, GITS_BASER_TYPE) 210 #define GITS_BASER_PAGE_SIZE_GET(_val) MASK_GET(_val, GITS_BASER_PAGE_SIZE) 211 #define GITS_BASER_ENTRY_SIZE_GET(_val) MASK_GET(_val, GITS_BASER_ENTRY_SIZE) 212 #define GITS_BASER_INDIRECT_GET(_val) MASK_GET(_val, GITS_BASER_INDIRECT) 213 214 #define GITS_BASER_NR_REGS 8 215 216 /* ITS Commands */ 217 218 #define GITS_CMD_ID_MOVI 0x01 219 #define GITS_CMD_ID_INT 0x03 220 #define GITS_CMD_ID_CLEAR 0x04 221 #define GITS_CMD_ID_SYNC 0x05 222 #define GITS_CMD_ID_MAPD 0x08 223 #define GITS_CMD_ID_MAPC 0x09 224 #define GITS_CMD_ID_MAPTI 0x0a 225 #define GITS_CMD_ID_MAPI 0x0b 226 #define GITS_CMD_ID_INV 0x0c 227 #define GITS_CMD_ID_INVALL 0x0d 228 #define GITS_CMD_ID_MOVALL 0x0e 229 #define GITS_CMD_ID_DISCARD 0x0f 230 231 #define GITS_CMD_ID_OFFSET 0 232 #define GITS_CMD_ID_SHIFT 0 233 #define GITS_CMD_ID_MASK 0xffUL 234 235 #define GITS_CMD_DEVICEID_OFFSET 0 236 #define GITS_CMD_DEVICEID_SHIFT 32 237 #define GITS_CMD_DEVICEID_MASK 0xffffffffUL 238 239 #define GITS_CMD_SIZE_OFFSET 1 240 #define GITS_CMD_SIZE_SHIFT 0 241 #define GITS_CMD_SIZE_MASK 0x1fUL 242 243 #define GITS_CMD_EVENTID_OFFSET 1 244 #define GITS_CMD_EVENTID_SHIFT 0 245 #define GITS_CMD_EVENTID_MASK 0xffffffffUL 246 247 #define GITS_CMD_PINTID_OFFSET 1 248 #define GITS_CMD_PINTID_SHIFT 32 249 #define GITS_CMD_PINTID_MASK 0xffffffffUL 250 251 #define GITS_CMD_ICID_OFFSET 2 252 #define GITS_CMD_ICID_SHIFT 0 253 #define GITS_CMD_ICID_MASK 0xffffUL 254 255 #define GITS_CMD_ITTADDR_OFFSET 2 256 #define GITS_CMD_ITTADDR_SHIFT 8 257 #define GITS_CMD_ITTADDR_MASK 0xffffffffffUL 258 #define GITS_CMD_ITTADDR_ALIGN GITS_CMD_ITTADDR_SHIFT 259 #define GITS_CMD_ITTADDR_ALIGN_SZ (BIT(0) << GITS_CMD_ITTADDR_ALIGN) 260 261 #define GITS_CMD_RDBASE_OFFSET 2 262 #define GITS_CMD_RDBASE_SHIFT 16 263 #define GITS_CMD_RDBASE_MASK 0xffffffffUL 264 #define GITS_CMD_RDBASE_ALIGN GITS_CMD_RDBASE_SHIFT 265 266 #define GITS_CMD_VALID_OFFSET 2 267 #define GITS_CMD_VALID_SHIFT 63 268 #define GITS_CMD_VALID_MASK 0x1UL 269 270 #define MASK(__basename) (__basename##_MASK << __basename##_SHIFT) 271 #define MASK_SET(__val, __basename) (((__val) & __basename##_MASK) << __basename##_SHIFT) 272 #define MASK_GET(__reg, __basename) (((__reg) >> __basename##_SHIFT) & __basename##_MASK) 273 274 #ifdef CONFIG_GIC_V3_ITS 275 void its_rdist_map(void); 276 void its_rdist_invall(void); 277 278 extern atomic_t nlpi_intid; 279 #endif 280 281 #endif /* ZEPHYR_INCLUDE_DRIVERS_INTC_GICV3_PRIV_H_ */ 282