개념 설명 전체 · v6.18.37 / drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c
1 // SPDX-License-Identifier: GPL-2.0 2 /* 3 * IOMMU API for ARM architected SMMUv3 implementations. 4 * 5 * Copyright (C) 2015 ARM Limited 6 * 7 * Author: Will Deacon <[email protected]> 8 * 9 * This driver is powered by bad coffee and bombay mix. 10 */ 11 12 #include <linux/acpi.h> 13 #include <linux/acpi_iort.h> 14 #include <linux/bitops.h> 15 #include <linux/crash_dump.h> 16 #include <linux/delay.h> 17 #include <linux/err.h> 18 #include <linux/interrupt.h> 19 #include <linux/io-pgtable.h> 20 #include <linux/iopoll.h> 21 #include <linux/module.h> 22 #include <linux/msi.h> 23 #include <linux/of.h> 24 #include <linux/of_address.h> 25 #include <linux/of_platform.h> 26 #include <linux/pci.h> 27 #include <linux/pci-ats.h> 28 #include <linux/platform_device.h> 29 #include <linux/string_choices.h> 30 #include <kunit/visibility.h> 31 #include <uapi/linux/iommufd.h> 32 33 #include "arm-smmu-v3.h" 34 #include "../../dma-iommu.h" 35 36 static bool disable_msipolling; 37 module_param(disable_msipolling, bool, 0444); 38 MODULE_PARM_DESC(disable_msipolling, 39 "Disable MSI-based polling for CMD_SYNC completion."); 40 41 static const struct iommu_ops arm_smmu_ops; 42 static struct iommu_dirty_ops arm_smmu_dirty_ops; 43 44 enum arm_smmu_msi_index { 45 EVTQ_MSI_INDEX, 46 GERROR_MSI_INDEX, 47 PRIQ_MSI_INDEX, 48 ARM_SMMU_MAX_MSIS, 49 }; 50 51 #define NUM_ENTRY_QWORDS 8 52 static_assert(sizeof(struct arm_smmu_ste) == NUM_ENTRY_QWORDS * sizeof(u64)); 53 static_assert(sizeof(struct arm_smmu_cd) == NUM_ENTRY_QWORDS * sizeof(u64)); 54 55 static phys_addr_t arm_smmu_msi_cfg[ARM_SMMU_MAX_MSIS][3] = { 56 [EVTQ_MSI_INDEX] = { 57 ARM_SMMU_EVTQ_IRQ_CFG0, 58 ARM_SMMU_EVTQ_IRQ_CFG1, 59 ARM_SMMU_EVTQ_IRQ_CFG2, 60 }, 61 [GERROR_MSI_INDEX] = { 62 ARM_SMMU_GERROR_IRQ_CFG0, 63 ARM_SMMU_GERROR_IRQ_CFG1, 64 ARM_SMMU_GERROR_IRQ_CFG2, 65 }, 66 [PRIQ_MSI_INDEX] = { 67 ARM_SMMU_PRIQ_IRQ_CFG0, 68 ARM_SMMU_PRIQ_IRQ_CFG1, 69 ARM_SMMU_PRIQ_IRQ_CFG2, 70 }, 71 }; 72 73 struct arm_smmu_option_prop { 74 u32 opt; 75 const char *prop; 76 }; 77 78 DEFINE_XARRAY_ALLOC1(arm_smmu_asid_xa); 79 DEFINE_MUTEX(arm_smmu_asid_lock); 80 81 static struct arm_smmu_option_prop arm_smmu_options[] = { 82 { ARM_SMMU_OPT_SKIP_PREFETCH, "hisilicon,broken-prefetch-cmd" }, 83 { ARM_SMMU_OPT_PAGE0_REGS_ONLY, "cavium,cn9900-broken-page1-regspace"}, 84 { 0, NULL}, 85 }; 86 87 static const char * const event_str[] = { 88 [EVT_ID_BAD_STREAMID_CONFIG] = "C_BAD_STREAMID", 89 [EVT_ID_STE_FETCH_FAULT] = "F_STE_FETCH", 90 [EVT_ID_BAD_STE_CONFIG] = "C_BAD_STE", 91 [EVT_ID_STREAM_DISABLED_FAULT] = "F_STREAM_DISABLED", 92 [EVT_ID_BAD_SUBSTREAMID_CONFIG] = "C_BAD_SUBSTREAMID", 93 [EVT_ID_CD_FETCH_FAULT] = "F_CD_FETCH", 94 [EVT_ID_BAD_CD_CONFIG] = "C_BAD_CD", 95 [EVT_ID_TRANSLATION_FAULT] = "F_TRANSLATION", 96 [EVT_ID_ADDR_SIZE_FAULT] = "F_ADDR_SIZE", 97 [EVT_ID_ACCESS_FAULT] = "F_ACCESS", 98 [EVT_ID_PERMISSION_FAULT] = "F_PERMISSION", 99 [EVT_ID_VMS_FETCH_FAULT] = "F_VMS_FETCH", 100 }; 101 102 static const char * const event_class_str[] = { 103 [0] = "CD fetch", 104 [1] = "Stage 1 translation table fetch", 105 [2] = "Input address caused fault", 106 [3] = "Reserved", 107 }; 108 109 static int arm_smmu_alloc_cd_tables(struct arm_smmu_master *master); 110 111 static void parse_driver_options(struct arm_smmu_device *smmu) 112 { 113 int i = 0; 114 115 do { 116 if (of_property_read_bool(smmu->dev->of_node, 117 arm_smmu_options[i].prop)) { 118 smmu->options |= arm_smmu_options[i].opt; 119 dev_notice(smmu->dev, "option %s\n", 120 arm_smmu_options[i].prop); 121 } 122 } while (arm_smmu_options[++i].opt); 123 } 124 125 /* Low-level queue manipulation functions */ 126 static bool queue_has_space(struct arm_smmu_ll_queue *q, u32 n) 127 { 128 u32 space, prod, cons; 129 130 prod = Q_IDX(q, q->prod); 131 cons = Q_IDX(q, q->cons); 132 133 if (Q_WRP(q, q->prod) == Q_WRP(q, q->cons)) 134 space = (1 << q->max_n_shift) - (prod - cons); 135 else 136 space = cons - prod; 137 138 return space >= n; 139 } 140 141 static bool queue_full(struct arm_smmu_ll_queue *q) 142 { 143 return Q_IDX(q, q->prod) == Q_IDX(q, q->cons) && 144 Q_WRP(q, q->prod) != Q_WRP(q, q->cons); 145 } 146 147 static bool queue_empty(struct arm_smmu_ll_queue *q) 148 { 149 return Q_IDX(q, q->prod) == Q_IDX(q, q->cons) && 150 Q_WRP(q, q->prod) == Q_WRP(q, q->cons); 151 } 152 153 static bool queue_consumed(struct arm_smmu_ll_queue *q, u32 prod) 154 { 155 return ((Q_WRP(q, q->cons) == Q_WRP(q, prod)) && 156 (Q_IDX(q, q->cons) > Q_IDX(q, prod))) || 157 ((Q_WRP(q, q->cons) != Q_WRP(q, prod)) && 158 (Q_IDX(q, q->cons) <= Q_IDX(q, prod))); 159 } 160 161 static void queue_sync_cons_out(struct arm_smmu_queue *q) 162 { 163 /* 164 * Ensure that all CPU accesses (reads and writes) to the queue 165 * are complete before we update the cons pointer. 166 */ 167 __iomb(); 168 writel_relaxed(q->llq.cons, q->cons_reg); 169 } 170 171 static void queue_inc_cons(struct arm_smmu_ll_queue *q) 172 { 173 u32 cons = (Q_WRP(q, q->cons) | Q_IDX(q, q->cons)) + 1; 174 q->cons = Q_OVF(q->cons) | Q_WRP(q, cons) | Q_IDX(q, cons); 175 } 176 177 static void queue_sync_cons_ovf(struct arm_smmu_queue *q) 178 { 179 struct arm_smmu_ll_queue *llq = &q->llq; 180 181 if (likely(Q_OVF(llq->prod) == Q_OVF(llq->cons))) 182 return; 183 184 llq->cons = Q_OVF(llq->prod) | Q_WRP(llq, llq->cons) | 185 Q_IDX(llq, llq->cons); 186 queue_sync_cons_out(q); 187 } 188 189 static int queue_sync_prod_in(struct arm_smmu_queue *q) 190 { 191 u32 prod; 192 int ret = 0; 193 194 /* 195 * We can't use the _relaxed() variant here, as we must prevent 196 * speculative reads of the queue before we have determined that 197 * prod has indeed moved. 198 */ 199 prod = readl(q->prod_reg); 200 201 if (Q_OVF(prod) != Q_OVF(q->llq.prod)) 202 ret = -EOVERFLOW; 203 204 q->llq.prod = prod; 205 return ret; 206 } 207 208 static u32 queue_inc_prod_n(struct arm_smmu_ll_queue *q, int n) 209 { 210 u32 prod = (Q_WRP(q, q->prod) | Q_IDX(q, q->prod)) + n; 211 return Q_OVF(q->prod) | Q_WRP(q, prod) | Q_IDX(q, prod); 212 } 213 214 static void queue_poll_init(struct arm_smmu_device *smmu, 215 struct arm_smmu_queue_poll *qp) 216 { 217 qp->delay = 1; 218 qp->spin_cnt = 0; 219 qp->wfe = !!(smmu->features & ARM_SMMU_FEAT_SEV); 220 qp->timeout = ktime_add_us(ktime_get(), ARM_SMMU_POLL_TIMEOUT_US); 221 } 222 223 static int queue_poll(struct arm_smmu_queue_poll *qp) 224 { 225 if (ktime_compare(ktime_get(), qp->timeout) > 0) 226 return -ETIMEDOUT; 227 228 if (qp->wfe) { 229 wfe(); 230 } else if (++qp->spin_cnt < ARM_SMMU_POLL_SPIN_COUNT) { 231 cpu_relax(); 232 } else { 233 udelay(qp->delay); 234 qp->delay *= 2; 235 qp->spin_cnt = 0; 236 } 237 238 return 0; 239 } 240 241 static void queue_write(__le64 *dst, u64 *src, size_t n_dwords) 242 { 243 int i; 244 245 for (i = 0; i < n_dwords; ++i) 246 *dst++ = cpu_to_le64(*src++); 247 } 248 249 static void queue_read(u64 *dst, __le64 *src, size_t n_dwords) 250 { 251 int i; 252 253 for (i = 0; i < n_dwords; ++i) 254 *dst++ = le64_to_cpu(*src++); 255 } 256 257 static int queue_remove_raw(struct arm_smmu_queue *q, u64 *ent) 258 { 259 if (queue_empty(&q->llq)) 260 return -EAGAIN; 261 262 queue_read(ent, Q_ENT(q, q->llq.cons), q->ent_dwords); 263 queue_inc_cons(&q->llq); 264 queue_sync_cons_out(q); 265 return 0; 266 } 267 268 /* High-level queue accessors */ 269 static int arm_smmu_cmdq_build_cmd(u64 *cmd, struct arm_smmu_cmdq_ent *ent) 270 { 271 memset(cmd, 0, 1 << CMDQ_ENT_SZ_SHIFT); 272 cmd[0] |= FIELD_PREP(CMDQ_0_OP, ent->opcode); 273 274 switch (ent->opcode) { 275 case CMDQ_OP_TLBI_EL2_ALL: 276 case CMDQ_OP_TLBI_NSNH_ALL: 277 break; 278 case CMDQ_OP_PREFETCH_CFG: 279 cmd[0] |= FIELD_PREP(CMDQ_PREFETCH_0_SID, ent->prefetch.sid); 280 break; 281 case CMDQ_OP_CFGI_CD: 282 cmd[0] |= FIELD_PREP(CMDQ_CFGI_0_SSID, ent->cfgi.ssid); 283 fallthrough; 284 case CMDQ_OP_CFGI_STE: 285 cmd[0] |= FIELD_PREP(CMDQ_CFGI_0_SID, ent->cfgi.sid); 286 cmd[1] |= FIELD_PREP(CMDQ_CFGI_1_LEAF, ent->cfgi.leaf); 287 break; 288 case CMDQ_OP_CFGI_CD_ALL: 289 cmd[0] |= FIELD_PREP(CMDQ_CFGI_0_SID, ent->cfgi.sid); 290 break; 291 case CMDQ_OP_CFGI_ALL: 292 /* Cover the entire SID range */ 293 cmd[1] |= FIELD_PREP(CMDQ_CFGI_1_RANGE, 31); 294 break; 295 case CMDQ_OP_TLBI_NH_VA: 296 cmd[0] |= FIELD_PREP(CMDQ_TLBI_0_VMID, ent->tlbi.vmid); 297 fallthrough; 298 case CMDQ_OP_TLBI_EL2_VA: 299 cmd[0] |= FIELD_PREP(CMDQ_TLBI_0_NUM, ent->tlbi.num); 300 cmd[0] |= FIELD_PREP(CMDQ_TLBI_0_SCALE, ent->tlbi.scale); 301 cmd[0] |= FIELD_PREP(CMDQ_TLBI_0_ASID, ent->tlbi.asid); 302 cmd[1] |= FIELD_PREP(CMDQ_TLBI_1_LEAF, ent->tlbi.leaf); 303 cmd[1] |= FIELD_PREP(CMDQ_TLBI_1_TTL, ent->tlbi.ttl); 304 cmd[1] |= FIELD_PREP(CMDQ_TLBI_1_TG, ent->tlbi.tg); 305 cmd[1] |= ent->tlbi.addr & CMDQ_TLBI_1_VA_MASK; 306 break; 307 case CMDQ_OP_TLBI_S2_IPA: 308 cmd[0] |= FIELD_PREP(CMDQ_TLBI_0_NUM, ent->tlbi.num); 309 cmd[0] |= FIELD_PREP(CMDQ_TLBI_0_SCALE, ent->tlbi.scale); 310 cmd[0] |= FIELD_PREP(CMDQ_TLBI_0_VMID, ent->tlbi.vmid); 311 cmd[1] |= FIELD_PREP(CMDQ_TLBI_1_LEAF, ent->tlbi.leaf); 312 cmd[1] |= FIELD_PREP(CMDQ_TLBI_1_TTL, ent->tlbi.ttl); 313 cmd[1] |= FIELD_PREP(CMDQ_TLBI_1_TG, ent->tlbi.tg); 314 cmd[1] |= ent->tlbi.addr & CMDQ_TLBI_1_IPA_MASK; 315 break; 316 case CMDQ_OP_TLBI_NH_ASID: 317 cmd[0] |= FIELD_PREP(CMDQ_TLBI_0_ASID, ent->tlbi.asid); 318 fallthrough; 319 case CMDQ_OP_TLBI_NH_ALL: 320 case CMDQ_OP_TLBI_S12_VMALL: 321 cmd[0] |= FIELD_PREP(CMDQ_TLBI_0_VMID, ent->tlbi.vmid); 322 break; 323 case CMDQ_OP_TLBI_EL2_ASID: 324 cmd[0] |= FIELD_PREP(CMDQ_TLBI_0_ASID, ent->tlbi.asid); 325 break; 326 case CMDQ_OP_ATC_INV: 327 cmd[0] |= FIELD_PREP(CMDQ_0_SSV, ent->substream_valid); 328 cmd[0] |= FIELD_PREP(CMDQ_ATC_0_GLOBAL, ent->atc.global); 329 cmd[0] |= FIELD_PREP(CMDQ_ATC_0_SSID, ent->atc.ssid); 330 cmd[0] |= FIELD_PREP(CMDQ_ATC_0_SID, ent->atc.sid); 331 cmd[1] |= FIELD_PREP(CMDQ_ATC_1_SIZE, ent->atc.size); 332 cmd[1] |= ent->atc.addr & CMDQ_ATC_1_ADDR_MASK; 333 break; 334 case CMDQ_OP_PRI_RESP: 335 cmd[0] |= FIELD_PREP(CMDQ_0_SSV, ent->substream_valid); 336 cmd[0] |= FIELD_PREP(CMDQ_PRI_0_SSID, ent->pri.ssid); 337 cmd[0] |= FIELD_PREP(CMDQ_PRI_0_SID, ent->pri.sid); 338 cmd[1] |= FIELD_PREP(CMDQ_PRI_1_GRPID, ent->pri.grpid); 339 switch (ent->pri.resp) { 340 case PRI_RESP_DENY: 341 case PRI_RESP_FAIL: 342 case PRI_RESP_SUCC: 343 break; 344 default: 345 return -EINVAL; 346 } 347 cmd[1] |= FIELD_PREP(CMDQ_PRI_1_RESP, ent->pri.resp); 348 break; 349 case CMDQ_OP_RESUME: 350 cmd[0] |= FIELD_PREP(CMDQ_RESUME_0_SID, ent->resume.sid); 351 cmd[0] |= FIELD_PREP(CMDQ_RESUME_0_RESP, ent->resume.resp); 352 cmd[1] |= FIELD_PREP(CMDQ_RESUME_1_STAG, ent->resume.stag); 353 break; 354 case CMDQ_OP_CMD_SYNC: 355 if (ent->sync.msiaddr) { 356 cmd[0] |= FIELD_PREP(CMDQ_SYNC_0_CS, CMDQ_SYNC_0_CS_IRQ); 357 cmd[1] |= ent->sync.msiaddr & CMDQ_SYNC_1_MSIADDR_MASK; 358 } else { 359 cmd[0] |= FIELD_PREP(CMDQ_SYNC_0_CS, CMDQ_SYNC_0_CS_SEV); 360 } 361 cmd[0] |= FIELD_PREP(CMDQ_SYNC_0_MSH, ARM_SMMU_SH_ISH); 362 cmd[0] |= FIELD_PREP(CMDQ_SYNC_0_MSIATTR, ARM_SMMU_MEMATTR_OIWB); 363 break; 364 default: 365 return -ENOENT; 366 } 367 368 return 0; 369 } 370 371 static struct arm_smmu_cmdq *arm_smmu_get_cmdq(struct arm_smmu_device *smmu, 372 struct arm_smmu_cmdq_ent *ent) 373 { 374 struct arm_smmu_cmdq *cmdq = NULL; 375 376 if (smmu->impl_ops && smmu->impl_ops->get_secondary_cmdq) 377 cmdq = smmu->impl_ops->get_secondary_cmdq(smmu, ent); 378 379 return cmdq ?: &smmu->cmdq; 380 } 381 382 static bool arm_smmu_cmdq_needs_busy_polling(struct arm_smmu_device *smmu, 383 struct arm_smmu_cmdq *cmdq) 384 { 385 if (cmdq == &smmu->cmdq) 386 return false; 387 388 return smmu->options & ARM_SMMU_OPT_TEGRA241_CMDQV; 389 } 390 391 static void arm_smmu_cmdq_build_sync_cmd(u64 *cmd, struct arm_smmu_device *smmu, 392 struct arm_smmu_cmdq *cmdq, u32 prod) 393 { 394 struct arm_smmu_queue *q = &cmdq->q; 395 struct arm_smmu_cmdq_ent ent = { 396 .opcode = CMDQ_OP_CMD_SYNC, 397 }; 398 399 /* 400 * Beware that Hi16xx adds an extra 32 bits of goodness to its MSI 401 * payload, so the write will zero the entire command on that platform. 402 */ 403 if (smmu->options & ARM_SMMU_OPT_MSIPOLL) { 404 ent.sync.msiaddr = q->base_dma + Q_IDX(&q->llq, prod) * 405 q->ent_dwords * 8; 406 } 407 408 arm_smmu_cmdq_build_cmd(cmd, &ent); 409 if (arm_smmu_cmdq_needs_busy_polling(smmu, cmdq)) 410 u64p_replace_bits(cmd, CMDQ_SYNC_0_CS_NONE, CMDQ_SYNC_0_CS); 411 } 412 413 void __arm_smmu_cmdq_skip_err(struct arm_smmu_device *smmu, 414 struct arm_smmu_cmdq *cmdq) 415 { 416 static const char * const cerror_str[] = { 417 [CMDQ_ERR_CERROR_NONE_IDX] = "No error", 418 [CMDQ_ERR_CERROR_ILL_IDX] = "Illegal command", 419 [CMDQ_ERR_CERROR_ABT_IDX] = "Abort on command fetch", 420 [CMDQ_ERR_CERROR_ATC_INV_IDX] = "ATC invalidate timeout", 421 }; 422 struct arm_smmu_queue *q = &cmdq->q; 423 424 int i; 425 u64 cmd[CMDQ_ENT_DWORDS]; 426 u32 cons = readl_relaxed(q->cons_reg); 427 u32 idx = FIELD_GET(CMDQ_CONS_ERR, cons); 428 struct arm_smmu_cmdq_ent cmd_sync = { 429 .opcode = CMDQ_OP_CMD_SYNC, 430 }; 431 432 dev_err(smmu->dev, "CMDQ error (cons 0x%08x): %s\n", cons, 433 idx < ARRAY_SIZE(cerror_str) ? cerror_str[idx] : "Unknown"); 434 435 switch (idx) { 436 case CMDQ_ERR_CERROR_ABT_IDX: 437 dev_err(smmu->dev, "retrying command fetch\n"); 438 return; 439 case CMDQ_ERR_CERROR_NONE_IDX: 440 return; 441 case CMDQ_ERR_CERROR_ATC_INV_IDX: 442 /* 443 * ATC Invalidation Completion timeout. CONS is still pointing 444 * at the CMD_SYNC. Attempt to complete other pending commands 445 * by repeating the CMD_SYNC, though we might well end up back 446 * here since the ATC invalidation may still be pending. 447 */ 448 return; 449 case CMDQ_ERR_CERROR_ILL_IDX: 450 default: 451 break; 452 } 453 454 /* 455 * We may have concurrent producers, so we need to be careful 456 * not to touch any of the shadow cmdq state. 457 */ 458 queue_read(cmd, Q_ENT(q, cons), q->ent_dwords); 459 dev_err(smmu->dev, "skipping command in error state:\n"); 460 for (i = 0; i < ARRAY_SIZE(cmd); ++i) 461 dev_err(smmu->dev, "\t0x%016llx\n", (unsigned long long)cmd[i]); 462 463 /* Convert the erroneous command into a CMD_SYNC */ 464 arm_smmu_cmdq_build_cmd(cmd, &cmd_sync); 465 if (arm_smmu_cmdq_needs_busy_polling(smmu, cmdq)) 466 u64p_replace_bits(cmd, CMDQ_SYNC_0_CS_NONE, CMDQ_SYNC_0_CS); 467 468 queue_write(Q_ENT(q, cons), cmd, q->ent_dwords); 469 } 470 471 static void arm_smmu_cmdq_skip_err(struct arm_smmu_device *smmu) 472 { 473 __arm_smmu_cmdq_skip_err(smmu, &smmu->cmdq); 474 } 475 476 /* 477 * Command queue locking. 478 * This is a form of bastardised rwlock with the following major changes: 479 * 480 * - The only LOCK routines are exclusive_trylock() and shared_lock(). 481 * Neither have barrier semantics, and instead provide only a control 482 * dependency. 483 * 484 * - The UNLOCK routines are supplemented with shared_tryunlock(), which 485 * fails if the caller appears to be the last lock holder (yes, this is 486 * racy). All successful UNLOCK routines have RELEASE semantics. 487 */ 488 static void arm_smmu_cmdq_shared_lock(struct arm_smmu_cmdq *cmdq) 489 { 490 /* 491 * When held in exclusive state, the lock counter is set to INT_MIN 492 * so these increments won't hurt as the value will remain negative. 493 * The increment will also signal the exclusive locker that there are 494 * shared waiters. 495 */ 496 if (atomic_fetch_inc_relaxed(&cmdq->lock) >= 0) 497 return; 498 499 /* 500 * Someone else is holding the lock in exclusive state, so wait 501 * for them to finish. Since we already incremented the lock counter, 502 * no exclusive lock can be acquired until we finish. We don't need 503 * the return value since we only care that the exclusive lock is 504 * released (i.e. the lock counter is non-negative). 505 * Once the exclusive locker releases the lock, the sign bit will 506 * be cleared and our increment will make the lock counter positive, 507 * allowing us to proceed. 508 */ 509 atomic_cond_read_relaxed(&cmdq->lock, VAL > 0); 510 } 511 512 static void arm_smmu_cmdq_shared_unlock(struct arm_smmu_cmdq *cmdq) 513 { 514 (void)atomic_dec_return_release(&cmdq->lock); 515 } 516 517 static bool arm_smmu_cmdq_shared_tryunlock(struct arm_smmu_cmdq *cmdq) 518 { 519 if (atomic_read(&cmdq->lock) == 1) 520 return false; 521 522 arm_smmu_cmdq_shared_unlock(cmdq); 523 return true; 524 } 525 526 #define arm_smmu_cmdq_exclusive_trylock_irqsave(cmdq, flags) \ 527 ({ \ 528 bool __ret; \ 529 local_irq_save(flags); \ 530 __ret = !atomic_cmpxchg_relaxed(&cmdq->lock, 0, INT_MIN); \ 531 if (!__ret) \ 532 local_irq_restore(flags); \ 533 __ret; \ 534 }) 535 536 /* 537 * Only clear the sign bit when releasing the exclusive lock this will 538 * allow any shared_lock() waiters to proceed without the possibility 539 * of entering the exclusive lock in a tight loop. 540 */ 541 #define arm_smmu_cmdq_exclusive_unlock_irqrestore(cmdq, flags) \ 542 ({ \ 543 atomic_fetch_andnot_release(INT_MIN, &cmdq->lock); \ 544 local_irq_restore(flags); \ 545 }) 546 547 548 /* 549 * Command queue insertion. 550 * This is made fiddly by our attempts to achieve some sort of scalability 551 * since there is one queue shared amongst all of the CPUs in the system. If 552 * you like mixed-size concurrency, dependency ordering and relaxed atomics, 553 * then you'll *love* this monstrosity. 554 * 555 * The basic idea is to split the queue up into ranges of commands that are 556 * owned by a given CPU; the owner may not have written all of the commands 557 * itself, but is responsible for advancing the hardware prod pointer when 558 * the time comes. The algorithm is roughly: 559 * 560 * 1. Allocate some space in the queue. At this point we also discover 561 * whether the head of the queue is currently owned by another CPU, 562 * or whether we are the owner. 563 * 564 * 2. Write our commands into our allocated slots in the queue. 565 * 566 * 3. Mark our slots as valid in arm_smmu_cmdq.valid_map. 567 * 568 * 4. If we are an owner: 569 * a. Wait for the previous owner to finish. 570 * b. Mark the queue head as unowned, which tells us the range 571 * that we are responsible for publishing. 572 * c. Wait for all commands in our owned range to become valid. 573 * d. Advance the hardware prod pointer. 574 * e. Tell the next owner we've finished. 575 * 576 * 5. If we are inserting a CMD_SYNC (we may or may not have been an 577 * owner), then we need to stick around until it has completed: 578 * a. If we have MSIs, the SMMU can write back into the CMD_SYNC 579 * to clear the first 4 bytes. 580 * b. Otherwise, we spin waiting for the hardware cons pointer to 581 * advance past our command. 582 * 583 * The devil is in the details, particularly the use of locking for handling 584 * SYNC completion and freeing up space in the queue before we think that it is 585 * full. 586 */ 587 static void __arm_smmu_cmdq_poll_set_valid_map(struct arm_smmu_cmdq *cmdq, 588 u32 sprod, u32 eprod, bool set) 589 { 590 u32 swidx, sbidx, ewidx, ebidx; 591 struct arm_smmu_ll_queue llq = { 592 .max_n_shift = cmdq->q.llq.max_n_shift, 593 .prod = sprod, 594 }; 595 596 ewidx = BIT_WORD(Q_IDX(&llq, eprod)); 597 ebidx = Q_IDX(&llq, eprod) % BITS_PER_LONG; 598 599 while (llq.prod != eprod) { 600 unsigned long mask; 601 atomic_long_t *ptr; 602 u32 limit = BITS_PER_LONG; 603 604 swidx = BIT_WORD(Q_IDX(&llq, llq.prod)); 605 sbidx = Q_IDX(&llq, llq.prod) % BITS_PER_LONG; 606 607 ptr = &cmdq->valid_map[swidx]; 608 609 if ((swidx == ewidx) && (sbidx < ebidx)) 610 limit = ebidx; 611 612 mask = GENMASK(limit - 1, sbidx); 613 614 /* 615 * The valid bit is the inverse of the wrap bit. This means 616 * that a zero-initialised queue is invalid and, after marking 617 * all entries as valid, they become invalid again when we 618 * wrap. 619 */ 620 if (set) { 621 atomic_long_xor(mask, ptr); 622 } else { /* Poll */ 623 unsigned long valid; 624 625 valid = (ULONG_MAX + !!Q_WRP(&llq, llq.prod)) & mask; 626 atomic_long_cond_read_relaxed(ptr, (VAL & mask) == valid); 627 } 628 629 llq.prod = queue_inc_prod_n(&llq, limit - sbidx); 630 } 631 } 632 633 /* Mark all entries in the range [sprod, eprod) as valid */ 634 static void arm_smmu_cmdq_set_valid_map(struct arm_smmu_cmdq *cmdq, 635 u32 sprod, u32 eprod) 636 { 637 __arm_smmu_cmdq_poll_set_valid_map(cmdq, sprod, eprod, true); 638 } 639 640 /* Wait for all entries in the range [sprod, eprod) to become valid */ 641 static void arm_smmu_cmdq_poll_valid_map(struct arm_smmu_cmdq *cmdq, 642 u32 sprod, u32 eprod) 643 { 644 __arm_smmu_cmdq_poll_set_valid_map(cmdq, sprod, eprod, false); 645 } 646 647 /* Wait for the command queue to become non-full */ 648 static int arm_smmu_cmdq_poll_until_not_full(struct arm_smmu_device *smmu, 649 struct arm_smmu_cmdq *cmdq, 650 struct arm_smmu_ll_queue *llq) 651 { 652 unsigned long flags; 653 struct arm_smmu_queue_poll qp; 654 int ret = 0; 655 656 /* 657 * Try to update our copy of cons by grabbing exclusive cmdq access. If 658 * that fails, spin until somebody else updates it for us. 659 */ 660 if (arm_smmu_cmdq_exclusive_trylock_irqsave(cmdq, flags)) { 661 WRITE_ONCE(cmdq->q.llq.cons, readl_relaxed(cmdq->q.cons_reg)); 662 arm_smmu_cmdq_exclusive_unlock_irqrestore(cmdq, flags); 663 llq->val = READ_ONCE(cmdq->q.llq.val); 664 return 0; 665 } 666 667 queue_poll_init(smmu, &qp); 668 do { 669 llq->val = READ_ONCE(cmdq->q.llq.val); 670 if (!queue_full(llq)) 671 break; 672 673 ret = queue_poll(&qp); 674 } while (!ret); 675 676 return ret; 677 } 678 679 /* 680 * Wait until the SMMU signals a CMD_SYNC completion MSI. 681 * Must be called with the cmdq lock held in some capacity. 682 */ 683 static int __arm_smmu_cmdq_poll_until_msi(struct arm_smmu_device *smmu, 684 struct arm_smmu_cmdq *cmdq, 685 struct arm_smmu_ll_queue *llq) 686 { 687 int ret = 0; 688 struct arm_smmu_queue_poll qp; 689 u32 *cmd = (u32 *)(Q_ENT(&cmdq->q, llq->prod)); 690 691 queue_poll_init(smmu, &qp); 692 693 /* 694 * The MSI won't generate an event, since it's being written back 695 * into the command queue. 696 */ 697 qp.wfe = false; 698 smp_cond_load_relaxed(cmd, !VAL || (ret = queue_poll(&qp))); 699 llq->cons = ret ? llq->prod : queue_inc_prod_n(llq, 1); 700 return ret; 701 } 702 703 /* 704 * Wait until the SMMU cons index passes llq->prod. 705 * Must be called with the cmdq lock held in some capacity. 706 */ 707 static int __arm_smmu_cmdq_poll_until_consumed(struct arm_smmu_device *smmu, 708 struct arm_smmu_cmdq *cmdq, 709 struct arm_smmu_ll_queue *llq) 710 { 711 struct arm_smmu_queue_poll qp; 712 u32 prod = llq->prod; 713 int ret = 0; 714 715 queue_poll_init(smmu, &qp); 716 llq->val = READ_ONCE(cmdq->q.llq.val); 717 do { 718 if (queue_consumed(llq, prod)) 719 break; 720 721 ret = queue_poll(&qp); 722 723 /* 724 * This needs to be a readl() so that our subsequent call 725 * to arm_smmu_cmdq_shared_tryunlock() can fail accurately. 726 * 727 * Specifically, we need to ensure that we observe all 728 * shared_lock()s by other CMD_SYNCs that share our owner, 729 * so that a failing call to tryunlock() means that we're 730 * the last one out and therefore we can safely advance 731 * cmdq->q.llq.cons. Roughly speaking: 732 * 733 * CPU 0 CPU1 CPU2 (us) 734 * 735 * if (sync) 736 * shared_lock(); 737 * 738 * dma_wmb(); 739 * set_valid_map(); 740 * 741 * if (owner) { 742 * poll_valid_map(); 743 * <control dependency> 744 * writel(prod_reg); 745 * 746 * readl(cons_reg); 747 * tryunlock(); 748 * 749 * Requires us to see CPU 0's shared_lock() acquisition. 750 */ 751 llq->cons = readl(cmdq->q.cons_reg); 752 } while (!ret); 753 754 return ret; 755 } 756 757 static int arm_smmu_cmdq_poll_until_sync(struct arm_smmu_device *smmu, 758 struct arm_smmu_cmdq *cmdq, 759 struct arm_smmu_ll_queue *llq) 760 { 761 if (smmu->options & ARM_SMMU_OPT_MSIPOLL && 762 !arm_smmu_cmdq_needs_busy_polling(smmu, cmdq)) 763 return __arm_smmu_cmdq_poll_until_msi(smmu, cmdq, llq); 764 765 return __arm_smmu_cmdq_poll_until_consumed(smmu, cmdq, llq); 766 } 767 768 static void arm_smmu_cmdq_write_entries(struct arm_smmu_cmdq *cmdq, u64 *cmds, 769 u32 prod, int n) 770 { 771 int i; 772 struct arm_smmu_ll_queue llq = { 773 .max_n_shift = cmdq->q.llq.max_n_shift, 774 .prod = prod, 775 }; 776 777 for (i = 0; i < n; ++i) { 778 u64 *cmd = &cmds[i * CMDQ_ENT_DWORDS]; 779 780 prod = queue_inc_prod_n(&llq, i); 781 queue_write(Q_ENT(&cmdq->q, prod), cmd, CMDQ_ENT_DWORDS); 782 } 783 } 784 785 /* 786 * This is the actual insertion function, and provides the following 787 * ordering guarantees to callers: 788 * 789 * - There is a dma_wmb() before publishing any commands to the queue. 790 * This can be relied upon to order prior writes to data structures 791 * in memory (such as a CD or an STE) before the command. 792 * 793 * - On completion of a CMD_SYNC, there is a control dependency. 794 * This can be relied upon to order subsequent writes to memory (e.g. 795 * freeing an IOVA) after completion of the CMD_SYNC. 796 * 797 * - Command insertion is totally ordered, so if two CPUs each race to 798 * insert their own list of commands then all of the commands from one 799 * CPU will appear before any of the commands from the other CPU. 800 */ 801 int arm_smmu_cmdq_issue_cmdlist(struct arm_smmu_device *smmu, 802 struct arm_smmu_cmdq *cmdq, u64 *cmds, int n, 803 bool sync) 804 { 805 u64 cmd_sync[CMDQ_ENT_DWORDS]; 806 u32 prod; 807 unsigned long flags; 808 bool owner; 809 struct arm_smmu_ll_queue llq, head; 810 int ret = 0; 811 812 llq.max_n_shift = cmdq->q.llq.max_n_shift; 813 814 /* 1. Allocate some space in the queue */ 815 local_irq_save(flags); 816 llq.val = READ_ONCE(cmdq->q.llq.val); 817 do { 818 u64 old; 819 820 while (!queue_has_space(&llq, n + sync)) { 821 local_irq_restore(flags); 822 if (arm_smmu_cmdq_poll_until_not_full(smmu, cmdq, &llq)) 823 dev_err_ratelimited(smmu->dev, "CMDQ timeout\n"); 824 local_irq_save(flags); 825 } 826 827 head.cons = llq.cons; 828 head.prod = queue_inc_prod_n(&llq, n + sync) | 829 CMDQ_PROD_OWNED_FLAG; 830 831 old = cmpxchg_relaxed(&cmdq->q.llq.val, llq.val, head.val); 832 if (old == llq.val) 833 break; 834 835 llq.val = old; 836 } while (1); 837 owner = !(llq.prod & CMDQ_PROD_OWNED_FLAG); 838 head.prod &= ~CMDQ_PROD_OWNED_FLAG; 839 llq.prod &= ~CMDQ_PROD_OWNED_FLAG; 840 841 /* 842 * 2. Write our commands into the queue 843 * Dependency ordering from the cmpxchg() loop above. 844 */ 845 arm_smmu_cmdq_write_entries(cmdq, cmds, llq.prod, n); 846 if (sync) { 847 prod = queue_inc_prod_n(&llq, n); 848 arm_smmu_cmdq_build_sync_cmd(cmd_sync, smmu, cmdq, prod); 849 queue_write(Q_ENT(&cmdq->q, prod), cmd_sync, CMDQ_ENT_DWORDS); 850 851 /* 852 * In order to determine completion of our CMD_SYNC, we must 853 * ensure that the queue can't wrap twice without us noticing. 854 * We achieve that by taking the cmdq lock as shared before 855 * marking our slot as valid. 856 */ 857 arm_smmu_cmdq_shared_lock(cmdq); 858 } 859 860 /* 3. Mark our slots as valid, ensuring commands are visible first */ 861 dma_wmb(); 862 arm_smmu_cmdq_set_valid_map(cmdq, llq.prod, head.prod); 863 864 /* 4. If we are the owner, take control of the SMMU hardware */ 865 if (owner) { 866 /* a. Wait for previous owner to finish */ 867 atomic_cond_read_relaxed(&cmdq->owner_prod, VAL == llq.prod); 868 869 /* b. Stop gathering work by clearing the owned flag */ 870 prod = atomic_fetch_andnot_relaxed(CMDQ_PROD_OWNED_FLAG, 871 &cmdq->q.llq.atomic.prod); 872 prod &= ~CMDQ_PROD_OWNED_FLAG; 873 874 /* 875 * c. Wait for any gathered work to be written to the queue. 876 * Note that we read our own entries so that we have the control 877 * dependency required by (d). 878 */ 879 arm_smmu_cmdq_poll_valid_map(cmdq, llq.prod, prod); 880 881 /* 882 * d. Advance the hardware prod pointer 883 * Control dependency ordering from the entries becoming valid. 884 */ 885 writel_relaxed(prod, cmdq->q.prod_reg); 886 887 /* 888 * e. Tell the next owner we're done 889 * Make sure we've updated the hardware first, so that we don't 890 * race to update prod and potentially move it backwards. 891 */ 892 atomic_set_release(&cmdq->owner_prod, prod); 893 } 894 895 /* 5. If we are inserting a CMD_SYNC, we must wait for it to complete */ 896 if (sync) { 897 llq.prod = queue_inc_prod_n(&llq, n); 898 ret = arm_smmu_cmdq_poll_until_sync(smmu, cmdq, &llq); 899 if (ret) { 900 dev_err_ratelimited(smmu->dev, 901 "CMD_SYNC timeout at 0x%08x [hwprod 0x%08x, hwcons 0x%08x]\n", 902 llq.prod, 903 readl_relaxed(cmdq->q.prod_reg), 904 readl_relaxed(cmdq->q.cons_reg)); 905 } 906 907 /* 908 * Try to unlock the cmdq lock. This will fail if we're the last 909 * reader, in which case we can safely update cmdq->q.llq.cons 910 */ 911 if (!arm_smmu_cmdq_shared_tryunlock(cmdq)) { 912 WRITE_ONCE(cmdq->q.llq.cons, llq.cons); 913 arm_smmu_cmdq_shared_unlock(cmdq); 914 } 915 } 916 917 local_irq_restore(flags); 918 return ret; 919 } 920 921 static int __arm_smmu_cmdq_issue_cmd(struct arm_smmu_device *smmu, 922 struct arm_smmu_cmdq_ent *ent, 923 bool sync) 924 { 925 u64 cmd[CMDQ_ENT_DWORDS]; 926 927 if (unlikely(arm_smmu_cmdq_build_cmd(cmd, ent))) { 928 dev_warn(smmu->dev, "ignoring unknown CMDQ opcode 0x%x\n", 929 ent->opcode); 930 return -EINVAL; 931 } 932 933 return arm_smmu_cmdq_issue_cmdlist( 934 smmu, arm_smmu_get_cmdq(smmu, ent), cmd, 1, sync); 935 } 936 937 static int arm_smmu_cmdq_issue_cmd(struct arm_smmu_device *smmu, 938 struct arm_smmu_cmdq_ent *ent) 939 { 940 return __arm_smmu_cmdq_issue_cmd(smmu, ent, false); 941 } 942 943 static int arm_smmu_cmdq_issue_cmd_with_sync(struct arm_smmu_device *smmu, 944 struct arm_smmu_cmdq_ent *ent) 945 { 946 return __arm_smmu_cmdq_issue_cmd(smmu, ent, true); 947 } 948 949 static void arm_smmu_cmdq_batch_init(struct arm_smmu_device *smmu, 950 struct arm_smmu_cmdq_batch *cmds, 951 struct arm_smmu_cmdq_ent *ent) 952 { 953 cmds->num = 0; 954 cmds->cmdq = arm_smmu_get_cmdq(smmu, ent); 955 } 956 957 static void arm_smmu_cmdq_batch_add(struct arm_smmu_device *smmu, 958 struct arm_smmu_cmdq_batch *cmds, 959 struct arm_smmu_cmdq_ent *cmd) 960 { 961 bool unsupported_cmd = !arm_smmu_cmdq_supports_cmd(cmds->cmdq, cmd); 962 bool force_sync = (cmds->num == CMDQ_BATCH_ENTRIES - 1) && 963 (smmu->options & ARM_SMMU_OPT_CMDQ_FORCE_SYNC); 964 int index; 965 966 if (force_sync || unsupported_cmd) { 967 arm_smmu_cmdq_issue_cmdlist(smmu, cmds->cmdq, cmds->cmds, 968 cmds->num, true); 969 arm_smmu_cmdq_batch_init(smmu, cmds, cmd); 970 } 971 972 if (cmds->num == CMDQ_BATCH_ENTRIES) { 973 arm_smmu_cmdq_issue_cmdlist(smmu, cmds->cmdq, cmds->cmds, 974 cmds->num, false); 975 arm_smmu_cmdq_batch_init(smmu, cmds, cmd); 976 } 977 978 index = cmds->num * CMDQ_ENT_DWORDS; 979 if (unlikely(arm_smmu_cmdq_build_cmd(&cmds->cmds[index], cmd))) { 980 dev_warn(smmu->dev, "ignoring unknown CMDQ opcode 0x%x\n", 981 cmd->opcode); 982 return; 983 } 984 985 cmds->num++; 986 } 987 988 static int arm_smmu_cmdq_batch_submit(struct arm_smmu_device *smmu, 989 struct arm_smmu_cmdq_batch *cmds) 990 { 991 return arm_smmu_cmdq_issue_cmdlist(smmu, cmds->cmdq, cmds->cmds, 992 cmds->num, true); 993 } 994 995 static void arm_smmu_page_response(struct device *dev, struct iopf_fault *unused, 996 struct iommu_page_response *resp) 997 { 998 struct arm_smmu_cmdq_ent cmd = {0}; 999 struct arm_smmu_master *master = dev_iommu_priv_get(dev); 1000 int sid = master->streams[0].id; 1001 1002 if (WARN_ON(!master->stall_enabled)) 1003 return; 1004 1005 cmd.opcode = CMDQ_OP_RESUME; 1006 cmd.resume.sid = sid; 1007 cmd.resume.stag = resp->grpid; 1008 switch (resp->code) { 1009 case IOMMU_PAGE_RESP_INVALID: 1010 case IOMMU_PAGE_RESP_FAILURE: 1011 cmd.resume.resp = CMDQ_RESUME_0_RESP_ABORT; 1012 break; 1013 case IOMMU_PAGE_RESP_SUCCESS: 1014 cmd.resume.resp = CMDQ_RESUME_0_RESP_RETRY; 1015 break; 1016 default: 1017 break; 1018 } 1019 1020 arm_smmu_cmdq_issue_cmd(master->smmu, &cmd); 1021 /* 1022 * Don't send a SYNC, it doesn't do anything for RESUME or PRI_RESP. 1023 * RESUME consumption guarantees that the stalled transaction will be 1024 * terminated... at some point in the future. PRI_RESP is fire and 1025 * forget. 1026 */ 1027 } 1028 1029 /* Context descriptor manipulation functions */ 1030 void arm_smmu_tlb_inv_asid(struct arm_smmu_device *smmu, u16 asid) 1031 { 1032 struct arm_smmu_cmdq_ent cmd = { 1033 .opcode = smmu->features & ARM_SMMU_FEAT_E2H ? 1034 CMDQ_OP_TLBI_EL2_ASID : CMDQ_OP_TLBI_NH_ASID, 1035 .tlbi.asid = asid, 1036 }; 1037 1038 arm_smmu_cmdq_issue_cmd_with_sync(smmu, &cmd); 1039 } 1040 1041 /* 1042 * Based on the value of ent report which bits of the STE the HW will access. It 1043 * would be nice if this was complete according to the spec, but minimally it 1044 * has to capture the bits this driver uses. 1045 */ 1046 VISIBLE_IF_KUNIT 1047 void arm_smmu_get_ste_used(const __le64 *ent, __le64 *used_bits) 1048 { 1049 unsigned int cfg = FIELD_GET(STRTAB_STE_0_CFG, le64_to_cpu(ent[0])); 1050 1051 used_bits[0] = cpu_to_le64(STRTAB_STE_0_V); 1052 if (!(ent[0] & cpu_to_le64(STRTAB_STE_0_V))) 1053 return; 1054 1055 used_bits[0] |= cpu_to_le64(STRTAB_STE_0_CFG); 1056 1057 /* S1 translates */ 1058 if (cfg & BIT(0)) { 1059 used_bits[0] |= cpu_to_le64(STRTAB_STE_0_S1FMT | 1060 STRTAB_STE_0_S1CTXPTR_MASK | 1061 STRTAB_STE_0_S1CDMAX); 1062 used_bits[1] |= 1063 cpu_to_le64(STRTAB_STE_1_S1DSS | STRTAB_STE_1_S1CIR | 1064 STRTAB_STE_1_S1COR | STRTAB_STE_1_S1CSH | 1065 STRTAB_STE_1_S1STALLD | STRTAB_STE_1_STRW | 1066 STRTAB_STE_1_EATS | STRTAB_STE_1_MEV); 1067 used_bits[2] |= cpu_to_le64(STRTAB_STE_2_S2VMID); 1068 1069 /* 1070 * See 13.5 Summary of attribute/permission configuration fields 1071 * for the SHCFG behavior. 1072 */ 1073 if (FIELD_GET(STRTAB_STE_1_S1DSS, le64_to_cpu(ent[1])) == 1074 STRTAB_STE_1_S1DSS_BYPASS) 1075 used_bits[1] |= cpu_to_le64(STRTAB_STE_1_SHCFG); 1076 } 1077 1078 /* S2 translates */ 1079 if (cfg & BIT(1)) { 1080 used_bits[1] |= 1081 cpu_to_le64(STRTAB_STE_1_S2FWB | STRTAB_STE_1_EATS | 1082 STRTAB_STE_1_SHCFG | STRTAB_STE_1_MEV); 1083 used_bits[2] |= 1084 cpu_to_le64(STRTAB_STE_2_S2VMID | STRTAB_STE_2_VTCR | 1085 STRTAB_STE_2_S2AA64 | STRTAB_STE_2_S2ENDI | 1086 STRTAB_STE_2_S2PTW | STRTAB_STE_2_S2S | 1087 STRTAB_STE_2_S2R); 1088 used_bits[3] |= cpu_to_le64(STRTAB_STE_3_S2TTB_MASK); 1089 } 1090 1091 if (cfg == STRTAB_STE_0_CFG_BYPASS) 1092 used_bits[1] |= cpu_to_le64(STRTAB_STE_1_SHCFG); 1093 } 1094 EXPORT_SYMBOL_IF_KUNIT(arm_smmu_get_ste_used); 1095 1096 VISIBLE_IF_KUNIT 1097 void arm_smmu_get_ste_update_safe(const __le64 *cur, const __le64 *target, 1098 __le64 *safe_bits) 1099 { 1100 const __le64 eats_s1chk = 1101 FIELD_PREP(STRTAB_STE_1_EATS, STRTAB_STE_1_EATS_S1CHK); 1102 const __le64 eats_trans = 1103 FIELD_PREP(STRTAB_STE_1_EATS, STRTAB_STE_1_EATS_TRANS); 1104 1105 /* 1106 * When an STE changes EATS_TRANS, the sequencing code in the attach 1107 * logic already will have the PCI cap for ATS disabled. Thus at this 1108 * moment we can expect that the device will not generate ATS queries 1109 * and so we don't care about the sequencing of EATS. The purpose of 1110 * EATS_TRANS is to protect the system from hostile untrusted devices 1111 * that issue ATS when the PCI config space is disabled. However, if 1112 * EATS_TRANS is being changed, then we must have already trusted the 1113 * device as the EATS_TRANS security block is being disabled. 1114 * 1115 * Note: now the EATS_TRANS update is moved to the first entry_set(). 1116 * Changing S2S and EATS might transiently result in S2S=1 and EATS=1 1117 * which is a bad STE (see "5.2 Stream Table Entry"). In such a case, 1118 * we can't do a hitless update. Also, it should not be added to the 1119 * safe bits with STRTAB_STE_1_EATS_S1CHK, because EATS=0b11 would be 1120 * effectively an errant 0b00 configuration. 1121 */ 1122 if (!((cur[1] | target[1]) & cpu_to_le64(eats_s1chk)) && 1123 !((cur[2] | target[2]) & cpu_to_le64(STRTAB_STE_2_S2S))) 1124 safe_bits[1] |= cpu_to_le64(eats_trans); 1125 1126 /* 1127 * MEV does not meaningfully impact the operation of the HW, it only 1128 * changes how many fault events are generated, thus we can relax it 1129 * when computing the ordering. The spec notes the device can act like 1130 * MEV=1 anyhow: 1131 * 1132 * Note: Software must expect, and be able to deal with, coalesced 1133 * fault records even when MEV == 0. 1134 */ 1135 safe_bits[1] |= cpu_to_le64(STRTAB_STE_1_MEV); 1136 } 1137 EXPORT_SYMBOL_IF_KUNIT(arm_smmu_get_ste_update_safe); 1138 1139 /* 1140 * Figure out if we can do a hitless update of entry to become target. Returns a 1141 * bit mask where 1 indicates that qword needs to be set disruptively. 1142 * unused_update is an intermediate value of entry that has unused bits set to 1143 * their new values. 1144 */ 1145 static u8 arm_smmu_entry_qword_diff(struct arm_smmu_entry_writer *writer, 1146 const __le64 *entry, const __le64 *target, 1147 __le64 *unused_update) 1148 { 1149 __le64 target_used[NUM_ENTRY_QWORDS] = {}; 1150 __le64 cur_used[NUM_ENTRY_QWORDS] = {}; 1151 __le64 safe[NUM_ENTRY_QWORDS] = {}; 1152 u8 used_qword_diff = 0; 1153 unsigned int i; 1154 1155 writer->ops->get_used(entry, cur_used); 1156 writer->ops->get_used(target, target_used); 1157 if (writer->ops->get_update_safe) 1158 writer->ops->get_update_safe(entry, target, safe); 1159 1160 for (i = 0; i != NUM_ENTRY_QWORDS; i++) { 1161 /* 1162 * Safe is only used for bits that are used by both entries, 1163 * otherwise it is sequenced according to the unused entry. 1164 */ 1165 safe[i] &= target_used[i] & cur_used[i]; 1166 1167 /* 1168 * Check that masks are up to date, the make functions are not 1169 * allowed to set a bit to 1 if the used function doesn't say it 1170 * is used. 1171 */ 1172 WARN_ON_ONCE(target[i] & ~target_used[i]); 1173 1174 /* Bits can change because they are not currently being used */ 1175 cur_used[i] &= ~safe[i]; 1176 unused_update[i] = (entry[i] & cur_used[i]) | 1177 (target[i] & ~cur_used[i]); 1178 /* 1179 * Each bit indicates that a used bit in a qword needs to be 1180 * changed after unused_update is applied. 1181 */ 1182 if ((unused_update[i] & target_used[i]) != target[i]) 1183 used_qword_diff |= 1 << i; 1184 } 1185 return used_qword_diff; 1186 } 1187 1188 static void entry_set(struct arm_smmu_entry_writer *writer, __le64 *entry, 1189 const __le64 *target, unsigned int start, 1190 unsigned int len) 1191 { 1192 bool changed = false; 1193 unsigned int i; 1194 1195 for (i = start; len != 0; len--, i++) { 1196 if (entry[i] != target[i]) { 1197 WRITE_ONCE(entry[i], target[i]); 1198 changed = true; 1199 } 1200 } 1201 1202 if (changed) 1203 writer->ops->sync(writer); 1204 } 1205 1206 /* 1207 * Update the STE/CD to the target configuration. The transition from the 1208 * current entry to the target entry takes place over multiple steps that 1209 * attempts to make the transition hitless if possible. This function takes care 1210 * not to create a situation where the HW can perceive a corrupted entry. HW is 1211 * only required to have a 64 bit atomicity with stores from the CPU, while 1212 * entries are many 64 bit values big. 1213 * 1214 * The difference between the current value and the target value is analyzed to 1215 * determine which of three updates are required - disruptive, hitless or no 1216 * change. 1217 * 1218 * In the most general disruptive case we can make any update in three steps: 1219 * - Disrupting the entry (V=0) 1220 * - Fill now unused qwords, execpt qword 0 which contains V 1221 * - Make qword 0 have the final value and valid (V=1) with a single 64 1222 * bit store 1223 * 1224 * However this disrupts the HW while it is happening. There are several 1225 * interesting cases where a STE/CD can be updated without disturbing the HW 1226 * because only a small number of bits are changing (S1DSS, CONFIG, etc) or 1227 * because the used bits don't intersect. We can detect this by calculating how 1228 * many 64 bit values need update after adjusting the unused bits and skip the 1229 * V=0 process. This relies on the IGNORED behavior described in the 1230 * specification. 1231 */ 1232 VISIBLE_IF_KUNIT 1233 void arm_smmu_write_entry(struct arm_smmu_entry_writer *writer, __le64 *entry, 1234 const __le64 *target) 1235 { 1236 __le64 unused_update[NUM_ENTRY_QWORDS]; 1237 u8 used_qword_diff; 1238 1239 /* 1240 * Many of the entry structures have pointers to other structures that 1241 * need to have their updates be visible before any writes of the entry 1242 * happen. 1243 */ 1244 dma_wmb(); 1245 1246 used_qword_diff = 1247 arm_smmu_entry_qword_diff(writer, entry, target, unused_update); 1248 if (hweight8(used_qword_diff) == 1) { 1249 /* 1250 * Only one qword needs its used bits to be changed. This is a 1251 * hitless update, update all bits the current STE/CD is 1252 * ignoring to their new values, then update a single "critical 1253 * qword" to change the STE/CD and finally 0 out any bits that 1254 * are now unused in the target configuration. 1255 */ 1256 unsigned int critical_qword_index = ffs(used_qword_diff) - 1; 1257 1258 /* 1259 * Skip writing unused bits in the critical qword since we'll be 1260 * writing it in the next step anyways. This can save a sync 1261 * when the only change is in that qword. 1262 */ 1263 unused_update[critical_qword_index] = 1264 entry[critical_qword_index]; 1265 entry_set(writer, entry, unused_update, 0, NUM_ENTRY_QWORDS); 1266 entry_set(writer, entry, target, critical_qword_index, 1); 1267 entry_set(writer, entry, target, 0, NUM_ENTRY_QWORDS); 1268 } else if (used_qword_diff) { 1269 /* 1270 * At least two qwords need their inuse bits to be changed. This 1271 * requires a breaking update, zero the V bit, write all qwords 1272 * but 0, then set qword 0 1273 */ 1274 unused_update[0] = 0; 1275 entry_set(writer, entry, unused_update, 0, 1); 1276 entry_set(writer, entry, target, 1, NUM_ENTRY_QWORDS - 1); 1277 entry_set(writer, entry, target, 0, 1); 1278 } else { 1279 /* 1280 * No inuse bit changed, though safe bits may have changed. 1281 */ 1282 entry_set(writer, entry, target, 0, NUM_ENTRY_QWORDS); 1283 } 1284 } 1285 EXPORT_SYMBOL_IF_KUNIT(arm_smmu_write_entry); 1286 1287 static void arm_smmu_sync_cd(struct arm_smmu_master *master, 1288 int ssid, bool leaf) 1289 { 1290 size_t i; 1291 struct arm_smmu_cmdq_batch cmds; 1292 struct arm_smmu_device *smmu = master->smmu; 1293 struct arm_smmu_cmdq_ent cmd = { 1294 .opcode = CMDQ_OP_CFGI_CD, 1295 .cfgi = { 1296 .ssid = ssid, 1297 .leaf = leaf, 1298 }, 1299 }; 1300 1301 arm_smmu_cmdq_batch_init(smmu, &cmds, &cmd); 1302 for (i = 0; i < master->num_streams; i++) { 1303 cmd.cfgi.sid = master->streams[i].id; 1304 arm_smmu_cmdq_batch_add(smmu, &cmds, &cmd); 1305 } 1306 1307 arm_smmu_cmdq_batch_submit(smmu, &cmds); 1308 } 1309 1310 static void arm_smmu_write_cd_l1_desc(struct arm_smmu_cdtab_l1 *dst, 1311 dma_addr_t l2ptr_dma) 1312 { 1313 u64 val = (l2ptr_dma & CTXDESC_L1_DESC_L2PTR_MASK) | CTXDESC_L1_DESC_V; 1314 1315 /* The HW has 64 bit atomicity with stores to the L2 CD table */ 1316 WRITE_ONCE(dst->l2ptr, cpu_to_le64(val)); 1317 } 1318 1319 static dma_addr_t arm_smmu_cd_l1_get_desc(const struct arm_smmu_cdtab_l1 *src) 1320 { 1321 return le64_to_cpu(src->l2ptr) & CTXDESC_L1_DESC_L2PTR_MASK; 1322 } 1323 1324 struct arm_smmu_cd *arm_smmu_get_cd_ptr(struct arm_smmu_master *master, 1325 u32 ssid) 1326 { 1327 struct arm_smmu_cdtab_l2 *l2; 1328 struct arm_smmu_ctx_desc_cfg *cd_table = &master->cd_table; 1329 1330 if (!arm_smmu_cdtab_allocated(cd_table)) 1331 return NULL; 1332 1333 if (cd_table->s1fmt == STRTAB_STE_0_S1FMT_LINEAR) 1334 return &cd_table->linear.table[ssid]; 1335 1336 l2 = cd_table->l2.l2ptrs[arm_smmu_cdtab_l1_idx(ssid)]; 1337 if (!l2) 1338 return NULL; 1339 return &l2->cds[arm_smmu_cdtab_l2_idx(ssid)]; 1340 } 1341 1342 static struct arm_smmu_cd *arm_smmu_alloc_cd_ptr(struct arm_smmu_master *master, 1343 u32 ssid) 1344 { 1345 struct arm_smmu_ctx_desc_cfg *cd_table = &master->cd_table; 1346 struct arm_smmu_device *smmu = master->smmu; 1347 1348 might_sleep(); 1349 iommu_group_mutex_assert(master->dev); 1350 1351 if (!arm_smmu_cdtab_allocated(cd_table)) { 1352 if (arm_smmu_alloc_cd_tables(master)) 1353 return NULL; 1354 } 1355 1356 if (cd_table->s1fmt == STRTAB_STE_0_S1FMT_64K_L2) { 1357 unsigned int idx = arm_smmu_cdtab_l1_idx(ssid); 1358 struct arm_smmu_cdtab_l2 **l2ptr = &cd_table->l2.l2ptrs[idx]; 1359 1360 if (!*l2ptr) { 1361 dma_addr_t l2ptr_dma; 1362 1363 *l2ptr = dma_alloc_coherent(smmu->dev, sizeof(**l2ptr), 1364 &l2ptr_dma, GFP_KERNEL); 1365 if (!*l2ptr) 1366 return NULL; 1367 1368 arm_smmu_write_cd_l1_desc(&cd_table->l2.l1tab[idx], 1369 l2ptr_dma); 1370 /* An invalid L1CD can be cached */ 1371 arm_smmu_sync_cd(master, ssid, false); 1372 } 1373 } 1374 return arm_smmu_get_cd_ptr(master, ssid); 1375 } 1376 1377 struct arm_smmu_cd_writer { 1378 struct arm_smmu_entry_writer writer; 1379 unsigned int ssid; 1380 }; 1381 1382 VISIBLE_IF_KUNIT 1383 void arm_smmu_get_cd_used(const __le64 *ent, __le64 *used_bits) 1384 { 1385 used_bits[0] = cpu_to_le64(CTXDESC_CD_0_V); 1386 if (!(ent[0] & cpu_to_le64(CTXDESC_CD_0_V))) 1387 return; 1388 memset(used_bits, 0xFF, sizeof(struct arm_smmu_cd)); 1389 1390 /* 1391 * If EPD0 is set by the make function it means 1392 * T0SZ/TG0/IR0/OR0/SH0/TTB0 are IGNORED 1393 */ 1394 if (ent[0] & cpu_to_le64(CTXDESC_CD_0_TCR_EPD0)) { 1395 used_bits[0] &= ~cpu_to_le64( 1396 CTXDESC_CD_0_TCR_T0SZ | CTXDESC_CD_0_TCR_TG0 | 1397 CTXDESC_CD_0_TCR_IRGN0 | CTXDESC_CD_0_TCR_ORGN0 | 1398 CTXDESC_CD_0_TCR_SH0); 1399 used_bits[1] &= ~cpu_to_le64(CTXDESC_CD_1_TTB0_MASK); 1400 } 1401 } 1402 EXPORT_SYMBOL_IF_KUNIT(arm_smmu_get_cd_used); 1403 1404 static void arm_smmu_cd_writer_sync_entry(struct arm_smmu_entry_writer *writer) 1405 { 1406 struct arm_smmu_cd_writer *cd_writer = 1407 container_of(writer, struct arm_smmu_cd_writer, writer); 1408 1409 arm_smmu_sync_cd(writer->master, cd_writer->ssid, true); 1410 } 1411 1412 static const struct arm_smmu_entry_writer_ops arm_smmu_cd_writer_ops = { 1413 .sync = arm_smmu_cd_writer_sync_entry, 1414 .get_used = arm_smmu_get_cd_used, 1415 }; 1416 1417 void arm_smmu_write_cd_entry(struct arm_smmu_master *master, int ssid, 1418 struct arm_smmu_cd *cdptr, 1419 const struct arm_smmu_cd *target) 1420 { 1421 bool target_valid = target->data[0] & cpu_to_le64(CTXDESC_CD_0_V); 1422 bool cur_valid = cdptr->data[0] & cpu_to_le64(CTXDESC_CD_0_V); 1423 struct arm_smmu_cd_writer cd_writer = { 1424 .writer = { 1425 .ops = &arm_smmu_cd_writer_ops, 1426 .master = master, 1427 }, 1428 .ssid = ssid, 1429 }; 1430 1431 if (ssid != IOMMU_NO_PASID && cur_valid != target_valid) { 1432 if (cur_valid) 1433 master->cd_table.used_ssids--; 1434 else 1435 master->cd_table.used_ssids++; 1436 } 1437 1438 arm_smmu_write_entry(&cd_writer.writer, cdptr->data, target->data); 1439 } 1440 1441 void arm_smmu_make_s1_cd(struct arm_smmu_cd *target, 1442 struct arm_smmu_master *master, 1443 struct arm_smmu_domain *smmu_domain) 1444 { 1445 struct arm_smmu_ctx_desc *cd = &smmu_domain->cd; 1446 const struct io_pgtable_cfg *pgtbl_cfg = 1447 &io_pgtable_ops_to_pgtable(smmu_domain->pgtbl_ops)->cfg; 1448 typeof(&pgtbl_cfg->arm_lpae_s1_cfg.tcr) tcr = 1449 &pgtbl_cfg->arm_lpae_s1_cfg.tcr; 1450 1451 memset(target, 0, sizeof(*target)); 1452 1453 target->data[0] = cpu_to_le64( 1454 FIELD_PREP(CTXDESC_CD_0_TCR_T0SZ, tcr->tsz) | 1455 FIELD_PREP(CTXDESC_CD_0_TCR_TG0, tcr->tg) | 1456 FIELD_PREP(CTXDESC_CD_0_TCR_IRGN0, tcr->irgn) | 1457 FIELD_PREP(CTXDESC_CD_0_TCR_ORGN0, tcr->orgn) | 1458 FIELD_PREP(CTXDESC_CD_0_TCR_SH0, tcr->sh) | 1459 #ifdef __BIG_ENDIAN 1460 CTXDESC_CD_0_ENDI | 1461 #endif 1462 CTXDESC_CD_0_TCR_EPD1 | 1463 CTXDESC_CD_0_V | 1464 FIELD_PREP(CTXDESC_CD_0_TCR_IPS, tcr->ips) | 1465 CTXDESC_CD_0_AA64 | 1466 (master->stall_enabled ? CTXDESC_CD_0_S : 0) | 1467 CTXDESC_CD_0_R | 1468 CTXDESC_CD_0_A | 1469 CTXDESC_CD_0_ASET | 1470 FIELD_PREP(CTXDESC_CD_0_ASID, cd->asid) 1471 ); 1472 1473 /* To enable dirty flag update, set both Access flag and dirty state update */ 1474 if (pgtbl_cfg->quirks & IO_PGTABLE_QUIRK_ARM_HD) 1475 target->data[0] |= cpu_to_le64(CTXDESC_CD_0_TCR_HA | 1476 CTXDESC_CD_0_TCR_HD); 1477 1478 target->data[1] = cpu_to_le64(pgtbl_cfg->arm_lpae_s1_cfg.ttbr & 1479 CTXDESC_CD_1_TTB0_MASK); 1480 target->data[3] = cpu_to_le64(pgtbl_cfg->arm_lpae_s1_cfg.mair); 1481 } 1482 EXPORT_SYMBOL_IF_KUNIT(arm_smmu_make_s1_cd); 1483 1484 void arm_smmu_clear_cd(struct arm_smmu_master *master, ioasid_t ssid) 1485 { 1486 struct arm_smmu_cd target = {}; 1487 struct arm_smmu_cd *cdptr; 1488 1489 if (!arm_smmu_cdtab_allocated(&master->cd_table)) 1490 return; 1491 cdptr = arm_smmu_get_cd_ptr(master, ssid); 1492 if (WARN_ON(!cdptr)) 1493 return; 1494 arm_smmu_write_cd_entry(master, ssid, cdptr, &target); 1495 } 1496 1497 static int arm_smmu_alloc_cd_tables(struct arm_smmu_master *master) 1498 { 1499 int ret; 1500 size_t l1size; 1501 size_t max_contexts; 1502 struct arm_smmu_device *smmu = master->smmu; 1503 struct arm_smmu_ctx_desc_cfg *cd_table = &master->cd_table; 1504 1505 cd_table->s1cdmax = master->ssid_bits; 1506 max_contexts = 1 << cd_table->s1cdmax; 1507 1508 if (!(smmu->features & ARM_SMMU_FEAT_2_LVL_CDTAB) || 1509 max_contexts <= CTXDESC_L2_ENTRIES) { 1510 cd_table->s1fmt = STRTAB_STE_0_S1FMT_LINEAR; 1511 cd_table->linear.num_ents = max_contexts; 1512 1513 l1size = max_contexts * sizeof(struct arm_smmu_cd); 1514 cd_table->linear.table = dma_alloc_coherent(smmu->dev, l1size, 1515 &cd_table->cdtab_dma, 1516 GFP_KERNEL); 1517 if (!cd_table->linear.table) 1518 return -ENOMEM; 1519 } else { 1520 cd_table->s1fmt = STRTAB_STE_0_S1FMT_64K_L2; 1521 cd_table->l2.num_l1_ents = 1522 DIV_ROUND_UP(max_contexts, CTXDESC_L2_ENTRIES); 1523 1524 cd_table->l2.l2ptrs = kcalloc(cd_table->l2.num_l1_ents, 1525 sizeof(*cd_table->l2.l2ptrs), 1526 GFP_KERNEL); 1527 if (!cd_table->l2.l2ptrs) 1528 return -ENOMEM; 1529 1530 l1size = cd_table->l2.num_l1_ents * sizeof(struct arm_smmu_cdtab_l1); 1531 cd_table->l2.l1tab = dma_alloc_coherent(smmu->dev, l1size, 1532 &cd_table->cdtab_dma, 1533 GFP_KERNEL); 1534 if (!cd_table->l2.l1tab) { 1535 ret = -ENOMEM; 1536 goto err_free_l2ptrs; 1537 } 1538 } 1539 return 0; 1540 1541 err_free_l2ptrs: 1542 kfree(cd_table->l2.l2ptrs); 1543 cd_table->l2.l2ptrs = NULL; 1544 return ret; 1545 } 1546 1547 static void arm_smmu_free_cd_tables(struct arm_smmu_master *master) 1548 { 1549 int i; 1550 struct arm_smmu_device *smmu = master->smmu; 1551 struct arm_smmu_ctx_desc_cfg *cd_table = &master->cd_table; 1552 1553 if (cd_table->s1fmt != STRTAB_STE_0_S1FMT_LINEAR) { 1554 for (i = 0; i < cd_table->l2.num_l1_ents; i++) { 1555 if (!cd_table->l2.l2ptrs[i]) 1556 continue; 1557 1558 dma_free_coherent(smmu->dev, 1559 sizeof(*cd_table->l2.l2ptrs[i]), 1560 cd_table->l2.l2ptrs[i], 1561 arm_smmu_cd_l1_get_desc(&cd_table->l2.l1tab[i])); 1562 } 1563 kfree(cd_table->l2.l2ptrs); 1564 1565 dma_free_coherent(smmu->dev, 1566 cd_table->l2.num_l1_ents * 1567 sizeof(struct arm_smmu_cdtab_l1), 1568 cd_table->l2.l1tab, cd_table->cdtab_dma); 1569 } else { 1570 dma_free_coherent(smmu->dev, 1571 cd_table->linear.num_ents * 1572 sizeof(struct arm_smmu_cd), 1573 cd_table->linear.table, cd_table->cdtab_dma); 1574 } 1575 } 1576 1577 /* Stream table manipulation functions */ 1578 static void arm_smmu_write_strtab_l1_desc(struct arm_smmu_strtab_l1 *dst, 1579 dma_addr_t l2ptr_dma) 1580 { 1581 u64 val = 0; 1582 1583 val |= FIELD_PREP(STRTAB_L1_DESC_SPAN, STRTAB_SPLIT + 1); 1584 val |= l2ptr_dma & STRTAB_L1_DESC_L2PTR_MASK; 1585 1586 /* The HW has 64 bit atomicity with stores to the L2 STE table */ 1587 WRITE_ONCE(dst->l2ptr, cpu_to_le64(val)); 1588 } 1589 1590 struct arm_smmu_ste_writer { 1591 struct arm_smmu_entry_writer writer; 1592 u32 sid; 1593 }; 1594 1595 static void arm_smmu_ste_writer_sync_entry(struct arm_smmu_entry_writer *writer) 1596 { 1597 struct arm_smmu_ste_writer *ste_writer = 1598 container_of(writer, struct arm_smmu_ste_writer, writer); 1599 struct arm_smmu_cmdq_ent cmd = { 1600 .opcode = CMDQ_OP_CFGI_STE, 1601 .cfgi = { 1602 .sid = ste_writer->sid, 1603 .leaf = true, 1604 }, 1605 }; 1606 1607 arm_smmu_cmdq_issue_cmd_with_sync(writer->master->smmu, &cmd); 1608 } 1609 1610 static const struct arm_smmu_entry_writer_ops arm_smmu_ste_writer_ops = { 1611 .sync = arm_smmu_ste_writer_sync_entry, 1612 .get_used = arm_smmu_get_ste_used, 1613 .get_update_safe = arm_smmu_get_ste_update_safe, 1614 }; 1615 1616 static void arm_smmu_write_ste(struct arm_smmu_master *master, u32 sid, 1617 struct arm_smmu_ste *ste, 1618 const struct arm_smmu_ste *target) 1619 { 1620 struct arm_smmu_device *smmu = master->smmu; 1621 struct arm_smmu_ste_writer ste_writer = { 1622 .writer = { 1623 .ops = &arm_smmu_ste_writer_ops, 1624 .master = master, 1625 }, 1626 .sid = sid, 1627 }; 1628 1629 arm_smmu_write_entry(&ste_writer.writer, ste->data, target->data); 1630 1631 /* It's likely that we'll want to use the new STE soon */ 1632 if (!(smmu->options & ARM_SMMU_OPT_SKIP_PREFETCH)) { 1633 struct arm_smmu_cmdq_ent 1634 prefetch_cmd = { .opcode = CMDQ_OP_PREFETCH_CFG, 1635 .prefetch = { 1636 .sid = sid, 1637 } }; 1638 1639 arm_smmu_cmdq_issue_cmd(smmu, &prefetch_cmd); 1640 } 1641 } 1642 1643 void arm_smmu_make_abort_ste(struct arm_smmu_ste *target) 1644 { 1645 memset(target, 0, sizeof(*target)); 1646 target->data[0] = cpu_to_le64( 1647 STRTAB_STE_0_V | 1648 FIELD_PREP(STRTAB_STE_0_CFG, STRTAB_STE_0_CFG_ABORT)); 1649 } 1650 EXPORT_SYMBOL_IF_KUNIT(arm_smmu_make_abort_ste); 1651 1652 VISIBLE_IF_KUNIT 1653 void arm_smmu_make_bypass_ste(struct arm_smmu_device *smmu, 1654 struct arm_smmu_ste *target) 1655 { 1656 memset(target, 0, sizeof(*target)); 1657 target->data[0] = cpu_to_le64( 1658 STRTAB_STE_0_V | 1659 FIELD_PREP(STRTAB_STE_0_CFG, STRTAB_STE_0_CFG_BYPASS)); 1660 1661 if (smmu->features & ARM_SMMU_FEAT_ATTR_TYPES_OVR) 1662 target->data[1] = cpu_to_le64(FIELD_PREP(STRTAB_STE_1_SHCFG, 1663 STRTAB_STE_1_SHCFG_INCOMING)); 1664 } 1665 EXPORT_SYMBOL_IF_KUNIT(arm_smmu_make_bypass_ste); 1666 1667 VISIBLE_IF_KUNIT 1668 void arm_smmu_make_cdtable_ste(struct arm_smmu_ste *target, 1669 struct arm_smmu_master *master, bool ats_enabled, 1670 unsigned int s1dss) 1671 { 1672 struct arm_smmu_ctx_desc_cfg *cd_table = &master->cd_table; 1673 struct arm_smmu_device *smmu = master->smmu; 1674 1675 memset(target, 0, sizeof(*target)); 1676 target->data[0] = cpu_to_le64( 1677 STRTAB_STE_0_V | 1678 FIELD_PREP(STRTAB_STE_0_CFG, STRTAB_STE_0_CFG_S1_TRANS) | 1679 FIELD_PREP(STRTAB_STE_0_S1FMT, cd_table->s1fmt) | 1680 (cd_table->cdtab_dma & STRTAB_STE_0_S1CTXPTR_MASK) | 1681 FIELD_PREP(STRTAB_STE_0_S1CDMAX, cd_table->s1cdmax)); 1682 1683 target->data[1] = cpu_to_le64( 1684 FIELD_PREP(STRTAB_STE_1_S1DSS, s1dss) | 1685 FIELD_PREP(STRTAB_STE_1_S1CIR, STRTAB_STE_1_S1C_CACHE_WBRA) | 1686 FIELD_PREP(STRTAB_STE_1_S1COR, STRTAB_STE_1_S1C_CACHE_WBRA) | 1687 FIELD_PREP(STRTAB_STE_1_S1CSH, ARM_SMMU_SH_ISH) | 1688 ((smmu->features & ARM_SMMU_FEAT_STALLS && 1689 !master->stall_enabled) ? 1690 STRTAB_STE_1_S1STALLD : 1691 0) | 1692 FIELD_PREP(STRTAB_STE_1_EATS, 1693 ats_enabled ? STRTAB_STE_1_EATS_TRANS : 0)); 1694 1695 if ((smmu->features & ARM_SMMU_FEAT_ATTR_TYPES_OVR) && 1696 s1dss == STRTAB_STE_1_S1DSS_BYPASS) 1697 target->data[1] |= cpu_to_le64(FIELD_PREP( 1698 STRTAB_STE_1_SHCFG, STRTAB_STE_1_SHCFG_INCOMING)); 1699 1700 if (smmu->features & ARM_SMMU_FEAT_E2H) { 1701 /* 1702 * To support BTM the streamworld needs to match the 1703 * configuration of the CPU so that the ASID broadcasts are 1704 * properly matched. This means either S/NS-EL2-E2H (hypervisor) 1705 * or NS-EL1 (guest). Since an SVA domain can be installed in a 1706 * PASID this should always use a BTM compatible configuration 1707 * if the HW supports it. 1708 */ 1709 target->data[1] |= cpu_to_le64( 1710 FIELD_PREP(STRTAB_STE_1_STRW, STRTAB_STE_1_STRW_EL2)); 1711 } else { 1712 target->data[1] |= cpu_to_le64( 1713 FIELD_PREP(STRTAB_STE_1_STRW, STRTAB_STE_1_STRW_NSEL1)); 1714 1715 /* 1716 * VMID 0 is reserved for stage-2 bypass EL1 STEs, see 1717 * arm_smmu_domain_alloc_id() 1718 */ 1719 target->data[2] = 1720 cpu_to_le64(FIELD_PREP(STRTAB_STE_2_S2VMID, 0)); 1721 } 1722 } 1723 EXPORT_SYMBOL_IF_KUNIT(arm_smmu_make_cdtable_ste); 1724 1725 void arm_smmu_make_s2_domain_ste(struct arm_smmu_ste *target, 1726 struct arm_smmu_master *master, 1727 struct arm_smmu_domain *smmu_domain, 1728 bool ats_enabled) 1729 { 1730 struct arm_smmu_s2_cfg *s2_cfg = &smmu_domain->s2_cfg; 1731 const struct io_pgtable_cfg *pgtbl_cfg = 1732 &io_pgtable_ops_to_pgtable(smmu_domain->pgtbl_ops)->cfg; 1733 typeof(&pgtbl_cfg->arm_lpae_s2_cfg.vtcr) vtcr = 1734 &pgtbl_cfg->arm_lpae_s2_cfg.vtcr; 1735 u64 vtcr_val; 1736 struct arm_smmu_device *smmu = master->smmu; 1737 1738 memset(target, 0, sizeof(*target)); 1739 target->data[0] = cpu_to_le64( 1740 STRTAB_STE_0_V | 1741 FIELD_PREP(STRTAB_STE_0_CFG, STRTAB_STE_0_CFG_S2_TRANS)); 1742 1743 target->data[1] = cpu_to_le64( 1744 FIELD_PREP(STRTAB_STE_1_EATS, 1745 ats_enabled ? STRTAB_STE_1_EATS_TRANS : 0)); 1746 1747 if (pgtbl_cfg->quirks & IO_PGTABLE_QUIRK_ARM_S2FWB) 1748 target->data[1] |= cpu_to_le64(STRTAB_STE_1_S2FWB); 1749 if (smmu->features & ARM_SMMU_FEAT_ATTR_TYPES_OVR) 1750 target->data[1] |= cpu_to_le64(FIELD_PREP(STRTAB_STE_1_SHCFG, 1751 STRTAB_STE_1_SHCFG_INCOMING)); 1752 1753 vtcr_val = FIELD_PREP(STRTAB_STE_2_VTCR_S2T0SZ, vtcr->tsz) | 1754 FIELD_PREP(STRTAB_STE_2_VTCR_S2SL0, vtcr->sl) | 1755 FIELD_PREP(STRTAB_STE_2_VTCR_S2IR0, vtcr->irgn) | 1756 FIELD_PREP(STRTAB_STE_2_VTCR_S2OR0, vtcr->orgn) | 1757 FIELD_PREP(STRTAB_STE_2_VTCR_S2SH0, vtcr->sh) | 1758 FIELD_PREP(STRTAB_STE_2_VTCR_S2TG, vtcr->tg) | 1759 FIELD_PREP(STRTAB_STE_2_VTCR_S2PS, vtcr->ps); 1760 target->data[2] = cpu_to_le64( 1761 FIELD_PREP(STRTAB_STE_2_S2VMID, s2_cfg->vmid) | 1762 FIELD_PREP(STRTAB_STE_2_VTCR, vtcr_val) | 1763 STRTAB_STE_2_S2AA64 | 1764 #ifdef __BIG_ENDIAN 1765 STRTAB_STE_2_S2ENDI | 1766 #endif 1767 STRTAB_STE_2_S2PTW | 1768 (master->stall_enabled ? STRTAB_STE_2_S2S : 0) | 1769 STRTAB_STE_2_S2R); 1770 1771 target->data[3] = cpu_to_le64(pgtbl_cfg->arm_lpae_s2_cfg.vttbr & 1772 STRTAB_STE_3_S2TTB_MASK); 1773 } 1774 EXPORT_SYMBOL_IF_KUNIT(arm_smmu_make_s2_domain_ste); 1775 1776 /* 1777 * This can safely directly manipulate the STE memory without a sync sequence 1778 * because the STE table has not been installed in the SMMU yet. 1779 */ 1780 static void arm_smmu_init_initial_stes(struct arm_smmu_ste *strtab, 1781 unsigned int nent) 1782 { 1783 unsigned int i; 1784 1785 for (i = 0; i < nent; ++i) { 1786 arm_smmu_make_abort_ste(strtab); 1787 strtab++; 1788 } 1789 } 1790 1791 static int arm_smmu_init_l2_strtab(struct arm_smmu_device *smmu, u32 sid) 1792 { 1793 dma_addr_t l2ptr_dma; 1794 struct arm_smmu_strtab_cfg *cfg = &smmu->strtab_cfg; 1795 struct arm_smmu_strtab_l2 **l2table; 1796 1797 l2table = &cfg->l2.l2ptrs[arm_smmu_strtab_l1_idx(sid)]; 1798 if (*l2table) 1799 return 0; 1800 1801 *l2table = dmam_alloc_coherent(smmu->dev, sizeof(**l2table), 1802 &l2ptr_dma, GFP_KERNEL); 1803 if (!*l2table) { 1804 dev_err(smmu->dev, 1805 "failed to allocate l2 stream table for SID %u\n", 1806 sid); 1807 return -ENOMEM; 1808 } 1809 1810 arm_smmu_init_initial_stes((*l2table)->stes, 1811 ARRAY_SIZE((*l2table)->stes)); 1812 arm_smmu_write_strtab_l1_desc(&cfg->l2.l1tab[arm_smmu_strtab_l1_idx(sid)], 1813 l2ptr_dma); 1814 return 0; 1815 } 1816 1817 static int arm_smmu_streams_cmp_key(const void *lhs, const struct rb_node *rhs) 1818 { 1819 struct arm_smmu_stream *stream_rhs = 1820 rb_entry(rhs, struct arm_smmu_stream, node); 1821 const u32 *sid_lhs = lhs; 1822 1823 if (*sid_lhs < stream_rhs->id) 1824 return -1; 1825 if (*sid_lhs > stream_rhs->id) 1826 return 1; 1827 return 0; 1828 } 1829 1830 static int arm_smmu_streams_cmp_node(struct rb_node *lhs, 1831 const struct rb_node *rhs) 1832 { 1833 return arm_smmu_streams_cmp_key( 1834 &rb_entry(lhs, struct arm_smmu_stream, node)->id, rhs); 1835 } 1836 1837 static struct arm_smmu_master * 1838 arm_smmu_find_master(struct arm_smmu_device *smmu, u32 sid) 1839 { 1840 struct rb_node *node; 1841 1842 lockdep_assert_held(&smmu->streams_mutex); 1843 1844 node = rb_find(&sid, &smmu->streams, arm_smmu_streams_cmp_key); 1845 if (!node) 1846 return NULL; 1847 return rb_entry(node, struct arm_smmu_stream, node)->master; 1848 } 1849 1850 /* IRQ and event handlers */ 1851 static void arm_smmu_decode_event(struct arm_smmu_device *smmu, u64 *raw, 1852 struct arm_smmu_event *event) 1853 { 1854 struct arm_smmu_master *master; 1855 1856 event->id = FIELD_GET(EVTQ_0_ID, raw[0]); 1857 event->sid = FIELD_GET(EVTQ_0_SID, raw[0]); 1858 event->ssv = FIELD_GET(EVTQ_0_SSV, raw[0]); 1859 event->ssid = event->ssv ? FIELD_GET(EVTQ_0_SSID, raw[0]) : IOMMU_NO_PASID; 1860 event->privileged = FIELD_GET(EVTQ_1_PnU, raw[1]); 1861 event->instruction = FIELD_GET(EVTQ_1_InD, raw[1]); 1862 event->s2 = FIELD_GET(EVTQ_1_S2, raw[1]); 1863 event->read = FIELD_GET(EVTQ_1_RnW, raw[1]); 1864 event->stag = FIELD_GET(EVTQ_1_STAG, raw[1]); 1865 event->stall = FIELD_GET(EVTQ_1_STALL, raw[1]); 1866 event->class = FIELD_GET(EVTQ_1_CLASS, raw[1]); 1867 event->iova = FIELD_GET(EVTQ_2_ADDR, raw[2]); 1868 event->ipa = raw[3] & EVTQ_3_IPA; 1869 event->fetch_addr = raw[3] & EVTQ_3_FETCH_ADDR; 1870 event->ttrnw = FIELD_GET(EVTQ_1_TT_READ, raw[1]); 1871 event->class_tt = false; 1872 event->dev = NULL; 1873 1874 if (event->id == EVT_ID_PERMISSION_FAULT) 1875 event->class_tt = (event->class == EVTQ_1_CLASS_TT); 1876 1877 mutex_lock(&smmu->streams_mutex); 1878 master = arm_smmu_find_master(smmu, event->sid); 1879 if (master) 1880 event->dev = get_device(master->dev); 1881 mutex_unlock(&smmu->streams_mutex); 1882 } 1883 1884 static int arm_smmu_handle_event(struct arm_smmu_device *smmu, u64 *evt, 1885 struct arm_smmu_event *event) 1886 { 1887 int ret = 0; 1888 u32 perm = 0; 1889 struct arm_smmu_master *master; 1890 struct iopf_fault fault_evt = { }; 1891 struct iommu_fault *flt = &fault_evt.fault; 1892 1893 switch (event->id) { 1894 case EVT_ID_BAD_STE_CONFIG: 1895 case EVT_ID_STREAM_DISABLED_FAULT: 1896 case EVT_ID_BAD_SUBSTREAMID_CONFIG: 1897 case EVT_ID_BAD_CD_CONFIG: 1898 case EVT_ID_TRANSLATION_FAULT: 1899 case EVT_ID_ADDR_SIZE_FAULT: 1900 case EVT_ID_ACCESS_FAULT: 1901 case EVT_ID_PERMISSION_FAULT: 1902 break; 1903 default: 1904 return -EOPNOTSUPP; 1905 } 1906 1907 if (event->stall) { 1908 if (event->read) 1909 perm |= IOMMU_FAULT_PERM_READ; 1910 else 1911 perm |= IOMMU_FAULT_PERM_WRITE; 1912 1913 if (event->instruction) 1914 perm |= IOMMU_FAULT_PERM_EXEC; 1915 1916 if (event->privileged) 1917 perm |= IOMMU_FAULT_PERM_PRIV; 1918 1919 flt->type = IOMMU_FAULT_PAGE_REQ; 1920 flt->prm = (struct iommu_fault_page_request){ 1921 .flags = IOMMU_FAULT_PAGE_REQUEST_LAST_PAGE, 1922 .grpid = event->stag, 1923 .perm = perm, 1924 .addr = event->iova, 1925 }; 1926 1927 if (event->ssv) { 1928 flt->prm.flags |= IOMMU_FAULT_PAGE_REQUEST_PASID_VALID; 1929 flt->prm.pasid = event->ssid; 1930 } 1931 } 1932 1933 mutex_lock(&smmu->streams_mutex); 1934 master = arm_smmu_find_master(smmu, event->sid); 1935 if (!master) { 1936 ret = -EINVAL; 1937 goto out_unlock; 1938 } 1939 1940 if (event->stall) 1941 ret = iommu_report_device_fault(master->dev, &fault_evt); 1942 else if (master->vmaster && !event->s2) 1943 ret = arm_vmaster_report_event(master->vmaster, evt); 1944 else 1945 ret = -EOPNOTSUPP; /* Unhandled events should be pinned */ 1946 out_unlock: 1947 mutex_unlock(&smmu->streams_mutex); 1948 return ret; 1949 } 1950 1951 static void arm_smmu_dump_raw_event(struct arm_smmu_device *smmu, u64 *raw, 1952 struct arm_smmu_event *event) 1953 { 1954 int i; 1955 1956 dev_err(smmu->dev, "event 0x%02x received:\n", event->id); 1957 1958 for (i = 0; i < EVTQ_ENT_DWORDS; ++i) 1959 dev_err(smmu->dev, "\t0x%016llx\n", raw[i]); 1960 } 1961 1962 #define ARM_SMMU_EVT_KNOWN(e) ((e)->id < ARRAY_SIZE(event_str) && event_str[(e)->id]) 1963 #define ARM_SMMU_LOG_EVT_STR(e) ARM_SMMU_EVT_KNOWN(e) ? event_str[(e)->id] : "UNKNOWN" 1964 #define ARM_SMMU_LOG_CLIENT(e) (e)->dev ? dev_name((e)->dev) : "(unassigned sid)" 1965 1966 static void arm_smmu_dump_event(struct arm_smmu_device *smmu, u64 *raw, 1967 struct arm_smmu_event *evt, 1968 struct ratelimit_state *rs) 1969 { 1970 if (!__ratelimit(rs)) 1971 return; 1972 1973 arm_smmu_dump_raw_event(smmu, raw, evt); 1974 1975 switch (evt->id) { 1976 case EVT_ID_TRANSLATION_FAULT: 1977 case EVT_ID_ADDR_SIZE_FAULT: 1978 case EVT_ID_ACCESS_FAULT: 1979 case EVT_ID_PERMISSION_FAULT: 1980 dev_err(smmu->dev, "event: %s client: %s sid: %#x ssid: %#x iova: %#llx ipa: %#llx", 1981 ARM_SMMU_LOG_EVT_STR(evt), ARM_SMMU_LOG_CLIENT(evt), 1982 evt->sid, evt->ssid, evt->iova, evt->ipa); 1983 1984 dev_err(smmu->dev, "%s %s %s %s \"%s\"%s%s stag: %#x", 1985 evt->privileged ? "priv" : "unpriv", 1986 evt->instruction ? "inst" : "data", 1987 str_read_write(evt->read), 1988 evt->s2 ? "s2" : "s1", event_class_str[evt->class], 1989 evt->class_tt ? (evt->ttrnw ? " ttd_read" : " ttd_write") : "", 1990 evt->stall ? " stall" : "", evt->stag); 1991 1992 break; 1993 1994 case EVT_ID_STE_FETCH_FAULT: 1995 case EVT_ID_CD_FETCH_FAULT: 1996 case EVT_ID_VMS_FETCH_FAULT: 1997 dev_err(smmu->dev, "event: %s client: %s sid: %#x ssid: %#x fetch_addr: %#llx", 1998 ARM_SMMU_LOG_EVT_STR(evt), ARM_SMMU_LOG_CLIENT(evt), 1999 evt->sid, evt->ssid, evt->fetch_addr); 2000 2001 break; 2002 2003 default: 2004 dev_err(smmu->dev, "event: %s client: %s sid: %#x ssid: %#x", 2005 ARM_SMMU_LOG_EVT_STR(evt), ARM_SMMU_LOG_CLIENT(evt), 2006 evt->sid, evt->ssid); 2007 } 2008 } 2009 2010 static irqreturn_t arm_smmu_evtq_thread(int irq, void *dev) 2011 { 2012 u64 evt[EVTQ_ENT_DWORDS]; 2013 struct arm_smmu_event event = {0}; 2014 struct arm_smmu_device *smmu = dev; 2015 struct arm_smmu_queue *q = &smmu->evtq.q; 2016 struct arm_smmu_ll_queue *llq = &q->llq; 2017 static DEFINE_RATELIMIT_STATE(rs, DEFAULT_RATELIMIT_INTERVAL, 2018 DEFAULT_RATELIMIT_BURST); 2019 2020 do { 2021 while (!queue_remove_raw(q, evt)) { 2022 arm_smmu_decode_event(smmu, evt, &event); 2023 if (arm_smmu_handle_event(smmu, evt, &event)) 2024 arm_smmu_dump_event(smmu, evt, &event, &rs); 2025 2026 put_device(event.dev); 2027 cond_resched(); 2028 } 2029 2030 /* 2031 * Not much we can do on overflow, so scream and pretend we're 2032 * trying harder. 2033 */ 2034 if (queue_sync_prod_in(q) == -EOVERFLOW) 2035 dev_err(smmu->dev, "EVTQ overflow detected -- events lost\n"); 2036 } while (!queue_empty(llq)); 2037 2038 /* Sync our overflow flag, as we believe we're up to speed */ 2039 queue_sync_cons_ovf(q); 2040 return IRQ_HANDLED; 2041 } 2042 2043 static void arm_smmu_handle_ppr(struct arm_smmu_device *smmu, u64 *evt) 2044 { 2045 u32 sid, ssid; 2046 u16 grpid; 2047 bool ssv, last; 2048 2049 sid = FIELD_GET(PRIQ_0_SID, evt[0]); 2050 ssv = FIELD_GET(PRIQ_0_SSID_V, evt[0]); 2051 ssid = ssv ? FIELD_GET(PRIQ_0_SSID, evt[0]) : IOMMU_NO_PASID; 2052 last = FIELD_GET(PRIQ_0_PRG_LAST, evt[0]); 2053 grpid = FIELD_GET(PRIQ_1_PRG_IDX, evt[1]); 2054 2055 dev_info(smmu->dev, "unexpected PRI request received:\n"); 2056 dev_info(smmu->dev, 2057 "\tsid 0x%08x.0x%05x: [%u%s] %sprivileged %s%s%s access at iova 0x%016llx\n", 2058 sid, ssid, grpid, last ? "L" : "", 2059 evt[0] & PRIQ_0_PERM_PRIV ? "" : "un", 2060 evt[0] & PRIQ_0_PERM_READ ? "R" : "", 2061 evt[0] & PRIQ_0_PERM_WRITE ? "W" : "", 2062 evt[0] & PRIQ_0_PERM_EXEC ? "X" : "", 2063 evt[1] & PRIQ_1_ADDR_MASK); 2064 2065 if (last) { 2066 struct arm_smmu_cmdq_ent cmd = { 2067 .opcode = CMDQ_OP_PRI_RESP, 2068 .substream_valid = ssv, 2069 .pri = { 2070 .sid = sid, 2071 .ssid = ssid, 2072 .grpid = grpid, 2073 .resp = PRI_RESP_DENY, 2074 }, 2075 }; 2076 2077 arm_smmu_cmdq_issue_cmd(smmu, &cmd); 2078 } 2079 } 2080 2081 static irqreturn_t arm_smmu_priq_thread(int irq, void *dev) 2082 { 2083 struct arm_smmu_device *smmu = dev; 2084 struct arm_smmu_queue *q = &smmu->priq.q; 2085 struct arm_smmu_ll_queue *llq = &q->llq; 2086 u64 evt[PRIQ_ENT_DWORDS]; 2087 2088 do { 2089 while (!queue_remove_raw(q, evt)) 2090 arm_smmu_handle_ppr(smmu, evt); 2091 2092 if (queue_sync_prod_in(q) == -EOVERFLOW) 2093 dev_err(smmu->dev, "PRIQ overflow detected -- requests lost\n"); 2094 } while (!queue_empty(llq)); 2095 2096 /* Sync our overflow flag, as we believe we're up to speed */ 2097 queue_sync_cons_ovf(q); 2098 return IRQ_HANDLED; 2099 } 2100 2101 static int arm_smmu_device_disable(struct arm_smmu_device *smmu); 2102 2103 static irqreturn_t arm_smmu_gerror_handler(int irq, void *dev) 2104 { 2105 u32 gerror, gerrorn, active; 2106 struct arm_smmu_device *smmu = dev; 2107 2108 gerror = readl_relaxed(smmu->base + ARM_SMMU_GERROR); 2109 gerrorn = readl_relaxed(smmu->base + ARM_SMMU_GERRORN); 2110 2111 active = gerror ^ gerrorn; 2112 if (!(active & GERROR_ERR_MASK)) 2113 return IRQ_NONE; /* No errors pending */ 2114 2115 dev_warn(smmu->dev, 2116 "unexpected global error reported (0x%08x), this could be serious\n", 2117 active); 2118 2119 if (active & GERROR_SFM_ERR) { 2120 dev_err(smmu->dev, "device has entered Service Failure Mode!\n"); 2121 arm_smmu_device_disable(smmu); 2122 } 2123 2124 if (active & GERROR_MSI_GERROR_ABT_ERR) 2125 dev_warn(smmu->dev, "GERROR MSI write aborted\n"); 2126 2127 if (active & GERROR_MSI_PRIQ_ABT_ERR) 2128 dev_warn(smmu->dev, "PRIQ MSI write aborted\n"); 2129 2130 if (active & GERROR_MSI_EVTQ_ABT_ERR) 2131 dev_warn(smmu->dev, "EVTQ MSI write aborted\n"); 2132 2133 if (active & GERROR_MSI_CMDQ_ABT_ERR) 2134 dev_warn(smmu->dev, "CMDQ MSI write aborted\n"); 2135 2136 if (active & GERROR_PRIQ_ABT_ERR) 2137 dev_err(smmu->dev, "PRIQ write aborted -- events may have been lost\n"); 2138 2139 if (active & GERROR_EVTQ_ABT_ERR) 2140 dev_err(smmu->dev, "EVTQ write aborted -- events may have been lost\n"); 2141 2142 if (active & GERROR_CMDQ_ERR) 2143 arm_smmu_cmdq_skip_err(smmu); 2144 2145 writel(gerror, smmu->base + ARM_SMMU_GERRORN); 2146 return IRQ_HANDLED; 2147 } 2148 2149 static irqreturn_t arm_smmu_combined_irq_thread(int irq, void *dev) 2150 { 2151 struct arm_smmu_device *smmu = dev; 2152 2153 arm_smmu_evtq_thread(irq, dev); 2154 if (smmu->features & ARM_SMMU_FEAT_PRI) 2155 arm_smmu_priq_thread(irq, dev); 2156 2157 return IRQ_HANDLED; 2158 } 2159 2160 static irqreturn_t arm_smmu_combined_irq_handler(int irq, void *dev) 2161 { 2162 arm_smmu_gerror_handler(irq, dev); 2163 return IRQ_WAKE_THREAD; 2164 } 2165 2166 static void 2167 arm_smmu_atc_inv_to_cmd(int ssid, unsigned long iova, size_t size, 2168 struct arm_smmu_cmdq_ent *cmd) 2169 { 2170 size_t log2_span; 2171 size_t span_mask; 2172 /* ATC invalidates are always on 4096-bytes pages */ 2173 size_t inval_grain_shift = 12; 2174 unsigned long page_start, page_end; 2175 2176 /* 2177 * ATS and PASID: 2178 * 2179 * If substream_valid is clear, the PCIe TLP is sent without a PASID 2180 * prefix. In that case all ATC entries within the address range are 2181 * invalidated, including those that were requested with a PASID! There 2182 * is no way to invalidate only entries without PASID. 2183 * 2184 * When using STRTAB_STE_1_S1DSS_SSID0 (reserving CD 0 for non-PASID 2185 * traffic), translation requests without PASID create ATC entries 2186 * without PASID, which must be invalidated with substream_valid clear. 2187 * This has the unpleasant side-effect of invalidating all PASID-tagged 2188 * ATC entries within the address range. 2189 */ 2190 *cmd = (struct arm_smmu_cmdq_ent) { 2191 .opcode = CMDQ_OP_ATC_INV, 2192 .substream_valid = (ssid != IOMMU_NO_PASID), 2193 .atc.ssid = ssid, 2194 }; 2195 2196 if (!size) { 2197 cmd->atc.size = ATC_INV_SIZE_ALL; 2198 return; 2199 } 2200 2201 page_start = iova >> inval_grain_shift; 2202 page_end = (iova + size - 1) >> inval_grain_shift; 2203 2204 /* 2205 * In an ATS Invalidate Request, the address must be aligned on the 2206 * range size, which must be a power of two number of page sizes. We 2207 * thus have to choose between grossly over-invalidating the region, or 2208 * splitting the invalidation into multiple commands. For simplicity 2209 * we'll go with the first solution, but should refine it in the future 2210 * if multiple commands are shown to be more efficient. 2211 * 2212 * Find the smallest power of two that covers the range. The most 2213 * significant differing bit between the start and end addresses, 2214 * fls(start ^ end), indicates the required span. For example: 2215 * 2216 * We want to invalidate pages [8; 11]. This is already the ideal range: 2217 * x = 0b1000 ^ 0b1011 = 0b11 2218 * span = 1 << fls(x) = 4 2219 * 2220 * To invalidate pages [7; 10], we need to invalidate [0; 15]: 2221 * x = 0b0111 ^ 0b1010 = 0b1101 2222 * span = 1 << fls(x) = 16 2223 */ 2224 log2_span = fls_long(page_start ^ page_end); 2225 span_mask = (1ULL << log2_span) - 1; 2226 2227 page_start &= ~span_mask; 2228 2229 cmd->atc.addr = page_start << inval_grain_shift; 2230 cmd->atc.size = log2_span; 2231 } 2232 2233 static int arm_smmu_atc_inv_master(struct arm_smmu_master *master, 2234 ioasid_t ssid) 2235 { 2236 int i; 2237 struct arm_smmu_cmdq_ent cmd; 2238 struct arm_smmu_cmdq_batch cmds; 2239 2240 arm_smmu_atc_inv_to_cmd(ssid, 0, 0, &cmd); 2241 2242 arm_smmu_cmdq_batch_init(master->smmu, &cmds, &cmd); 2243 for (i = 0; i < master->num_streams; i++) { 2244 cmd.atc.sid = master->streams[i].id; 2245 arm_smmu_cmdq_batch_add(master->smmu, &cmds, &cmd); 2246 } 2247 2248 return arm_smmu_cmdq_batch_submit(master->smmu, &cmds); 2249 } 2250 2251 int arm_smmu_atc_inv_domain(struct arm_smmu_domain *smmu_domain, 2252 unsigned long iova, size_t size) 2253 { 2254 struct arm_smmu_master_domain *master_domain; 2255 int i; 2256 unsigned long flags; 2257 struct arm_smmu_cmdq_ent cmd = { 2258 .opcode = CMDQ_OP_ATC_INV, 2259 }; 2260 struct arm_smmu_cmdq_batch cmds; 2261 2262 if (!(smmu_domain->smmu->features & ARM_SMMU_FEAT_ATS)) 2263 return 0; 2264 2265 /* 2266 * Ensure that we've completed prior invalidation of the main TLBs 2267 * before we read 'nr_ats_masters' in case of a concurrent call to 2268 * arm_smmu_enable_ats(): 2269 * 2270 * // unmap() // arm_smmu_enable_ats() 2271 * TLBI+SYNC atomic_inc(&nr_ats_masters); 2272 * smp_mb(); [...] 2273 * atomic_read(&nr_ats_masters); pci_enable_ats() // writel() 2274 * 2275 * Ensures that we always see the incremented 'nr_ats_masters' count if 2276 * ATS was enabled at the PCI device before completion of the TLBI. 2277 */ 2278 smp_mb(); 2279 if (!atomic_read(&smmu_domain->nr_ats_masters)) 2280 return 0; 2281 2282 arm_smmu_cmdq_batch_init(smmu_domain->smmu, &cmds, &cmd); 2283 2284 spin_lock_irqsave(&smmu_domain->devices_lock, flags); 2285 list_for_each_entry(master_domain, &smmu_domain->devices, 2286 devices_elm) { 2287 struct arm_smmu_master *master = master_domain->master; 2288 2289 if (!master->ats_enabled) 2290 continue; 2291 2292 if (master_domain->nested_ats_flush) { 2293 /* 2294 * If a S2 used as a nesting parent is changed we have 2295 * no option but to completely flush the ATC. 2296 */ 2297 arm_smmu_atc_inv_to_cmd(IOMMU_NO_PASID, 0, 0, &cmd); 2298 } else { 2299 arm_smmu_atc_inv_to_cmd(master_domain->ssid, iova, size, 2300 &cmd); 2301 } 2302 2303 for (i = 0; i < master->num_streams; i++) { 2304 cmd.atc.sid = master->streams[i].id; 2305 arm_smmu_cmdq_batch_add(smmu_domain->smmu, &cmds, &cmd); 2306 } 2307 } 2308 spin_unlock_irqrestore(&smmu_domain->devices_lock, flags); 2309 2310 return arm_smmu_cmdq_batch_submit(smmu_domain->smmu, &cmds); 2311 } 2312 2313 /* IO_PGTABLE API */ 2314 static void arm_smmu_tlb_inv_context(void *cookie) 2315 { 2316 struct arm_smmu_domain *smmu_domain = cookie; 2317 struct arm_smmu_device *smmu = smmu_domain->smmu; 2318 struct arm_smmu_cmdq_ent cmd; 2319 2320 /* 2321 * NOTE: when io-pgtable is in non-strict mode, we may get here with 2322 * PTEs previously cleared by unmaps on the current CPU not yet visible 2323 * to the SMMU. We are relying on the dma_wmb() implicit during cmd 2324 * insertion to guarantee those are observed before the TLBI. Do be 2325 * careful, 007. 2326 */ 2327 if (smmu_domain->stage == ARM_SMMU_DOMAIN_S1) { 2328 arm_smmu_tlb_inv_asid(smmu, smmu_domain->cd.asid); 2329 } else { 2330 cmd.opcode = CMDQ_OP_TLBI_S12_VMALL; 2331 cmd.tlbi.vmid = smmu_domain->s2_cfg.vmid; 2332 arm_smmu_cmdq_issue_cmd_with_sync(smmu, &cmd); 2333 } 2334 arm_smmu_atc_inv_domain(smmu_domain, 0, 0); 2335 } 2336 2337 static void __arm_smmu_tlb_inv_range(struct arm_smmu_cmdq_ent *cmd, 2338 unsigned long iova, size_t size, 2339 size_t granule, 2340 struct arm_smmu_domain *smmu_domain) 2341 { 2342 struct arm_smmu_device *smmu = smmu_domain->smmu; 2343 unsigned long end = iova + size, num_pages = 0, tg = 0; 2344 size_t inv_range = granule; 2345 struct arm_smmu_cmdq_batch cmds; 2346 2347 if (!size) 2348 return; 2349 2350 if (smmu->features & ARM_SMMU_FEAT_RANGE_INV) { 2351 /* Get the leaf page size */ 2352 tg = __ffs(smmu_domain->domain.pgsize_bitmap); 2353 2354 num_pages = size >> tg; 2355 2356 /* Convert page size of 12,14,16 (log2) to 1,2,3 */ 2357 cmd->tlbi.tg = (tg - 10) / 2; 2358 2359 /* 2360 * Determine what level the granule is at. For non-leaf, both 2361 * io-pgtable and SVA pass a nominal last-level granule because 2362 * they don't know what level(s) actually apply, so ignore that 2363 * and leave TTL=0. However for various errata reasons we still 2364 * want to use a range command, so avoid the SVA corner case 2365 * where both scale and num could be 0 as well. 2366 */ 2367 if (cmd->tlbi.leaf) 2368 cmd->tlbi.ttl = 4 - ((ilog2(granule) - 3) / (tg - 3)); 2369 else if ((num_pages & CMDQ_TLBI_RANGE_NUM_MAX) == 1) 2370 num_pages++; 2371 } 2372 2373 arm_smmu_cmdq_batch_init(smmu, &cmds, cmd); 2374 2375 while (iova < end) { 2376 if (smmu->features & ARM_SMMU_FEAT_RANGE_INV) { 2377 /* 2378 * On each iteration of the loop, the range is 5 bits 2379 * worth of the aligned size remaining. 2380 * The range in pages is: 2381 * 2382 * range = (num_pages & (0x1f << __ffs(num_pages))) 2383 */ 2384 unsigned long scale, num; 2385 2386 /* Determine the power of 2 multiple number of pages */ 2387 scale = __ffs(num_pages); 2388 cmd->tlbi.scale = scale; 2389 2390 /* Determine how many chunks of 2^scale size we have */ 2391 num = (num_pages >> scale) & CMDQ_TLBI_RANGE_NUM_MAX; 2392 cmd->tlbi.num = num - 1; 2393 2394 /* range is num * 2^scale * pgsize */ 2395 inv_range = num << (scale + tg); 2396 2397 /* Clear out the lower order bits for the next iteration */ 2398 num_pages -= num << scale; 2399 } 2400 2401 cmd->tlbi.addr = iova; 2402 arm_smmu_cmdq_batch_add(smmu, &cmds, cmd); 2403 iova += inv_range; 2404 } 2405 arm_smmu_cmdq_batch_submit(smmu, &cmds); 2406 } 2407 2408 static void arm_smmu_tlb_inv_range_domain(unsigned long iova, size_t size, 2409 size_t granule, bool leaf, 2410 struct arm_smmu_domain *smmu_domain) 2411 { 2412 struct arm_smmu_cmdq_ent cmd = { 2413 .tlbi = { 2414 .leaf = leaf, 2415 }, 2416 }; 2417 2418 if (smmu_domain->stage == ARM_SMMU_DOMAIN_S1) { 2419 cmd.opcode = smmu_domain->smmu->features & ARM_SMMU_FEAT_E2H ? 2420 CMDQ_OP_TLBI_EL2_VA : CMDQ_OP_TLBI_NH_VA; 2421 cmd.tlbi.asid = smmu_domain->cd.asid; 2422 } else { 2423 cmd.opcode = CMDQ_OP_TLBI_S2_IPA; 2424 cmd.tlbi.vmid = smmu_domain->s2_cfg.vmid; 2425 } 2426 __arm_smmu_tlb_inv_range(&cmd, iova, size, granule, smmu_domain); 2427 2428 if (smmu_domain->nest_parent) { 2429 /* 2430 * When the S2 domain changes all the nested S1 ASIDs have to be 2431 * flushed too. 2432 */ 2433 cmd.opcode = CMDQ_OP_TLBI_NH_ALL; 2434 arm_smmu_cmdq_issue_cmd_with_sync(smmu_domain->smmu, &cmd); 2435 } 2436 2437 /* 2438 * Unfortunately, this can't be leaf-only since we may have 2439 * zapped an entire table. 2440 */ 2441 arm_smmu_atc_inv_domain(smmu_domain, iova, size); 2442 } 2443 2444 void arm_smmu_tlb_inv_range_asid(unsigned long iova, size_t size, int asid, 2445 size_t granule, bool leaf, 2446 struct arm_smmu_domain *smmu_domain) 2447 { 2448 struct arm_smmu_cmdq_ent cmd = { 2449 .opcode = smmu_domain->smmu->features & ARM_SMMU_FEAT_E2H ? 2450 CMDQ_OP_TLBI_EL2_VA : CMDQ_OP_TLBI_NH_VA, 2451 .tlbi = { 2452 .asid = asid, 2453 .leaf = leaf, 2454 }, 2455 }; 2456 2457 __arm_smmu_tlb_inv_range(&cmd, iova, size, granule, smmu_domain); 2458 } 2459 2460 static void arm_smmu_tlb_inv_page_nosync(struct iommu_iotlb_gather *gather, 2461 unsigned long iova, size_t granule, 2462 void *cookie) 2463 { 2464 struct arm_smmu_domain *smmu_domain = cookie; 2465 struct iommu_domain *domain = &smmu_domain->domain; 2466 2467 iommu_iotlb_gather_add_page(domain, gather, iova, granule); 2468 } 2469 2470 static void arm_smmu_tlb_inv_walk(unsigned long iova, size_t size, 2471 size_t granule, void *cookie) 2472 { 2473 arm_smmu_tlb_inv_range_domain(iova, size, granule, false, cookie); 2474 } 2475 2476 static const struct iommu_flush_ops arm_smmu_flush_ops = { 2477 .tlb_flush_all = arm_smmu_tlb_inv_context, 2478 .tlb_flush_walk = arm_smmu_tlb_inv_walk, 2479 .tlb_add_page = arm_smmu_tlb_inv_page_nosync, 2480 }; 2481 2482 static bool arm_smmu_dbm_capable(struct arm_smmu_device *smmu) 2483 { 2484 u32 features = (ARM_SMMU_FEAT_HD | ARM_SMMU_FEAT_COHERENCY); 2485 2486 return (smmu->features & features) == features; 2487 } 2488 2489 /* IOMMU API */ 2490 static bool arm_smmu_capable(struct device *dev, enum iommu_cap cap) 2491 { 2492 struct arm_smmu_master *master = dev_iommu_priv_get(dev); 2493 2494 switch (cap) { 2495 case IOMMU_CAP_CACHE_COHERENCY: 2496 /* Assume that a coherent TCU implies coherent TBUs */ 2497 return master->smmu->features & ARM_SMMU_FEAT_COHERENCY; 2498 case IOMMU_CAP_ENFORCE_CACHE_COHERENCY: 2499 return arm_smmu_master_canwbs(master); 2500 case IOMMU_CAP_NOEXEC: 2501 case IOMMU_CAP_DEFERRED_FLUSH: 2502 return true; 2503 case IOMMU_CAP_DIRTY_TRACKING: 2504 return arm_smmu_dbm_capable(master->smmu); 2505 default: 2506 return false; 2507 } 2508 } 2509 2510 static bool arm_smmu_enforce_cache_coherency(struct iommu_domain *domain) 2511 { 2512 struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain); 2513 struct arm_smmu_master_domain *master_domain; 2514 unsigned long flags; 2515 bool ret = true; 2516 2517 spin_lock_irqsave(&smmu_domain->devices_lock, flags); 2518 list_for_each_entry(master_domain, &smmu_domain->devices, 2519 devices_elm) { 2520 if (!arm_smmu_master_canwbs(master_domain->master)) { 2521 ret = false; 2522 break; 2523 } 2524 } 2525 smmu_domain->enforce_cache_coherency = ret; 2526 spin_unlock_irqrestore(&smmu_domain->devices_lock, flags); 2527 return ret; 2528 } 2529 2530 struct arm_smmu_domain *arm_smmu_domain_alloc(void) 2531 { 2532 struct arm_smmu_domain *smmu_domain; 2533 2534 smmu_domain = kzalloc(sizeof(*smmu_domain), GFP_KERNEL); 2535 if (!smmu_domain) 2536 return ERR_PTR(-ENOMEM); 2537 2538 INIT_LIST_HEAD(&smmu_domain->devices); 2539 spin_lock_init(&smmu_domain->devices_lock); 2540 2541 return smmu_domain; 2542 } 2543 2544 static void arm_smmu_domain_free_paging(struct iommu_domain *domain) 2545 { 2546 struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain); 2547 struct arm_smmu_device *smmu = smmu_domain->smmu; 2548 2549 free_io_pgtable_ops(smmu_domain->pgtbl_ops); 2550 2551 /* Free the ASID or VMID */ 2552 if (smmu_domain->stage == ARM_SMMU_DOMAIN_S1) { 2553 /* Prevent SVA from touching the CD while we're freeing it */ 2554 mutex_lock(&arm_smmu_asid_lock); 2555 xa_erase(&arm_smmu_asid_xa, smmu_domain->cd.asid); 2556 mutex_unlock(&arm_smmu_asid_lock); 2557 } else { 2558 struct arm_smmu_s2_cfg *cfg = &smmu_domain->s2_cfg; 2559 if (cfg->vmid) 2560 ida_free(&smmu->vmid_map, cfg->vmid); 2561 } 2562 2563 kfree(smmu_domain); 2564 } 2565 2566 static int arm_smmu_domain_finalise_s1(struct arm_smmu_device *smmu, 2567 struct arm_smmu_domain *smmu_domain) 2568 { 2569 int ret; 2570 u32 asid = 0; 2571 struct arm_smmu_ctx_desc *cd = &smmu_domain->cd; 2572 2573 /* Prevent SVA from modifying the ASID until it is written to the CD */ 2574 mutex_lock(&arm_smmu_asid_lock); 2575 ret = xa_alloc(&arm_smmu_asid_xa, &asid, smmu_domain, 2576 XA_LIMIT(1, (1 << smmu->asid_bits) - 1), GFP_KERNEL); 2577 cd->asid = (u16)asid; 2578 mutex_unlock(&arm_smmu_asid_lock); 2579 return ret; 2580 } 2581 2582 static int arm_smmu_domain_finalise_s2(struct arm_smmu_device *smmu, 2583 struct arm_smmu_domain *smmu_domain) 2584 { 2585 int vmid; 2586 struct arm_smmu_s2_cfg *cfg = &smmu_domain->s2_cfg; 2587 2588 /* Reserve VMID 0 for stage-2 bypass STEs */ 2589 vmid = ida_alloc_range(&smmu->vmid_map, 1, (1 << smmu->vmid_bits) - 1, 2590 GFP_KERNEL); 2591 if (vmid < 0) 2592 return vmid; 2593 2594 cfg->vmid = (u16)vmid; 2595 return 0; 2596 } 2597 2598 static int arm_smmu_domain_finalise(struct arm_smmu_domain *smmu_domain, 2599 struct arm_smmu_device *smmu, u32 flags) 2600 { 2601 int ret; 2602 enum io_pgtable_fmt fmt; 2603 struct io_pgtable_cfg pgtbl_cfg; 2604 struct io_pgtable_ops *pgtbl_ops; 2605 int (*finalise_stage_fn)(struct arm_smmu_device *smmu, 2606 struct arm_smmu_domain *smmu_domain); 2607 bool enable_dirty = flags & IOMMU_HWPT_ALLOC_DIRTY_TRACKING; 2608 2609 pgtbl_cfg = (struct io_pgtable_cfg) { 2610 .pgsize_bitmap = smmu->pgsize_bitmap, 2611 .coherent_walk = smmu->features & ARM_SMMU_FEAT_COHERENCY, 2612 .tlb = &arm_smmu_flush_ops, 2613 .iommu_dev = smmu->dev, 2614 }; 2615 2616 switch (smmu_domain->stage) { 2617 case ARM_SMMU_DOMAIN_S1: { 2618 unsigned long ias = (smmu->features & 2619 ARM_SMMU_FEAT_VAX) ? 52 : 48; 2620 2621 pgtbl_cfg.ias = min_t(unsigned long, ias, VA_BITS); 2622 pgtbl_cfg.oas = smmu->ias; 2623 if (enable_dirty) 2624 pgtbl_cfg.quirks |= IO_PGTABLE_QUIRK_ARM_HD; 2625 fmt = ARM_64_LPAE_S1; 2626 finalise_stage_fn = arm_smmu_domain_finalise_s1; 2627 break; 2628 } 2629 case ARM_SMMU_DOMAIN_S2: 2630 if (enable_dirty) 2631 return -EOPNOTSUPP; 2632 pgtbl_cfg.ias = smmu->ias; 2633 pgtbl_cfg.oas = smmu->oas; 2634 fmt = ARM_64_LPAE_S2; 2635 finalise_stage_fn = arm_smmu_domain_finalise_s2; 2636 if ((smmu->features & ARM_SMMU_FEAT_S2FWB) && 2637 (flags & IOMMU_HWPT_ALLOC_NEST_PARENT)) 2638 pgtbl_cfg.quirks |= IO_PGTABLE_QUIRK_ARM_S2FWB; 2639 break; 2640 default: 2641 return -EINVAL; 2642 } 2643 2644 pgtbl_ops = alloc_io_pgtable_ops(fmt, &pgtbl_cfg, smmu_domain); 2645 if (!pgtbl_ops) 2646 return -ENOMEM; 2647 2648 smmu_domain->domain.pgsize_bitmap = pgtbl_cfg.pgsize_bitmap; 2649 smmu_domain->domain.geometry.aperture_end = (1UL << pgtbl_cfg.ias) - 1; 2650 smmu_domain->domain.geometry.force_aperture = true; 2651 if (enable_dirty && smmu_domain->stage == ARM_SMMU_DOMAIN_S1) 2652 smmu_domain->domain.dirty_ops = &arm_smmu_dirty_ops; 2653 2654 ret = finalise_stage_fn(smmu, smmu_domain); 2655 if (ret < 0) { 2656 free_io_pgtable_ops(pgtbl_ops); 2657 return ret; 2658 } 2659 2660 smmu_domain->pgtbl_ops = pgtbl_ops; 2661 smmu_domain->smmu = smmu; 2662 return 0; 2663 } 2664 2665 static struct arm_smmu_ste * 2666 arm_smmu_get_step_for_sid(struct arm_smmu_device *smmu, u32 sid) 2667 { 2668 struct arm_smmu_strtab_cfg *cfg = &smmu->strtab_cfg; 2669 2670 if (smmu->features & ARM_SMMU_FEAT_2_LVL_STRTAB) { 2671 /* Two-level walk */ 2672 return &cfg->l2.l2ptrs[arm_smmu_strtab_l1_idx(sid)] 2673 ->stes[arm_smmu_strtab_l2_idx(sid)]; 2674 } else { 2675 /* Simple linear lookup */ 2676 return &cfg->linear.table[sid]; 2677 } 2678 } 2679 2680 void arm_smmu_install_ste_for_dev(struct arm_smmu_master *master, 2681 const struct arm_smmu_ste *target) 2682 { 2683 int i, j; 2684 struct arm_smmu_device *smmu = master->smmu; 2685 2686 master->cd_table.in_ste = 2687 FIELD_GET(STRTAB_STE_0_CFG, le64_to_cpu(target->data[0])) == 2688 STRTAB_STE_0_CFG_S1_TRANS; 2689 master->ste_ats_enabled = 2690 FIELD_GET(STRTAB_STE_1_EATS, le64_to_cpu(target->data[1])) == 2691 STRTAB_STE_1_EATS_TRANS; 2692 2693 for (i = 0; i < master->num_streams; ++i) { 2694 u32 sid = master->streams[i].id; 2695 struct arm_smmu_ste *step = 2696 arm_smmu_get_step_for_sid(smmu, sid); 2697 2698 /* Bridged PCI devices may end up with duplicated IDs */ 2699 for (j = 0; j < i; j++) 2700 if (master->streams[j].id == sid) 2701 break; 2702 if (j < i) 2703 continue; 2704 2705 arm_smmu_write_ste(master, sid, step, target); 2706 } 2707 } 2708 2709 static bool arm_smmu_ats_supported(struct arm_smmu_master *master) 2710 { 2711 struct device *dev = master->dev; 2712 struct arm_smmu_device *smmu = master->smmu; 2713 struct iommu_fwspec *fwspec = dev_iommu_fwspec_get(dev); 2714 2715 if (!(smmu->features & ARM_SMMU_FEAT_ATS)) 2716 return false; 2717 2718 if (!(fwspec->flags & IOMMU_FWSPEC_PCI_RC_ATS)) 2719 return false; 2720 2721 return dev_is_pci(dev) && pci_ats_supported(to_pci_dev(dev)); 2722 } 2723 2724 static void arm_smmu_enable_ats(struct arm_smmu_master *master) 2725 { 2726 size_t stu; 2727 struct pci_dev *pdev; 2728 struct arm_smmu_device *smmu = master->smmu; 2729 2730 /* Smallest Translation Unit: log2 of the smallest supported granule */ 2731 stu = __ffs(smmu->pgsize_bitmap); 2732 pdev = to_pci_dev(master->dev); 2733 2734 /* 2735 * ATC invalidation of PASID 0 causes the entire ATC to be flushed. 2736 */ 2737 arm_smmu_atc_inv_master(master, IOMMU_NO_PASID); 2738 if (pci_enable_ats(pdev, stu)) 2739 dev_err(master->dev, "Failed to enable ATS (STU %zu)\n", stu); 2740 } 2741 2742 static int arm_smmu_enable_pasid(struct arm_smmu_master *master) 2743 { 2744 int ret; 2745 int features; 2746 int num_pasids; 2747 struct pci_dev *pdev; 2748 2749 if (!dev_is_pci(master->dev)) 2750 return -ENODEV; 2751 2752 pdev = to_pci_dev(master->dev); 2753 2754 features = pci_pasid_features(pdev); 2755 if (features < 0) 2756 return features; 2757 2758 num_pasids = pci_max_pasids(pdev); 2759 if (num_pasids <= 0) 2760 return num_pasids; 2761 2762 ret = pci_enable_pasid(pdev, features); 2763 if (ret) { 2764 dev_err(&pdev->dev, "Failed to enable PASID\n"); 2765 return ret; 2766 } 2767 2768 master->ssid_bits = min_t(u8, ilog2(num_pasids), 2769 master->smmu->ssid_bits); 2770 return 0; 2771 } 2772 2773 static void arm_smmu_disable_pasid(struct arm_smmu_master *master) 2774 { 2775 struct pci_dev *pdev; 2776 2777 if (!dev_is_pci(master->dev)) 2778 return; 2779 2780 pdev = to_pci_dev(master->dev); 2781 2782 if (!pdev->pasid_enabled) 2783 return; 2784 2785 master->ssid_bits = 0; 2786 pci_disable_pasid(pdev); 2787 } 2788 2789 static struct arm_smmu_master_domain * 2790 arm_smmu_find_master_domain(struct arm_smmu_domain *smmu_domain, 2791 struct iommu_domain *domain, 2792 struct arm_smmu_master *master, 2793 ioasid_t ssid, bool nested_ats_flush) 2794 { 2795 struct arm_smmu_master_domain *master_domain; 2796 2797 lockdep_assert_held(&smmu_domain->devices_lock); 2798 2799 list_for_each_entry(master_domain, &smmu_domain->devices, 2800 devices_elm) { 2801 if (master_domain->master == master && 2802 master_domain->domain == domain && 2803 master_domain->ssid == ssid && 2804 master_domain->nested_ats_flush == nested_ats_flush) 2805 return master_domain; 2806 } 2807 return NULL; 2808 } 2809 2810 /* 2811 * If the domain uses the smmu_domain->devices list return the arm_smmu_domain 2812 * structure, otherwise NULL. These domains track attached devices so they can 2813 * issue invalidations. 2814 */ 2815 static struct arm_smmu_domain * 2816 to_smmu_domain_devices(struct iommu_domain *domain) 2817 { 2818 /* The domain can be NULL only when processing the first attach */ 2819 if (!domain) 2820 return NULL; 2821 if ((domain->type & __IOMMU_DOMAIN_PAGING) || 2822 domain->type == IOMMU_DOMAIN_SVA) 2823 return to_smmu_domain(domain); 2824 if (domain->type == IOMMU_DOMAIN_NESTED) 2825 return to_smmu_nested_domain(domain)->vsmmu->s2_parent; 2826 return NULL; 2827 } 2828 2829 static int arm_smmu_enable_iopf(struct arm_smmu_master *master, 2830 struct arm_smmu_master_domain *master_domain) 2831 { 2832 int ret; 2833 2834 iommu_group_mutex_assert(master->dev); 2835 2836 if (!IS_ENABLED(CONFIG_ARM_SMMU_V3_SVA)) 2837 return -EOPNOTSUPP; 2838 2839 /* 2840 * Drivers for devices supporting PRI or stall require iopf others have 2841 * device-specific fault handlers and don't need IOPF, so this is not a 2842 * failure. 2843 */ 2844 if (!master->stall_enabled) 2845 return 0; 2846 2847 /* We're not keeping track of SIDs in fault events */ 2848 if (master->num_streams != 1) 2849 return -EOPNOTSUPP; 2850 2851 if (master->iopf_refcount) { 2852 master->iopf_refcount++; 2853 master_domain->using_iopf = true; 2854 return 0; 2855 } 2856 2857 ret = iopf_queue_add_device(master->smmu->evtq.iopf, master->dev); 2858 if (ret) 2859 return ret; 2860 master->iopf_refcount = 1; 2861 master_domain->using_iopf = true; 2862 return 0; 2863 } 2864 2865 static void arm_smmu_disable_iopf(struct arm_smmu_master *master, 2866 struct arm_smmu_master_domain *master_domain) 2867 { 2868 iommu_group_mutex_assert(master->dev); 2869 2870 if (!IS_ENABLED(CONFIG_ARM_SMMU_V3_SVA)) 2871 return; 2872 2873 if (!master_domain || !master_domain->using_iopf) 2874 return; 2875 2876 master->iopf_refcount--; 2877 if (master->iopf_refcount == 0) 2878 iopf_queue_remove_device(master->smmu->evtq.iopf, master->dev); 2879 } 2880 2881 static void arm_smmu_remove_master_domain(struct arm_smmu_master *master, 2882 struct iommu_domain *domain, 2883 ioasid_t ssid) 2884 { 2885 struct arm_smmu_domain *smmu_domain = to_smmu_domain_devices(domain); 2886 struct arm_smmu_master_domain *master_domain; 2887 bool nested_ats_flush = false; 2888 unsigned long flags; 2889 2890 if (!smmu_domain) 2891 return; 2892 2893 if (domain->type == IOMMU_DOMAIN_NESTED) 2894 nested_ats_flush = to_smmu_nested_domain(domain)->enable_ats; 2895 2896 spin_lock_irqsave(&smmu_domain->devices_lock, flags); 2897 master_domain = arm_smmu_find_master_domain(smmu_domain, domain, master, 2898 ssid, nested_ats_flush); 2899 if (master_domain) { 2900 list_del(&master_domain->devices_elm); 2901 if (master->ats_enabled) 2902 atomic_dec(&smmu_domain->nr_ats_masters); 2903 } 2904 spin_unlock_irqrestore(&smmu_domain->devices_lock, flags); 2905 2906 arm_smmu_disable_iopf(master, master_domain); 2907 kfree(master_domain); 2908 } 2909 2910 /* 2911 * Start the sequence to attach a domain to a master. The sequence contains three 2912 * steps: 2913 * arm_smmu_attach_prepare() 2914 * arm_smmu_install_ste_for_dev() 2915 * arm_smmu_attach_commit() 2916 * 2917 * If prepare succeeds then the sequence must be completed. The STE installed 2918 * must set the STE.EATS field according to state.ats_enabled. 2919 * 2920 * If the device supports ATS then this determines if EATS should be enabled 2921 * in the STE, and starts sequencing EATS disable if required. 2922 * 2923 * The change of the EATS in the STE and the PCI ATS config space is managed by 2924 * this sequence to be in the right order so that if PCI ATS is enabled then 2925 * STE.ETAS is enabled. 2926 * 2927 * new_domain can be a non-paging domain. In this case ATS will not be enabled, 2928 * and invalidations won't be tracked. 2929 */ 2930 int arm_smmu_attach_prepare(struct arm_smmu_attach_state *state, 2931 struct iommu_domain *new_domain) 2932 { 2933 struct arm_smmu_master *master = state->master; 2934 struct arm_smmu_master_domain *master_domain; 2935 struct arm_smmu_domain *smmu_domain = 2936 to_smmu_domain_devices(new_domain); 2937 unsigned long flags; 2938 int ret; 2939 2940 /* 2941 * arm_smmu_share_asid() must not see two domains pointing to the same 2942 * arm_smmu_master_domain contents otherwise it could randomly write one 2943 * or the other to the CD. 2944 */ 2945 lockdep_assert_held(&arm_smmu_asid_lock); 2946 2947 if (smmu_domain || state->cd_needs_ats) { 2948 /* 2949 * The SMMU does not support enabling ATS with bypass/abort. 2950 * When the STE is in bypass (STE.Config[2:0] == 0b100), ATS 2951 * Translation Requests and Translated transactions are denied 2952 * as though ATS is disabled for the stream (STE.EATS == 0b00), 2953 * causing F_BAD_ATS_TREQ and F_TRANSL_FORBIDDEN events 2954 * (IHI0070Ea 5.2 Stream Table Entry). 2955 * 2956 * However, if we have installed a CD table and are using S1DSS 2957 * then ATS will work in S1DSS bypass. See "13.6.4 Full ATS 2958 * skipping stage 1". 2959 * 2960 * Disable ATS if we are going to create a normal 0b100 bypass 2961 * STE. 2962 */ 2963 state->ats_enabled = !state->disable_ats && 2964 arm_smmu_ats_supported(master); 2965 } 2966 2967 if (smmu_domain) { 2968 if (new_domain->type == IOMMU_DOMAIN_NESTED) { 2969 ret = arm_smmu_attach_prepare_vmaster( 2970 state, to_smmu_nested_domain(new_domain)); 2971 if (ret) 2972 return ret; 2973 } 2974 2975 master_domain = kzalloc(sizeof(*master_domain), GFP_KERNEL); 2976 if (!master_domain) { 2977 ret = -ENOMEM; 2978 goto err_free_vmaster; 2979 } 2980 master_domain->domain = new_domain; 2981 master_domain->master = master; 2982 master_domain->ssid = state->ssid; 2983 if (new_domain->type == IOMMU_DOMAIN_NESTED) 2984 master_domain->nested_ats_flush = 2985 to_smmu_nested_domain(new_domain)->enable_ats; 2986 2987 if (new_domain->iopf_handler) { 2988 ret = arm_smmu_enable_iopf(master, master_domain); 2989 if (ret) 2990 goto err_free_master_domain; 2991 } 2992 2993 /* 2994 * During prepare we want the current smmu_domain and new 2995 * smmu_domain to be in the devices list before we change any 2996 * HW. This ensures that both domains will send ATS 2997 * invalidations to the master until we are done. 2998 * 2999 * It is tempting to make this list only track masters that are 3000 * using ATS, but arm_smmu_share_asid() also uses this to change 3001 * the ASID of a domain, unrelated to ATS. 3002 * 3003 * Notice if we are re-attaching the same domain then the list 3004 * will have two identical entries and commit will remove only 3005 * one of them. 3006 */ 3007 spin_lock_irqsave(&smmu_domain->devices_lock, flags); 3008 if (smmu_domain->enforce_cache_coherency && 3009 !arm_smmu_master_canwbs(master)) { 3010 spin_unlock_irqrestore(&smmu_domain->devices_lock, 3011 flags); 3012 ret = -EINVAL; 3013 goto err_iopf; 3014 } 3015 3016 if (state->ats_enabled) 3017 atomic_inc(&smmu_domain->nr_ats_masters); 3018 list_add(&master_domain->devices_elm, &smmu_domain->devices); 3019 spin_unlock_irqrestore(&smmu_domain->devices_lock, flags); 3020 } 3021 3022 if (!state->ats_enabled && master->ats_enabled) { 3023 pci_disable_ats(to_pci_dev(master->dev)); 3024 /* 3025 * This is probably overkill, but the config write for disabling 3026 * ATS should complete before the STE is configured to generate 3027 * UR to avoid AER noise. 3028 */ 3029 wmb(); 3030 } 3031 return 0; 3032 3033 err_iopf: 3034 arm_smmu_disable_iopf(master, master_domain); 3035 err_free_master_domain: 3036 kfree(master_domain); 3037 err_free_vmaster: 3038 kfree(state->vmaster); 3039 return ret; 3040 } 3041 3042 /* 3043 * Commit is done after the STE/CD are configured with the EATS setting. It 3044 * completes synchronizing the PCI device's ATC and finishes manipulating the 3045 * smmu_domain->devices list. 3046 */ 3047 void arm_smmu_attach_commit(struct arm_smmu_attach_state *state) 3048 { 3049 struct arm_smmu_master *master = state->master; 3050 3051 lockdep_assert_held(&arm_smmu_asid_lock); 3052 3053 arm_smmu_attach_commit_vmaster(state); 3054 3055 if (state->ats_enabled && !master->ats_enabled) { 3056 arm_smmu_enable_ats(master); 3057 } else if (state->ats_enabled && master->ats_enabled) { 3058 /* 3059 * The translation has changed, flush the ATC. At this point the 3060 * SMMU is translating for the new domain and both the old&new 3061 * domain will issue invalidations. 3062 */ 3063 arm_smmu_atc_inv_master(master, state->ssid); 3064 } else if (!state->ats_enabled && master->ats_enabled) { 3065 /* ATS is being switched off, invalidate the entire ATC */ 3066 arm_smmu_atc_inv_master(master, IOMMU_NO_PASID); 3067 } 3068 3069 arm_smmu_remove_master_domain(master, state->old_domain, state->ssid); 3070 master->ats_enabled = state->ats_enabled; 3071 } 3072 3073 static int arm_smmu_attach_dev(struct iommu_domain *domain, struct device *dev) 3074 { 3075 int ret = 0; 3076 struct arm_smmu_ste target; 3077 struct iommu_fwspec *fwspec = dev_iommu_fwspec_get(dev); 3078 struct arm_smmu_device *smmu; 3079 struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain); 3080 struct arm_smmu_attach_state state = { 3081 .old_domain = iommu_get_domain_for_dev(dev), 3082 .ssid = IOMMU_NO_PASID, 3083 }; 3084 struct arm_smmu_master *master; 3085 struct arm_smmu_cd *cdptr; 3086 3087 if (!fwspec) 3088 return -ENOENT; 3089 3090 state.master = master = dev_iommu_priv_get(dev); 3091 smmu = master->smmu; 3092 3093 if (smmu_domain->smmu != smmu) 3094 return -EINVAL; 3095 3096 if (smmu_domain->stage == ARM_SMMU_DOMAIN_S1) { 3097 cdptr = arm_smmu_alloc_cd_ptr(master, IOMMU_NO_PASID); 3098 if (!cdptr) 3099 return -ENOMEM; 3100 } else if (arm_smmu_ssids_in_use(&master->cd_table)) 3101 return -EBUSY; 3102 3103 /* 3104 * Prevent arm_smmu_share_asid() from trying to change the ASID 3105 * of either the old or new domain while we are working on it. 3106 * This allows the STE and the smmu_domain->devices list to 3107 * be inconsistent during this routine. 3108 */ 3109 mutex_lock(&arm_smmu_asid_lock); 3110 3111 ret = arm_smmu_attach_prepare(&state, domain); 3112 if (ret) { 3113 mutex_unlock(&arm_smmu_asid_lock); 3114 return ret; 3115 } 3116 3117 switch (smmu_domain->stage) { 3118 case ARM_SMMU_DOMAIN_S1: { 3119 struct arm_smmu_cd target_cd; 3120 3121 arm_smmu_make_s1_cd(&target_cd, master, smmu_domain); 3122 arm_smmu_write_cd_entry(master, IOMMU_NO_PASID, cdptr, 3123 &target_cd); 3124 arm_smmu_make_cdtable_ste(&target, master, state.ats_enabled, 3125 STRTAB_STE_1_S1DSS_SSID0); 3126 arm_smmu_install_ste_for_dev(master, &target); 3127 break; 3128 } 3129 case ARM_SMMU_DOMAIN_S2: 3130 arm_smmu_make_s2_domain_ste(&target, master, smmu_domain, 3131 state.ats_enabled); 3132 arm_smmu_install_ste_for_dev(master, &target); 3133 arm_smmu_clear_cd(master, IOMMU_NO_PASID); 3134 break; 3135 } 3136 3137 arm_smmu_attach_commit(&state); 3138 mutex_unlock(&arm_smmu_asid_lock); 3139 return 0; 3140 } 3141 3142 static int arm_smmu_s1_set_dev_pasid(struct iommu_domain *domain, 3143 struct device *dev, ioasid_t id, 3144 struct iommu_domain *old) 3145 { 3146 struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain); 3147 struct arm_smmu_master *master = dev_iommu_priv_get(dev); 3148 struct arm_smmu_device *smmu = master->smmu; 3149 struct arm_smmu_cd target_cd; 3150 3151 if (smmu_domain->smmu != smmu) 3152 return -EINVAL; 3153 3154 if (smmu_domain->stage != ARM_SMMU_DOMAIN_S1) 3155 return -EINVAL; 3156 3157 /* 3158 * We can read cd.asid outside the lock because arm_smmu_set_pasid() 3159 * will fix it 3160 */ 3161 arm_smmu_make_s1_cd(&target_cd, master, smmu_domain); 3162 return arm_smmu_set_pasid(master, to_smmu_domain(domain), id, 3163 &target_cd, old); 3164 } 3165 3166 static void arm_smmu_update_ste(struct arm_smmu_master *master, 3167 struct iommu_domain *sid_domain, 3168 bool ats_enabled) 3169 { 3170 unsigned int s1dss = STRTAB_STE_1_S1DSS_TERMINATE; 3171 struct arm_smmu_ste ste; 3172 3173 if (master->cd_table.in_ste && master->ste_ats_enabled == ats_enabled) 3174 return; 3175 3176 if (sid_domain->type == IOMMU_DOMAIN_IDENTITY) 3177 s1dss = STRTAB_STE_1_S1DSS_BYPASS; 3178 else 3179 WARN_ON(sid_domain->type != IOMMU_DOMAIN_BLOCKED); 3180 3181 /* 3182 * Change the STE into a cdtable one with SID IDENTITY/BLOCKED behavior 3183 * using s1dss if necessary. If the cd_table is already installed then 3184 * the S1DSS is correct and this will just update the EATS. Otherwise it 3185 * installs the entire thing. This will be hitless. 3186 */ 3187 arm_smmu_make_cdtable_ste(&ste, master, ats_enabled, s1dss); 3188 arm_smmu_install_ste_for_dev(master, &ste); 3189 } 3190 3191 int arm_smmu_set_pasid(struct arm_smmu_master *master, 3192 struct arm_smmu_domain *smmu_domain, ioasid_t pasid, 3193 struct arm_smmu_cd *cd, struct iommu_domain *old) 3194 { 3195 struct iommu_domain *sid_domain = iommu_get_domain_for_dev(master->dev); 3196 struct arm_smmu_attach_state state = { 3197 .master = master, 3198 .ssid = pasid, 3199 .old_domain = old, 3200 }; 3201 struct arm_smmu_cd *cdptr; 3202 int ret; 3203 3204 /* The core code validates pasid */ 3205 3206 if (smmu_domain->smmu != master->smmu) 3207 return -EINVAL; 3208 3209 if (!master->cd_table.in_ste && 3210 sid_domain->type != IOMMU_DOMAIN_IDENTITY && 3211 sid_domain->type != IOMMU_DOMAIN_BLOCKED) 3212 return -EINVAL; 3213 3214 cdptr = arm_smmu_alloc_cd_ptr(master, pasid); 3215 if (!cdptr) 3216 return -ENOMEM; 3217 3218 mutex_lock(&arm_smmu_asid_lock); 3219 ret = arm_smmu_attach_prepare(&state, &smmu_domain->domain); 3220 if (ret) 3221 goto out_unlock; 3222 3223 /* 3224 * We don't want to obtain to the asid_lock too early, so fix up the 3225 * caller set ASID under the lock in case it changed. 3226 */ 3227 cd->data[0] &= ~cpu_to_le64(CTXDESC_CD_0_ASID); 3228 cd->data[0] |= cpu_to_le64( 3229 FIELD_PREP(CTXDESC_CD_0_ASID, smmu_domain->cd.asid)); 3230 3231 arm_smmu_write_cd_entry(master, pasid, cdptr, cd); 3232 arm_smmu_update_ste(master, sid_domain, state.ats_enabled); 3233 3234 arm_smmu_attach_commit(&state); 3235 3236 out_unlock: 3237 mutex_unlock(&arm_smmu_asid_lock); 3238 return ret; 3239 } 3240 3241 static int arm_smmu_blocking_set_dev_pasid(struct iommu_domain *new_domain, 3242 struct device *dev, ioasid_t pasid, 3243 struct iommu_domain *old_domain) 3244 { 3245 struct arm_smmu_domain *smmu_domain = to_smmu_domain(old_domain); 3246 struct arm_smmu_master *master = dev_iommu_priv_get(dev); 3247 3248 mutex_lock(&arm_smmu_asid_lock); 3249 arm_smmu_clear_cd(master, pasid); 3250 if (master->ats_enabled) 3251 arm_smmu_atc_inv_master(master, pasid); 3252 arm_smmu_remove_master_domain(master, &smmu_domain->domain, pasid); 3253 mutex_unlock(&arm_smmu_asid_lock); 3254 3255 /* 3256 * When the last user of the CD table goes away downgrade the STE back 3257 * to a non-cd_table one. 3258 */ 3259 if (!arm_smmu_ssids_in_use(&master->cd_table)) { 3260 struct iommu_domain *sid_domain = 3261 iommu_get_domain_for_dev(master->dev); 3262 3263 if (sid_domain->type == IOMMU_DOMAIN_IDENTITY || 3264 sid_domain->type == IOMMU_DOMAIN_BLOCKED) 3265 sid_domain->ops->attach_dev(sid_domain, dev); 3266 } 3267 return 0; 3268 } 3269 3270 static void arm_smmu_attach_dev_ste(struct iommu_domain *domain, 3271 struct device *dev, 3272 struct arm_smmu_ste *ste, 3273 unsigned int s1dss) 3274 { 3275 struct arm_smmu_master *master = dev_iommu_priv_get(dev); 3276 struct arm_smmu_attach_state state = { 3277 .master = master, 3278 .old_domain = iommu_get_domain_for_dev(dev), 3279 .ssid = IOMMU_NO_PASID, 3280 }; 3281 3282 /* 3283 * Do not allow any ASID to be changed while are working on the STE, 3284 * otherwise we could miss invalidations. 3285 */ 3286 mutex_lock(&arm_smmu_asid_lock); 3287 3288 /* 3289 * If the CD table is not in use we can use the provided STE, otherwise 3290 * we use a cdtable STE with the provided S1DSS. 3291 */ 3292 if (arm_smmu_ssids_in_use(&master->cd_table)) { 3293 /* 3294 * If a CD table has to be present then we need to run with ATS 3295 * on because we have to assume a PASID is using ATS. For 3296 * IDENTITY this will setup things so that S1DSS=bypass which 3297 * follows the explanation in "13.6.4 Full ATS skipping stage 1" 3298 * and allows for ATS on the RID to work. 3299 */ 3300 state.cd_needs_ats = true; 3301 arm_smmu_attach_prepare(&state, domain); 3302 arm_smmu_make_cdtable_ste(ste, master, state.ats_enabled, s1dss); 3303 } else { 3304 arm_smmu_attach_prepare(&state, domain); 3305 } 3306 arm_smmu_install_ste_for_dev(master, ste); 3307 arm_smmu_attach_commit(&state); 3308 mutex_unlock(&arm_smmu_asid_lock); 3309 3310 /* 3311 * This has to be done after removing the master from the 3312 * arm_smmu_domain->devices to avoid races updating the same context 3313 * descriptor from arm_smmu_share_asid(). 3314 */ 3315 arm_smmu_clear_cd(master, IOMMU_NO_PASID); 3316 } 3317 3318 static int arm_smmu_attach_dev_identity(struct iommu_domain *domain, 3319 struct device *dev) 3320 { 3321 struct arm_smmu_ste ste; 3322 struct arm_smmu_master *master = dev_iommu_priv_get(dev); 3323 3324 arm_smmu_master_clear_vmaster(master); 3325 arm_smmu_make_bypass_ste(master->smmu, &ste); 3326 arm_smmu_attach_dev_ste(domain, dev, &ste, STRTAB_STE_1_S1DSS_BYPASS); 3327 return 0; 3328 } 3329 3330 static const struct iommu_domain_ops arm_smmu_identity_ops = { 3331 .attach_dev = arm_smmu_attach_dev_identity, 3332 }; 3333 3334 static struct iommu_domain arm_smmu_identity_domain = { 3335 .type = IOMMU_DOMAIN_IDENTITY, 3336 .ops = &arm_smmu_identity_ops, 3337 }; 3338 3339 static int arm_smmu_attach_dev_blocked(struct iommu_domain *domain, 3340 struct device *dev) 3341 { 3342 struct arm_smmu_ste ste; 3343 struct arm_smmu_master *master = dev_iommu_priv_get(dev); 3344 3345 arm_smmu_master_clear_vmaster(master); 3346 arm_smmu_make_abort_ste(&ste); 3347 arm_smmu_attach_dev_ste(domain, dev, &ste, 3348 STRTAB_STE_1_S1DSS_TERMINATE); 3349 return 0; 3350 } 3351 3352 static const struct iommu_domain_ops arm_smmu_blocked_ops = { 3353 .attach_dev = arm_smmu_attach_dev_blocked, 3354 .set_dev_pasid = arm_smmu_blocking_set_dev_pasid, 3355 }; 3356 3357 static struct iommu_domain arm_smmu_blocked_domain = { 3358 .type = IOMMU_DOMAIN_BLOCKED, 3359 .ops = &arm_smmu_blocked_ops, 3360 }; 3361 3362 static struct iommu_domain * 3363 arm_smmu_domain_alloc_paging_flags(struct device *dev, u32 flags, 3364 const struct iommu_user_data *user_data) 3365 { 3366 struct arm_smmu_master *master = dev_iommu_priv_get(dev); 3367 struct arm_smmu_device *smmu = master->smmu; 3368 const u32 PAGING_FLAGS = IOMMU_HWPT_ALLOC_DIRTY_TRACKING | 3369 IOMMU_HWPT_ALLOC_PASID | 3370 IOMMU_HWPT_ALLOC_NEST_PARENT; 3371 struct arm_smmu_domain *smmu_domain; 3372 int ret; 3373 3374 if (flags & ~PAGING_FLAGS) 3375 return ERR_PTR(-EOPNOTSUPP); 3376 if (user_data) 3377 return ERR_PTR(-EOPNOTSUPP); 3378 3379 smmu_domain = arm_smmu_domain_alloc(); 3380 if (IS_ERR(smmu_domain)) 3381 return ERR_CAST(smmu_domain); 3382 3383 switch (flags) { 3384 case 0: 3385 /* Prefer S1 if available */ 3386 if (smmu->features & ARM_SMMU_FEAT_TRANS_S1) 3387 smmu_domain->stage = ARM_SMMU_DOMAIN_S1; 3388 else 3389 smmu_domain->stage = ARM_SMMU_DOMAIN_S2; 3390 break; 3391 case IOMMU_HWPT_ALLOC_NEST_PARENT: 3392 if (!(smmu->features & ARM_SMMU_FEAT_NESTING)) { 3393 ret = -EOPNOTSUPP; 3394 goto err_free; 3395 } 3396 smmu_domain->stage = ARM_SMMU_DOMAIN_S2; 3397 smmu_domain->nest_parent = true; 3398 break; 3399 case IOMMU_HWPT_ALLOC_DIRTY_TRACKING: 3400 case IOMMU_HWPT_ALLOC_DIRTY_TRACKING | IOMMU_HWPT_ALLOC_PASID: 3401 case IOMMU_HWPT_ALLOC_PASID: 3402 if (!(smmu->features & ARM_SMMU_FEAT_TRANS_S1)) { 3403 ret = -EOPNOTSUPP; 3404 goto err_free; 3405 } 3406 smmu_domain->stage = ARM_SMMU_DOMAIN_S1; 3407 break; 3408 default: 3409 ret = -EOPNOTSUPP; 3410 goto err_free; 3411 } 3412 3413 smmu_domain->domain.type = IOMMU_DOMAIN_UNMANAGED; 3414 smmu_domain->domain.ops = arm_smmu_ops.default_domain_ops; 3415 ret = arm_smmu_domain_finalise(smmu_domain, smmu, flags); 3416 if (ret) 3417 goto err_free; 3418 return &smmu_domain->domain; 3419 3420 err_free: 3421 kfree(smmu_domain); 3422 return ERR_PTR(ret); 3423 } 3424 3425 static int arm_smmu_map_pages(struct iommu_domain *domain, unsigned long iova, 3426 phys_addr_t paddr, size_t pgsize, size_t pgcount, 3427 int prot, gfp_t gfp, size_t *mapped) 3428 { 3429 struct io_pgtable_ops *ops = to_smmu_domain(domain)->pgtbl_ops; 3430 3431 if (!ops) 3432 return -ENODEV; 3433 3434 return ops->map_pages(ops, iova, paddr, pgsize, pgcount, prot, gfp, mapped); 3435 } 3436 3437 static size_t arm_smmu_unmap_pages(struct iommu_domain *domain, unsigned long iova, 3438 size_t pgsize, size_t pgcount, 3439 struct iommu_iotlb_gather *gather) 3440 { 3441 struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain); 3442 struct io_pgtable_ops *ops = smmu_domain->pgtbl_ops; 3443 3444 if (!ops) 3445 return 0; 3446 3447 return ops->unmap_pages(ops, iova, pgsize, pgcount, gather); 3448 } 3449 3450 static void arm_smmu_flush_iotlb_all(struct iommu_domain *domain) 3451 { 3452 struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain); 3453 3454 if (smmu_domain->smmu) 3455 arm_smmu_tlb_inv_context(smmu_domain); 3456 } 3457 3458 static void arm_smmu_iotlb_sync(struct iommu_domain *domain, 3459 struct iommu_iotlb_gather *gather) 3460 { 3461 struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain); 3462 3463 if (!gather->pgsize) 3464 return; 3465 3466 arm_smmu_tlb_inv_range_domain(gather->start, 3467 gather->end - gather->start + 1, 3468 gather->pgsize, true, smmu_domain); 3469 } 3470 3471 static phys_addr_t 3472 arm_smmu_iova_to_phys(struct iommu_domain *domain, dma_addr_t iova) 3473 { 3474 struct io_pgtable_ops *ops = to_smmu_domain(domain)->pgtbl_ops; 3475 3476 if (!ops) 3477 return 0; 3478 3479 return ops->iova_to_phys(ops, iova); 3480 } 3481 3482 static struct platform_driver arm_smmu_driver; 3483 3484 static 3485 struct arm_smmu_device *arm_smmu_get_by_fwnode(struct fwnode_handle *fwnode) 3486 { 3487 struct device *dev = bus_find_device_by_fwnode(&platform_bus_type, fwnode); 3488 3489 put_device(dev); 3490 return dev ? dev_get_drvdata(dev) : NULL; 3491 } 3492 3493 static bool arm_smmu_sid_in_range(struct arm_smmu_device *smmu, u32 sid) 3494 { 3495 if (smmu->features & ARM_SMMU_FEAT_2_LVL_STRTAB) 3496 return arm_smmu_strtab_l1_idx(sid) < smmu->strtab_cfg.l2.num_l1_ents; 3497 return sid < smmu->strtab_cfg.linear.num_ents; 3498 } 3499 3500 static int arm_smmu_init_sid_strtab(struct arm_smmu_device *smmu, u32 sid) 3501 { 3502 /* Check the SIDs are in range of the SMMU and our stream table */ 3503 if (!arm_smmu_sid_in_range(smmu, sid)) 3504 return -ERANGE; 3505 3506 /* Ensure l2 strtab is initialised */ 3507 if (smmu->features & ARM_SMMU_FEAT_2_LVL_STRTAB) 3508 return arm_smmu_init_l2_strtab(smmu, sid); 3509 3510 return 0; 3511 } 3512 3513 static int arm_smmu_insert_master(struct arm_smmu_device *smmu, 3514 struct arm_smmu_master *master) 3515 { 3516 int i; 3517 int ret = 0; 3518 struct iommu_fwspec *fwspec = dev_iommu_fwspec_get(master->dev); 3519 3520 master->streams = kcalloc(fwspec->num_ids, sizeof(*master->streams), 3521 GFP_KERNEL); 3522 if (!master->streams) 3523 return -ENOMEM; 3524 master->num_streams = fwspec->num_ids; 3525 3526 mutex_lock(&smmu->streams_mutex); 3527 for (i = 0; i < fwspec->num_ids; i++) { 3528 struct arm_smmu_stream *new_stream = &master->streams[i]; 3529 struct rb_node *existing; 3530 u32 sid = fwspec->ids[i]; 3531 3532 new_stream->id = sid; 3533 new_stream->master = master; 3534 3535 ret = arm_smmu_init_sid_strtab(smmu, sid); 3536 if (ret) 3537 break; 3538 3539 /* Insert into SID tree */ 3540 existing = rb_find_add(&new_stream->node, &smmu->streams, 3541 arm_smmu_streams_cmp_node); 3542 if (existing) { 3543 struct arm_smmu_master *existing_master = 3544 rb_entry(existing, struct arm_smmu_stream, node) 3545 ->master; 3546 3547 /* Bridged PCI devices may end up with duplicated IDs */ 3548 if (existing_master == master) 3549 continue; 3550 3551 dev_warn(master->dev, 3552 "Aliasing StreamID 0x%x (from %s) unsupported, expect DMA to be broken\n", 3553 sid, dev_name(existing_master->dev)); 3554 ret = -ENODEV; 3555 break; 3556 } 3557 } 3558 3559 if (ret) { 3560 for (i--; i >= 0; i--) 3561 rb_erase(&master->streams[i].node, &smmu->streams); 3562 kfree(master->streams); 3563 } 3564 mutex_unlock(&smmu->streams_mutex); 3565 3566 return ret; 3567 } 3568 3569 static void arm_smmu_remove_master(struct arm_smmu_master *master) 3570 { 3571 int i; 3572 struct arm_smmu_device *smmu = master->smmu; 3573 struct iommu_fwspec *fwspec = dev_iommu_fwspec_get(master->dev); 3574 3575 if (!smmu || !master->streams) 3576 return; 3577 3578 mutex_lock(&smmu->streams_mutex); 3579 for (i = 0; i < fwspec->num_ids; i++) 3580 rb_erase(&master->streams[i].node, &smmu->streams); 3581 mutex_unlock(&smmu->streams_mutex); 3582 3583 kfree(master->streams); 3584 } 3585 3586 static struct iommu_device *arm_smmu_probe_device(struct device *dev) 3587 { 3588 int ret; 3589 struct arm_smmu_device *smmu; 3590 struct arm_smmu_master *master; 3591 struct iommu_fwspec *fwspec = dev_iommu_fwspec_get(dev); 3592 3593 if (WARN_ON_ONCE(dev_iommu_priv_get(dev))) 3594 return ERR_PTR(-EBUSY); 3595 3596 smmu = arm_smmu_get_by_fwnode(fwspec->iommu_fwnode); 3597 if (!smmu) 3598 return ERR_PTR(-ENODEV); 3599 3600 master = kzalloc(sizeof(*master), GFP_KERNEL); 3601 if (!master) 3602 return ERR_PTR(-ENOMEM); 3603 3604 master->dev = dev; 3605 master->smmu = smmu; 3606 dev_iommu_priv_set(dev, master); 3607 3608 ret = arm_smmu_insert_master(smmu, master); 3609 if (ret) 3610 goto err_free_master; 3611 3612 device_property_read_u32(dev, "pasid-num-bits", &master->ssid_bits); 3613 master->ssid_bits = min(smmu->ssid_bits, master->ssid_bits); 3614 3615 /* 3616 * Note that PASID must be enabled before, and disabled after ATS: 3617 * PCI Express Base 4.0r1.0 - 10.5.1.3 ATS Control Register 3618 * 3619 * Behavior is undefined if this bit is Set and the value of the PASID 3620 * Enable, Execute Requested Enable, or Privileged Mode Requested bits 3621 * are changed. 3622 */ 3623 arm_smmu_enable_pasid(master); 3624 3625 if (!(smmu->features & ARM_SMMU_FEAT_2_LVL_CDTAB)) 3626 master->ssid_bits = min_t(u8, master->ssid_bits, 3627 CTXDESC_LINEAR_CDMAX); 3628 3629 if ((smmu->features & ARM_SMMU_FEAT_STALLS && 3630 device_property_read_bool(dev, "dma-can-stall")) || 3631 smmu->features & ARM_SMMU_FEAT_STALL_FORCE) 3632 master->stall_enabled = true; 3633 3634 if (dev_is_pci(dev)) { 3635 unsigned int stu = __ffs(smmu->pgsize_bitmap); 3636 3637 pci_prepare_ats(to_pci_dev(dev), stu); 3638 } 3639 3640 return &smmu->iommu; 3641 3642 err_free_master: 3643 kfree(master); 3644 return ERR_PTR(ret); 3645 } 3646 3647 static void arm_smmu_release_device(struct device *dev) 3648 { 3649 struct arm_smmu_master *master = dev_iommu_priv_get(dev); 3650 3651 WARN_ON(master->iopf_refcount); 3652 3653 /* Put the STE back to what arm_smmu_init_strtab() sets */ 3654 if (dev->iommu->require_direct) 3655 arm_smmu_attach_dev_identity(&arm_smmu_identity_domain, dev); 3656 else 3657 arm_smmu_attach_dev_blocked(&arm_smmu_blocked_domain, dev); 3658 3659 arm_smmu_disable_pasid(master); 3660 arm_smmu_remove_master(master); 3661 if (arm_smmu_cdtab_allocated(&master->cd_table)) 3662 arm_smmu_free_cd_tables(master); 3663 kfree(master); 3664 } 3665 3666 static int arm_smmu_read_and_clear_dirty(struct iommu_domain *domain, 3667 unsigned long iova, size_t size, 3668 unsigned long flags, 3669 struct iommu_dirty_bitmap *dirty) 3670 { 3671 struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain); 3672 struct io_pgtable_ops *ops = smmu_domain->pgtbl_ops; 3673 3674 return ops->read_and_clear_dirty(ops, iova, size, flags, dirty); 3675 } 3676 3677 static int arm_smmu_set_dirty_tracking(struct iommu_domain *domain, 3678 bool enabled) 3679 { 3680 /* 3681 * Always enabled and the dirty bitmap is cleared prior to 3682 * set_dirty_tracking(). 3683 */ 3684 return 0; 3685 } 3686 3687 static struct iommu_group *arm_smmu_device_group(struct device *dev) 3688 { 3689 struct iommu_group *group; 3690 3691 /* 3692 * We don't support devices sharing stream IDs other than PCI RID 3693 * aliases, since the necessary ID-to-device lookup becomes rather 3694 * impractical given a potential sparse 32-bit stream ID space. 3695 */ 3696 if (dev_is_pci(dev)) 3697 group = pci_device_group(dev); 3698 else 3699 group = generic_device_group(dev); 3700 3701 return group; 3702 } 3703 3704 static int arm_smmu_of_xlate(struct device *dev, 3705 const struct of_phandle_args *args) 3706 { 3707 return iommu_fwspec_add_ids(dev, args->args, 1); 3708 } 3709 3710 static void arm_smmu_get_resv_regions(struct device *dev, 3711 struct list_head *head) 3712 { 3713 struct iommu_resv_region *region; 3714 int prot = IOMMU_WRITE | IOMMU_NOEXEC | IOMMU_MMIO; 3715 3716 region = iommu_alloc_resv_region(MSI_IOVA_BASE, MSI_IOVA_LENGTH, 3717 prot, IOMMU_RESV_SW_MSI, GFP_KERNEL); 3718 if (!region) 3719 return; 3720 3721 list_add_tail(®ion->list, head); 3722 3723 iommu_dma_get_resv_regions(dev, head); 3724 } 3725 3726 /* 3727 * HiSilicon PCIe tune and trace device can be used to trace TLP headers on the 3728 * PCIe link and save the data to memory by DMA. The hardware is restricted to 3729 * use identity mapping only. 3730 */ 3731 #define IS_HISI_PTT_DEVICE(pdev) ((pdev)->vendor == PCI_VENDOR_ID_HUAWEI && \ 3732 (pdev)->device == 0xa12e) 3733 3734 static int arm_smmu_def_domain_type(struct device *dev) 3735 { 3736 if (dev_is_pci(dev)) { 3737 struct pci_dev *pdev = to_pci_dev(dev); 3738 3739 if (IS_HISI_PTT_DEVICE(pdev)) 3740 return IOMMU_DOMAIN_IDENTITY; 3741 } 3742 3743 return 0; 3744 } 3745 3746 static const struct iommu_ops arm_smmu_ops = { 3747 .identity_domain = &arm_smmu_identity_domain, 3748 .blocked_domain = &arm_smmu_blocked_domain, 3749 .capable = arm_smmu_capable, 3750 .hw_info = arm_smmu_hw_info, 3751 .domain_alloc_sva = arm_smmu_sva_domain_alloc, 3752 .domain_alloc_paging_flags = arm_smmu_domain_alloc_paging_flags, 3753 .probe_device = arm_smmu_probe_device, 3754 .release_device = arm_smmu_release_device, 3755 .device_group = arm_smmu_device_group, 3756 .of_xlate = arm_smmu_of_xlate, 3757 .get_resv_regions = arm_smmu_get_resv_regions, 3758 .page_response = arm_smmu_page_response, 3759 .def_domain_type = arm_smmu_def_domain_type, 3760 .get_viommu_size = arm_smmu_get_viommu_size, 3761 .viommu_init = arm_vsmmu_init, 3762 .user_pasid_table = 1, 3763 .owner = THIS_MODULE, 3764 .default_domain_ops = &(const struct iommu_domain_ops) { 3765 .attach_dev = arm_smmu_attach_dev, 3766 .enforce_cache_coherency = arm_smmu_enforce_cache_coherency, 3767 .set_dev_pasid = arm_smmu_s1_set_dev_pasid, 3768 .map_pages = arm_smmu_map_pages, 3769 .unmap_pages = arm_smmu_unmap_pages, 3770 .flush_iotlb_all = arm_smmu_flush_iotlb_all, 3771 .iotlb_sync = arm_smmu_iotlb_sync, 3772 .iova_to_phys = arm_smmu_iova_to_phys, 3773 .free = arm_smmu_domain_free_paging, 3774 } 3775 }; 3776 3777 static struct iommu_dirty_ops arm_smmu_dirty_ops = { 3778 .read_and_clear_dirty = arm_smmu_read_and_clear_dirty, 3779 .set_dirty_tracking = arm_smmu_set_dirty_tracking, 3780 }; 3781 3782 /* Probing and initialisation functions */ 3783 int arm_smmu_init_one_queue(struct arm_smmu_device *smmu, 3784 struct arm_smmu_queue *q, void __iomem *page, 3785 unsigned long prod_off, unsigned long cons_off, 3786 size_t dwords, const char *name) 3787 { 3788 size_t qsz; 3789 3790 do { 3791 qsz = ((1 << q->llq.max_n_shift) * dwords) << 3; 3792 q->base = dmam_alloc_coherent(smmu->dev, qsz, &q->base_dma, 3793 GFP_KERNEL); 3794 if (q->base || qsz < PAGE_SIZE) 3795 break; 3796 3797 q->llq.max_n_shift--; 3798 } while (1); 3799 3800 if (!q->base) { 3801 dev_err(smmu->dev, 3802 "failed to allocate queue (0x%zx bytes) for %s\n", 3803 qsz, name); 3804 return -ENOMEM; 3805 } 3806 3807 if (!WARN_ON(q->base_dma & (qsz - 1))) { 3808 dev_info(smmu->dev, "allocated %u entries for %s\n", 3809 1 << q->llq.max_n_shift, name); 3810 } 3811 3812 q->prod_reg = page + prod_off; 3813 q->cons_reg = page + cons_off; 3814 q->ent_dwords = dwords; 3815 3816 q->q_base = Q_BASE_RWA; 3817 q->q_base |= q->base_dma & Q_BASE_ADDR_MASK; 3818 q->q_base |= FIELD_PREP(Q_BASE_LOG2SIZE, q->llq.max_n_shift); 3819 3820 q->llq.prod = q->llq.cons = 0; 3821 return 0; 3822 } 3823 3824 int arm_smmu_cmdq_init(struct arm_smmu_device *smmu, 3825 struct arm_smmu_cmdq *cmdq) 3826 { 3827 unsigned int nents = 1 << cmdq->q.llq.max_n_shift; 3828 3829 atomic_set(&cmdq->owner_prod, 0); 3830 atomic_set(&cmdq->lock, 0); 3831 3832 cmdq->valid_map = (atomic_long_t *)devm_bitmap_zalloc(smmu->dev, nents, 3833 GFP_KERNEL); 3834 if (!cmdq->valid_map) 3835 return -ENOMEM; 3836 3837 return 0; 3838 } 3839 3840 static int arm_smmu_init_queues(struct arm_smmu_device *smmu) 3841 { 3842 int ret; 3843 3844 /* cmdq */ 3845 ret = arm_smmu_init_one_queue(smmu, &smmu->cmdq.q, smmu->base, 3846 ARM_SMMU_CMDQ_PROD, ARM_SMMU_CMDQ_CONS, 3847 CMDQ_ENT_DWORDS, "cmdq"); 3848 if (ret) 3849 return ret; 3850 3851 ret = arm_smmu_cmdq_init(smmu, &smmu->cmdq); 3852 if (ret) 3853 return ret; 3854 3855 /* evtq */ 3856 ret = arm_smmu_init_one_queue(smmu, &smmu->evtq.q, smmu->page1, 3857 ARM_SMMU_EVTQ_PROD, ARM_SMMU_EVTQ_CONS, 3858 EVTQ_ENT_DWORDS, "evtq"); 3859 if (ret) 3860 return ret; 3861 3862 if ((smmu->features & ARM_SMMU_FEAT_SVA) && 3863 (smmu->features & ARM_SMMU_FEAT_STALLS)) { 3864 smmu->evtq.iopf = iopf_queue_alloc(dev_name(smmu->dev)); 3865 if (!smmu->evtq.iopf) 3866 return -ENOMEM; 3867 } 3868 3869 /* priq */ 3870 if (!(smmu->features & ARM_SMMU_FEAT_PRI)) 3871 return 0; 3872 3873 return arm_smmu_init_one_queue(smmu, &smmu->priq.q, smmu->page1, 3874 ARM_SMMU_PRIQ_PROD, ARM_SMMU_PRIQ_CONS, 3875 PRIQ_ENT_DWORDS, "priq"); 3876 } 3877 3878 static int arm_smmu_init_strtab_2lvl(struct arm_smmu_device *smmu) 3879 { 3880 u32 l1size; 3881 struct arm_smmu_strtab_cfg *cfg = &smmu->strtab_cfg; 3882 unsigned int last_sid_idx = 3883 arm_smmu_strtab_l1_idx((1ULL << smmu->sid_bits) - 1); 3884 3885 /* Calculate the L1 size, capped to the SIDSIZE. */ 3886 cfg->l2.num_l1_ents = min(last_sid_idx + 1, STRTAB_MAX_L1_ENTRIES); 3887 if (cfg->l2.num_l1_ents <= last_sid_idx) 3888 dev_warn(smmu->dev, 3889 "2-level strtab only covers %u/%u bits of SID\n", 3890 ilog2(cfg->l2.num_l1_ents * STRTAB_NUM_L2_STES), 3891 smmu->sid_bits); 3892 3893 l1size = cfg->l2.num_l1_ents * sizeof(struct arm_smmu_strtab_l1); 3894 cfg->l2.l1tab = dmam_alloc_coherent(smmu->dev, l1size, &cfg->l2.l1_dma, 3895 GFP_KERNEL); 3896 if (!cfg->l2.l1tab) { 3897 dev_err(smmu->dev, 3898 "failed to allocate l1 stream table (%u bytes)\n", 3899 l1size); 3900 return -ENOMEM; 3901 } 3902 3903 cfg->l2.l2ptrs = devm_kcalloc(smmu->dev, cfg->l2.num_l1_ents, 3904 sizeof(*cfg->l2.l2ptrs), GFP_KERNEL); 3905 if (!cfg->l2.l2ptrs) 3906 return -ENOMEM; 3907 3908 return 0; 3909 } 3910 3911 static int arm_smmu_init_strtab_linear(struct arm_smmu_device *smmu) 3912 { 3913 u32 size; 3914 struct arm_smmu_strtab_cfg *cfg = &smmu->strtab_cfg; 3915 3916 size = (1 << smmu->sid_bits) * sizeof(struct arm_smmu_ste); 3917 cfg->linear.table = dmam_alloc_coherent(smmu->dev, size, 3918 &cfg->linear.ste_dma, 3919 GFP_KERNEL); 3920 if (!cfg->linear.table) { 3921 dev_err(smmu->dev, 3922 "failed to allocate linear stream table (%u bytes)\n", 3923 size); 3924 return -ENOMEM; 3925 } 3926 cfg->linear.num_ents = 1 << smmu->sid_bits; 3927 3928 arm_smmu_init_initial_stes(cfg->linear.table, cfg->linear.num_ents); 3929 return 0; 3930 } 3931 3932 static int arm_smmu_init_strtab(struct arm_smmu_device *smmu) 3933 { 3934 int ret; 3935 3936 if (smmu->features & ARM_SMMU_FEAT_2_LVL_STRTAB) 3937 ret = arm_smmu_init_strtab_2lvl(smmu); 3938 else 3939 ret = arm_smmu_init_strtab_linear(smmu); 3940 if (ret) 3941 return ret; 3942 3943 ida_init(&smmu->vmid_map); 3944 3945 return 0; 3946 } 3947 3948 static int arm_smmu_init_structures(struct arm_smmu_device *smmu) 3949 { 3950 int ret; 3951 3952 mutex_init(&smmu->streams_mutex); 3953 smmu->streams = RB_ROOT; 3954 3955 ret = arm_smmu_init_queues(smmu); 3956 if (ret) 3957 return ret; 3958 3959 ret = arm_smmu_init_strtab(smmu); 3960 if (ret) 3961 return ret; 3962 3963 if (smmu->impl_ops && smmu->impl_ops->init_structures) 3964 return smmu->impl_ops->init_structures(smmu); 3965 3966 return 0; 3967 } 3968 3969 static int arm_smmu_write_reg_sync(struct arm_smmu_device *smmu, u32 val, 3970 unsigned int reg_off, unsigned int ack_off) 3971 { 3972 u32 reg; 3973 3974 writel_relaxed(val, smmu->base + reg_off); 3975 return readl_relaxed_poll_timeout(smmu->base + ack_off, reg, reg == val, 3976 1, ARM_SMMU_POLL_TIMEOUT_US); 3977 } 3978 3979 /* GBPA is "special" */ 3980 static int arm_smmu_update_gbpa(struct arm_smmu_device *smmu, u32 set, u32 clr) 3981 { 3982 int ret; 3983 u32 reg, __iomem *gbpa = smmu->base + ARM_SMMU_GBPA; 3984 3985 ret = readl_relaxed_poll_timeout(gbpa, reg, !(reg & GBPA_UPDATE), 3986 1, ARM_SMMU_POLL_TIMEOUT_US); 3987 if (ret) 3988 return ret; 3989 3990 reg &= ~clr; 3991 reg |= set; 3992 writel_relaxed(reg | GBPA_UPDATE, gbpa); 3993 ret = readl_relaxed_poll_timeout(gbpa, reg, !(reg & GBPA_UPDATE), 3994 1, ARM_SMMU_POLL_TIMEOUT_US); 3995 3996 if (ret) 3997 dev_err(smmu->dev, "GBPA not responding to update\n"); 3998 return ret; 3999 } 4000 4001 static void arm_smmu_free_msis(void *data) 4002 { 4003 struct device *dev = data; 4004 4005 platform_device_msi_free_irqs_all(dev); 4006 } 4007 4008 static void arm_smmu_write_msi_msg(struct msi_desc *desc, struct msi_msg *msg) 4009 { 4010 phys_addr_t doorbell; 4011 struct device *dev = msi_desc_to_dev(desc); 4012 struct arm_smmu_device *smmu = dev_get_drvdata(dev); 4013 phys_addr_t *cfg = arm_smmu_msi_cfg[desc->msi_index]; 4014 4015 doorbell = (((u64)msg->address_hi) << 32) | msg->address_lo; 4016 doorbell &= MSI_CFG0_ADDR_MASK; 4017 4018 writeq_relaxed(doorbell, smmu->base + cfg[0]); 4019 writel_relaxed(msg->data, smmu->base + cfg[1]); 4020 writel_relaxed(ARM_SMMU_MEMATTR_DEVICE_nGnRE, smmu->base + cfg[2]); 4021 } 4022 4023 static void arm_smmu_setup_msis(struct arm_smmu_device *smmu) 4024 { 4025 int ret, nvec = ARM_SMMU_MAX_MSIS; 4026 struct device *dev = smmu->dev; 4027 4028 /* Clear the MSI address regs */ 4029 writeq_relaxed(0, smmu->base + ARM_SMMU_GERROR_IRQ_CFG0); 4030 writeq_relaxed(0, smmu->base + ARM_SMMU_EVTQ_IRQ_CFG0); 4031 4032 if (smmu->features & ARM_SMMU_FEAT_PRI) 4033 writeq_relaxed(0, smmu->base + ARM_SMMU_PRIQ_IRQ_CFG0); 4034 else 4035 nvec--; 4036 4037 if (!(smmu->features & ARM_SMMU_FEAT_MSI)) 4038 return; 4039 4040 if (!dev->msi.domain) { 4041 dev_info(smmu->dev, "msi_domain absent - falling back to wired irqs\n"); 4042 return; 4043 } 4044 4045 /* Allocate MSIs for evtq, gerror and priq. Ignore cmdq */ 4046 ret = platform_device_msi_init_and_alloc_irqs(dev, nvec, arm_smmu_write_msi_msg); 4047 if (ret) { 4048 dev_warn(dev, "failed to allocate MSIs - falling back to wired irqs\n"); 4049 return; 4050 } 4051 4052 smmu->evtq.q.irq = msi_get_virq(dev, EVTQ_MSI_INDEX); 4053 smmu->gerr_irq = msi_get_virq(dev, GERROR_MSI_INDEX); 4054 smmu->priq.q.irq = msi_get_virq(dev, PRIQ_MSI_INDEX); 4055 4056 /* Add callback to free MSIs on teardown */ 4057 devm_add_action_or_reset(dev, arm_smmu_free_msis, dev); 4058 } 4059 4060 static void arm_smmu_setup_unique_irqs(struct arm_smmu_device *smmu) 4061 { 4062 int irq, ret; 4063 4064 arm_smmu_setup_msis(smmu); 4065 4066 /* Request interrupt lines */ 4067 irq = smmu->evtq.q.irq; 4068 if (irq) { 4069 ret = devm_request_threaded_irq(smmu->dev, irq, NULL, 4070 arm_smmu_evtq_thread, 4071 IRQF_ONESHOT, 4072 "arm-smmu-v3-evtq", smmu); 4073 if (ret < 0) 4074 dev_warn(smmu->dev, "failed to enable evtq irq\n"); 4075 } else { 4076 dev_warn(smmu->dev, "no evtq irq - events will not be reported!\n"); 4077 } 4078 4079 irq = smmu->gerr_irq; 4080 if (irq) { 4081 ret = devm_request_irq(smmu->dev, irq, arm_smmu_gerror_handler, 4082 0, "arm-smmu-v3-gerror", smmu); 4083 if (ret < 0) 4084 dev_warn(smmu->dev, "failed to enable gerror irq\n"); 4085 } else { 4086 dev_warn(smmu->dev, "no gerr irq - errors will not be reported!\n"); 4087 } 4088 4089 if (smmu->features & ARM_SMMU_FEAT_PRI) { 4090 irq = smmu->priq.q.irq; 4091 if (irq) { 4092 ret = devm_request_threaded_irq(smmu->dev, irq, NULL, 4093 arm_smmu_priq_thread, 4094 IRQF_ONESHOT, 4095 "arm-smmu-v3-priq", 4096 smmu); 4097 if (ret < 0) 4098 dev_warn(smmu->dev, 4099 "failed to enable priq irq\n"); 4100 } else { 4101 dev_warn(smmu->dev, "no priq irq - PRI will be broken\n"); 4102 } 4103 } 4104 } 4105 4106 static int arm_smmu_setup_irqs(struct arm_smmu_device *smmu) 4107 { 4108 int ret, irq; 4109 u32 irqen_flags = IRQ_CTRL_EVTQ_IRQEN | IRQ_CTRL_GERROR_IRQEN; 4110 4111 /* Disable IRQs first */ 4112 ret = arm_smmu_write_reg_sync(smmu, 0, ARM_SMMU_IRQ_CTRL, 4113 ARM_SMMU_IRQ_CTRLACK); 4114 if (ret) { 4115 dev_err(smmu->dev, "failed to disable irqs\n"); 4116 return ret; 4117 } 4118 4119 irq = smmu->combined_irq; 4120 if (irq) { 4121 /* 4122 * Cavium ThunderX2 implementation doesn't support unique irq 4123 * lines. Use a single irq line for all the SMMUv3 interrupts. 4124 */ 4125 ret = devm_request_threaded_irq(smmu->dev, irq, 4126 arm_smmu_combined_irq_handler, 4127 arm_smmu_combined_irq_thread, 4128 IRQF_ONESHOT, 4129 "arm-smmu-v3-combined-irq", smmu); 4130 if (ret < 0) 4131 dev_warn(smmu->dev, "failed to enable combined irq\n"); 4132 } else 4133 arm_smmu_setup_unique_irqs(smmu); 4134 4135 if (smmu->features & ARM_SMMU_FEAT_PRI) 4136 irqen_flags |= IRQ_CTRL_PRIQ_IRQEN; 4137 4138 /* Enable interrupt generation on the SMMU */ 4139 ret = arm_smmu_write_reg_sync(smmu, irqen_flags, 4140 ARM_SMMU_IRQ_CTRL, ARM_SMMU_IRQ_CTRLACK); 4141 if (ret) 4142 dev_warn(smmu->dev, "failed to enable irqs\n"); 4143 4144 return 0; 4145 } 4146 4147 static int arm_smmu_device_disable(struct arm_smmu_device *smmu) 4148 { 4149 int ret; 4150 4151 ret = arm_smmu_write_reg_sync(smmu, 0, ARM_SMMU_CR0, ARM_SMMU_CR0ACK); 4152 if (ret) 4153 dev_err(smmu->dev, "failed to clear cr0\n"); 4154 4155 return ret; 4156 } 4157 4158 static void arm_smmu_write_strtab(struct arm_smmu_device *smmu) 4159 { 4160 struct arm_smmu_strtab_cfg *cfg = &smmu->strtab_cfg; 4161 dma_addr_t dma; 4162 u32 reg; 4163 4164 if (smmu->features & ARM_SMMU_FEAT_2_LVL_STRTAB) { 4165 reg = FIELD_PREP(STRTAB_BASE_CFG_FMT, 4166 STRTAB_BASE_CFG_FMT_2LVL) | 4167 FIELD_PREP(STRTAB_BASE_CFG_LOG2SIZE, 4168 ilog2(cfg->l2.num_l1_ents) + STRTAB_SPLIT) | 4169 FIELD_PREP(STRTAB_BASE_CFG_SPLIT, STRTAB_SPLIT); 4170 dma = cfg->l2.l1_dma; 4171 } else { 4172 reg = FIELD_PREP(STRTAB_BASE_CFG_FMT, 4173 STRTAB_BASE_CFG_FMT_LINEAR) | 4174 FIELD_PREP(STRTAB_BASE_CFG_LOG2SIZE, smmu->sid_bits); 4175 dma = cfg->linear.ste_dma; 4176 } 4177 writeq_relaxed((dma & STRTAB_BASE_ADDR_MASK) | STRTAB_BASE_RA, 4178 smmu->base + ARM_SMMU_STRTAB_BASE); 4179 writel_relaxed(reg, smmu->base + ARM_SMMU_STRTAB_BASE_CFG); 4180 } 4181 4182 static int arm_smmu_device_reset(struct arm_smmu_device *smmu) 4183 { 4184 int ret; 4185 u32 reg, enables; 4186 struct arm_smmu_cmdq_ent cmd; 4187 4188 /* Clear CR0 and sync (disables SMMU and queue processing) */ 4189 reg = readl_relaxed(smmu->base + ARM_SMMU_CR0); 4190 if (reg & CR0_SMMUEN) { 4191 dev_warn(smmu->dev, "SMMU currently enabled! Resetting...\n"); 4192 arm_smmu_update_gbpa(smmu, GBPA_ABORT, 0); 4193 } 4194 4195 ret = arm_smmu_device_disable(smmu); 4196 if (ret) 4197 return ret; 4198 4199 /* CR1 (table and queue memory attributes) */ 4200 reg = FIELD_PREP(CR1_TABLE_SH, ARM_SMMU_SH_ISH) | 4201 FIELD_PREP(CR1_TABLE_OC, CR1_CACHE_WB) | 4202 FIELD_PREP(CR1_TABLE_IC, CR1_CACHE_WB) | 4203 FIELD_PREP(CR1_QUEUE_SH, ARM_SMMU_SH_ISH) | 4204 FIELD_PREP(CR1_QUEUE_OC, CR1_CACHE_WB) | 4205 FIELD_PREP(CR1_QUEUE_IC, CR1_CACHE_WB); 4206 writel_relaxed(reg, smmu->base + ARM_SMMU_CR1); 4207 4208 /* CR2 (random crap) */ 4209 reg = CR2_PTM | CR2_RECINVSID; 4210 4211 if (smmu->features & ARM_SMMU_FEAT_E2H) 4212 reg |= CR2_E2H; 4213 4214 writel_relaxed(reg, smmu->base + ARM_SMMU_CR2); 4215 4216 /* Stream table */ 4217 arm_smmu_write_strtab(smmu); 4218 4219 /* Command queue */ 4220 writeq_relaxed(smmu->cmdq.q.q_base, smmu->base + ARM_SMMU_CMDQ_BASE); 4221 writel_relaxed(smmu->cmdq.q.llq.prod, smmu->base + ARM_SMMU_CMDQ_PROD); 4222 writel_relaxed(smmu->cmdq.q.llq.cons, smmu->base + ARM_SMMU_CMDQ_CONS); 4223 4224 enables = CR0_CMDQEN; 4225 ret = arm_smmu_write_reg_sync(smmu, enables, ARM_SMMU_CR0, 4226 ARM_SMMU_CR0ACK); 4227 if (ret) { 4228 dev_err(smmu->dev, "failed to enable command queue\n"); 4229 return ret; 4230 } 4231 4232 /* Invalidate any cached configuration */ 4233 cmd.opcode = CMDQ_OP_CFGI_ALL; 4234 arm_smmu_cmdq_issue_cmd_with_sync(smmu, &cmd); 4235 4236 /* Invalidate any stale TLB entries */ 4237 if (smmu->features & ARM_SMMU_FEAT_HYP) { 4238 cmd.opcode = CMDQ_OP_TLBI_EL2_ALL; 4239 arm_smmu_cmdq_issue_cmd_with_sync(smmu, &cmd); 4240 } 4241 4242 cmd.opcode = CMDQ_OP_TLBI_NSNH_ALL; 4243 arm_smmu_cmdq_issue_cmd_with_sync(smmu, &cmd); 4244 4245 /* Event queue */ 4246 writeq_relaxed(smmu->evtq.q.q_base, smmu->base + ARM_SMMU_EVTQ_BASE); 4247 writel_relaxed(smmu->evtq.q.llq.prod, smmu->page1 + ARM_SMMU_EVTQ_PROD); 4248 writel_relaxed(smmu->evtq.q.llq.cons, smmu->page1 + ARM_SMMU_EVTQ_CONS); 4249 4250 enables |= CR0_EVTQEN; 4251 ret = arm_smmu_write_reg_sync(smmu, enables, ARM_SMMU_CR0, 4252 ARM_SMMU_CR0ACK); 4253 if (ret) { 4254 dev_err(smmu->dev, "failed to enable event queue\n"); 4255 return ret; 4256 } 4257 4258 /* PRI queue */ 4259 if (smmu->features & ARM_SMMU_FEAT_PRI) { 4260 writeq_relaxed(smmu->priq.q.q_base, 4261 smmu->base + ARM_SMMU_PRIQ_BASE); 4262 writel_relaxed(smmu->priq.q.llq.prod, 4263 smmu->page1 + ARM_SMMU_PRIQ_PROD); 4264 writel_relaxed(smmu->priq.q.llq.cons, 4265 smmu->page1 + ARM_SMMU_PRIQ_CONS); 4266 4267 enables |= CR0_PRIQEN; 4268 ret = arm_smmu_write_reg_sync(smmu, enables, ARM_SMMU_CR0, 4269 ARM_SMMU_CR0ACK); 4270 if (ret) { 4271 dev_err(smmu->dev, "failed to enable PRI queue\n"); 4272 return ret; 4273 } 4274 } 4275 4276 if (smmu->features & ARM_SMMU_FEAT_ATS) { 4277 enables |= CR0_ATSCHK; 4278 ret = arm_smmu_write_reg_sync(smmu, enables, ARM_SMMU_CR0, 4279 ARM_SMMU_CR0ACK); 4280 if (ret) { 4281 dev_err(smmu->dev, "failed to enable ATS check\n"); 4282 return ret; 4283 } 4284 } 4285 4286 ret = arm_smmu_setup_irqs(smmu); 4287 if (ret) { 4288 dev_err(smmu->dev, "failed to setup irqs\n"); 4289 return ret; 4290 } 4291 4292 if (is_kdump_kernel()) 4293 enables &= ~(CR0_EVTQEN | CR0_PRIQEN); 4294 4295 /* Enable the SMMU interface */ 4296 enables |= CR0_SMMUEN; 4297 ret = arm_smmu_write_reg_sync(smmu, enables, ARM_SMMU_CR0, 4298 ARM_SMMU_CR0ACK); 4299 if (ret) { 4300 dev_err(smmu->dev, "failed to enable SMMU interface\n"); 4301 return ret; 4302 } 4303 4304 if (smmu->impl_ops && smmu->impl_ops->device_reset) { 4305 ret = smmu->impl_ops->device_reset(smmu); 4306 if (ret) { 4307 dev_err(smmu->dev, "failed to reset impl\n"); 4308 return ret; 4309 } 4310 } 4311 4312 return 0; 4313 } 4314 4315 #define IIDR_IMPLEMENTER_ARM 0x43b 4316 #define IIDR_PRODUCTID_ARM_MMU_600 0x483 4317 #define IIDR_PRODUCTID_ARM_MMU_700 0x487 4318 4319 static void arm_smmu_device_iidr_probe(struct arm_smmu_device *smmu) 4320 { 4321 u32 reg; 4322 unsigned int implementer, productid, variant, revision; 4323 4324 reg = readl_relaxed(smmu->base + ARM_SMMU_IIDR); 4325 implementer = FIELD_GET(IIDR_IMPLEMENTER, reg); 4326 productid = FIELD_GET(IIDR_PRODUCTID, reg); 4327 variant = FIELD_GET(IIDR_VARIANT, reg); 4328 revision = FIELD_GET(IIDR_REVISION, reg); 4329 4330 switch (implementer) { 4331 case IIDR_IMPLEMENTER_ARM: 4332 switch (productid) { 4333 case IIDR_PRODUCTID_ARM_MMU_600: 4334 /* Arm erratum 1076982 */ 4335 if (variant == 0 && revision <= 2) 4336 smmu->features &= ~ARM_SMMU_FEAT_SEV; 4337 /* Arm erratum 1209401 */ 4338 if (variant < 2) 4339 smmu->features &= ~ARM_SMMU_FEAT_NESTING; 4340 break; 4341 case IIDR_PRODUCTID_ARM_MMU_700: 4342 /* Arm erratum 2812531 */ 4343 smmu->features &= ~ARM_SMMU_FEAT_BTM; 4344 smmu->options |= ARM_SMMU_OPT_CMDQ_FORCE_SYNC; 4345 /* Arm errata 2268618, 2812531 */ 4346 smmu->features &= ~ARM_SMMU_FEAT_NESTING; 4347 break; 4348 } 4349 break; 4350 } 4351 } 4352 4353 static void arm_smmu_get_httu(struct arm_smmu_device *smmu, u32 reg) 4354 { 4355 u32 fw_features = smmu->features & (ARM_SMMU_FEAT_HA | ARM_SMMU_FEAT_HD); 4356 u32 hw_features = 0; 4357 4358 switch (FIELD_GET(IDR0_HTTU, reg)) { 4359 case IDR0_HTTU_ACCESS_DIRTY: 4360 hw_features |= ARM_SMMU_FEAT_HD; 4361 fallthrough; 4362 case IDR0_HTTU_ACCESS: 4363 hw_features |= ARM_SMMU_FEAT_HA; 4364 } 4365 4366 if (smmu->dev->of_node) 4367 smmu->features |= hw_features; 4368 else if (hw_features != fw_features) 4369 /* ACPI IORT sets the HTTU bits */ 4370 dev_warn(smmu->dev, 4371 "IDR0.HTTU features(0x%x) overridden by FW configuration (0x%x)\n", 4372 hw_features, fw_features); 4373 } 4374 4375 static int arm_smmu_device_hw_probe(struct arm_smmu_device *smmu) 4376 { 4377 u32 reg; 4378 bool coherent = smmu->features & ARM_SMMU_FEAT_COHERENCY; 4379 4380 /* IDR0 */ 4381 reg = readl_relaxed(smmu->base + ARM_SMMU_IDR0); 4382 4383 /* 2-level structures */ 4384 if (FIELD_GET(IDR0_ST_LVL, reg) == IDR0_ST_LVL_2LVL) 4385 smmu->features |= ARM_SMMU_FEAT_2_LVL_STRTAB; 4386 4387 if (reg & IDR0_CD2L) 4388 smmu->features |= ARM_SMMU_FEAT_2_LVL_CDTAB; 4389 4390 /* 4391 * Translation table endianness. 4392 * We currently require the same endianness as the CPU, but this 4393 * could be changed later by adding a new IO_PGTABLE_QUIRK. 4394 */ 4395 switch (FIELD_GET(IDR0_TTENDIAN, reg)) { 4396 case IDR0_TTENDIAN_MIXED: 4397 smmu->features |= ARM_SMMU_FEAT_TT_LE | ARM_SMMU_FEAT_TT_BE; 4398 break; 4399 #ifdef __BIG_ENDIAN 4400 case IDR0_TTENDIAN_BE: 4401 smmu->features |= ARM_SMMU_FEAT_TT_BE; 4402 break; 4403 #else 4404 case IDR0_TTENDIAN_LE: 4405 smmu->features |= ARM_SMMU_FEAT_TT_LE; 4406 break; 4407 #endif 4408 default: 4409 dev_err(smmu->dev, "unknown/unsupported TT endianness!\n"); 4410 return -ENXIO; 4411 } 4412 4413 /* Boolean feature flags */ 4414 if (IS_ENABLED(CONFIG_PCI_PRI) && reg & IDR0_PRI) 4415 smmu->features |= ARM_SMMU_FEAT_PRI; 4416 4417 if (IS_ENABLED(CONFIG_PCI_ATS) && reg & IDR0_ATS) 4418 smmu->features |= ARM_SMMU_FEAT_ATS; 4419 4420 if (reg & IDR0_SEV) 4421 smmu->features |= ARM_SMMU_FEAT_SEV; 4422 4423 if (reg & IDR0_MSI) { 4424 smmu->features |= ARM_SMMU_FEAT_MSI; 4425 if (coherent && !disable_msipolling) 4426 smmu->options |= ARM_SMMU_OPT_MSIPOLL; 4427 } 4428 4429 if (reg & IDR0_HYP) { 4430 smmu->features |= ARM_SMMU_FEAT_HYP; 4431 if (cpus_have_cap(ARM64_HAS_VIRT_HOST_EXTN)) 4432 smmu->features |= ARM_SMMU_FEAT_E2H; 4433 } 4434 4435 arm_smmu_get_httu(smmu, reg); 4436 4437 /* 4438 * The coherency feature as set by FW is used in preference to the ID 4439 * register, but warn on mismatch. 4440 */ 4441 if (!!(reg & IDR0_COHACC) != coherent) 4442 dev_warn(smmu->dev, "IDR0.COHACC overridden by FW configuration (%s)\n", 4443 str_true_false(coherent)); 4444 4445 switch (FIELD_GET(IDR0_STALL_MODEL, reg)) { 4446 case IDR0_STALL_MODEL_FORCE: 4447 smmu->features |= ARM_SMMU_FEAT_STALL_FORCE; 4448 fallthrough; 4449 case IDR0_STALL_MODEL_STALL: 4450 smmu->features |= ARM_SMMU_FEAT_STALLS; 4451 } 4452 4453 if (reg & IDR0_S1P) 4454 smmu->features |= ARM_SMMU_FEAT_TRANS_S1; 4455 4456 if (reg & IDR0_S2P) 4457 smmu->features |= ARM_SMMU_FEAT_TRANS_S2; 4458 4459 if (!(reg & (IDR0_S1P | IDR0_S2P))) { 4460 dev_err(smmu->dev, "no translation support!\n"); 4461 return -ENXIO; 4462 } 4463 4464 /* We only support the AArch64 table format at present */ 4465 switch (FIELD_GET(IDR0_TTF, reg)) { 4466 case IDR0_TTF_AARCH32_64: 4467 smmu->ias = 40; 4468 fallthrough; 4469 case IDR0_TTF_AARCH64: 4470 break; 4471 default: 4472 dev_err(smmu->dev, "AArch64 table format not supported!\n"); 4473 return -ENXIO; 4474 } 4475 4476 /* ASID/VMID sizes */ 4477 smmu->asid_bits = reg & IDR0_ASID16 ? 16 : 8; 4478 smmu->vmid_bits = reg & IDR0_VMID16 ? 16 : 8; 4479 4480 /* IDR1 */ 4481 reg = readl_relaxed(smmu->base + ARM_SMMU_IDR1); 4482 if (reg & (IDR1_TABLES_PRESET | IDR1_QUEUES_PRESET | IDR1_REL)) { 4483 dev_err(smmu->dev, "embedded implementation not supported\n"); 4484 return -ENXIO; 4485 } 4486 4487 if (reg & IDR1_ATTR_TYPES_OVR) 4488 smmu->features |= ARM_SMMU_FEAT_ATTR_TYPES_OVR; 4489 4490 /* Queue sizes, capped to ensure natural alignment */ 4491 smmu->cmdq.q.llq.max_n_shift = min_t(u32, CMDQ_MAX_SZ_SHIFT, 4492 FIELD_GET(IDR1_CMDQS, reg)); 4493 if (smmu->cmdq.q.llq.max_n_shift <= ilog2(CMDQ_BATCH_ENTRIES)) { 4494 /* 4495 * We don't support splitting up batches, so one batch of 4496 * commands plus an extra sync needs to fit inside the command 4497 * queue. There's also no way we can handle the weird alignment 4498 * restrictions on the base pointer for a unit-length queue. 4499 */ 4500 dev_err(smmu->dev, "command queue size <= %d entries not supported\n", 4501 CMDQ_BATCH_ENTRIES); 4502 return -ENXIO; 4503 } 4504 4505 smmu->evtq.q.llq.max_n_shift = min_t(u32, EVTQ_MAX_SZ_SHIFT, 4506 FIELD_GET(IDR1_EVTQS, reg)); 4507 smmu->priq.q.llq.max_n_shift = min_t(u32, PRIQ_MAX_SZ_SHIFT, 4508 FIELD_GET(IDR1_PRIQS, reg)); 4509 4510 /* SID/SSID sizes */ 4511 smmu->ssid_bits = FIELD_GET(IDR1_SSIDSIZE, reg); 4512 smmu->sid_bits = FIELD_GET(IDR1_SIDSIZE, reg); 4513 smmu->iommu.max_pasids = 1UL << smmu->ssid_bits; 4514 4515 /* 4516 * If the SMMU supports fewer bits than would fill a single L2 stream 4517 * table, use a linear table instead. 4518 */ 4519 if (smmu->sid_bits <= STRTAB_SPLIT) 4520 smmu->features &= ~ARM_SMMU_FEAT_2_LVL_STRTAB; 4521 4522 /* IDR3 */ 4523 reg = readl_relaxed(smmu->base + ARM_SMMU_IDR3); 4524 if (FIELD_GET(IDR3_RIL, reg)) 4525 smmu->features |= ARM_SMMU_FEAT_RANGE_INV; 4526 if (FIELD_GET(IDR3_FWB, reg)) 4527 smmu->features |= ARM_SMMU_FEAT_S2FWB; 4528 4529 if (FIELD_GET(IDR3_BBM, reg) == 2) 4530 smmu->features |= ARM_SMMU_FEAT_BBML2; 4531 4532 /* IDR5 */ 4533 reg = readl_relaxed(smmu->base + ARM_SMMU_IDR5); 4534 4535 /* Maximum number of outstanding stalls */ 4536 smmu->evtq.max_stalls = FIELD_GET(IDR5_STALL_MAX, reg); 4537 4538 /* Page sizes */ 4539 if (reg & IDR5_GRAN64K) 4540 smmu->pgsize_bitmap |= SZ_64K | SZ_512M; 4541 if (reg & IDR5_GRAN16K) 4542 smmu->pgsize_bitmap |= SZ_16K | SZ_32M; 4543 if (reg & IDR5_GRAN4K) 4544 smmu->pgsize_bitmap |= SZ_4K | SZ_2M | SZ_1G; 4545 4546 /* Input address size */ 4547 if (FIELD_GET(IDR5_VAX, reg) == IDR5_VAX_52_BIT) 4548 smmu->features |= ARM_SMMU_FEAT_VAX; 4549 4550 /* Output address size */ 4551 switch (FIELD_GET(IDR5_OAS, reg)) { 4552 case IDR5_OAS_32_BIT: 4553 smmu->oas = 32; 4554 break; 4555 case IDR5_OAS_36_BIT: 4556 smmu->oas = 36; 4557 break; 4558 case IDR5_OAS_40_BIT: 4559 smmu->oas = 40; 4560 break; 4561 case IDR5_OAS_42_BIT: 4562 smmu->oas = 42; 4563 break; 4564 case IDR5_OAS_44_BIT: 4565 smmu->oas = 44; 4566 break; 4567 case IDR5_OAS_52_BIT: 4568 smmu->oas = 52; 4569 smmu->pgsize_bitmap |= 1ULL << 42; /* 4TB */ 4570 break; 4571 default: 4572 dev_info(smmu->dev, 4573 "unknown output address size. Truncating to 48-bit\n"); 4574 fallthrough; 4575 case IDR5_OAS_48_BIT: 4576 smmu->oas = 48; 4577 } 4578 4579 /* Set the DMA mask for our table walker */ 4580 if (dma_set_mask_and_coherent(smmu->dev, DMA_BIT_MASK(smmu->oas))) 4581 dev_warn(smmu->dev, 4582 "failed to set DMA mask for table walker\n"); 4583 4584 smmu->ias = max(smmu->ias, smmu->oas); 4585 4586 if ((smmu->features & ARM_SMMU_FEAT_TRANS_S1) && 4587 (smmu->features & ARM_SMMU_FEAT_TRANS_S2)) 4588 smmu->features |= ARM_SMMU_FEAT_NESTING; 4589 4590 arm_smmu_device_iidr_probe(smmu); 4591 4592 if (arm_smmu_sva_supported(smmu)) 4593 smmu->features |= ARM_SMMU_FEAT_SVA; 4594 4595 dev_info(smmu->dev, "ias %lu-bit, oas %lu-bit (features 0x%08x)\n", 4596 smmu->ias, smmu->oas, smmu->features); 4597 return 0; 4598 } 4599 4600 #ifdef CONFIG_ACPI 4601 #ifdef CONFIG_TEGRA241_CMDQV 4602 static void acpi_smmu_dsdt_probe_tegra241_cmdqv(struct acpi_iort_node *node, 4603 struct arm_smmu_device *smmu) 4604 { 4605 const char *uid = kasprintf(GFP_KERNEL, "%u", node->identifier); 4606 struct acpi_device *adev; 4607 4608 /* Look for an NVDA200C node whose _UID matches the SMMU node ID */ 4609 adev = acpi_dev_get_first_match_dev("NVDA200C", uid, -1); 4610 if (adev) { 4611 /* Tegra241 CMDQV driver is responsible for put_device() */ 4612 smmu->impl_dev = &adev->dev; 4613 smmu->options |= ARM_SMMU_OPT_TEGRA241_CMDQV; 4614 dev_info(smmu->dev, "found companion CMDQV device: %s\n", 4615 dev_name(smmu->impl_dev)); 4616 } 4617 kfree(uid); 4618 } 4619 #else 4620 static void acpi_smmu_dsdt_probe_tegra241_cmdqv(struct acpi_iort_node *node, 4621 struct arm_smmu_device *smmu) 4622 { 4623 } 4624 #endif 4625 4626 static int acpi_smmu_iort_probe_model(struct acpi_iort_node *node, 4627 struct arm_smmu_device *smmu) 4628 { 4629 struct acpi_iort_smmu_v3 *iort_smmu = 4630 (struct acpi_iort_smmu_v3 *)node->node_data; 4631 4632 switch (iort_smmu->model) { 4633 case ACPI_IORT_SMMU_V3_CAVIUM_CN99XX: 4634 smmu->options |= ARM_SMMU_OPT_PAGE0_REGS_ONLY; 4635 break; 4636 case ACPI_IORT_SMMU_V3_HISILICON_HI161X: 4637 smmu->options |= ARM_SMMU_OPT_SKIP_PREFETCH; 4638 break; 4639 case ACPI_IORT_SMMU_V3_GENERIC: 4640 /* 4641 * Tegra241 implementation stores its SMMU options and impl_dev 4642 * in DSDT. Thus, go through the ACPI tables unconditionally. 4643 */ 4644 acpi_smmu_dsdt_probe_tegra241_cmdqv(node, smmu); 4645 break; 4646 } 4647 4648 dev_notice(smmu->dev, "option mask 0x%x\n", smmu->options); 4649 return 0; 4650 } 4651 4652 static int arm_smmu_device_acpi_probe(struct platform_device *pdev, 4653 struct arm_smmu_device *smmu) 4654 { 4655 struct acpi_iort_smmu_v3 *iort_smmu; 4656 struct device *dev = smmu->dev; 4657 struct acpi_iort_node *node; 4658 4659 node = *(struct acpi_iort_node **)dev_get_platdata(dev); 4660 4661 /* Retrieve SMMUv3 specific data */ 4662 iort_smmu = (struct acpi_iort_smmu_v3 *)node->node_data; 4663 4664 if (iort_smmu->flags & ACPI_IORT_SMMU_V3_COHACC_OVERRIDE) 4665 smmu->features |= ARM_SMMU_FEAT_COHERENCY; 4666 4667 switch (FIELD_GET(ACPI_IORT_SMMU_V3_HTTU_OVERRIDE, iort_smmu->flags)) { 4668 case IDR0_HTTU_ACCESS_DIRTY: 4669 smmu->features |= ARM_SMMU_FEAT_HD; 4670 fallthrough; 4671 case IDR0_HTTU_ACCESS: 4672 smmu->features |= ARM_SMMU_FEAT_HA; 4673 } 4674 4675 return acpi_smmu_iort_probe_model(node, smmu); 4676 } 4677 #else 4678 static inline int arm_smmu_device_acpi_probe(struct platform_device *pdev, 4679 struct arm_smmu_device *smmu) 4680 { 4681 return -ENODEV; 4682 } 4683 #endif 4684 4685 static int arm_smmu_device_dt_probe(struct platform_device *pdev, 4686 struct arm_smmu_device *smmu) 4687 { 4688 struct device *dev = &pdev->dev; 4689 u32 cells; 4690 int ret = -EINVAL; 4691 4692 if (of_property_read_u32(dev->of_node, "#iommu-cells", &cells)) 4693 dev_err(dev, "missing #iommu-cells property\n"); 4694 else if (cells != 1) 4695 dev_err(dev, "invalid #iommu-cells value (%d)\n", cells); 4696 else 4697 ret = 0; 4698 4699 parse_driver_options(smmu); 4700 4701 if (of_dma_is_coherent(dev->of_node)) 4702 smmu->features |= ARM_SMMU_FEAT_COHERENCY; 4703 4704 return ret; 4705 } 4706 4707 static unsigned long arm_smmu_resource_size(struct arm_smmu_device *smmu) 4708 { 4709 if (smmu->options & ARM_SMMU_OPT_PAGE0_REGS_ONLY) 4710 return SZ_64K; 4711 else 4712 return SZ_128K; 4713 } 4714 4715 static void __iomem *arm_smmu_ioremap(struct device *dev, resource_size_t start, 4716 resource_size_t size) 4717 { 4718 struct resource res = DEFINE_RES_MEM(start, size); 4719 4720 return devm_ioremap_resource(dev, &res); 4721 } 4722 4723 static void arm_smmu_rmr_install_bypass_ste(struct arm_smmu_device *smmu) 4724 { 4725 struct list_head rmr_list; 4726 struct iommu_resv_region *e; 4727 4728 INIT_LIST_HEAD(&rmr_list); 4729 iort_get_rmr_sids(dev_fwnode(smmu->dev), &rmr_list); 4730 4731 list_for_each_entry(e, &rmr_list, list) { 4732 struct iommu_iort_rmr_data *rmr; 4733 int ret, i; 4734 4735 rmr = container_of(e, struct iommu_iort_rmr_data, rr); 4736 for (i = 0; i < rmr->num_sids; i++) { 4737 ret = arm_smmu_init_sid_strtab(smmu, rmr->sids[i]); 4738 if (ret) { 4739 dev_err(smmu->dev, "RMR SID(0x%x) bypass failed\n", 4740 rmr->sids[i]); 4741 continue; 4742 } 4743 4744 /* 4745 * STE table is not programmed to HW, see 4746 * arm_smmu_initial_bypass_stes() 4747 */ 4748 arm_smmu_make_bypass_ste(smmu, 4749 arm_smmu_get_step_for_sid(smmu, rmr->sids[i])); 4750 } 4751 } 4752 4753 iort_put_rmr_sids(dev_fwnode(smmu->dev), &rmr_list); 4754 } 4755 4756 static void arm_smmu_impl_remove(void *data) 4757 { 4758 struct arm_smmu_device *smmu = data; 4759 4760 if (smmu->impl_ops && smmu->impl_ops->device_remove) 4761 smmu->impl_ops->device_remove(smmu); 4762 } 4763 4764 /* 4765 * Probe all the compiled in implementations. Each one checks to see if it 4766 * matches this HW and if so returns a devm_krealloc'd arm_smmu_device which 4767 * replaces the callers. Otherwise the original is returned or ERR_PTR. 4768 */ 4769 static struct arm_smmu_device *arm_smmu_impl_probe(struct arm_smmu_device *smmu) 4770 { 4771 struct arm_smmu_device *new_smmu = ERR_PTR(-ENODEV); 4772 const struct arm_smmu_impl_ops *ops; 4773 int ret; 4774 4775 if (smmu->impl_dev && (smmu->options & ARM_SMMU_OPT_TEGRA241_CMDQV)) 4776 new_smmu = tegra241_cmdqv_probe(smmu); 4777 4778 if (new_smmu == ERR_PTR(-ENODEV)) 4779 return smmu; 4780 if (IS_ERR(new_smmu)) 4781 return new_smmu; 4782 4783 ops = new_smmu->impl_ops; 4784 if (ops) { 4785 /* get_viommu_size and vsmmu_init ops must be paired */ 4786 if (WARN_ON(!ops->get_viommu_size != !ops->vsmmu_init)) { 4787 ret = -EINVAL; 4788 goto err_remove; 4789 } 4790 } 4791 4792 ret = devm_add_action_or_reset(new_smmu->dev, arm_smmu_impl_remove, 4793 new_smmu); 4794 if (ret) 4795 return ERR_PTR(ret); 4796 return new_smmu; 4797 4798 err_remove: 4799 arm_smmu_impl_remove(new_smmu); 4800 return ERR_PTR(ret); 4801 } 4802 4803 static int arm_smmu_device_probe(struct platform_device *pdev) 4804 { 4805 int irq, ret; 4806 struct resource *res; 4807 resource_size_t ioaddr; 4808 struct arm_smmu_device *smmu; 4809 struct device *dev = &pdev->dev; 4810 4811 smmu = devm_kzalloc(dev, sizeof(*smmu), GFP_KERNEL); 4812 if (!smmu) 4813 return -ENOMEM; 4814 smmu->dev = dev; 4815 4816 if (dev->of_node) { 4817 ret = arm_smmu_device_dt_probe(pdev, smmu); 4818 } else { 4819 ret = arm_smmu_device_acpi_probe(pdev, smmu); 4820 } 4821 if (ret) 4822 return ret; 4823 4824 smmu = arm_smmu_impl_probe(smmu); 4825 if (IS_ERR(smmu)) 4826 return PTR_ERR(smmu); 4827 4828 /* Base address */ 4829 res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 4830 if (!res) 4831 return -EINVAL; 4832 if (resource_size(res) < arm_smmu_resource_size(smmu)) { 4833 dev_err(dev, "MMIO region too small (%pr)\n", res); 4834 return -EINVAL; 4835 } 4836 ioaddr = res->start; 4837 4838 /* 4839 * Don't map the IMPLEMENTATION DEFINED regions, since they may contain 4840 * the PMCG registers which are reserved by the PMU driver. 4841 */ 4842 smmu->base = arm_smmu_ioremap(dev, ioaddr, ARM_SMMU_REG_SZ); 4843 if (IS_ERR(smmu->base)) 4844 return PTR_ERR(smmu->base); 4845 4846 if (arm_smmu_resource_size(smmu) > SZ_64K) { 4847 smmu->page1 = arm_smmu_ioremap(dev, ioaddr + SZ_64K, 4848 ARM_SMMU_REG_SZ); 4849 if (IS_ERR(smmu->page1)) 4850 return PTR_ERR(smmu->page1); 4851 } else { 4852 smmu->page1 = smmu->base; 4853 } 4854 4855 /* Interrupt lines */ 4856 4857 irq = platform_get_irq_byname_optional(pdev, "combined"); 4858 if (irq > 0) 4859 smmu->combined_irq = irq; 4860 else { 4861 irq = platform_get_irq_byname_optional(pdev, "eventq"); 4862 if (irq > 0) 4863 smmu->evtq.q.irq = irq; 4864 4865 irq = platform_get_irq_byname_optional(pdev, "priq"); 4866 if (irq > 0) 4867 smmu->priq.q.irq = irq; 4868 4869 irq = platform_get_irq_byname_optional(pdev, "gerror"); 4870 if (irq > 0) 4871 smmu->gerr_irq = irq; 4872 } 4873 /* Probe the h/w */ 4874 ret = arm_smmu_device_hw_probe(smmu); 4875 if (ret) 4876 return ret; 4877 4878 /* Initialise in-memory data structures */ 4879 ret = arm_smmu_init_structures(smmu); 4880 if (ret) 4881 goto err_free_iopf; 4882 4883 /* Record our private device structure */ 4884 platform_set_drvdata(pdev, smmu); 4885 4886 /* Check for RMRs and install bypass STEs if any */ 4887 arm_smmu_rmr_install_bypass_ste(smmu); 4888 4889 /* Reset the device */ 4890 ret = arm_smmu_device_reset(smmu); 4891 if (ret) 4892 goto err_disable; 4893 4894 /* And we're up. Go go go! */ 4895 ret = iommu_device_sysfs_add(&smmu->iommu, dev, NULL, 4896 "smmu3.%pa", &ioaddr); 4897 if (ret) 4898 goto err_disable; 4899 4900 ret = iommu_device_register(&smmu->iommu, &arm_smmu_ops, dev); 4901 if (ret) { 4902 dev_err(dev, "Failed to register iommu\n"); 4903 goto err_free_sysfs; 4904 } 4905 4906 return 0; 4907 4908 err_free_sysfs: 4909 iommu_device_sysfs_remove(&smmu->iommu); 4910 err_disable: 4911 arm_smmu_device_disable(smmu); 4912 err_free_iopf: 4913 iopf_queue_free(smmu->evtq.iopf); 4914 return ret; 4915 } 4916 4917 static void arm_smmu_device_remove(struct platform_device *pdev) 4918 { 4919 struct arm_smmu_device *smmu = platform_get_drvdata(pdev); 4920 4921 iommu_device_unregister(&smmu->iommu); 4922 iommu_device_sysfs_remove(&smmu->iommu); 4923 arm_smmu_device_disable(smmu); 4924 iopf_queue_free(smmu->evtq.iopf); 4925 ida_destroy(&smmu->vmid_map); 4926 } 4927 4928 static void arm_smmu_device_shutdown(struct platform_device *pdev) 4929 { 4930 struct arm_smmu_device *smmu = platform_get_drvdata(pdev); 4931 4932 arm_smmu_device_disable(smmu); 4933 } 4934 4935 static const struct of_device_id arm_smmu_of_match[] = { 4936 { .compatible = "arm,smmu-v3", }, 4937 { }, 4938 }; 4939 MODULE_DEVICE_TABLE(of, arm_smmu_of_match); 4940 4941 static void arm_smmu_driver_unregister(struct platform_driver *drv) 4942 { 4943 arm_smmu_sva_notifier_synchronize(); 4944 platform_driver_unregister(drv); 4945 } 4946 4947 static struct platform_driver arm_smmu_driver = { 4948 .driver = { 4949 .name = "arm-smmu-v3", 4950 .of_match_table = arm_smmu_of_match, 4951 .suppress_bind_attrs = true, 4952 }, 4953 .probe = arm_smmu_device_probe, 4954 .remove = arm_smmu_device_remove, 4955 .shutdown = arm_smmu_device_shutdown, 4956 }; 4957 module_driver(arm_smmu_driver, platform_driver_register, 4958 arm_smmu_driver_unregister); 4959 4960 MODULE_DESCRIPTION("IOMMU API for ARM architected SMMUv3 implementations"); 4961 MODULE_AUTHOR("Will Deacon <[email protected]>"); 4962 MODULE_ALIAS("platform:arm-smmu-v3"); 4963 MODULE_LICENSE("GPL v2");