FILE
arm-smmu-v3.h
File preview with syntax highlighting.
linux-6.19.14/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h
1/* SPDX-License-Identifier: GPL-2.0-only */ 2/* 3 * IOMMU API for ARM architected SMMUv3 implementations. 4 * 5 * Copyright (C) 2015 ARM Limited 6 */ 7 8#ifndef _ARM_SMMU_V3_H 9#define _ARM_SMMU_V3_H 10 11#include <linux/bitfield.h> 12#include <linux/iommu.h> 13#include <linux/iommufd.h> 14#include <linux/kernel.h> 15#include <linux/mmzone.h> 16#include <linux/sizes.h> 17 18struct arm_smmu_device; 19struct arm_vsmmu; 20 21/* MMIO registers */ 22#define ARM_SMMU_IDR0 0x0 23#define IDR0_ST_LVL GENMASK(28, 27) 24#define IDR0_ST_LVL_2LVL 1 25#define IDR0_STALL_MODEL GENMASK(25, 24) 26#define IDR0_STALL_MODEL_STALL 0 27#define IDR0_STALL_MODEL_FORCE 2 28#define IDR0_TTENDIAN GENMASK(22, 21) 29#define IDR0_TTENDIAN_MIXED 0 30#define IDR0_TTENDIAN_LE 2 31#define IDR0_TTENDIAN_BE 3 32#define IDR0_CD2L (1 << 19) 33#define IDR0_VMID16 (1 << 18) 34#define IDR0_PRI (1 << 16) 35#define IDR0_SEV (1 << 14) 36#define IDR0_MSI (1 << 13) 37#define IDR0_ASID16 (1 << 12) 38#define IDR0_ATS (1 << 10) 39#define IDR0_HYP (1 << 9) 40#define IDR0_HTTU GENMASK(7, 6) 41#define IDR0_HTTU_ACCESS 1 42#define IDR0_HTTU_ACCESS_DIRTY 2 43#define IDR0_COHACC (1 << 4) 44#define IDR0_TTF GENMASK(3, 2) 45#define IDR0_TTF_AARCH64 2 46#define IDR0_TTF_AARCH32_64 3 47#define IDR0_S1P (1 << 1) 48#define IDR0_S2P (1 << 0) 49 50#define ARM_SMMU_IDR1 0x4 51#define IDR1_TABLES_PRESET (1 << 30) 52#define IDR1_QUEUES_PRESET (1 << 29) 53#define IDR1_REL (1 << 28) 54#define IDR1_ATTR_TYPES_OVR (1 << 27) 55#define IDR1_CMDQS GENMASK(25, 21) 56#define IDR1_EVTQS GENMASK(20, 16) 57#define IDR1_PRIQS GENMASK(15, 11) 58#define IDR1_SSIDSIZE GENMASK(10, 6) 59#define IDR1_SIDSIZE GENMASK(5, 0) 60 61#define ARM_SMMU_IDR3 0xc 62#define IDR3_FWB (1 << 8) 63#define IDR3_RIL (1 << 10) 64#define IDR3_BBM GENMASK(12, 11) 65 66#define ARM_SMMU_IDR5 0x14 67#define IDR5_STALL_MAX GENMASK(31, 16) 68#define IDR5_GRAN64K (1 << 6) 69#define IDR5_GRAN16K (1 << 5) 70#define IDR5_GRAN4K (1 << 4) 71#define IDR5_OAS GENMASK(2, 0) 72#define IDR5_OAS_32_BIT 0 73#define IDR5_OAS_36_BIT 1 74#define IDR5_OAS_40_BIT 2 75#define IDR5_OAS_42_BIT 3 76#define IDR5_OAS_44_BIT 4 77#define IDR5_OAS_48_BIT 5 78#define IDR5_OAS_52_BIT 6 79#define IDR5_VAX GENMASK(11, 10) 80#define IDR5_VAX_52_BIT 1 81 82#define ARM_SMMU_IIDR 0x18 83#define IIDR_PRODUCTID GENMASK(31, 20) 84#define IIDR_VARIANT GENMASK(19, 16) 85#define IIDR_REVISION GENMASK(15, 12) 86#define IIDR_IMPLEMENTER GENMASK(11, 0) 87 88#define ARM_SMMU_AIDR 0x1C 89 90#define ARM_SMMU_CR0 0x20 91#define CR0_ATSCHK (1 << 4) 92#define CR0_CMDQEN (1 << 3) 93#define CR0_EVTQEN (1 << 2) 94#define CR0_PRIQEN (1 << 1) 95#define CR0_SMMUEN (1 << 0) 96 97#define ARM_SMMU_CR0ACK 0x24 98 99#define ARM_SMMU_CR1 0x28 100#define CR1_TABLE_SH GENMASK(11, 10) 101#define CR1_TABLE_OC GENMASK(9, 8) 102#define CR1_TABLE_IC GENMASK(7, 6) 103#define CR1_QUEUE_SH GENMASK(5, 4) 104#define CR1_QUEUE_OC GENMASK(3, 2) 105#define CR1_QUEUE_IC GENMASK(1, 0) 106/* CR1 cacheability fields don't quite follow the usual TCR-style encoding */ 107#define CR1_CACHE_NC 0 108#define CR1_CACHE_WB 1 109#define CR1_CACHE_WT 2 110 111#define ARM_SMMU_CR2 0x2c 112#define CR2_PTM (1 << 2) 113#define CR2_RECINVSID (1 << 1) 114#define CR2_E2H (1 << 0) 115 116#define ARM_SMMU_GBPA 0x44 117#define GBPA_UPDATE (1 << 31) 118#define GBPA_ABORT (1 << 20) 119 120#define ARM_SMMU_IRQ_CTRL 0x50 121#define IRQ_CTRL_EVTQ_IRQEN (1 << 2) 122#define IRQ_CTRL_PRIQ_IRQEN (1 << 1) 123#define IRQ_CTRL_GERROR_IRQEN (1 << 0) 124 125#define ARM_SMMU_IRQ_CTRLACK 0x54 126 127#define ARM_SMMU_GERROR 0x60 128#define GERROR_SFM_ERR (1 << 8) 129#define GERROR_MSI_GERROR_ABT_ERR (1 << 7) 130#define GERROR_MSI_PRIQ_ABT_ERR (1 << 6) 131#define GERROR_MSI_EVTQ_ABT_ERR (1 << 5) 132#define GERROR_MSI_CMDQ_ABT_ERR (1 << 4) 133#define GERROR_PRIQ_ABT_ERR (1 << 3) 134#define GERROR_EVTQ_ABT_ERR (1 << 2) 135#define GERROR_CMDQ_ERR (1 << 0) 136#define GERROR_ERR_MASK 0x1fd 137 138#define ARM_SMMU_GERRORN 0x64 139 140#define ARM_SMMU_GERROR_IRQ_CFG0 0x68 141#define ARM_SMMU_GERROR_IRQ_CFG1 0x70 142#define ARM_SMMU_GERROR_IRQ_CFG2 0x74 143 144#define ARM_SMMU_STRTAB_BASE 0x80 145#define STRTAB_BASE_RA (1UL << 62) 146#define STRTAB_BASE_ADDR_MASK GENMASK_ULL(51, 6) 147 148#define ARM_SMMU_STRTAB_BASE_CFG 0x88 149#define STRTAB_BASE_CFG_FMT GENMASK(17, 16) 150#define STRTAB_BASE_CFG_FMT_LINEAR 0 151#define STRTAB_BASE_CFG_FMT_2LVL 1 152#define STRTAB_BASE_CFG_SPLIT GENMASK(10, 6) 153#define STRTAB_BASE_CFG_LOG2SIZE GENMASK(5, 0) 154 155#define ARM_SMMU_CMDQ_BASE 0x90 156#define ARM_SMMU_CMDQ_PROD 0x98 157#define ARM_SMMU_CMDQ_CONS 0x9c 158 159#define ARM_SMMU_EVTQ_BASE 0xa0 160#define ARM_SMMU_EVTQ_PROD 0xa8 161#define ARM_SMMU_EVTQ_CONS 0xac 162#define ARM_SMMU_EVTQ_IRQ_CFG0 0xb0 163#define ARM_SMMU_EVTQ_IRQ_CFG1 0xb8 164#define ARM_SMMU_EVTQ_IRQ_CFG2 0xbc 165 166#define ARM_SMMU_PRIQ_BASE 0xc0 167#define ARM_SMMU_PRIQ_PROD 0xc8 168#define ARM_SMMU_PRIQ_CONS 0xcc 169#define ARM_SMMU_PRIQ_IRQ_CFG0 0xd0 170#define ARM_SMMU_PRIQ_IRQ_CFG1 0xd8 171#define ARM_SMMU_PRIQ_IRQ_CFG2 0xdc 172 173#define ARM_SMMU_REG_SZ 0xe00 174 175/* Common MSI config fields */ 176#define MSI_CFG0_ADDR_MASK GENMASK_ULL(51, 2) 177#define MSI_CFG2_SH GENMASK(5, 4) 178#define MSI_CFG2_MEMATTR GENMASK(3, 0) 179 180/* Common memory attribute values */ 181#define ARM_SMMU_SH_NSH 0 182#define ARM_SMMU_SH_OSH 2 183#define ARM_SMMU_SH_ISH 3 184#define ARM_SMMU_MEMATTR_DEVICE_nGnRE 0x1 185#define ARM_SMMU_MEMATTR_OIWB 0xf 186 187#define Q_IDX(llq, p) ((p) & ((1 << (llq)->max_n_shift) - 1)) 188#define Q_WRP(llq, p) ((p) & (1 << (llq)->max_n_shift)) 189#define Q_OVERFLOW_FLAG (1U << 31) 190#define Q_OVF(p) ((p) & Q_OVERFLOW_FLAG) 191#define Q_ENT(q, p) ((q)->base + \ 192 Q_IDX(&((q)->llq), p) * \ 193 (q)->ent_dwords) 194 195#define Q_BASE_RWA (1UL << 62) 196#define Q_BASE_ADDR_MASK GENMASK_ULL(51, 5) 197#define Q_BASE_LOG2SIZE GENMASK(4, 0) 198 199/* Ensure DMA allocations are naturally aligned */ 200#ifdef CONFIG_CMA_ALIGNMENT 201#define Q_MAX_SZ_SHIFT (PAGE_SHIFT + CONFIG_CMA_ALIGNMENT) 202#else 203#define Q_MAX_SZ_SHIFT (PAGE_SHIFT + MAX_PAGE_ORDER) 204#endif 205 206/* 207 * Stream table. 208 * 209 * Linear: Enough to cover 1 << IDR1.SIDSIZE entries 210 * 2lvl: 128k L1 entries, 211 * 256 lazy entries per table (each table covers a PCI bus) 212 */ 213#define STRTAB_SPLIT 8 214 215#define STRTAB_L1_DESC_SPAN GENMASK_ULL(4, 0) 216#define STRTAB_L1_DESC_L2PTR_MASK GENMASK_ULL(51, 6) 217 218#define STRTAB_STE_DWORDS 8 219 220struct arm_smmu_ste { 221 __le64 data[STRTAB_STE_DWORDS]; 222}; 223 224#define STRTAB_NUM_L2_STES (1 << STRTAB_SPLIT) 225struct arm_smmu_strtab_l2 { 226 struct arm_smmu_ste stes[STRTAB_NUM_L2_STES]; 227}; 228 229struct arm_smmu_strtab_l1 { 230 __le64 l2ptr; 231}; 232#define STRTAB_MAX_L1_ENTRIES (1 << 17) 233 234static inline u32 arm_smmu_strtab_l1_idx(u32 sid) 235{ 236 return sid / STRTAB_NUM_L2_STES; 237} 238 239static inline u32 arm_smmu_strtab_l2_idx(u32 sid) 240{ 241 return sid % STRTAB_NUM_L2_STES; 242} 243 244#define STRTAB_STE_0_V (1UL << 0) 245#define STRTAB_STE_0_CFG GENMASK_ULL(3, 1) 246#define STRTAB_STE_0_CFG_ABORT 0 247#define STRTAB_STE_0_CFG_BYPASS 4 248#define STRTAB_STE_0_CFG_S1_TRANS 5 249#define STRTAB_STE_0_CFG_S2_TRANS 6 250#define STRTAB_STE_0_CFG_NESTED 7 251 252#define STRTAB_STE_0_S1FMT GENMASK_ULL(5, 4) 253#define STRTAB_STE_0_S1FMT_LINEAR 0 254#define STRTAB_STE_0_S1FMT_64K_L2 2 255#define STRTAB_STE_0_S1CTXPTR_MASK GENMASK_ULL(51, 6) 256#define STRTAB_STE_0_S1CDMAX GENMASK_ULL(63, 59) 257 258#define STRTAB_STE_1_S1DSS GENMASK_ULL(1, 0) 259#define STRTAB_STE_1_S1DSS_TERMINATE 0x0 260#define STRTAB_STE_1_S1DSS_BYPASS 0x1 261#define STRTAB_STE_1_S1DSS_SSID0 0x2 262 263#define STRTAB_STE_1_S1C_CACHE_NC 0UL 264#define STRTAB_STE_1_S1C_CACHE_WBRA 1UL 265#define STRTAB_STE_1_S1C_CACHE_WT 2UL 266#define STRTAB_STE_1_S1C_CACHE_WB 3UL 267#define STRTAB_STE_1_S1CIR GENMASK_ULL(3, 2) 268#define STRTAB_STE_1_S1COR GENMASK_ULL(5, 4) 269#define STRTAB_STE_1_S1CSH GENMASK_ULL(7, 6) 270 271#define STRTAB_STE_1_MEV (1UL << 19) 272#define STRTAB_STE_1_S2FWB (1UL << 25) 273#define STRTAB_STE_1_S1STALLD (1UL << 27) 274 275#define STRTAB_STE_1_EATS GENMASK_ULL(29, 28) 276#define STRTAB_STE_1_EATS_ABT 0UL 277#define STRTAB_STE_1_EATS_TRANS 1UL 278#define STRTAB_STE_1_EATS_S1CHK 2UL 279 280#define STRTAB_STE_1_STRW GENMASK_ULL(31, 30) 281#define STRTAB_STE_1_STRW_NSEL1 0UL 282#define STRTAB_STE_1_STRW_EL2 2UL 283 284#define STRTAB_STE_1_SHCFG GENMASK_ULL(45, 44) 285#define STRTAB_STE_1_SHCFG_INCOMING 1UL 286 287#define STRTAB_STE_2_S2VMID GENMASK_ULL(15, 0) 288#define STRTAB_STE_2_VTCR GENMASK_ULL(50, 32) 289#define STRTAB_STE_2_VTCR_S2T0SZ GENMASK_ULL(5, 0) 290#define STRTAB_STE_2_VTCR_S2SL0 GENMASK_ULL(7, 6) 291#define STRTAB_STE_2_VTCR_S2IR0 GENMASK_ULL(9, 8) 292#define STRTAB_STE_2_VTCR_S2OR0 GENMASK_ULL(11, 10) 293#define STRTAB_STE_2_VTCR_S2SH0 GENMASK_ULL(13, 12) 294#define STRTAB_STE_2_VTCR_S2TG GENMASK_ULL(15, 14) 295#define STRTAB_STE_2_VTCR_S2PS GENMASK_ULL(18, 16) 296#define STRTAB_STE_2_S2AA64 (1UL << 51) 297#define STRTAB_STE_2_S2ENDI (1UL << 52) 298#define STRTAB_STE_2_S2PTW (1UL << 54) 299#define STRTAB_STE_2_S2S (1UL << 57) 300#define STRTAB_STE_2_S2R (1UL << 58) 301 302#define STRTAB_STE_3_S2TTB_MASK GENMASK_ULL(51, 4) 303 304/* These bits can be controlled by userspace for STRTAB_STE_0_CFG_NESTED */ 305#define STRTAB_STE_0_NESTING_ALLOWED \ 306 cpu_to_le64(STRTAB_STE_0_V | STRTAB_STE_0_CFG | STRTAB_STE_0_S1FMT | \ 307 STRTAB_STE_0_S1CTXPTR_MASK | STRTAB_STE_0_S1CDMAX) 308#define STRTAB_STE_1_NESTING_ALLOWED \ 309 cpu_to_le64(STRTAB_STE_1_S1DSS | STRTAB_STE_1_S1CIR | \ 310 STRTAB_STE_1_S1COR | STRTAB_STE_1_S1CSH | \ 311 STRTAB_STE_1_S1STALLD | STRTAB_STE_1_EATS) 312 313/* 314 * Context descriptors. 315 * 316 * Linear: when less than 1024 SSIDs are supported 317 * 2lvl: at most 1024 L1 entries, 318 * 1024 lazy entries per table. 319 */ 320#define CTXDESC_L2_ENTRIES 1024 321 322#define CTXDESC_L1_DESC_V (1UL << 0) 323#define CTXDESC_L1_DESC_L2PTR_MASK GENMASK_ULL(51, 12) 324 325#define CTXDESC_CD_DWORDS 8 326 327struct arm_smmu_cd { 328 __le64 data[CTXDESC_CD_DWORDS]; 329}; 330 331struct arm_smmu_cdtab_l2 { 332 struct arm_smmu_cd cds[CTXDESC_L2_ENTRIES]; 333}; 334 335struct arm_smmu_cdtab_l1 { 336 __le64 l2ptr; 337}; 338 339static inline unsigned int arm_smmu_cdtab_l1_idx(unsigned int ssid) 340{ 341 return ssid / CTXDESC_L2_ENTRIES; 342} 343 344static inline unsigned int arm_smmu_cdtab_l2_idx(unsigned int ssid) 345{ 346 return ssid % CTXDESC_L2_ENTRIES; 347} 348 349#define CTXDESC_CD_0_TCR_T0SZ GENMASK_ULL(5, 0) 350#define CTXDESC_CD_0_TCR_TG0 GENMASK_ULL(7, 6) 351#define CTXDESC_CD_0_TCR_IRGN0 GENMASK_ULL(9, 8) 352#define CTXDESC_CD_0_TCR_ORGN0 GENMASK_ULL(11, 10) 353#define CTXDESC_CD_0_TCR_SH0 GENMASK_ULL(13, 12) 354#define CTXDESC_CD_0_TCR_EPD0 (1ULL << 14) 355#define CTXDESC_CD_0_TCR_EPD1 (1ULL << 30) 356 357#define CTXDESC_CD_0_ENDI (1UL << 15) 358#define CTXDESC_CD_0_V (1UL << 31) 359 360#define CTXDESC_CD_0_TCR_IPS GENMASK_ULL(34, 32) 361#define CTXDESC_CD_0_TCR_TBI0 (1ULL << 38) 362 363#define CTXDESC_CD_0_TCR_HA (1UL << 43) 364#define CTXDESC_CD_0_TCR_HD (1UL << 42) 365 366#define CTXDESC_CD_0_AA64 (1UL << 41) 367#define CTXDESC_CD_0_S (1UL << 44) 368#define CTXDESC_CD_0_R (1UL << 45) 369#define CTXDESC_CD_0_A (1UL << 46) 370#define CTXDESC_CD_0_ASET (1UL << 47) 371#define CTXDESC_CD_0_ASID GENMASK_ULL(63, 48) 372 373#define CTXDESC_CD_1_TTB0_MASK GENMASK_ULL(51, 4) 374 375/* 376 * When the SMMU only supports linear context descriptor tables, pick a 377 * reasonable size limit (64kB). 378 */ 379#define CTXDESC_LINEAR_CDMAX ilog2(SZ_64K / sizeof(struct arm_smmu_cd)) 380 381/* Command queue */ 382#define CMDQ_ENT_SZ_SHIFT 4 383#define CMDQ_ENT_DWORDS ((1 << CMDQ_ENT_SZ_SHIFT) >> 3) 384#define CMDQ_MAX_SZ_SHIFT (Q_MAX_SZ_SHIFT - CMDQ_ENT_SZ_SHIFT) 385 386#define CMDQ_CONS_ERR GENMASK(30, 24) 387#define CMDQ_ERR_CERROR_NONE_IDX 0 388#define CMDQ_ERR_CERROR_ILL_IDX 1 389#define CMDQ_ERR_CERROR_ABT_IDX 2 390#define CMDQ_ERR_CERROR_ATC_INV_IDX 3 391 392#define CMDQ_PROD_OWNED_FLAG Q_OVERFLOW_FLAG 393 394/* 395 * This is used to size the command queue and therefore must be at least 396 * BITS_PER_LONG so that the valid_map works correctly (it relies on the 397 * total number of queue entries being a multiple of BITS_PER_LONG). 398 */ 399#define CMDQ_BATCH_ENTRIES BITS_PER_LONG 400 401#define CMDQ_0_OP GENMASK_ULL(7, 0) 402#define CMDQ_0_SSV (1UL << 11) 403 404#define CMDQ_PREFETCH_0_SID GENMASK_ULL(63, 32) 405#define CMDQ_PREFETCH_1_SIZE GENMASK_ULL(4, 0) 406#define CMDQ_PREFETCH_1_ADDR_MASK GENMASK_ULL(63, 12) 407 408#define CMDQ_CFGI_0_SSID GENMASK_ULL(31, 12) 409#define CMDQ_CFGI_0_SID GENMASK_ULL(63, 32) 410#define CMDQ_CFGI_1_LEAF (1UL << 0) 411#define CMDQ_CFGI_1_RANGE GENMASK_ULL(4, 0) 412 413#define CMDQ_TLBI_0_NUM GENMASK_ULL(16, 12) 414#define CMDQ_TLBI_RANGE_NUM_MAX 31 415#define CMDQ_TLBI_0_SCALE GENMASK_ULL(24, 20) 416#define CMDQ_TLBI_0_VMID GENMASK_ULL(47, 32) 417#define CMDQ_TLBI_0_ASID GENMASK_ULL(63, 48) 418#define CMDQ_TLBI_1_LEAF (1UL << 0) 419#define CMDQ_TLBI_1_TTL GENMASK_ULL(9, 8) 420#define CMDQ_TLBI_1_TG GENMASK_ULL(11, 10) 421#define CMDQ_TLBI_1_VA_MASK GENMASK_ULL(63, 12) 422#define CMDQ_TLBI_1_IPA_MASK GENMASK_ULL(51, 12) 423 424#define CMDQ_ATC_0_SSID GENMASK_ULL(31, 12) 425#define CMDQ_ATC_0_SID GENMASK_ULL(63, 32) 426#define CMDQ_ATC_0_GLOBAL (1UL << 9) 427#define CMDQ_ATC_1_SIZE GENMASK_ULL(5, 0) 428#define CMDQ_ATC_1_ADDR_MASK GENMASK_ULL(63, 12) 429 430#define CMDQ_PRI_0_SSID GENMASK_ULL(31, 12) 431#define CMDQ_PRI_0_SID GENMASK_ULL(63, 32) 432#define CMDQ_PRI_1_GRPID GENMASK_ULL(8, 0) 433#define CMDQ_PRI_1_RESP GENMASK_ULL(13, 12) 434 435#define CMDQ_RESUME_0_RESP_TERM 0UL 436#define CMDQ_RESUME_0_RESP_RETRY 1UL 437#define CMDQ_RESUME_0_RESP_ABORT 2UL 438#define CMDQ_RESUME_0_RESP GENMASK_ULL(13, 12) 439#define CMDQ_RESUME_0_SID GENMASK_ULL(63, 32) 440#define CMDQ_RESUME_1_STAG GENMASK_ULL(15, 0) 441 442#define CMDQ_SYNC_0_CS GENMASK_ULL(13, 12) 443#define CMDQ_SYNC_0_CS_NONE 0 444#define CMDQ_SYNC_0_CS_IRQ 1 445#define CMDQ_SYNC_0_CS_SEV 2 446#define CMDQ_SYNC_0_MSH GENMASK_ULL(23, 22) 447#define CMDQ_SYNC_0_MSIATTR GENMASK_ULL(27, 24) 448#define CMDQ_SYNC_0_MSIDATA GENMASK_ULL(63, 32) 449#define CMDQ_SYNC_1_MSIADDR_MASK GENMASK_ULL(51, 2) 450 451/* Event queue */ 452#define EVTQ_ENT_SZ_SHIFT 5 453#define EVTQ_ENT_DWORDS ((1 << EVTQ_ENT_SZ_SHIFT) >> 3) 454#define EVTQ_MAX_SZ_SHIFT (Q_MAX_SZ_SHIFT - EVTQ_ENT_SZ_SHIFT) 455 456#define EVTQ_0_ID GENMASK_ULL(7, 0) 457 458#define EVT_ID_BAD_STREAMID_CONFIG 0x02 459#define EVT_ID_STE_FETCH_FAULT 0x03 460#define EVT_ID_BAD_STE_CONFIG 0x04 461#define EVT_ID_STREAM_DISABLED_FAULT 0x06 462#define EVT_ID_BAD_SUBSTREAMID_CONFIG 0x08 463#define EVT_ID_CD_FETCH_FAULT 0x09 464#define EVT_ID_BAD_CD_CONFIG 0x0a 465#define EVT_ID_TRANSLATION_FAULT 0x10 466#define EVT_ID_ADDR_SIZE_FAULT 0x11 467#define EVT_ID_ACCESS_FAULT 0x12 468#define EVT_ID_PERMISSION_FAULT 0x13 469#define EVT_ID_VMS_FETCH_FAULT 0x25 470 471#define EVTQ_0_SSV (1UL << 11) 472#define EVTQ_0_SSID GENMASK_ULL(31, 12) 473#define EVTQ_0_SID GENMASK_ULL(63, 32) 474#define EVTQ_1_STAG GENMASK_ULL(15, 0) 475#define EVTQ_1_STALL (1UL << 31) 476#define EVTQ_1_PnU (1UL << 33) 477#define EVTQ_1_InD (1UL << 34) 478#define EVTQ_1_RnW (1UL << 35) 479#define EVTQ_1_S2 (1UL << 39) 480#define EVTQ_1_CLASS GENMASK_ULL(41, 40) 481#define EVTQ_1_CLASS_TT 0x01 482#define EVTQ_1_TT_READ (1UL << 44) 483#define EVTQ_2_ADDR GENMASK_ULL(63, 0) 484#define EVTQ_3_IPA GENMASK_ULL(51, 12) 485#define EVTQ_3_FETCH_ADDR GENMASK_ULL(51, 3) 486 487/* PRI queue */ 488#define PRIQ_ENT_SZ_SHIFT 4 489#define PRIQ_ENT_DWORDS ((1 << PRIQ_ENT_SZ_SHIFT) >> 3) 490#define PRIQ_MAX_SZ_SHIFT (Q_MAX_SZ_SHIFT - PRIQ_ENT_SZ_SHIFT) 491 492#define PRIQ_0_SID GENMASK_ULL(31, 0) 493#define PRIQ_0_SSID GENMASK_ULL(51, 32) 494#define PRIQ_0_PERM_PRIV (1UL << 58) 495#define PRIQ_0_PERM_EXEC (1UL << 59) 496#define PRIQ_0_PERM_READ (1UL << 60) 497#define PRIQ_0_PERM_WRITE (1UL << 61) 498#define PRIQ_0_PRG_LAST (1UL << 62) 499#define PRIQ_0_SSID_V (1UL << 63) 500 501#define PRIQ_1_PRG_IDX GENMASK_ULL(8, 0) 502#define PRIQ_1_ADDR_MASK GENMASK_ULL(63, 12) 503 504/* High-level queue structures */ 505#define ARM_SMMU_POLL_TIMEOUT_US 1000000 /* 1s! */ 506#define ARM_SMMU_POLL_SPIN_COUNT 10 507 508#define MSI_IOVA_BASE 0x8000000 509#define MSI_IOVA_LENGTH 0x100000 510 511enum pri_resp { 512 PRI_RESP_DENY = 0, 513 PRI_RESP_FAIL = 1, 514 PRI_RESP_SUCC = 2, 515}; 516 517struct arm_smmu_cmdq_ent { 518 /* Common fields */ 519 u8 opcode; 520 bool substream_valid; 521 522 /* Command-specific fields */ 523 union { 524 #define CMDQ_OP_PREFETCH_CFG 0x1 525 struct { 526 u32 sid; 527 } prefetch; 528 529 #define CMDQ_OP_CFGI_STE 0x3 530 #define CMDQ_OP_CFGI_ALL 0x4 531 #define CMDQ_OP_CFGI_CD 0x5 532 #define CMDQ_OP_CFGI_CD_ALL 0x6 533 struct { 534 u32 sid; 535 u32 ssid; 536 union { 537 bool leaf; 538 u8 span; 539 }; 540 } cfgi; 541 542 #define CMDQ_OP_TLBI_NH_ALL 0x10 543 #define CMDQ_OP_TLBI_NH_ASID 0x11 544 #define CMDQ_OP_TLBI_NH_VA 0x12 545 #define CMDQ_OP_TLBI_NH_VAA 0x13 546 #define CMDQ_OP_TLBI_EL2_ALL 0x20 547 #define CMDQ_OP_TLBI_EL2_ASID 0x21 548 #define CMDQ_OP_TLBI_EL2_VA 0x22 549 #define CMDQ_OP_TLBI_S12_VMALL 0x28 550 #define CMDQ_OP_TLBI_S2_IPA 0x2a 551 #define CMDQ_OP_TLBI_NSNH_ALL 0x30 552 struct { 553 u8 num; 554 u8 scale; 555 u16 asid; 556 u16 vmid; 557 bool leaf; 558 u8 ttl; 559 u8 tg; 560 u64 addr; 561 } tlbi; 562 563 #define CMDQ_OP_ATC_INV 0x40 564 #define ATC_INV_SIZE_ALL 52 565 struct { 566 u32 sid; 567 u32 ssid; 568 u64 addr; 569 u8 size; 570 bool global; 571 } atc; 572 573 #define CMDQ_OP_PRI_RESP 0x41 574 struct { 575 u32 sid; 576 u32 ssid; 577 u16 grpid; 578 enum pri_resp resp; 579 } pri; 580 581 #define CMDQ_OP_RESUME 0x44 582 struct { 583 u32 sid; 584 u16 stag; 585 u8 resp; 586 } resume; 587 588 #define CMDQ_OP_CMD_SYNC 0x46 589 struct { 590 u64 msiaddr; 591 } sync; 592 }; 593}; 594 595struct arm_smmu_ll_queue { 596 union { 597 u64 val; 598 struct { 599 u32 prod; 600 u32 cons; 601 }; 602 struct { 603 atomic_t prod; 604 atomic_t cons; 605 } atomic; 606 u8 __pad[SMP_CACHE_BYTES]; 607 } ____cacheline_aligned_in_smp; 608 u32 max_n_shift; 609}; 610 611struct arm_smmu_queue { 612 struct arm_smmu_ll_queue llq; 613 int irq; /* Wired interrupt */ 614 615 __le64 *base; 616 dma_addr_t base_dma; 617 u64 q_base; 618 619 size_t ent_dwords; 620 621 u32 __iomem *prod_reg; 622 u32 __iomem *cons_reg; 623}; 624 625struct arm_smmu_queue_poll { 626 ktime_t timeout; 627 unsigned int delay; 628 unsigned int spin_cnt; 629 bool wfe; 630}; 631 632struct arm_smmu_cmdq { 633 struct arm_smmu_queue q; 634 atomic_long_t *valid_map; 635 atomic_t owner_prod; 636 atomic_t lock; 637 bool (*supports_cmd)(struct arm_smmu_cmdq_ent *ent); 638}; 639 640static inline bool arm_smmu_cmdq_supports_cmd(struct arm_smmu_cmdq *cmdq, 641 struct arm_smmu_cmdq_ent *ent) 642{ 643 return cmdq->supports_cmd ? cmdq->supports_cmd(ent) : true; 644} 645 646struct arm_smmu_cmdq_batch { 647 u64 cmds[CMDQ_BATCH_ENTRIES * CMDQ_ENT_DWORDS]; 648 struct arm_smmu_cmdq *cmdq; 649 int num; 650}; 651 652struct arm_smmu_evtq { 653 struct arm_smmu_queue q; 654 struct iopf_queue *iopf; 655 u32 max_stalls; 656}; 657 658struct arm_smmu_priq { 659 struct arm_smmu_queue q; 660}; 661 662/* High-level stream table and context descriptor structures */ 663struct arm_smmu_ctx_desc { 664 u16 asid; 665}; 666 667struct arm_smmu_ctx_desc_cfg { 668 union { 669 struct { 670 struct arm_smmu_cd *table; 671 unsigned int num_ents; 672 } linear; 673 struct { 674 struct arm_smmu_cdtab_l1 *l1tab; 675 struct arm_smmu_cdtab_l2 **l2ptrs; 676 unsigned int num_l1_ents; 677 } l2; 678 }; 679 dma_addr_t cdtab_dma; 680 unsigned int used_ssids; 681 u8 in_ste; 682 u8 s1fmt; 683 /* log2 of the maximum number of CDs supported by this table */ 684 u8 s1cdmax; 685}; 686 687static inline bool 688arm_smmu_cdtab_allocated(struct arm_smmu_ctx_desc_cfg *cfg) 689{ 690 return cfg->linear.table || cfg->l2.l1tab; 691} 692 693/* True if the cd table has SSIDS > 0 in use. */ 694static inline bool arm_smmu_ssids_in_use(struct arm_smmu_ctx_desc_cfg *cd_table) 695{ 696 return cd_table->used_ssids; 697} 698 699struct arm_smmu_s2_cfg { 700 u16 vmid; 701}; 702 703struct arm_smmu_strtab_cfg { 704 union { 705 struct { 706 struct arm_smmu_ste *table; 707 dma_addr_t ste_dma; 708 unsigned int num_ents; 709 } linear; 710 struct { 711 struct arm_smmu_strtab_l1 *l1tab; 712 struct arm_smmu_strtab_l2 **l2ptrs; 713 dma_addr_t l1_dma; 714 unsigned int num_l1_ents; 715 } l2; 716 }; 717}; 718 719struct arm_smmu_impl_ops { 720 int (*device_reset)(struct arm_smmu_device *smmu); 721 void (*device_remove)(struct arm_smmu_device *smmu); 722 int (*init_structures)(struct arm_smmu_device *smmu); 723 struct arm_smmu_cmdq *(*get_secondary_cmdq)( 724 struct arm_smmu_device *smmu, struct arm_smmu_cmdq_ent *ent); 725 /* 726 * An implementation should define its own type other than the default 727 * IOMMU_HW_INFO_TYPE_ARM_SMMUV3. And it must validate the input @type 728 * to return its own structure. 729 */ 730 void *(*hw_info)(struct arm_smmu_device *smmu, u32 *length, 731 enum iommu_hw_info_type *type); 732 size_t (*get_viommu_size)(enum iommu_viommu_type viommu_type); 733 int (*vsmmu_init)(struct arm_vsmmu *vsmmu, 734 const struct iommu_user_data *user_data); 735}; 736 737/* An SMMUv3 instance */ 738struct arm_smmu_device { 739 struct device *dev; 740 struct device *impl_dev; 741 const struct arm_smmu_impl_ops *impl_ops; 742 743 void __iomem *base; 744 void __iomem *page1; 745 746#define ARM_SMMU_FEAT_2_LVL_STRTAB (1 << 0) 747#define ARM_SMMU_FEAT_2_LVL_CDTAB (1 << 1) 748#define ARM_SMMU_FEAT_TT_LE (1 << 2) 749#define ARM_SMMU_FEAT_TT_BE (1 << 3) 750#define ARM_SMMU_FEAT_PRI (1 << 4) 751#define ARM_SMMU_FEAT_ATS (1 << 5) 752#define ARM_SMMU_FEAT_SEV (1 << 6) 753#define ARM_SMMU_FEAT_MSI (1 << 7) 754#define ARM_SMMU_FEAT_COHERENCY (1 << 8) 755#define ARM_SMMU_FEAT_TRANS_S1 (1 << 9) 756#define ARM_SMMU_FEAT_TRANS_S2 (1 << 10) 757#define ARM_SMMU_FEAT_STALLS (1 << 11) 758#define ARM_SMMU_FEAT_HYP (1 << 12) 759#define ARM_SMMU_FEAT_STALL_FORCE (1 << 13) 760#define ARM_SMMU_FEAT_VAX (1 << 14) 761#define ARM_SMMU_FEAT_RANGE_INV (1 << 15) 762#define ARM_SMMU_FEAT_BTM (1 << 16) 763#define ARM_SMMU_FEAT_SVA (1 << 17) 764#define ARM_SMMU_FEAT_E2H (1 << 18) 765#define ARM_SMMU_FEAT_NESTING (1 << 19) 766#define ARM_SMMU_FEAT_ATTR_TYPES_OVR (1 << 20) 767#define ARM_SMMU_FEAT_HA (1 << 21) 768#define ARM_SMMU_FEAT_HD (1 << 22) 769#define ARM_SMMU_FEAT_S2FWB (1 << 23) 770#define ARM_SMMU_FEAT_BBML2 (1 << 24) 771 u32 features; 772 773#define ARM_SMMU_OPT_SKIP_PREFETCH (1 << 0) 774#define ARM_SMMU_OPT_PAGE0_REGS_ONLY (1 << 1) 775#define ARM_SMMU_OPT_MSIPOLL (1 << 2) 776#define ARM_SMMU_OPT_CMDQ_FORCE_SYNC (1 << 3) 777#define ARM_SMMU_OPT_TEGRA241_CMDQV (1 << 4) 778 u32 options; 779 780 struct arm_smmu_cmdq cmdq; 781 struct arm_smmu_evtq evtq; 782 struct arm_smmu_priq priq; 783 784 int gerr_irq; 785 int combined_irq; 786 787 unsigned long ias; /* IPA */ 788 unsigned long oas; /* PA */ 789 unsigned long pgsize_bitmap; 790 791#define ARM_SMMU_MAX_ASIDS (1 << 16) 792 unsigned int asid_bits; 793 794#define ARM_SMMU_MAX_VMIDS (1 << 16) 795 unsigned int vmid_bits; 796 struct ida vmid_map; 797 798 unsigned int ssid_bits; 799 unsigned int sid_bits; 800 801 struct arm_smmu_strtab_cfg strtab_cfg; 802 803 /* IOMMU core code handle */ 804 struct iommu_device iommu; 805 806 struct rb_root streams; 807 struct mutex streams_mutex; 808}; 809 810struct arm_smmu_stream { 811 u32 id; 812 struct arm_smmu_master *master; 813 struct rb_node node; 814}; 815 816struct arm_smmu_vmaster { 817 struct arm_vsmmu *vsmmu; 818 unsigned long vsid; 819}; 820 821struct arm_smmu_event { 822 u8 stall : 1, 823 ssv : 1, 824 privileged : 1, 825 instruction : 1, 826 s2 : 1, 827 read : 1, 828 ttrnw : 1, 829 class_tt : 1; 830 u8 id; 831 u8 class; 832 u16 stag; 833 u32 sid; 834 u32 ssid; 835 u64 iova; 836 u64 ipa; 837 u64 fetch_addr; 838 struct device *dev; 839}; 840 841/* SMMU private data for each master */ 842struct arm_smmu_master { 843 struct arm_smmu_device *smmu; 844 struct device *dev; 845 struct arm_smmu_stream *streams; 846 struct arm_smmu_vmaster *vmaster; /* use smmu->streams_mutex */ 847 /* Locked by the iommu core using the group mutex */ 848 struct arm_smmu_ctx_desc_cfg cd_table; 849 unsigned int num_streams; 850 bool ats_enabled : 1; 851 bool ste_ats_enabled : 1; 852 bool stall_enabled; 853 unsigned int ssid_bits; 854 unsigned int iopf_refcount; 855}; 856 857/* SMMU private data for an IOMMU domain */ 858enum arm_smmu_domain_stage { 859 ARM_SMMU_DOMAIN_S1 = 0, 860 ARM_SMMU_DOMAIN_S2, 861}; 862 863struct arm_smmu_domain { 864 struct arm_smmu_device *smmu; 865 866 struct io_pgtable_ops *pgtbl_ops; 867 atomic_t nr_ats_masters; 868 869 enum arm_smmu_domain_stage stage; 870 union { 871 struct arm_smmu_ctx_desc cd; 872 struct arm_smmu_s2_cfg s2_cfg; 873 }; 874 875 struct iommu_domain domain; 876 877 /* List of struct arm_smmu_master_domain */ 878 struct list_head devices; 879 spinlock_t devices_lock; 880 bool enforce_cache_coherency : 1; 881 bool nest_parent : 1; 882 883 struct mmu_notifier mmu_notifier; 884}; 885 886struct arm_smmu_nested_domain { 887 struct iommu_domain domain; 888 struct arm_vsmmu *vsmmu; 889 bool enable_ats : 1; 890 891 __le64 ste[2]; 892}; 893 894/* The following are exposed for testing purposes. */ 895struct arm_smmu_entry_writer_ops; 896struct arm_smmu_entry_writer { 897 const struct arm_smmu_entry_writer_ops *ops; 898 struct arm_smmu_master *master; 899}; 900 901struct arm_smmu_entry_writer_ops { 902 void (*get_used)(const __le64 *entry, __le64 *used); 903 void (*get_update_safe)(const __le64 *cur, const __le64 *target, 904 __le64 *safe_bits); 905 void (*sync)(struct arm_smmu_entry_writer *writer); 906}; 907 908void arm_smmu_make_abort_ste(struct arm_smmu_ste *target); 909void arm_smmu_make_s2_domain_ste(struct arm_smmu_ste *target, 910 struct arm_smmu_master *master, 911 struct arm_smmu_domain *smmu_domain, 912 bool ats_enabled); 913 914#if IS_ENABLED(CONFIG_KUNIT) 915void arm_smmu_get_ste_used(const __le64 *ent, __le64 *used_bits); 916void arm_smmu_get_ste_update_safe(const __le64 *cur, const __le64 *target, 917 __le64 *safe_bits); 918void arm_smmu_write_entry(struct arm_smmu_entry_writer *writer, __le64 *cur, 919 const __le64 *target); 920void arm_smmu_get_cd_used(const __le64 *ent, __le64 *used_bits); 921void arm_smmu_make_bypass_ste(struct arm_smmu_device *smmu, 922 struct arm_smmu_ste *target); 923void arm_smmu_make_cdtable_ste(struct arm_smmu_ste *target, 924 struct arm_smmu_master *master, bool ats_enabled, 925 unsigned int s1dss); 926void arm_smmu_make_sva_cd(struct arm_smmu_cd *target, 927 struct arm_smmu_master *master, struct mm_struct *mm, 928 u16 asid); 929#endif 930 931struct arm_smmu_master_domain { 932 struct list_head devices_elm; 933 struct arm_smmu_master *master; 934 /* 935 * For nested domains the master_domain is threaded onto the S2 parent, 936 * this points to the IOMMU_DOMAIN_NESTED to disambiguate the masters. 937 */ 938 struct iommu_domain *domain; 939 ioasid_t ssid; 940 bool nested_ats_flush : 1; 941 bool using_iopf : 1; 942}; 943 944static inline struct arm_smmu_domain *to_smmu_domain(struct iommu_domain *dom) 945{ 946 return container_of(dom, struct arm_smmu_domain, domain); 947} 948 949static inline struct arm_smmu_nested_domain * 950to_smmu_nested_domain(struct iommu_domain *dom) 951{ 952 return container_of(dom, struct arm_smmu_nested_domain, domain); 953} 954 955extern struct xarray arm_smmu_asid_xa; 956extern struct mutex arm_smmu_asid_lock; 957 958struct arm_smmu_domain *arm_smmu_domain_alloc(void); 959 960void arm_smmu_clear_cd(struct arm_smmu_master *master, ioasid_t ssid); 961struct arm_smmu_cd *arm_smmu_get_cd_ptr(struct arm_smmu_master *master, 962 u32 ssid); 963void arm_smmu_make_s1_cd(struct arm_smmu_cd *target, 964 struct arm_smmu_master *master, 965 struct arm_smmu_domain *smmu_domain); 966void arm_smmu_write_cd_entry(struct arm_smmu_master *master, int ssid, 967 struct arm_smmu_cd *cdptr, 968 const struct arm_smmu_cd *target); 969 970int arm_smmu_set_pasid(struct arm_smmu_master *master, 971 struct arm_smmu_domain *smmu_domain, ioasid_t pasid, 972 struct arm_smmu_cd *cd, struct iommu_domain *old); 973 974void arm_smmu_tlb_inv_asid(struct arm_smmu_device *smmu, u16 asid); 975void arm_smmu_tlb_inv_range_asid(unsigned long iova, size_t size, int asid, 976 size_t granule, bool leaf, 977 struct arm_smmu_domain *smmu_domain); 978int arm_smmu_atc_inv_domain(struct arm_smmu_domain *smmu_domain, 979 unsigned long iova, size_t size); 980 981void __arm_smmu_cmdq_skip_err(struct arm_smmu_device *smmu, 982 struct arm_smmu_cmdq *cmdq); 983int arm_smmu_init_one_queue(struct arm_smmu_device *smmu, 984 struct arm_smmu_queue *q, void __iomem *page, 985 unsigned long prod_off, unsigned long cons_off, 986 size_t dwords, const char *name); 987int arm_smmu_cmdq_init(struct arm_smmu_device *smmu, 988 struct arm_smmu_cmdq *cmdq); 989 990static inline bool arm_smmu_master_canwbs(struct arm_smmu_master *master) 991{ 992 return dev_iommu_fwspec_get(master->dev)->flags & 993 IOMMU_FWSPEC_PCI_RC_CANWBS; 994} 995 996struct arm_smmu_attach_state { 997 /* Inputs */ 998 struct iommu_domain *old_domain; 999 struct arm_smmu_master *master; 1000 bool cd_needs_ats; 1001 bool disable_ats; 1002 ioasid_t ssid; 1003 /* Resulting state */ 1004 struct arm_smmu_vmaster *vmaster; 1005 bool ats_enabled; 1006}; 1007 1008int arm_smmu_attach_prepare(struct arm_smmu_attach_state *state, 1009 struct iommu_domain *new_domain); 1010void arm_smmu_attach_commit(struct arm_smmu_attach_state *state); 1011void arm_smmu_install_ste_for_dev(struct arm_smmu_master *master, 1012 const struct arm_smmu_ste *target); 1013 1014int arm_smmu_cmdq_issue_cmdlist(struct arm_smmu_device *smmu, 1015 struct arm_smmu_cmdq *cmdq, u64 *cmds, int n, 1016 bool sync); 1017 1018#ifdef CONFIG_ARM_SMMU_V3_SVA 1019bool arm_smmu_sva_supported(struct arm_smmu_device *smmu); 1020void arm_smmu_sva_notifier_synchronize(void); 1021struct iommu_domain *arm_smmu_sva_domain_alloc(struct device *dev, 1022 struct mm_struct *mm); 1023#else /* CONFIG_ARM_SMMU_V3_SVA */ 1024static inline bool arm_smmu_sva_supported(struct arm_smmu_device *smmu) 1025{ 1026 return false; 1027} 1028 1029static inline void arm_smmu_sva_notifier_synchronize(void) {} 1030 1031#define arm_smmu_sva_domain_alloc NULL 1032 1033#endif /* CONFIG_ARM_SMMU_V3_SVA */ 1034 1035#ifdef CONFIG_TEGRA241_CMDQV 1036struct arm_smmu_device *tegra241_cmdqv_probe(struct arm_smmu_device *smmu); 1037#else /* CONFIG_TEGRA241_CMDQV */ 1038static inline struct arm_smmu_device * 1039tegra241_cmdqv_probe(struct arm_smmu_device *smmu) 1040{ 1041 return ERR_PTR(-ENODEV); 1042} 1043#endif /* CONFIG_TEGRA241_CMDQV */ 1044 1045struct arm_vsmmu { 1046 struct iommufd_viommu core; 1047 struct arm_smmu_device *smmu; 1048 struct arm_smmu_domain *s2_parent; 1049 u16 vmid; 1050}; 1051 1052#if IS_ENABLED(CONFIG_ARM_SMMU_V3_IOMMUFD) 1053void *arm_smmu_hw_info(struct device *dev, u32 *length, 1054 enum iommu_hw_info_type *type); 1055size_t arm_smmu_get_viommu_size(struct device *dev, 1056 enum iommu_viommu_type viommu_type); 1057int arm_vsmmu_init(struct iommufd_viommu *viommu, 1058 struct iommu_domain *parent_domain, 1059 const struct iommu_user_data *user_data); 1060int arm_smmu_attach_prepare_vmaster(struct arm_smmu_attach_state *state, 1061 struct arm_smmu_nested_domain *nested_domain); 1062void arm_smmu_attach_commit_vmaster(struct arm_smmu_attach_state *state); 1063void arm_smmu_master_clear_vmaster(struct arm_smmu_master *master); 1064int arm_vmaster_report_event(struct arm_smmu_vmaster *vmaster, u64 *evt); 1065struct iommu_domain * 1066arm_vsmmu_alloc_domain_nested(struct iommufd_viommu *viommu, u32 flags, 1067 const struct iommu_user_data *user_data); 1068int arm_vsmmu_cache_invalidate(struct iommufd_viommu *viommu, 1069 struct iommu_user_data_array *array); 1070#else 1071#define arm_smmu_get_viommu_size NULL 1072#define arm_smmu_hw_info NULL 1073#define arm_vsmmu_init NULL 1074#define arm_vsmmu_alloc_domain_nested NULL 1075#define arm_vsmmu_cache_invalidate NULL 1076 1077static inline int 1078arm_smmu_attach_prepare_vmaster(struct arm_smmu_attach_state *state, 1079 struct arm_smmu_nested_domain *nested_domain) 1080{ 1081 return 0; 1082} 1083 1084static inline void 1085arm_smmu_attach_commit_vmaster(struct arm_smmu_attach_state *state) 1086{ 1087} 1088 1089static inline void 1090arm_smmu_master_clear_vmaster(struct arm_smmu_master *master) 1091{ 1092} 1093 1094static inline int arm_vmaster_report_event(struct arm_smmu_vmaster *vmaster, 1095 u64 *evt) 1096{ 1097 return -EOPNOTSUPP; 1098} 1099#endif /* CONFIG_ARM_SMMU_V3_IOMMUFD */ 1100 1101#endif /* _ARM_SMMU_V3_H */
~/
Read-only file preview.