1 // SPDX-License-Identifier: GPL-2.0-only 2 /* 3 * IOMMU API for ARM architected SMMU implementations. 4 * 5 * Copyright (C) 2013 ARM Limited 6 * 7 * Author: Will Deacon <will.deacon@arm.com> 8 * 9 * This driver currently supports: 10 * - SMMUv1 and v2 implementations 11 * - Stream-matching and stream-indexing 12 * - v7/v8 long-descriptor format 13 * - Non-secure access to the SMMU 14 * - Context fault reporting 15 * - Extended Stream ID (16 bit) 16 */ 17 18 #define pr_fmt(fmt) "arm-smmu: " fmt 19 20 #include <linux/acpi.h> 21 #include <linux/acpi_iort.h> 22 #include <linux/bitfield.h> 23 #include <linux/delay.h> 24 #include <linux/dma-mapping.h> 25 #include <linux/err.h> 26 #include <linux/interrupt.h> 27 #include <linux/io.h> 28 #include <linux/iopoll.h> 29 #include <linux/module.h> 30 #include <linux/of.h> 31 #include <linux/of_address.h> 32 #include <linux/pci.h> 33 #include <linux/platform_device.h> 34 #include <linux/pm_runtime.h> 35 #include <linux/ratelimit.h> 36 #include <linux/slab.h> 37 38 #include <linux/fsl/mc.h> 39 40 #include "arm-smmu.h" 41 #include "../../dma-iommu.h" 42 43 /* 44 * Apparently, some Qualcomm arm64 platforms which appear to expose their SMMU 45 * global register space are still, in fact, using a hypervisor to mediate it 46 * by trapping and emulating register accesses. Sadly, some deployed versions 47 * of said trapping code have bugs wherein they go horribly wrong for stores 48 * using r31 (i.e. XZR/WZR) as the source register. 49 */ 50 #define QCOM_DUMMY_VAL -1 51 52 #define MSI_IOVA_BASE 0x8000000 53 #define MSI_IOVA_LENGTH 0x100000 54 55 static int force_stage; 56 module_param(force_stage, int, S_IRUGO); 57 MODULE_PARM_DESC(force_stage, 58 "Force SMMU mappings to be installed at a particular stage of translation. A value of '1' or '2' forces the corresponding stage. All other values are ignored (i.e. no stage is forced). Note that selecting a specific stage will disable support for nested translation."); 59 static bool disable_bypass = 60 IS_ENABLED(CONFIG_ARM_SMMU_DISABLE_BYPASS_BY_DEFAULT); 61 module_param(disable_bypass, bool, S_IRUGO); 62 MODULE_PARM_DESC(disable_bypass, 63 "Disable bypass streams such that incoming transactions from devices that are not attached to an iommu domain will report an abort back to the device and will not be allowed to pass through the SMMU."); 64 65 #define s2cr_init_val (struct arm_smmu_s2cr){ \ 66 .type = disable_bypass ? S2CR_TYPE_FAULT : S2CR_TYPE_BYPASS, \ 67 } 68 69 static bool using_legacy_binding, using_generic_binding; 70 71 static inline int arm_smmu_rpm_get(struct arm_smmu_device *smmu) 72 { 73 if (pm_runtime_enabled(smmu->dev)) 74 return pm_runtime_resume_and_get(smmu->dev); 75 76 return 0; 77 } 78 79 static inline void arm_smmu_rpm_put(struct arm_smmu_device *smmu) 80 { 81 if (pm_runtime_enabled(smmu->dev)) 82 pm_runtime_put_autosuspend(smmu->dev); 83 } 84 85 static struct arm_smmu_domain *to_smmu_domain(struct iommu_domain *dom) 86 { 87 return container_of(dom, struct arm_smmu_domain, domain); 88 } 89 90 static struct platform_driver arm_smmu_driver; 91 static struct iommu_ops arm_smmu_ops; 92 93 #ifdef CONFIG_ARM_SMMU_LEGACY_DT_BINDINGS 94 static struct device_node *dev_get_dev_node(struct device *dev) 95 { 96 if (dev_is_pci(dev)) { 97 struct pci_bus *bus = to_pci_dev(dev)->bus; 98 99 while (!pci_is_root_bus(bus)) 100 bus = bus->parent; 101 return of_node_get(bus->bridge->parent->of_node); 102 } 103 104 return of_node_get(dev->of_node); 105 } 106 107 static int __arm_smmu_get_pci_sid(struct pci_dev *pdev, u16 alias, void *data) 108 { 109 *((__be32 *)data) = cpu_to_be32(alias); 110 return 0; /* Continue walking */ 111 } 112 113 static int __find_legacy_master_phandle(struct device *dev, void *data) 114 { 115 struct of_phandle_iterator *it = *(void **)data; 116 struct device_node *np = it->node; 117 int err; 118 119 of_for_each_phandle(it, err, dev->of_node, "mmu-masters", 120 "#stream-id-cells", -1) 121 if (it->node == np) { 122 *(void **)data = dev; 123 return 1; 124 } 125 it->node = np; 126 return err == -ENOENT ? 0 : err; 127 } 128 129 static int arm_smmu_register_legacy_master(struct device *dev, 130 struct arm_smmu_device **smmu) 131 { 132 struct device *smmu_dev; 133 struct device_node *np; 134 struct of_phandle_iterator it; 135 void *data = ⁢ 136 u32 *sids; 137 __be32 pci_sid; 138 int err; 139 140 np = dev_get_dev_node(dev); 141 if (!np || !of_property_present(np, "#stream-id-cells")) { 142 of_node_put(np); 143 return -ENODEV; 144 } 145 146 it.node = np; 147 err = driver_for_each_device(&arm_smmu_driver.driver, NULL, &data, 148 __find_legacy_master_phandle); 149 smmu_dev = data; 150 of_node_put(np); 151 if (err == 0) 152 return -ENODEV; 153 if (err < 0) 154 return err; 155 156 if (dev_is_pci(dev)) { 157 /* "mmu-masters" assumes Stream ID == Requester ID */ 158 pci_for_each_dma_alias(to_pci_dev(dev), __arm_smmu_get_pci_sid, 159 &pci_sid); 160 it.cur = &pci_sid; 161 it.cur_count = 1; 162 } 163 164 err = iommu_fwspec_init(dev, &smmu_dev->of_node->fwnode, 165 &arm_smmu_ops); 166 if (err) 167 return err; 168 169 sids = kcalloc(it.cur_count, sizeof(*sids), GFP_KERNEL); 170 if (!sids) 171 return -ENOMEM; 172 173 *smmu = dev_get_drvdata(smmu_dev); 174 of_phandle_iterator_args(&it, sids, it.cur_count); 175 err = iommu_fwspec_add_ids(dev, sids, it.cur_count); 176 kfree(sids); 177 return err; 178 } 179 #else 180 static int arm_smmu_register_legacy_master(struct device *dev, 181 struct arm_smmu_device **smmu) 182 { 183 return -ENODEV; 184 } 185 #endif /* CONFIG_ARM_SMMU_LEGACY_DT_BINDINGS */ 186 187 static void __arm_smmu_free_bitmap(unsigned long *map, int idx) 188 { 189 clear_bit(idx, map); 190 } 191 192 /* Wait for any pending TLB invalidations to complete */ 193 static void __arm_smmu_tlb_sync(struct arm_smmu_device *smmu, int page, 194 int sync, int status) 195 { 196 unsigned int spin_cnt, delay; 197 u32 reg; 198 199 if (smmu->impl && unlikely(smmu->impl->tlb_sync)) 200 return smmu->impl->tlb_sync(smmu, page, sync, status); 201 202 arm_smmu_writel(smmu, page, sync, QCOM_DUMMY_VAL); 203 for (delay = 1; delay < TLB_LOOP_TIMEOUT; delay *= 2) { 204 for (spin_cnt = TLB_SPIN_COUNT; spin_cnt > 0; spin_cnt--) { 205 reg = arm_smmu_readl(smmu, page, status); 206 if (!(reg & ARM_SMMU_sTLBGSTATUS_GSACTIVE)) 207 return; 208 cpu_relax(); 209 } 210 udelay(delay); 211 } 212 dev_err_ratelimited(smmu->dev, 213 "TLB sync timed out -- SMMU may be deadlocked\n"); 214 } 215 216 static void arm_smmu_tlb_sync_global(struct arm_smmu_device *smmu) 217 { 218 unsigned long flags; 219 220 spin_lock_irqsave(&smmu->global_sync_lock, flags); 221 __arm_smmu_tlb_sync(smmu, ARM_SMMU_GR0, ARM_SMMU_GR0_sTLBGSYNC, 222 ARM_SMMU_GR0_sTLBGSTATUS); 223 spin_unlock_irqrestore(&smmu->global_sync_lock, flags); 224 } 225 226 static void arm_smmu_tlb_sync_context(struct arm_smmu_domain *smmu_domain) 227 { 228 struct arm_smmu_device *smmu = smmu_domain->smmu; 229 unsigned long flags; 230 231 spin_lock_irqsave(&smmu_domain->cb_lock, flags); 232 __arm_smmu_tlb_sync(smmu, ARM_SMMU_CB(smmu, smmu_domain->cfg.cbndx), 233 ARM_SMMU_CB_TLBSYNC, ARM_SMMU_CB_TLBSTATUS); 234 spin_unlock_irqrestore(&smmu_domain->cb_lock, flags); 235 } 236 237 static void arm_smmu_tlb_inv_context_s1(void *cookie) 238 { 239 struct arm_smmu_domain *smmu_domain = cookie; 240 /* 241 * The TLBI write may be relaxed, so ensure that PTEs cleared by the 242 * current CPU are visible beforehand. 243 */ 244 wmb(); 245 arm_smmu_cb_write(smmu_domain->smmu, smmu_domain->cfg.cbndx, 246 ARM_SMMU_CB_S1_TLBIASID, smmu_domain->cfg.asid); 247 arm_smmu_tlb_sync_context(smmu_domain); 248 } 249 250 static void arm_smmu_tlb_inv_context_s2(void *cookie) 251 { 252 struct arm_smmu_domain *smmu_domain = cookie; 253 struct arm_smmu_device *smmu = smmu_domain->smmu; 254 255 /* See above */ 256 wmb(); 257 arm_smmu_gr0_write(smmu, ARM_SMMU_GR0_TLBIVMID, smmu_domain->cfg.vmid); 258 arm_smmu_tlb_sync_global(smmu); 259 } 260 261 static void arm_smmu_tlb_inv_range_s1(unsigned long iova, size_t size, 262 size_t granule, void *cookie, int reg) 263 { 264 struct arm_smmu_domain *smmu_domain = cookie; 265 struct arm_smmu_device *smmu = smmu_domain->smmu; 266 struct arm_smmu_cfg *cfg = &smmu_domain->cfg; 267 int idx = cfg->cbndx; 268 269 if (smmu->features & ARM_SMMU_FEAT_COHERENT_WALK) 270 wmb(); 271 272 if (cfg->fmt != ARM_SMMU_CTX_FMT_AARCH64) { 273 iova = (iova >> 12) << 12; 274 iova |= cfg->asid; 275 do { 276 arm_smmu_cb_write(smmu, idx, reg, iova); 277 iova += granule; 278 } while (size -= granule); 279 } else { 280 iova >>= 12; 281 iova |= (u64)cfg->asid << 48; 282 do { 283 arm_smmu_cb_writeq(smmu, idx, reg, iova); 284 iova += granule >> 12; 285 } while (size -= granule); 286 } 287 } 288 289 static void arm_smmu_tlb_inv_range_s2(unsigned long iova, size_t size, 290 size_t granule, void *cookie, int reg) 291 { 292 struct arm_smmu_domain *smmu_domain = cookie; 293 struct arm_smmu_device *smmu = smmu_domain->smmu; 294 int idx = smmu_domain->cfg.cbndx; 295 296 if (smmu->features & ARM_SMMU_FEAT_COHERENT_WALK) 297 wmb(); 298 299 iova >>= 12; 300 do { 301 if (smmu_domain->cfg.fmt == ARM_SMMU_CTX_FMT_AARCH64) 302 arm_smmu_cb_writeq(smmu, idx, reg, iova); 303 else 304 arm_smmu_cb_write(smmu, idx, reg, iova); 305 iova += granule >> 12; 306 } while (size -= granule); 307 } 308 309 static void arm_smmu_tlb_inv_walk_s1(unsigned long iova, size_t size, 310 size_t granule, void *cookie) 311 { 312 struct arm_smmu_domain *smmu_domain = cookie; 313 struct arm_smmu_cfg *cfg = &smmu_domain->cfg; 314 315 if (cfg->flush_walk_prefer_tlbiasid) { 316 arm_smmu_tlb_inv_context_s1(cookie); 317 } else { 318 arm_smmu_tlb_inv_range_s1(iova, size, granule, cookie, 319 ARM_SMMU_CB_S1_TLBIVA); 320 arm_smmu_tlb_sync_context(cookie); 321 } 322 } 323 324 static void arm_smmu_tlb_add_page_s1(struct iommu_iotlb_gather *gather, 325 unsigned long iova, size_t granule, 326 void *cookie) 327 { 328 arm_smmu_tlb_inv_range_s1(iova, granule, granule, cookie, 329 ARM_SMMU_CB_S1_TLBIVAL); 330 } 331 332 static void arm_smmu_tlb_inv_walk_s2(unsigned long iova, size_t size, 333 size_t granule, void *cookie) 334 { 335 arm_smmu_tlb_inv_range_s2(iova, size, granule, cookie, 336 ARM_SMMU_CB_S2_TLBIIPAS2); 337 arm_smmu_tlb_sync_context(cookie); 338 } 339 340 static void arm_smmu_tlb_add_page_s2(struct iommu_iotlb_gather *gather, 341 unsigned long iova, size_t granule, 342 void *cookie) 343 { 344 arm_smmu_tlb_inv_range_s2(iova, granule, granule, cookie, 345 ARM_SMMU_CB_S2_TLBIIPAS2L); 346 } 347 348 static void arm_smmu_tlb_inv_walk_s2_v1(unsigned long iova, size_t size, 349 size_t granule, void *cookie) 350 { 351 arm_smmu_tlb_inv_context_s2(cookie); 352 } 353 /* 354 * On MMU-401 at least, the cost of firing off multiple TLBIVMIDs appears 355 * almost negligible, but the benefit of getting the first one in as far ahead 356 * of the sync as possible is significant, hence we don't just make this a 357 * no-op and call arm_smmu_tlb_inv_context_s2() from .iotlb_sync as you might 358 * think. 359 */ 360 static void arm_smmu_tlb_add_page_s2_v1(struct iommu_iotlb_gather *gather, 361 unsigned long iova, size_t granule, 362 void *cookie) 363 { 364 struct arm_smmu_domain *smmu_domain = cookie; 365 struct arm_smmu_device *smmu = smmu_domain->smmu; 366 367 if (smmu->features & ARM_SMMU_FEAT_COHERENT_WALK) 368 wmb(); 369 370 arm_smmu_gr0_write(smmu, ARM_SMMU_GR0_TLBIVMID, smmu_domain->cfg.vmid); 371 } 372 373 static const struct iommu_flush_ops arm_smmu_s1_tlb_ops = { 374 .tlb_flush_all = arm_smmu_tlb_inv_context_s1, 375 .tlb_flush_walk = arm_smmu_tlb_inv_walk_s1, 376 .tlb_add_page = arm_smmu_tlb_add_page_s1, 377 }; 378 379 static const struct iommu_flush_ops arm_smmu_s2_tlb_ops_v2 = { 380 .tlb_flush_all = arm_smmu_tlb_inv_context_s2, 381 .tlb_flush_walk = arm_smmu_tlb_inv_walk_s2, 382 .tlb_add_page = arm_smmu_tlb_add_page_s2, 383 }; 384 385 static const struct iommu_flush_ops arm_smmu_s2_tlb_ops_v1 = { 386 .tlb_flush_all = arm_smmu_tlb_inv_context_s2, 387 .tlb_flush_walk = arm_smmu_tlb_inv_walk_s2_v1, 388 .tlb_add_page = arm_smmu_tlb_add_page_s2_v1, 389 }; 390 391 static irqreturn_t arm_smmu_context_fault(int irq, void *dev) 392 { 393 u32 fsr, fsynr, cbfrsynra; 394 unsigned long iova; 395 struct iommu_domain *domain = dev; 396 struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain); 397 struct arm_smmu_device *smmu = smmu_domain->smmu; 398 int idx = smmu_domain->cfg.cbndx; 399 int ret; 400 401 fsr = arm_smmu_cb_read(smmu, idx, ARM_SMMU_CB_FSR); 402 if (!(fsr & ARM_SMMU_FSR_FAULT)) 403 return IRQ_NONE; 404 405 fsynr = arm_smmu_cb_read(smmu, idx, ARM_SMMU_CB_FSYNR0); 406 iova = arm_smmu_cb_readq(smmu, idx, ARM_SMMU_CB_FAR); 407 cbfrsynra = arm_smmu_gr1_read(smmu, ARM_SMMU_GR1_CBFRSYNRA(idx)); 408 409 ret = report_iommu_fault(domain, NULL, iova, 410 fsynr & ARM_SMMU_FSYNR0_WNR ? IOMMU_FAULT_WRITE : IOMMU_FAULT_READ); 411 412 if (ret == -ENOSYS) 413 dev_err_ratelimited(smmu->dev, 414 "Unhandled context fault: fsr=0x%x, iova=0x%08lx, fsynr=0x%x, cbfrsynra=0x%x, cb=%d\n", 415 fsr, iova, fsynr, cbfrsynra, idx); 416 417 arm_smmu_cb_write(smmu, idx, ARM_SMMU_CB_FSR, fsr); 418 return IRQ_HANDLED; 419 } 420 421 static irqreturn_t arm_smmu_global_fault(int irq, void *dev) 422 { 423 u32 gfsr, gfsynr0, gfsynr1, gfsynr2; 424 struct arm_smmu_device *smmu = dev; 425 static DEFINE_RATELIMIT_STATE(rs, DEFAULT_RATELIMIT_INTERVAL, 426 DEFAULT_RATELIMIT_BURST); 427 428 gfsr = arm_smmu_gr0_read(smmu, ARM_SMMU_GR0_sGFSR); 429 gfsynr0 = arm_smmu_gr0_read(smmu, ARM_SMMU_GR0_sGFSYNR0); 430 gfsynr1 = arm_smmu_gr0_read(smmu, ARM_SMMU_GR0_sGFSYNR1); 431 gfsynr2 = arm_smmu_gr0_read(smmu, ARM_SMMU_GR0_sGFSYNR2); 432 433 if (!gfsr) 434 return IRQ_NONE; 435 436 if (__ratelimit(&rs)) { 437 if (IS_ENABLED(CONFIG_ARM_SMMU_DISABLE_BYPASS_BY_DEFAULT) && 438 (gfsr & ARM_SMMU_sGFSR_USF)) 439 dev_err(smmu->dev, 440 "Blocked unknown Stream ID 0x%hx; boot with \"arm-smmu.disable_bypass=0\" to allow, but this may have security implications\n", 441 (u16)gfsynr1); 442 else 443 dev_err(smmu->dev, 444 "Unexpected global fault, this could be serious\n"); 445 dev_err(smmu->dev, 446 "\tGFSR 0x%08x, GFSYNR0 0x%08x, GFSYNR1 0x%08x, GFSYNR2 0x%08x\n", 447 gfsr, gfsynr0, gfsynr1, gfsynr2); 448 } 449 450 arm_smmu_gr0_write(smmu, ARM_SMMU_GR0_sGFSR, gfsr); 451 return IRQ_HANDLED; 452 } 453 454 static void arm_smmu_init_context_bank(struct arm_smmu_domain *smmu_domain, 455 struct io_pgtable_cfg *pgtbl_cfg) 456 { 457 struct arm_smmu_cfg *cfg = &smmu_domain->cfg; 458 struct arm_smmu_cb *cb = &smmu_domain->smmu->cbs[cfg->cbndx]; 459 bool stage1 = cfg->cbar != CBAR_TYPE_S2_TRANS; 460 461 cb->cfg = cfg; 462 463 /* TCR */ 464 if (stage1) { 465 if (cfg->fmt == ARM_SMMU_CTX_FMT_AARCH32_S) { 466 cb->tcr[0] = pgtbl_cfg->arm_v7s_cfg.tcr; 467 } else { 468 cb->tcr[0] = arm_smmu_lpae_tcr(pgtbl_cfg); 469 cb->tcr[1] = arm_smmu_lpae_tcr2(pgtbl_cfg); 470 if (cfg->fmt == ARM_SMMU_CTX_FMT_AARCH64) 471 cb->tcr[1] |= ARM_SMMU_TCR2_AS; 472 else 473 cb->tcr[0] |= ARM_SMMU_TCR_EAE; 474 } 475 } else { 476 cb->tcr[0] = arm_smmu_lpae_vtcr(pgtbl_cfg); 477 } 478 479 /* TTBRs */ 480 if (stage1) { 481 if (cfg->fmt == ARM_SMMU_CTX_FMT_AARCH32_S) { 482 cb->ttbr[0] = pgtbl_cfg->arm_v7s_cfg.ttbr; 483 cb->ttbr[1] = 0; 484 } else { 485 cb->ttbr[0] = FIELD_PREP(ARM_SMMU_TTBRn_ASID, 486 cfg->asid); 487 cb->ttbr[1] = FIELD_PREP(ARM_SMMU_TTBRn_ASID, 488 cfg->asid); 489 490 if (pgtbl_cfg->quirks & IO_PGTABLE_QUIRK_ARM_TTBR1) 491 cb->ttbr[1] |= pgtbl_cfg->arm_lpae_s1_cfg.ttbr; 492 else 493 cb->ttbr[0] |= pgtbl_cfg->arm_lpae_s1_cfg.ttbr; 494 } 495 } else { 496 cb->ttbr[0] = pgtbl_cfg->arm_lpae_s2_cfg.vttbr; 497 } 498 499 /* MAIRs (stage-1 only) */ 500 if (stage1) { 501 if (cfg->fmt == ARM_SMMU_CTX_FMT_AARCH32_S) { 502 cb->mair[0] = pgtbl_cfg->arm_v7s_cfg.prrr; 503 cb->mair[1] = pgtbl_cfg->arm_v7s_cfg.nmrr; 504 } else { 505 cb->mair[0] = pgtbl_cfg->arm_lpae_s1_cfg.mair; 506 cb->mair[1] = pgtbl_cfg->arm_lpae_s1_cfg.mair >> 32; 507 } 508 } 509 } 510 511 void arm_smmu_write_context_bank(struct arm_smmu_device *smmu, int idx) 512 { 513 u32 reg; 514 bool stage1; 515 struct arm_smmu_cb *cb = &smmu->cbs[idx]; 516 struct arm_smmu_cfg *cfg = cb->cfg; 517 518 /* Unassigned context banks only need disabling */ 519 if (!cfg) { 520 arm_smmu_cb_write(smmu, idx, ARM_SMMU_CB_SCTLR, 0); 521 return; 522 } 523 524 stage1 = cfg->cbar != CBAR_TYPE_S2_TRANS; 525 526 /* CBA2R */ 527 if (smmu->version > ARM_SMMU_V1) { 528 if (cfg->fmt == ARM_SMMU_CTX_FMT_AARCH64) 529 reg = ARM_SMMU_CBA2R_VA64; 530 else 531 reg = 0; 532 /* 16-bit VMIDs live in CBA2R */ 533 if (smmu->features & ARM_SMMU_FEAT_VMID16) 534 reg |= FIELD_PREP(ARM_SMMU_CBA2R_VMID16, cfg->vmid); 535 536 arm_smmu_gr1_write(smmu, ARM_SMMU_GR1_CBA2R(idx), reg); 537 } 538 539 /* CBAR */ 540 reg = FIELD_PREP(ARM_SMMU_CBAR_TYPE, cfg->cbar); 541 if (smmu->version < ARM_SMMU_V2) 542 reg |= FIELD_PREP(ARM_SMMU_CBAR_IRPTNDX, cfg->irptndx); 543 544 /* 545 * Use the weakest shareability/memory types, so they are 546 * overridden by the ttbcr/pte. 547 */ 548 if (stage1) { 549 reg |= FIELD_PREP(ARM_SMMU_CBAR_S1_BPSHCFG, 550 ARM_SMMU_CBAR_S1_BPSHCFG_NSH) | 551 FIELD_PREP(ARM_SMMU_CBAR_S1_MEMATTR, 552 ARM_SMMU_CBAR_S1_MEMATTR_WB); 553 } else if (!(smmu->features & ARM_SMMU_FEAT_VMID16)) { 554 /* 8-bit VMIDs live in CBAR */ 555 reg |= FIELD_PREP(ARM_SMMU_CBAR_VMID, cfg->vmid); 556 } 557 arm_smmu_gr1_write(smmu, ARM_SMMU_GR1_CBAR(idx), reg); 558 559 /* 560 * TCR 561 * We must write this before the TTBRs, since it determines the 562 * access behaviour of some fields (in particular, ASID[15:8]). 563 */ 564 if (stage1 && smmu->version > ARM_SMMU_V1) 565 arm_smmu_cb_write(smmu, idx, ARM_SMMU_CB_TCR2, cb->tcr[1]); 566 arm_smmu_cb_write(smmu, idx, ARM_SMMU_CB_TCR, cb->tcr[0]); 567 568 /* TTBRs */ 569 if (cfg->fmt == ARM_SMMU_CTX_FMT_AARCH32_S) { 570 arm_smmu_cb_write(smmu, idx, ARM_SMMU_CB_CONTEXTIDR, cfg->asid); 571 arm_smmu_cb_write(smmu, idx, ARM_SMMU_CB_TTBR0, cb->ttbr[0]); 572 arm_smmu_cb_write(smmu, idx, ARM_SMMU_CB_TTBR1, cb->ttbr[1]); 573 } else { 574 arm_smmu_cb_writeq(smmu, idx, ARM_SMMU_CB_TTBR0, cb->ttbr[0]); 575 if (stage1) 576 arm_smmu_cb_writeq(smmu, idx, ARM_SMMU_CB_TTBR1, 577 cb->ttbr[1]); 578 } 579 580 /* MAIRs (stage-1 only) */ 581 if (stage1) { 582 arm_smmu_cb_write(smmu, idx, ARM_SMMU_CB_S1_MAIR0, cb->mair[0]); 583 arm_smmu_cb_write(smmu, idx, ARM_SMMU_CB_S1_MAIR1, cb->mair[1]); 584 } 585 586 /* SCTLR */ 587 reg = ARM_SMMU_SCTLR_CFIE | ARM_SMMU_SCTLR_CFRE | ARM_SMMU_SCTLR_AFE | 588 ARM_SMMU_SCTLR_TRE | ARM_SMMU_SCTLR_M; 589 if (stage1) 590 reg |= ARM_SMMU_SCTLR_S1_ASIDPNE; 591 if (IS_ENABLED(CONFIG_CPU_BIG_ENDIAN)) 592 reg |= ARM_SMMU_SCTLR_E; 593 594 if (smmu->impl && smmu->impl->write_sctlr) 595 smmu->impl->write_sctlr(smmu, idx, reg); 596 else 597 arm_smmu_cb_write(smmu, idx, ARM_SMMU_CB_SCTLR, reg); 598 } 599 600 static int arm_smmu_alloc_context_bank(struct arm_smmu_domain *smmu_domain, 601 struct arm_smmu_device *smmu, 602 struct device *dev, unsigned int start) 603 { 604 if (smmu->impl && smmu->impl->alloc_context_bank) 605 return smmu->impl->alloc_context_bank(smmu_domain, smmu, dev, start); 606 607 return __arm_smmu_alloc_bitmap(smmu->context_map, start, smmu->num_context_banks); 608 } 609 610 static int arm_smmu_init_domain_context(struct iommu_domain *domain, 611 struct arm_smmu_device *smmu, 612 struct device *dev) 613 { 614 int irq, start, ret = 0; 615 unsigned long ias, oas; 616 struct io_pgtable_ops *pgtbl_ops; 617 struct io_pgtable_cfg pgtbl_cfg; 618 enum io_pgtable_fmt fmt; 619 struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain); 620 struct arm_smmu_cfg *cfg = &smmu_domain->cfg; 621 irqreturn_t (*context_fault)(int irq, void *dev); 622 623 mutex_lock(&smmu_domain->init_mutex); 624 if (smmu_domain->smmu) 625 goto out_unlock; 626 627 if (domain->type == IOMMU_DOMAIN_IDENTITY) { 628 smmu_domain->stage = ARM_SMMU_DOMAIN_BYPASS; 629 smmu_domain->smmu = smmu; 630 goto out_unlock; 631 } 632 633 /* 634 * Mapping the requested stage onto what we support is surprisingly 635 * complicated, mainly because the spec allows S1+S2 SMMUs without 636 * support for nested translation. That means we end up with the 637 * following table: 638 * 639 * Requested Supported Actual 640 * S1 N S1 641 * S1 S1+S2 S1 642 * S1 S2 S2 643 * S1 S1 S1 644 * N N N 645 * N S1+S2 S2 646 * N S2 S2 647 * N S1 S1 648 * 649 * Note that you can't actually request stage-2 mappings. 650 */ 651 if (!(smmu->features & ARM_SMMU_FEAT_TRANS_S1)) 652 smmu_domain->stage = ARM_SMMU_DOMAIN_S2; 653 if (!(smmu->features & ARM_SMMU_FEAT_TRANS_S2)) 654 smmu_domain->stage = ARM_SMMU_DOMAIN_S1; 655 656 /* 657 * Choosing a suitable context format is even more fiddly. Until we 658 * grow some way for the caller to express a preference, and/or move 659 * the decision into the io-pgtable code where it arguably belongs, 660 * just aim for the closest thing to the rest of the system, and hope 661 * that the hardware isn't esoteric enough that we can't assume AArch64 662 * support to be a superset of AArch32 support... 663 */ 664 if (smmu->features & ARM_SMMU_FEAT_FMT_AARCH32_L) 665 cfg->fmt = ARM_SMMU_CTX_FMT_AARCH32_L; 666 if (IS_ENABLED(CONFIG_IOMMU_IO_PGTABLE_ARMV7S) && 667 !IS_ENABLED(CONFIG_64BIT) && !IS_ENABLED(CONFIG_ARM_LPAE) && 668 (smmu->features & ARM_SMMU_FEAT_FMT_AARCH32_S) && 669 (smmu_domain->stage == ARM_SMMU_DOMAIN_S1)) 670 cfg->fmt = ARM_SMMU_CTX_FMT_AARCH32_S; 671 if ((IS_ENABLED(CONFIG_64BIT) || cfg->fmt == ARM_SMMU_CTX_FMT_NONE) && 672 (smmu->features & (ARM_SMMU_FEAT_FMT_AARCH64_64K | 673 ARM_SMMU_FEAT_FMT_AARCH64_16K | 674 ARM_SMMU_FEAT_FMT_AARCH64_4K))) 675 cfg->fmt = ARM_SMMU_CTX_FMT_AARCH64; 676 677 if (cfg->fmt == ARM_SMMU_CTX_FMT_NONE) { 678 ret = -EINVAL; 679 goto out_unlock; 680 } 681 682 switch (smmu_domain->stage) { 683 case ARM_SMMU_DOMAIN_S1: 684 cfg->cbar = CBAR_TYPE_S1_TRANS_S2_BYPASS; 685 start = smmu->num_s2_context_banks; 686 ias = smmu->va_size; 687 oas = smmu->ipa_size; 688 if (cfg->fmt == ARM_SMMU_CTX_FMT_AARCH64) { 689 fmt = ARM_64_LPAE_S1; 690 } else if (cfg->fmt == ARM_SMMU_CTX_FMT_AARCH32_L) { 691 fmt = ARM_32_LPAE_S1; 692 ias = min(ias, 32UL); 693 oas = min(oas, 40UL); 694 } else { 695 fmt = ARM_V7S; 696 ias = min(ias, 32UL); 697 oas = min(oas, 32UL); 698 } 699 smmu_domain->flush_ops = &arm_smmu_s1_tlb_ops; 700 break; 701 case ARM_SMMU_DOMAIN_NESTED: 702 /* 703 * We will likely want to change this if/when KVM gets 704 * involved. 705 */ 706 case ARM_SMMU_DOMAIN_S2: 707 cfg->cbar = CBAR_TYPE_S2_TRANS; 708 start = 0; 709 ias = smmu->ipa_size; 710 oas = smmu->pa_size; 711 if (cfg->fmt == ARM_SMMU_CTX_FMT_AARCH64) { 712 fmt = ARM_64_LPAE_S2; 713 } else { 714 fmt = ARM_32_LPAE_S2; 715 ias = min(ias, 40UL); 716 oas = min(oas, 40UL); 717 } 718 if (smmu->version == ARM_SMMU_V2) 719 smmu_domain->flush_ops = &arm_smmu_s2_tlb_ops_v2; 720 else 721 smmu_domain->flush_ops = &arm_smmu_s2_tlb_ops_v1; 722 break; 723 default: 724 ret = -EINVAL; 725 goto out_unlock; 726 } 727 728 ret = arm_smmu_alloc_context_bank(smmu_domain, smmu, dev, start); 729 if (ret < 0) { 730 goto out_unlock; 731 } 732 733 smmu_domain->smmu = smmu; 734 735 cfg->cbndx = ret; 736 if (smmu->version < ARM_SMMU_V2) { 737 cfg->irptndx = atomic_inc_return(&smmu->irptndx); 738 cfg->irptndx %= smmu->num_context_irqs; 739 } else { 740 cfg->irptndx = cfg->cbndx; 741 } 742 743 if (smmu_domain->stage == ARM_SMMU_DOMAIN_S2) 744 cfg->vmid = cfg->cbndx + 1; 745 else 746 cfg->asid = cfg->cbndx; 747 748 pgtbl_cfg = (struct io_pgtable_cfg) { 749 .pgsize_bitmap = smmu->pgsize_bitmap, 750 .ias = ias, 751 .oas = oas, 752 .coherent_walk = smmu->features & ARM_SMMU_FEAT_COHERENT_WALK, 753 .tlb = smmu_domain->flush_ops, 754 .iommu_dev = smmu->dev, 755 }; 756 757 if (smmu->impl && smmu->impl->init_context) { 758 ret = smmu->impl->init_context(smmu_domain, &pgtbl_cfg, dev); 759 if (ret) 760 goto out_clear_smmu; 761 } 762 763 if (smmu_domain->pgtbl_quirks) 764 pgtbl_cfg.quirks |= smmu_domain->pgtbl_quirks; 765 766 pgtbl_ops = alloc_io_pgtable_ops(fmt, &pgtbl_cfg, smmu_domain); 767 if (!pgtbl_ops) { 768 ret = -ENOMEM; 769 goto out_clear_smmu; 770 } 771 772 /* Update the domain's page sizes to reflect the page table format */ 773 domain->pgsize_bitmap = pgtbl_cfg.pgsize_bitmap; 774 775 if (pgtbl_cfg.quirks & IO_PGTABLE_QUIRK_ARM_TTBR1) { 776 domain->geometry.aperture_start = ~0UL << ias; 777 domain->geometry.aperture_end = ~0UL; 778 } else { 779 domain->geometry.aperture_end = (1UL << ias) - 1; 780 } 781 782 domain->geometry.force_aperture = true; 783 784 /* Initialise the context bank with our page table cfg */ 785 arm_smmu_init_context_bank(smmu_domain, &pgtbl_cfg); 786 arm_smmu_write_context_bank(smmu, cfg->cbndx); 787 788 /* 789 * Request context fault interrupt. Do this last to avoid the 790 * handler seeing a half-initialised domain state. 791 */ 792 irq = smmu->irqs[cfg->irptndx]; 793 794 if (smmu->impl && smmu->impl->context_fault) 795 context_fault = smmu->impl->context_fault; 796 else 797 context_fault = arm_smmu_context_fault; 798 799 ret = devm_request_irq(smmu->dev, irq, context_fault, 800 IRQF_SHARED, "arm-smmu-context-fault", domain); 801 if (ret < 0) { 802 dev_err(smmu->dev, "failed to request context IRQ %d (%u)\n", 803 cfg->irptndx, irq); 804 cfg->irptndx = ARM_SMMU_INVALID_IRPTNDX; 805 } 806 807 mutex_unlock(&smmu_domain->init_mutex); 808 809 /* Publish page table ops for map/unmap */ 810 smmu_domain->pgtbl_ops = pgtbl_ops; 811 return 0; 812 813 out_clear_smmu: 814 __arm_smmu_free_bitmap(smmu->context_map, cfg->cbndx); 815 smmu_domain->smmu = NULL; 816 out_unlock: 817 mutex_unlock(&smmu_domain->init_mutex); 818 return ret; 819 } 820 821 static void arm_smmu_destroy_domain_context(struct iommu_domain *domain) 822 { 823 struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain); 824 struct arm_smmu_device *smmu = smmu_domain->smmu; 825 struct arm_smmu_cfg *cfg = &smmu_domain->cfg; 826 int ret, irq; 827 828 if (!smmu || domain->type == IOMMU_DOMAIN_IDENTITY) 829 return; 830 831 ret = arm_smmu_rpm_get(smmu); 832 if (ret < 0) 833 return; 834 835 /* 836 * Disable the context bank and free the page tables before freeing 837 * it. 838 */ 839 smmu->cbs[cfg->cbndx].cfg = NULL; 840 arm_smmu_write_context_bank(smmu, cfg->cbndx); 841 842 if (cfg->irptndx != ARM_SMMU_INVALID_IRPTNDX) { 843 irq = smmu->irqs[cfg->irptndx]; 844 devm_free_irq(smmu->dev, irq, domain); 845 } 846 847 free_io_pgtable_ops(smmu_domain->pgtbl_ops); 848 __arm_smmu_free_bitmap(smmu->context_map, cfg->cbndx); 849 850 arm_smmu_rpm_put(smmu); 851 } 852 853 static struct iommu_domain *arm_smmu_domain_alloc(unsigned type) 854 { 855 struct arm_smmu_domain *smmu_domain; 856 857 if (type != IOMMU_DOMAIN_UNMANAGED && type != IOMMU_DOMAIN_IDENTITY) { 858 if (using_legacy_binding || type != IOMMU_DOMAIN_DMA) 859 return NULL; 860 } 861 /* 862 * Allocate the domain and initialise some of its data structures. 863 * We can't really do anything meaningful until we've added a 864 * master. 865 */ 866 smmu_domain = kzalloc(sizeof(*smmu_domain), GFP_KERNEL); 867 if (!smmu_domain) 868 return NULL; 869 870 mutex_init(&smmu_domain->init_mutex); 871 spin_lock_init(&smmu_domain->cb_lock); 872 873 return &smmu_domain->domain; 874 } 875 876 static void arm_smmu_domain_free(struct iommu_domain *domain) 877 { 878 struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain); 879 880 /* 881 * Free the domain resources. We assume that all devices have 882 * already been detached. 883 */ 884 arm_smmu_destroy_domain_context(domain); 885 kfree(smmu_domain); 886 } 887 888 static void arm_smmu_write_smr(struct arm_smmu_device *smmu, int idx) 889 { 890 struct arm_smmu_smr *smr = smmu->smrs + idx; 891 u32 reg = FIELD_PREP(ARM_SMMU_SMR_ID, smr->id) | 892 FIELD_PREP(ARM_SMMU_SMR_MASK, smr->mask); 893 894 if (!(smmu->features & ARM_SMMU_FEAT_EXIDS) && smr->valid) 895 reg |= ARM_SMMU_SMR_VALID; 896 arm_smmu_gr0_write(smmu, ARM_SMMU_GR0_SMR(idx), reg); 897 } 898 899 static void arm_smmu_write_s2cr(struct arm_smmu_device *smmu, int idx) 900 { 901 struct arm_smmu_s2cr *s2cr = smmu->s2crs + idx; 902 u32 reg; 903 904 if (smmu->impl && smmu->impl->write_s2cr) { 905 smmu->impl->write_s2cr(smmu, idx); 906 return; 907 } 908 909 reg = FIELD_PREP(ARM_SMMU_S2CR_TYPE, s2cr->type) | 910 FIELD_PREP(ARM_SMMU_S2CR_CBNDX, s2cr->cbndx) | 911 FIELD_PREP(ARM_SMMU_S2CR_PRIVCFG, s2cr->privcfg); 912 913 if (smmu->features & ARM_SMMU_FEAT_EXIDS && smmu->smrs && 914 smmu->smrs[idx].valid) 915 reg |= ARM_SMMU_S2CR_EXIDVALID; 916 arm_smmu_gr0_write(smmu, ARM_SMMU_GR0_S2CR(idx), reg); 917 } 918 919 static void arm_smmu_write_sme(struct arm_smmu_device *smmu, int idx) 920 { 921 arm_smmu_write_s2cr(smmu, idx); 922 if (smmu->smrs) 923 arm_smmu_write_smr(smmu, idx); 924 } 925 926 /* 927 * The width of SMR's mask field depends on sCR0_EXIDENABLE, so this function 928 * should be called after sCR0 is written. 929 */ 930 static void arm_smmu_test_smr_masks(struct arm_smmu_device *smmu) 931 { 932 u32 smr; 933 int i; 934 935 if (!smmu->smrs) 936 return; 937 /* 938 * If we've had to accommodate firmware memory regions, we may 939 * have live SMRs by now; tread carefully... 940 * 941 * Somewhat perversely, not having a free SMR for this test implies we 942 * can get away without it anyway, as we'll only be able to 'allocate' 943 * these SMRs for the ID/mask values we're already trusting to be OK. 944 */ 945 for (i = 0; i < smmu->num_mapping_groups; i++) 946 if (!smmu->smrs[i].valid) 947 goto smr_ok; 948 return; 949 smr_ok: 950 /* 951 * SMR.ID bits may not be preserved if the corresponding MASK 952 * bits are set, so check each one separately. We can reject 953 * masters later if they try to claim IDs outside these masks. 954 */ 955 smr = FIELD_PREP(ARM_SMMU_SMR_ID, smmu->streamid_mask); 956 arm_smmu_gr0_write(smmu, ARM_SMMU_GR0_SMR(i), smr); 957 smr = arm_smmu_gr0_read(smmu, ARM_SMMU_GR0_SMR(i)); 958 smmu->streamid_mask = FIELD_GET(ARM_SMMU_SMR_ID, smr); 959 960 smr = FIELD_PREP(ARM_SMMU_SMR_MASK, smmu->streamid_mask); 961 arm_smmu_gr0_write(smmu, ARM_SMMU_GR0_SMR(i), smr); 962 smr = arm_smmu_gr0_read(smmu, ARM_SMMU_GR0_SMR(i)); 963 smmu->smr_mask_mask = FIELD_GET(ARM_SMMU_SMR_MASK, smr); 964 } 965 966 static int arm_smmu_find_sme(struct arm_smmu_device *smmu, u16 id, u16 mask) 967 { 968 struct arm_smmu_smr *smrs = smmu->smrs; 969 int i, free_idx = -ENOSPC; 970 971 /* Stream indexing is blissfully easy */ 972 if (!smrs) 973 return id; 974 975 /* Validating SMRs is... less so */ 976 for (i = 0; i < smmu->num_mapping_groups; ++i) { 977 if (!smrs[i].valid) { 978 /* 979 * Note the first free entry we come across, which 980 * we'll claim in the end if nothing else matches. 981 */ 982 if (free_idx < 0) 983 free_idx = i; 984 continue; 985 } 986 /* 987 * If the new entry is _entirely_ matched by an existing entry, 988 * then reuse that, with the guarantee that there also cannot 989 * be any subsequent conflicting entries. In normal use we'd 990 * expect simply identical entries for this case, but there's 991 * no harm in accommodating the generalisation. 992 */ 993 if ((mask & smrs[i].mask) == mask && 994 !((id ^ smrs[i].id) & ~smrs[i].mask)) 995 return i; 996 /* 997 * If the new entry has any other overlap with an existing one, 998 * though, then there always exists at least one stream ID 999 * which would cause a conflict, and we can't allow that risk. 1000 */ 1001 if (!((id ^ smrs[i].id) & ~(smrs[i].mask | mask))) 1002 return -EINVAL; 1003 } 1004 1005 return free_idx; 1006 } 1007 1008 static bool arm_smmu_free_sme(struct arm_smmu_device *smmu, int idx) 1009 { 1010 if (--smmu->s2crs[idx].count) 1011 return false; 1012 1013 smmu->s2crs[idx] = s2cr_init_val; 1014 if (smmu->smrs) 1015 smmu->smrs[idx].valid = false; 1016 1017 return true; 1018 } 1019 1020 static int arm_smmu_master_alloc_smes(struct device *dev) 1021 { 1022 struct iommu_fwspec *fwspec = dev_iommu_fwspec_get(dev); 1023 struct arm_smmu_master_cfg *cfg = dev_iommu_priv_get(dev); 1024 struct arm_smmu_device *smmu = cfg->smmu; 1025 struct arm_smmu_smr *smrs = smmu->smrs; 1026 int i, idx, ret; 1027 1028 mutex_lock(&smmu->stream_map_mutex); 1029 /* Figure out a viable stream map entry allocation */ 1030 for_each_cfg_sme(cfg, fwspec, i, idx) { 1031 u16 sid = FIELD_GET(ARM_SMMU_SMR_ID, fwspec->ids[i]); 1032 u16 mask = FIELD_GET(ARM_SMMU_SMR_MASK, fwspec->ids[i]); 1033 1034 if (idx != INVALID_SMENDX) { 1035 ret = -EEXIST; 1036 goto out_err; 1037 } 1038 1039 ret = arm_smmu_find_sme(smmu, sid, mask); 1040 if (ret < 0) 1041 goto out_err; 1042 1043 idx = ret; 1044 if (smrs && smmu->s2crs[idx].count == 0) { 1045 smrs[idx].id = sid; 1046 smrs[idx].mask = mask; 1047 smrs[idx].valid = true; 1048 } 1049 smmu->s2crs[idx].count++; 1050 cfg->smendx[i] = (s16)idx; 1051 } 1052 1053 /* It worked! Now, poke the actual hardware */ 1054 for_each_cfg_sme(cfg, fwspec, i, idx) 1055 arm_smmu_write_sme(smmu, idx); 1056 1057 mutex_unlock(&smmu->stream_map_mutex); 1058 return 0; 1059 1060 out_err: 1061 while (i--) { 1062 arm_smmu_free_sme(smmu, cfg->smendx[i]); 1063 cfg->smendx[i] = INVALID_SMENDX; 1064 } 1065 mutex_unlock(&smmu->stream_map_mutex); 1066 return ret; 1067 } 1068 1069 static void arm_smmu_master_free_smes(struct arm_smmu_master_cfg *cfg, 1070 struct iommu_fwspec *fwspec) 1071 { 1072 struct arm_smmu_device *smmu = cfg->smmu; 1073 int i, idx; 1074 1075 mutex_lock(&smmu->stream_map_mutex); 1076 for_each_cfg_sme(cfg, fwspec, i, idx) { 1077 if (arm_smmu_free_sme(smmu, idx)) 1078 arm_smmu_write_sme(smmu, idx); 1079 cfg->smendx[i] = INVALID_SMENDX; 1080 } 1081 mutex_unlock(&smmu->stream_map_mutex); 1082 } 1083 1084 static int arm_smmu_domain_add_master(struct arm_smmu_domain *smmu_domain, 1085 struct arm_smmu_master_cfg *cfg, 1086 struct iommu_fwspec *fwspec) 1087 { 1088 struct arm_smmu_device *smmu = smmu_domain->smmu; 1089 struct arm_smmu_s2cr *s2cr = smmu->s2crs; 1090 u8 cbndx = smmu_domain->cfg.cbndx; 1091 enum arm_smmu_s2cr_type type; 1092 int i, idx; 1093 1094 if (smmu_domain->stage == ARM_SMMU_DOMAIN_BYPASS) 1095 type = S2CR_TYPE_BYPASS; 1096 else 1097 type = S2CR_TYPE_TRANS; 1098 1099 for_each_cfg_sme(cfg, fwspec, i, idx) { 1100 if (type == s2cr[idx].type && cbndx == s2cr[idx].cbndx) 1101 continue; 1102 1103 s2cr[idx].type = type; 1104 s2cr[idx].privcfg = S2CR_PRIVCFG_DEFAULT; 1105 s2cr[idx].cbndx = cbndx; 1106 arm_smmu_write_s2cr(smmu, idx); 1107 } 1108 return 0; 1109 } 1110 1111 static int arm_smmu_attach_dev(struct iommu_domain *domain, struct device *dev) 1112 { 1113 struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain); 1114 struct iommu_fwspec *fwspec = dev_iommu_fwspec_get(dev); 1115 struct arm_smmu_master_cfg *cfg; 1116 struct arm_smmu_device *smmu; 1117 int ret; 1118 1119 if (!fwspec || fwspec->ops != &arm_smmu_ops) { 1120 dev_err(dev, "cannot attach to SMMU, is it on the same bus?\n"); 1121 return -ENXIO; 1122 } 1123 1124 /* 1125 * FIXME: The arch/arm DMA API code tries to attach devices to its own 1126 * domains between of_xlate() and probe_device() - we have no way to cope 1127 * with that, so until ARM gets converted to rely on groups and default 1128 * domains, just say no (but more politely than by dereferencing NULL). 1129 * This should be at least a WARN_ON once that's sorted. 1130 */ 1131 cfg = dev_iommu_priv_get(dev); 1132 if (!cfg) 1133 return -ENODEV; 1134 1135 smmu = cfg->smmu; 1136 1137 ret = arm_smmu_rpm_get(smmu); 1138 if (ret < 0) 1139 return ret; 1140 1141 /* Ensure that the domain is finalised */ 1142 ret = arm_smmu_init_domain_context(domain, smmu, dev); 1143 if (ret < 0) 1144 goto rpm_put; 1145 1146 /* 1147 * Sanity check the domain. We don't support domains across 1148 * different SMMUs. 1149 */ 1150 if (smmu_domain->smmu != smmu) { 1151 ret = -EINVAL; 1152 goto rpm_put; 1153 } 1154 1155 /* Looks ok, so add the device to the domain */ 1156 ret = arm_smmu_domain_add_master(smmu_domain, cfg, fwspec); 1157 1158 /* 1159 * Setup an autosuspend delay to avoid bouncing runpm state. 1160 * Otherwise, if a driver for a suspended consumer device 1161 * unmaps buffers, it will runpm resume/suspend for each one. 1162 * 1163 * For example, when used by a GPU device, when an application 1164 * or game exits, it can trigger unmapping 100s or 1000s of 1165 * buffers. With a runpm cycle for each buffer, that adds up 1166 * to 5-10sec worth of reprogramming the context bank, while 1167 * the system appears to be locked up to the user. 1168 */ 1169 pm_runtime_set_autosuspend_delay(smmu->dev, 20); 1170 pm_runtime_use_autosuspend(smmu->dev); 1171 1172 rpm_put: 1173 arm_smmu_rpm_put(smmu); 1174 return ret; 1175 } 1176 1177 static int arm_smmu_map_pages(struct iommu_domain *domain, unsigned long iova, 1178 phys_addr_t paddr, size_t pgsize, size_t pgcount, 1179 int prot, gfp_t gfp, size_t *mapped) 1180 { 1181 struct io_pgtable_ops *ops = to_smmu_domain(domain)->pgtbl_ops; 1182 struct arm_smmu_device *smmu = to_smmu_domain(domain)->smmu; 1183 int ret; 1184 1185 if (!ops) 1186 return -ENODEV; 1187 1188 arm_smmu_rpm_get(smmu); 1189 ret = ops->map_pages(ops, iova, paddr, pgsize, pgcount, prot, gfp, mapped); 1190 arm_smmu_rpm_put(smmu); 1191 1192 return ret; 1193 } 1194 1195 static size_t arm_smmu_unmap_pages(struct iommu_domain *domain, unsigned long iova, 1196 size_t pgsize, size_t pgcount, 1197 struct iommu_iotlb_gather *iotlb_gather) 1198 { 1199 struct io_pgtable_ops *ops = to_smmu_domain(domain)->pgtbl_ops; 1200 struct arm_smmu_device *smmu = to_smmu_domain(domain)->smmu; 1201 size_t ret; 1202 1203 if (!ops) 1204 return 0; 1205 1206 arm_smmu_rpm_get(smmu); 1207 ret = ops->unmap_pages(ops, iova, pgsize, pgcount, iotlb_gather); 1208 arm_smmu_rpm_put(smmu); 1209 1210 return ret; 1211 } 1212 1213 static void arm_smmu_flush_iotlb_all(struct iommu_domain *domain) 1214 { 1215 struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain); 1216 struct arm_smmu_device *smmu = smmu_domain->smmu; 1217 1218 if (smmu_domain->flush_ops) { 1219 arm_smmu_rpm_get(smmu); 1220 smmu_domain->flush_ops->tlb_flush_all(smmu_domain); 1221 arm_smmu_rpm_put(smmu); 1222 } 1223 } 1224 1225 static void arm_smmu_iotlb_sync(struct iommu_domain *domain, 1226 struct iommu_iotlb_gather *gather) 1227 { 1228 struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain); 1229 struct arm_smmu_device *smmu = smmu_domain->smmu; 1230 1231 if (!smmu) 1232 return; 1233 1234 arm_smmu_rpm_get(smmu); 1235 if (smmu->version == ARM_SMMU_V2 || 1236 smmu_domain->stage == ARM_SMMU_DOMAIN_S1) 1237 arm_smmu_tlb_sync_context(smmu_domain); 1238 else 1239 arm_smmu_tlb_sync_global(smmu); 1240 arm_smmu_rpm_put(smmu); 1241 } 1242 1243 static phys_addr_t arm_smmu_iova_to_phys_hard(struct iommu_domain *domain, 1244 dma_addr_t iova) 1245 { 1246 struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain); 1247 struct arm_smmu_device *smmu = smmu_domain->smmu; 1248 struct arm_smmu_cfg *cfg = &smmu_domain->cfg; 1249 struct io_pgtable_ops *ops= smmu_domain->pgtbl_ops; 1250 struct device *dev = smmu->dev; 1251 void __iomem *reg; 1252 u32 tmp; 1253 u64 phys; 1254 unsigned long va, flags; 1255 int ret, idx = cfg->cbndx; 1256 phys_addr_t addr = 0; 1257 1258 ret = arm_smmu_rpm_get(smmu); 1259 if (ret < 0) 1260 return 0; 1261 1262 spin_lock_irqsave(&smmu_domain->cb_lock, flags); 1263 va = iova & ~0xfffUL; 1264 if (cfg->fmt == ARM_SMMU_CTX_FMT_AARCH64) 1265 arm_smmu_cb_writeq(smmu, idx, ARM_SMMU_CB_ATS1PR, va); 1266 else 1267 arm_smmu_cb_write(smmu, idx, ARM_SMMU_CB_ATS1PR, va); 1268 1269 reg = arm_smmu_page(smmu, ARM_SMMU_CB(smmu, idx)) + ARM_SMMU_CB_ATSR; 1270 if (readl_poll_timeout_atomic(reg, tmp, !(tmp & ARM_SMMU_ATSR_ACTIVE), 1271 5, 50)) { 1272 spin_unlock_irqrestore(&smmu_domain->cb_lock, flags); 1273 dev_err(dev, 1274 "iova to phys timed out on %pad. Falling back to software table walk.\n", 1275 &iova); 1276 arm_smmu_rpm_put(smmu); 1277 return ops->iova_to_phys(ops, iova); 1278 } 1279 1280 phys = arm_smmu_cb_readq(smmu, idx, ARM_SMMU_CB_PAR); 1281 spin_unlock_irqrestore(&smmu_domain->cb_lock, flags); 1282 if (phys & ARM_SMMU_CB_PAR_F) { 1283 dev_err(dev, "translation fault!\n"); 1284 dev_err(dev, "PAR = 0x%llx\n", phys); 1285 goto out; 1286 } 1287 1288 addr = (phys & GENMASK_ULL(39, 12)) | (iova & 0xfff); 1289 out: 1290 arm_smmu_rpm_put(smmu); 1291 1292 return addr; 1293 } 1294 1295 static phys_addr_t arm_smmu_iova_to_phys(struct iommu_domain *domain, 1296 dma_addr_t iova) 1297 { 1298 struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain); 1299 struct io_pgtable_ops *ops = smmu_domain->pgtbl_ops; 1300 1301 if (!ops) 1302 return 0; 1303 1304 if (smmu_domain->smmu->features & ARM_SMMU_FEAT_TRANS_OPS && 1305 smmu_domain->stage == ARM_SMMU_DOMAIN_S1) 1306 return arm_smmu_iova_to_phys_hard(domain, iova); 1307 1308 return ops->iova_to_phys(ops, iova); 1309 } 1310 1311 static bool arm_smmu_capable(struct device *dev, enum iommu_cap cap) 1312 { 1313 struct arm_smmu_master_cfg *cfg = dev_iommu_priv_get(dev); 1314 1315 switch (cap) { 1316 case IOMMU_CAP_CACHE_COHERENCY: 1317 /* 1318 * It's overwhelmingly the case in practice that when the pagetable 1319 * walk interface is connected to a coherent interconnect, all the 1320 * translation interfaces are too. Furthermore if the device is 1321 * natively coherent, then its translation interface must also be. 1322 */ 1323 return cfg->smmu->features & ARM_SMMU_FEAT_COHERENT_WALK || 1324 device_get_dma_attr(dev) == DEV_DMA_COHERENT; 1325 case IOMMU_CAP_NOEXEC: 1326 case IOMMU_CAP_DEFERRED_FLUSH: 1327 return true; 1328 default: 1329 return false; 1330 } 1331 } 1332 1333 static 1334 struct arm_smmu_device *arm_smmu_get_by_fwnode(struct fwnode_handle *fwnode) 1335 { 1336 struct device *dev = driver_find_device_by_fwnode(&arm_smmu_driver.driver, 1337 fwnode); 1338 put_device(dev); 1339 return dev ? dev_get_drvdata(dev) : NULL; 1340 } 1341 1342 static struct iommu_device *arm_smmu_probe_device(struct device *dev) 1343 { 1344 struct arm_smmu_device *smmu = NULL; 1345 struct arm_smmu_master_cfg *cfg; 1346 struct iommu_fwspec *fwspec = dev_iommu_fwspec_get(dev); 1347 int i, ret; 1348 1349 if (using_legacy_binding) { 1350 ret = arm_smmu_register_legacy_master(dev, &smmu); 1351 1352 /* 1353 * If dev->iommu_fwspec is initally NULL, arm_smmu_register_legacy_master() 1354 * will allocate/initialise a new one. Thus we need to update fwspec for 1355 * later use. 1356 */ 1357 fwspec = dev_iommu_fwspec_get(dev); 1358 if (ret) 1359 goto out_free; 1360 } else if (fwspec && fwspec->ops == &arm_smmu_ops) { 1361 smmu = arm_smmu_get_by_fwnode(fwspec->iommu_fwnode); 1362 } else { 1363 return ERR_PTR(-ENODEV); 1364 } 1365 1366 ret = -EINVAL; 1367 for (i = 0; i < fwspec->num_ids; i++) { 1368 u16 sid = FIELD_GET(ARM_SMMU_SMR_ID, fwspec->ids[i]); 1369 u16 mask = FIELD_GET(ARM_SMMU_SMR_MASK, fwspec->ids[i]); 1370 1371 if (sid & ~smmu->streamid_mask) { 1372 dev_err(dev, "stream ID 0x%x out of range for SMMU (0x%x)\n", 1373 sid, smmu->streamid_mask); 1374 goto out_free; 1375 } 1376 if (mask & ~smmu->smr_mask_mask) { 1377 dev_err(dev, "SMR mask 0x%x out of range for SMMU (0x%x)\n", 1378 mask, smmu->smr_mask_mask); 1379 goto out_free; 1380 } 1381 } 1382 1383 ret = -ENOMEM; 1384 cfg = kzalloc(offsetof(struct arm_smmu_master_cfg, smendx[i]), 1385 GFP_KERNEL); 1386 if (!cfg) 1387 goto out_free; 1388 1389 cfg->smmu = smmu; 1390 dev_iommu_priv_set(dev, cfg); 1391 while (i--) 1392 cfg->smendx[i] = INVALID_SMENDX; 1393 1394 ret = arm_smmu_rpm_get(smmu); 1395 if (ret < 0) 1396 goto out_cfg_free; 1397 1398 ret = arm_smmu_master_alloc_smes(dev); 1399 arm_smmu_rpm_put(smmu); 1400 1401 if (ret) 1402 goto out_cfg_free; 1403 1404 device_link_add(dev, smmu->dev, 1405 DL_FLAG_PM_RUNTIME | DL_FLAG_AUTOREMOVE_SUPPLIER); 1406 1407 return &smmu->iommu; 1408 1409 out_cfg_free: 1410 kfree(cfg); 1411 out_free: 1412 iommu_fwspec_free(dev); 1413 return ERR_PTR(ret); 1414 } 1415 1416 static void arm_smmu_release_device(struct device *dev) 1417 { 1418 struct iommu_fwspec *fwspec = dev_iommu_fwspec_get(dev); 1419 struct arm_smmu_master_cfg *cfg = dev_iommu_priv_get(dev); 1420 int ret; 1421 1422 ret = arm_smmu_rpm_get(cfg->smmu); 1423 if (ret < 0) 1424 return; 1425 1426 arm_smmu_master_free_smes(cfg, fwspec); 1427 1428 arm_smmu_rpm_put(cfg->smmu); 1429 1430 dev_iommu_priv_set(dev, NULL); 1431 kfree(cfg); 1432 } 1433 1434 static void arm_smmu_probe_finalize(struct device *dev) 1435 { 1436 struct arm_smmu_master_cfg *cfg; 1437 struct arm_smmu_device *smmu; 1438 1439 cfg = dev_iommu_priv_get(dev); 1440 smmu = cfg->smmu; 1441 1442 if (smmu->impl && smmu->impl->probe_finalize) 1443 smmu->impl->probe_finalize(smmu, dev); 1444 } 1445 1446 static struct iommu_group *arm_smmu_device_group(struct device *dev) 1447 { 1448 struct arm_smmu_master_cfg *cfg = dev_iommu_priv_get(dev); 1449 struct iommu_fwspec *fwspec = dev_iommu_fwspec_get(dev); 1450 struct arm_smmu_device *smmu = cfg->smmu; 1451 struct iommu_group *group = NULL; 1452 int i, idx; 1453 1454 mutex_lock(&smmu->stream_map_mutex); 1455 for_each_cfg_sme(cfg, fwspec, i, idx) { 1456 if (group && smmu->s2crs[idx].group && 1457 group != smmu->s2crs[idx].group) { 1458 mutex_unlock(&smmu->stream_map_mutex); 1459 return ERR_PTR(-EINVAL); 1460 } 1461 1462 group = smmu->s2crs[idx].group; 1463 } 1464 1465 if (group) { 1466 mutex_unlock(&smmu->stream_map_mutex); 1467 return iommu_group_ref_get(group); 1468 } 1469 1470 if (dev_is_pci(dev)) 1471 group = pci_device_group(dev); 1472 else if (dev_is_fsl_mc(dev)) 1473 group = fsl_mc_device_group(dev); 1474 else 1475 group = generic_device_group(dev); 1476 1477 /* Remember group for faster lookups */ 1478 if (!IS_ERR(group)) 1479 for_each_cfg_sme(cfg, fwspec, i, idx) 1480 smmu->s2crs[idx].group = group; 1481 1482 mutex_unlock(&smmu->stream_map_mutex); 1483 return group; 1484 } 1485 1486 static int arm_smmu_enable_nesting(struct iommu_domain *domain) 1487 { 1488 struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain); 1489 int ret = 0; 1490 1491 mutex_lock(&smmu_domain->init_mutex); 1492 if (smmu_domain->smmu) 1493 ret = -EPERM; 1494 else 1495 smmu_domain->stage = ARM_SMMU_DOMAIN_NESTED; 1496 mutex_unlock(&smmu_domain->init_mutex); 1497 1498 return ret; 1499 } 1500 1501 static int arm_smmu_set_pgtable_quirks(struct iommu_domain *domain, 1502 unsigned long quirks) 1503 { 1504 struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain); 1505 int ret = 0; 1506 1507 mutex_lock(&smmu_domain->init_mutex); 1508 if (smmu_domain->smmu) 1509 ret = -EPERM; 1510 else 1511 smmu_domain->pgtbl_quirks = quirks; 1512 mutex_unlock(&smmu_domain->init_mutex); 1513 1514 return ret; 1515 } 1516 1517 static int arm_smmu_of_xlate(struct device *dev, struct of_phandle_args *args) 1518 { 1519 u32 mask, fwid = 0; 1520 1521 if (args->args_count > 0) 1522 fwid |= FIELD_PREP(ARM_SMMU_SMR_ID, args->args[0]); 1523 1524 if (args->args_count > 1) 1525 fwid |= FIELD_PREP(ARM_SMMU_SMR_MASK, args->args[1]); 1526 else if (!of_property_read_u32(args->np, "stream-match-mask", &mask)) 1527 fwid |= FIELD_PREP(ARM_SMMU_SMR_MASK, mask); 1528 1529 return iommu_fwspec_add_ids(dev, &fwid, 1); 1530 } 1531 1532 static void arm_smmu_get_resv_regions(struct device *dev, 1533 struct list_head *head) 1534 { 1535 struct iommu_resv_region *region; 1536 int prot = IOMMU_WRITE | IOMMU_NOEXEC | IOMMU_MMIO; 1537 1538 region = iommu_alloc_resv_region(MSI_IOVA_BASE, MSI_IOVA_LENGTH, 1539 prot, IOMMU_RESV_SW_MSI, GFP_KERNEL); 1540 if (!region) 1541 return; 1542 1543 list_add_tail(®ion->list, head); 1544 1545 iommu_dma_get_resv_regions(dev, head); 1546 } 1547 1548 static int arm_smmu_def_domain_type(struct device *dev) 1549 { 1550 struct arm_smmu_master_cfg *cfg = dev_iommu_priv_get(dev); 1551 const struct arm_smmu_impl *impl = cfg->smmu->impl; 1552 1553 if (using_legacy_binding) 1554 return IOMMU_DOMAIN_IDENTITY; 1555 1556 if (impl && impl->def_domain_type) 1557 return impl->def_domain_type(dev); 1558 1559 return 0; 1560 } 1561 1562 static struct iommu_ops arm_smmu_ops = { 1563 .capable = arm_smmu_capable, 1564 .domain_alloc = arm_smmu_domain_alloc, 1565 .probe_device = arm_smmu_probe_device, 1566 .release_device = arm_smmu_release_device, 1567 .probe_finalize = arm_smmu_probe_finalize, 1568 .device_group = arm_smmu_device_group, 1569 .of_xlate = arm_smmu_of_xlate, 1570 .get_resv_regions = arm_smmu_get_resv_regions, 1571 .def_domain_type = arm_smmu_def_domain_type, 1572 .pgsize_bitmap = -1UL, /* Restricted during device attach */ 1573 .owner = THIS_MODULE, 1574 .default_domain_ops = &(const struct iommu_domain_ops) { 1575 .attach_dev = arm_smmu_attach_dev, 1576 .map_pages = arm_smmu_map_pages, 1577 .unmap_pages = arm_smmu_unmap_pages, 1578 .flush_iotlb_all = arm_smmu_flush_iotlb_all, 1579 .iotlb_sync = arm_smmu_iotlb_sync, 1580 .iova_to_phys = arm_smmu_iova_to_phys, 1581 .enable_nesting = arm_smmu_enable_nesting, 1582 .set_pgtable_quirks = arm_smmu_set_pgtable_quirks, 1583 .free = arm_smmu_domain_free, 1584 } 1585 }; 1586 1587 static void arm_smmu_device_reset(struct arm_smmu_device *smmu) 1588 { 1589 int i; 1590 u32 reg; 1591 1592 /* clear global FSR */ 1593 reg = arm_smmu_gr0_read(smmu, ARM_SMMU_GR0_sGFSR); 1594 arm_smmu_gr0_write(smmu, ARM_SMMU_GR0_sGFSR, reg); 1595 1596 /* 1597 * Reset stream mapping groups: Initial values mark all SMRn as 1598 * invalid and all S2CRn as bypass unless overridden. 1599 */ 1600 for (i = 0; i < smmu->num_mapping_groups; ++i) 1601 arm_smmu_write_sme(smmu, i); 1602 1603 /* Make sure all context banks are disabled and clear CB_FSR */ 1604 for (i = 0; i < smmu->num_context_banks; ++i) { 1605 arm_smmu_write_context_bank(smmu, i); 1606 arm_smmu_cb_write(smmu, i, ARM_SMMU_CB_FSR, ARM_SMMU_FSR_FAULT); 1607 } 1608 1609 /* Invalidate the TLB, just in case */ 1610 arm_smmu_gr0_write(smmu, ARM_SMMU_GR0_TLBIALLH, QCOM_DUMMY_VAL); 1611 arm_smmu_gr0_write(smmu, ARM_SMMU_GR0_TLBIALLNSNH, QCOM_DUMMY_VAL); 1612 1613 reg = arm_smmu_gr0_read(smmu, ARM_SMMU_GR0_sCR0); 1614 1615 /* Enable fault reporting */ 1616 reg |= (ARM_SMMU_sCR0_GFRE | ARM_SMMU_sCR0_GFIE | 1617 ARM_SMMU_sCR0_GCFGFRE | ARM_SMMU_sCR0_GCFGFIE); 1618 1619 /* Disable TLB broadcasting. */ 1620 reg |= (ARM_SMMU_sCR0_VMIDPNE | ARM_SMMU_sCR0_PTM); 1621 1622 /* Enable client access, handling unmatched streams as appropriate */ 1623 reg &= ~ARM_SMMU_sCR0_CLIENTPD; 1624 if (disable_bypass) 1625 reg |= ARM_SMMU_sCR0_USFCFG; 1626 else 1627 reg &= ~ARM_SMMU_sCR0_USFCFG; 1628 1629 /* Disable forced broadcasting */ 1630 reg &= ~ARM_SMMU_sCR0_FB; 1631 1632 /* Don't upgrade barriers */ 1633 reg &= ~(ARM_SMMU_sCR0_BSU); 1634 1635 if (smmu->features & ARM_SMMU_FEAT_VMID16) 1636 reg |= ARM_SMMU_sCR0_VMID16EN; 1637 1638 if (smmu->features & ARM_SMMU_FEAT_EXIDS) 1639 reg |= ARM_SMMU_sCR0_EXIDENABLE; 1640 1641 if (smmu->impl && smmu->impl->reset) 1642 smmu->impl->reset(smmu); 1643 1644 /* Push the button */ 1645 arm_smmu_tlb_sync_global(smmu); 1646 arm_smmu_gr0_write(smmu, ARM_SMMU_GR0_sCR0, reg); 1647 } 1648 1649 static int arm_smmu_id_size_to_bits(int size) 1650 { 1651 switch (size) { 1652 case 0: 1653 return 32; 1654 case 1: 1655 return 36; 1656 case 2: 1657 return 40; 1658 case 3: 1659 return 42; 1660 case 4: 1661 return 44; 1662 case 5: 1663 default: 1664 return 48; 1665 } 1666 } 1667 1668 static int arm_smmu_device_cfg_probe(struct arm_smmu_device *smmu) 1669 { 1670 unsigned int size; 1671 u32 id; 1672 bool cttw_reg, cttw_fw = smmu->features & ARM_SMMU_FEAT_COHERENT_WALK; 1673 int i, ret; 1674 1675 dev_notice(smmu->dev, "probing hardware configuration...\n"); 1676 dev_notice(smmu->dev, "SMMUv%d with:\n", 1677 smmu->version == ARM_SMMU_V2 ? 2 : 1); 1678 1679 /* ID0 */ 1680 id = arm_smmu_gr0_read(smmu, ARM_SMMU_GR0_ID0); 1681 1682 /* Restrict available stages based on module parameter */ 1683 if (force_stage == 1) 1684 id &= ~(ARM_SMMU_ID0_S2TS | ARM_SMMU_ID0_NTS); 1685 else if (force_stage == 2) 1686 id &= ~(ARM_SMMU_ID0_S1TS | ARM_SMMU_ID0_NTS); 1687 1688 if (id & ARM_SMMU_ID0_S1TS) { 1689 smmu->features |= ARM_SMMU_FEAT_TRANS_S1; 1690 dev_notice(smmu->dev, "\tstage 1 translation\n"); 1691 } 1692 1693 if (id & ARM_SMMU_ID0_S2TS) { 1694 smmu->features |= ARM_SMMU_FEAT_TRANS_S2; 1695 dev_notice(smmu->dev, "\tstage 2 translation\n"); 1696 } 1697 1698 if (id & ARM_SMMU_ID0_NTS) { 1699 smmu->features |= ARM_SMMU_FEAT_TRANS_NESTED; 1700 dev_notice(smmu->dev, "\tnested translation\n"); 1701 } 1702 1703 if (!(smmu->features & 1704 (ARM_SMMU_FEAT_TRANS_S1 | ARM_SMMU_FEAT_TRANS_S2))) { 1705 dev_err(smmu->dev, "\tno translation support!\n"); 1706 return -ENODEV; 1707 } 1708 1709 if ((id & ARM_SMMU_ID0_S1TS) && 1710 ((smmu->version < ARM_SMMU_V2) || !(id & ARM_SMMU_ID0_ATOSNS))) { 1711 smmu->features |= ARM_SMMU_FEAT_TRANS_OPS; 1712 dev_notice(smmu->dev, "\taddress translation ops\n"); 1713 } 1714 1715 /* 1716 * In order for DMA API calls to work properly, we must defer to what 1717 * the FW says about coherency, regardless of what the hardware claims. 1718 * Fortunately, this also opens up a workaround for systems where the 1719 * ID register value has ended up configured incorrectly. 1720 */ 1721 cttw_reg = !!(id & ARM_SMMU_ID0_CTTW); 1722 if (cttw_fw || cttw_reg) 1723 dev_notice(smmu->dev, "\t%scoherent table walk\n", 1724 cttw_fw ? "" : "non-"); 1725 if (cttw_fw != cttw_reg) 1726 dev_notice(smmu->dev, 1727 "\t(IDR0.CTTW overridden by FW configuration)\n"); 1728 1729 /* Max. number of entries we have for stream matching/indexing */ 1730 if (smmu->version == ARM_SMMU_V2 && id & ARM_SMMU_ID0_EXIDS) { 1731 smmu->features |= ARM_SMMU_FEAT_EXIDS; 1732 size = 1 << 16; 1733 } else { 1734 size = 1 << FIELD_GET(ARM_SMMU_ID0_NUMSIDB, id); 1735 } 1736 smmu->streamid_mask = size - 1; 1737 if (id & ARM_SMMU_ID0_SMS) { 1738 smmu->features |= ARM_SMMU_FEAT_STREAM_MATCH; 1739 size = FIELD_GET(ARM_SMMU_ID0_NUMSMRG, id); 1740 if (size == 0) { 1741 dev_err(smmu->dev, 1742 "stream-matching supported, but no SMRs present!\n"); 1743 return -ENODEV; 1744 } 1745 1746 /* Zero-initialised to mark as invalid */ 1747 smmu->smrs = devm_kcalloc(smmu->dev, size, sizeof(*smmu->smrs), 1748 GFP_KERNEL); 1749 if (!smmu->smrs) 1750 return -ENOMEM; 1751 1752 dev_notice(smmu->dev, 1753 "\tstream matching with %u register groups", size); 1754 } 1755 /* s2cr->type == 0 means translation, so initialise explicitly */ 1756 smmu->s2crs = devm_kmalloc_array(smmu->dev, size, sizeof(*smmu->s2crs), 1757 GFP_KERNEL); 1758 if (!smmu->s2crs) 1759 return -ENOMEM; 1760 for (i = 0; i < size; i++) 1761 smmu->s2crs[i] = s2cr_init_val; 1762 1763 smmu->num_mapping_groups = size; 1764 mutex_init(&smmu->stream_map_mutex); 1765 spin_lock_init(&smmu->global_sync_lock); 1766 1767 if (smmu->version < ARM_SMMU_V2 || 1768 !(id & ARM_SMMU_ID0_PTFS_NO_AARCH32)) { 1769 smmu->features |= ARM_SMMU_FEAT_FMT_AARCH32_L; 1770 if (!(id & ARM_SMMU_ID0_PTFS_NO_AARCH32S)) 1771 smmu->features |= ARM_SMMU_FEAT_FMT_AARCH32_S; 1772 } 1773 1774 /* ID1 */ 1775 id = arm_smmu_gr0_read(smmu, ARM_SMMU_GR0_ID1); 1776 smmu->pgshift = (id & ARM_SMMU_ID1_PAGESIZE) ? 16 : 12; 1777 1778 /* Check for size mismatch of SMMU address space from mapped region */ 1779 size = 1 << (FIELD_GET(ARM_SMMU_ID1_NUMPAGENDXB, id) + 1); 1780 if (smmu->numpage != 2 * size << smmu->pgshift) 1781 dev_warn(smmu->dev, 1782 "SMMU address space size (0x%x) differs from mapped region size (0x%x)!\n", 1783 2 * size << smmu->pgshift, smmu->numpage); 1784 /* Now properly encode NUMPAGE to subsequently derive SMMU_CB_BASE */ 1785 smmu->numpage = size; 1786 1787 smmu->num_s2_context_banks = FIELD_GET(ARM_SMMU_ID1_NUMS2CB, id); 1788 smmu->num_context_banks = FIELD_GET(ARM_SMMU_ID1_NUMCB, id); 1789 if (smmu->num_s2_context_banks > smmu->num_context_banks) { 1790 dev_err(smmu->dev, "impossible number of S2 context banks!\n"); 1791 return -ENODEV; 1792 } 1793 dev_notice(smmu->dev, "\t%u context banks (%u stage-2 only)\n", 1794 smmu->num_context_banks, smmu->num_s2_context_banks); 1795 smmu->cbs = devm_kcalloc(smmu->dev, smmu->num_context_banks, 1796 sizeof(*smmu->cbs), GFP_KERNEL); 1797 if (!smmu->cbs) 1798 return -ENOMEM; 1799 1800 /* ID2 */ 1801 id = arm_smmu_gr0_read(smmu, ARM_SMMU_GR0_ID2); 1802 size = arm_smmu_id_size_to_bits(FIELD_GET(ARM_SMMU_ID2_IAS, id)); 1803 smmu->ipa_size = size; 1804 1805 /* The output mask is also applied for bypass */ 1806 size = arm_smmu_id_size_to_bits(FIELD_GET(ARM_SMMU_ID2_OAS, id)); 1807 smmu->pa_size = size; 1808 1809 if (id & ARM_SMMU_ID2_VMID16) 1810 smmu->features |= ARM_SMMU_FEAT_VMID16; 1811 1812 /* 1813 * What the page table walker can address actually depends on which 1814 * descriptor format is in use, but since a) we don't know that yet, 1815 * and b) it can vary per context bank, this will have to do... 1816 */ 1817 if (dma_set_mask_and_coherent(smmu->dev, DMA_BIT_MASK(size))) 1818 dev_warn(smmu->dev, 1819 "failed to set DMA mask for table walker\n"); 1820 1821 if (smmu->version < ARM_SMMU_V2) { 1822 smmu->va_size = smmu->ipa_size; 1823 if (smmu->version == ARM_SMMU_V1_64K) 1824 smmu->features |= ARM_SMMU_FEAT_FMT_AARCH64_64K; 1825 } else { 1826 size = FIELD_GET(ARM_SMMU_ID2_UBS, id); 1827 smmu->va_size = arm_smmu_id_size_to_bits(size); 1828 if (id & ARM_SMMU_ID2_PTFS_4K) 1829 smmu->features |= ARM_SMMU_FEAT_FMT_AARCH64_4K; 1830 if (id & ARM_SMMU_ID2_PTFS_16K) 1831 smmu->features |= ARM_SMMU_FEAT_FMT_AARCH64_16K; 1832 if (id & ARM_SMMU_ID2_PTFS_64K) 1833 smmu->features |= ARM_SMMU_FEAT_FMT_AARCH64_64K; 1834 } 1835 1836 if (smmu->impl && smmu->impl->cfg_probe) { 1837 ret = smmu->impl->cfg_probe(smmu); 1838 if (ret) 1839 return ret; 1840 } 1841 1842 /* Now we've corralled the various formats, what'll it do? */ 1843 if (smmu->features & ARM_SMMU_FEAT_FMT_AARCH32_S) 1844 smmu->pgsize_bitmap |= SZ_4K | SZ_64K | SZ_1M | SZ_16M; 1845 if (smmu->features & 1846 (ARM_SMMU_FEAT_FMT_AARCH32_L | ARM_SMMU_FEAT_FMT_AARCH64_4K)) 1847 smmu->pgsize_bitmap |= SZ_4K | SZ_2M | SZ_1G; 1848 if (smmu->features & ARM_SMMU_FEAT_FMT_AARCH64_16K) 1849 smmu->pgsize_bitmap |= SZ_16K | SZ_32M; 1850 if (smmu->features & ARM_SMMU_FEAT_FMT_AARCH64_64K) 1851 smmu->pgsize_bitmap |= SZ_64K | SZ_512M; 1852 1853 if (arm_smmu_ops.pgsize_bitmap == -1UL) 1854 arm_smmu_ops.pgsize_bitmap = smmu->pgsize_bitmap; 1855 else 1856 arm_smmu_ops.pgsize_bitmap |= smmu->pgsize_bitmap; 1857 dev_notice(smmu->dev, "\tSupported page sizes: 0x%08lx\n", 1858 smmu->pgsize_bitmap); 1859 1860 1861 if (smmu->features & ARM_SMMU_FEAT_TRANS_S1) 1862 dev_notice(smmu->dev, "\tStage-1: %lu-bit VA -> %lu-bit IPA\n", 1863 smmu->va_size, smmu->ipa_size); 1864 1865 if (smmu->features & ARM_SMMU_FEAT_TRANS_S2) 1866 dev_notice(smmu->dev, "\tStage-2: %lu-bit IPA -> %lu-bit PA\n", 1867 smmu->ipa_size, smmu->pa_size); 1868 1869 return 0; 1870 } 1871 1872 struct arm_smmu_match_data { 1873 enum arm_smmu_arch_version version; 1874 enum arm_smmu_implementation model; 1875 }; 1876 1877 #define ARM_SMMU_MATCH_DATA(name, ver, imp) \ 1878 static const struct arm_smmu_match_data name = { .version = ver, .model = imp } 1879 1880 ARM_SMMU_MATCH_DATA(smmu_generic_v1, ARM_SMMU_V1, GENERIC_SMMU); 1881 ARM_SMMU_MATCH_DATA(smmu_generic_v2, ARM_SMMU_V2, GENERIC_SMMU); 1882 ARM_SMMU_MATCH_DATA(arm_mmu401, ARM_SMMU_V1_64K, GENERIC_SMMU); 1883 ARM_SMMU_MATCH_DATA(arm_mmu500, ARM_SMMU_V2, ARM_MMU500); 1884 ARM_SMMU_MATCH_DATA(cavium_smmuv2, ARM_SMMU_V2, CAVIUM_SMMUV2); 1885 ARM_SMMU_MATCH_DATA(qcom_smmuv2, ARM_SMMU_V2, QCOM_SMMUV2); 1886 1887 static const struct of_device_id arm_smmu_of_match[] = { 1888 { .compatible = "arm,smmu-v1", .data = &smmu_generic_v1 }, 1889 { .compatible = "arm,smmu-v2", .data = &smmu_generic_v2 }, 1890 { .compatible = "arm,mmu-400", .data = &smmu_generic_v1 }, 1891 { .compatible = "arm,mmu-401", .data = &arm_mmu401 }, 1892 { .compatible = "arm,mmu-500", .data = &arm_mmu500 }, 1893 { .compatible = "cavium,smmu-v2", .data = &cavium_smmuv2 }, 1894 { .compatible = "nvidia,smmu-500", .data = &arm_mmu500 }, 1895 { .compatible = "qcom,smmu-v2", .data = &qcom_smmuv2 }, 1896 { }, 1897 }; 1898 MODULE_DEVICE_TABLE(of, arm_smmu_of_match); 1899 1900 #ifdef CONFIG_ACPI 1901 static int acpi_smmu_get_data(u32 model, struct arm_smmu_device *smmu) 1902 { 1903 int ret = 0; 1904 1905 switch (model) { 1906 case ACPI_IORT_SMMU_V1: 1907 case ACPI_IORT_SMMU_CORELINK_MMU400: 1908 smmu->version = ARM_SMMU_V1; 1909 smmu->model = GENERIC_SMMU; 1910 break; 1911 case ACPI_IORT_SMMU_CORELINK_MMU401: 1912 smmu->version = ARM_SMMU_V1_64K; 1913 smmu->model = GENERIC_SMMU; 1914 break; 1915 case ACPI_IORT_SMMU_V2: 1916 smmu->version = ARM_SMMU_V2; 1917 smmu->model = GENERIC_SMMU; 1918 break; 1919 case ACPI_IORT_SMMU_CORELINK_MMU500: 1920 smmu->version = ARM_SMMU_V2; 1921 smmu->model = ARM_MMU500; 1922 break; 1923 case ACPI_IORT_SMMU_CAVIUM_THUNDERX: 1924 smmu->version = ARM_SMMU_V2; 1925 smmu->model = CAVIUM_SMMUV2; 1926 break; 1927 default: 1928 ret = -ENODEV; 1929 } 1930 1931 return ret; 1932 } 1933 1934 static int arm_smmu_device_acpi_probe(struct arm_smmu_device *smmu, 1935 u32 *global_irqs, u32 *pmu_irqs) 1936 { 1937 struct device *dev = smmu->dev; 1938 struct acpi_iort_node *node = 1939 *(struct acpi_iort_node **)dev_get_platdata(dev); 1940 struct acpi_iort_smmu *iort_smmu; 1941 int ret; 1942 1943 /* Retrieve SMMU1/2 specific data */ 1944 iort_smmu = (struct acpi_iort_smmu *)node->node_data; 1945 1946 ret = acpi_smmu_get_data(iort_smmu->model, smmu); 1947 if (ret < 0) 1948 return ret; 1949 1950 /* Ignore the configuration access interrupt */ 1951 *global_irqs = 1; 1952 *pmu_irqs = 0; 1953 1954 if (iort_smmu->flags & ACPI_IORT_SMMU_COHERENT_WALK) 1955 smmu->features |= ARM_SMMU_FEAT_COHERENT_WALK; 1956 1957 return 0; 1958 } 1959 #else 1960 static inline int arm_smmu_device_acpi_probe(struct arm_smmu_device *smmu, 1961 u32 *global_irqs, u32 *pmu_irqs) 1962 { 1963 return -ENODEV; 1964 } 1965 #endif 1966 1967 static int arm_smmu_device_dt_probe(struct arm_smmu_device *smmu, 1968 u32 *global_irqs, u32 *pmu_irqs) 1969 { 1970 const struct arm_smmu_match_data *data; 1971 struct device *dev = smmu->dev; 1972 bool legacy_binding; 1973 1974 if (of_property_read_u32(dev->of_node, "#global-interrupts", global_irqs)) 1975 return dev_err_probe(dev, -ENODEV, 1976 "missing #global-interrupts property\n"); 1977 *pmu_irqs = 0; 1978 1979 data = of_device_get_match_data(dev); 1980 smmu->version = data->version; 1981 smmu->model = data->model; 1982 1983 legacy_binding = of_find_property(dev->of_node, "mmu-masters", NULL); 1984 if (legacy_binding && !using_generic_binding) { 1985 if (!using_legacy_binding) { 1986 pr_notice("deprecated \"mmu-masters\" DT property in use; %s support unavailable\n", 1987 IS_ENABLED(CONFIG_ARM_SMMU_LEGACY_DT_BINDINGS) ? "DMA API" : "SMMU"); 1988 } 1989 using_legacy_binding = true; 1990 } else if (!legacy_binding && !using_legacy_binding) { 1991 using_generic_binding = true; 1992 } else { 1993 dev_err(dev, "not probing due to mismatched DT properties\n"); 1994 return -ENODEV; 1995 } 1996 1997 if (of_dma_is_coherent(dev->of_node)) 1998 smmu->features |= ARM_SMMU_FEAT_COHERENT_WALK; 1999 2000 return 0; 2001 } 2002 2003 static void arm_smmu_rmr_install_bypass_smr(struct arm_smmu_device *smmu) 2004 { 2005 struct list_head rmr_list; 2006 struct iommu_resv_region *e; 2007 int idx, cnt = 0; 2008 u32 reg; 2009 2010 INIT_LIST_HEAD(&rmr_list); 2011 iort_get_rmr_sids(dev_fwnode(smmu->dev), &rmr_list); 2012 2013 /* 2014 * Rather than trying to look at existing mappings that 2015 * are setup by the firmware and then invalidate the ones 2016 * that do no have matching RMR entries, just disable the 2017 * SMMU until it gets enabled again in the reset routine. 2018 */ 2019 reg = arm_smmu_gr0_read(smmu, ARM_SMMU_GR0_sCR0); 2020 reg |= ARM_SMMU_sCR0_CLIENTPD; 2021 arm_smmu_gr0_write(smmu, ARM_SMMU_GR0_sCR0, reg); 2022 2023 list_for_each_entry(e, &rmr_list, list) { 2024 struct iommu_iort_rmr_data *rmr; 2025 int i; 2026 2027 rmr = container_of(e, struct iommu_iort_rmr_data, rr); 2028 for (i = 0; i < rmr->num_sids; i++) { 2029 idx = arm_smmu_find_sme(smmu, rmr->sids[i], ~0); 2030 if (idx < 0) 2031 continue; 2032 2033 if (smmu->s2crs[idx].count == 0) { 2034 smmu->smrs[idx].id = rmr->sids[i]; 2035 smmu->smrs[idx].mask = 0; 2036 smmu->smrs[idx].valid = true; 2037 } 2038 smmu->s2crs[idx].count++; 2039 smmu->s2crs[idx].type = S2CR_TYPE_BYPASS; 2040 smmu->s2crs[idx].privcfg = S2CR_PRIVCFG_DEFAULT; 2041 2042 cnt++; 2043 } 2044 } 2045 2046 dev_notice(smmu->dev, "\tpreserved %d boot mapping%s\n", cnt, 2047 cnt == 1 ? "" : "s"); 2048 iort_put_rmr_sids(dev_fwnode(smmu->dev), &rmr_list); 2049 } 2050 2051 static int arm_smmu_device_probe(struct platform_device *pdev) 2052 { 2053 struct resource *res; 2054 struct arm_smmu_device *smmu; 2055 struct device *dev = &pdev->dev; 2056 int num_irqs, i, err; 2057 u32 global_irqs, pmu_irqs; 2058 irqreturn_t (*global_fault)(int irq, void *dev); 2059 2060 smmu = devm_kzalloc(dev, sizeof(*smmu), GFP_KERNEL); 2061 if (!smmu) { 2062 dev_err(dev, "failed to allocate arm_smmu_device\n"); 2063 return -ENOMEM; 2064 } 2065 smmu->dev = dev; 2066 2067 if (dev->of_node) 2068 err = arm_smmu_device_dt_probe(smmu, &global_irqs, &pmu_irqs); 2069 else 2070 err = arm_smmu_device_acpi_probe(smmu, &global_irqs, &pmu_irqs); 2071 if (err) 2072 return err; 2073 2074 smmu->base = devm_platform_get_and_ioremap_resource(pdev, 0, &res); 2075 if (IS_ERR(smmu->base)) 2076 return PTR_ERR(smmu->base); 2077 smmu->ioaddr = res->start; 2078 2079 /* 2080 * The resource size should effectively match the value of SMMU_TOP; 2081 * stash that temporarily until we know PAGESIZE to validate it with. 2082 */ 2083 smmu->numpage = resource_size(res); 2084 2085 smmu = arm_smmu_impl_init(smmu); 2086 if (IS_ERR(smmu)) 2087 return PTR_ERR(smmu); 2088 2089 num_irqs = platform_irq_count(pdev); 2090 2091 smmu->num_context_irqs = num_irqs - global_irqs - pmu_irqs; 2092 if (smmu->num_context_irqs <= 0) 2093 return dev_err_probe(dev, -ENODEV, 2094 "found %d interrupts but expected at least %d\n", 2095 num_irqs, global_irqs + pmu_irqs + 1); 2096 2097 smmu->irqs = devm_kcalloc(dev, smmu->num_context_irqs, 2098 sizeof(*smmu->irqs), GFP_KERNEL); 2099 if (!smmu->irqs) 2100 return dev_err_probe(dev, -ENOMEM, "failed to allocate %d irqs\n", 2101 smmu->num_context_irqs); 2102 2103 for (i = 0; i < smmu->num_context_irqs; i++) { 2104 int irq = platform_get_irq(pdev, global_irqs + pmu_irqs + i); 2105 2106 if (irq < 0) 2107 return irq; 2108 smmu->irqs[i] = irq; 2109 } 2110 2111 err = devm_clk_bulk_get_all(dev, &smmu->clks); 2112 if (err < 0) { 2113 dev_err(dev, "failed to get clocks %d\n", err); 2114 return err; 2115 } 2116 smmu->num_clks = err; 2117 2118 err = clk_bulk_prepare_enable(smmu->num_clks, smmu->clks); 2119 if (err) 2120 return err; 2121 2122 err = arm_smmu_device_cfg_probe(smmu); 2123 if (err) 2124 return err; 2125 2126 if (smmu->version == ARM_SMMU_V2) { 2127 if (smmu->num_context_banks > smmu->num_context_irqs) { 2128 dev_err(dev, 2129 "found only %d context irq(s) but %d required\n", 2130 smmu->num_context_irqs, smmu->num_context_banks); 2131 return -ENODEV; 2132 } 2133 2134 /* Ignore superfluous interrupts */ 2135 smmu->num_context_irqs = smmu->num_context_banks; 2136 } 2137 2138 if (smmu->impl && smmu->impl->global_fault) 2139 global_fault = smmu->impl->global_fault; 2140 else 2141 global_fault = arm_smmu_global_fault; 2142 2143 for (i = 0; i < global_irqs; i++) { 2144 int irq = platform_get_irq(pdev, i); 2145 2146 if (irq < 0) 2147 return irq; 2148 2149 err = devm_request_irq(dev, irq, global_fault, IRQF_SHARED, 2150 "arm-smmu global fault", smmu); 2151 if (err) 2152 return dev_err_probe(dev, err, 2153 "failed to request global IRQ %d (%u)\n", 2154 i, irq); 2155 } 2156 2157 err = iommu_device_sysfs_add(&smmu->iommu, smmu->dev, NULL, 2158 "smmu.%pa", &smmu->ioaddr); 2159 if (err) { 2160 dev_err(dev, "Failed to register iommu in sysfs\n"); 2161 return err; 2162 } 2163 2164 err = iommu_device_register(&smmu->iommu, &arm_smmu_ops, dev); 2165 if (err) { 2166 dev_err(dev, "Failed to register iommu\n"); 2167 iommu_device_sysfs_remove(&smmu->iommu); 2168 return err; 2169 } 2170 2171 platform_set_drvdata(pdev, smmu); 2172 2173 /* Check for RMRs and install bypass SMRs if any */ 2174 arm_smmu_rmr_install_bypass_smr(smmu); 2175 2176 arm_smmu_device_reset(smmu); 2177 arm_smmu_test_smr_masks(smmu); 2178 2179 /* 2180 * We want to avoid touching dev->power.lock in fastpaths unless 2181 * it's really going to do something useful - pm_runtime_enabled() 2182 * can serve as an ideal proxy for that decision. So, conditionally 2183 * enable pm_runtime. 2184 */ 2185 if (dev->pm_domain) { 2186 pm_runtime_set_active(dev); 2187 pm_runtime_enable(dev); 2188 } 2189 2190 return 0; 2191 } 2192 2193 static void arm_smmu_device_shutdown(struct platform_device *pdev) 2194 { 2195 struct arm_smmu_device *smmu = platform_get_drvdata(pdev); 2196 2197 if (!bitmap_empty(smmu->context_map, ARM_SMMU_MAX_CBS)) 2198 dev_notice(&pdev->dev, "disabling translation\n"); 2199 2200 arm_smmu_rpm_get(smmu); 2201 /* Turn the thing off */ 2202 arm_smmu_gr0_write(smmu, ARM_SMMU_GR0_sCR0, ARM_SMMU_sCR0_CLIENTPD); 2203 arm_smmu_rpm_put(smmu); 2204 2205 if (pm_runtime_enabled(smmu->dev)) 2206 pm_runtime_force_suspend(smmu->dev); 2207 else 2208 clk_bulk_disable(smmu->num_clks, smmu->clks); 2209 2210 clk_bulk_unprepare(smmu->num_clks, smmu->clks); 2211 } 2212 2213 static void arm_smmu_device_remove(struct platform_device *pdev) 2214 { 2215 struct arm_smmu_device *smmu = platform_get_drvdata(pdev); 2216 2217 iommu_device_unregister(&smmu->iommu); 2218 iommu_device_sysfs_remove(&smmu->iommu); 2219 2220 arm_smmu_device_shutdown(pdev); 2221 } 2222 2223 static int __maybe_unused arm_smmu_runtime_resume(struct device *dev) 2224 { 2225 struct arm_smmu_device *smmu = dev_get_drvdata(dev); 2226 int ret; 2227 2228 ret = clk_bulk_enable(smmu->num_clks, smmu->clks); 2229 if (ret) 2230 return ret; 2231 2232 arm_smmu_device_reset(smmu); 2233 2234 return 0; 2235 } 2236 2237 static int __maybe_unused arm_smmu_runtime_suspend(struct device *dev) 2238 { 2239 struct arm_smmu_device *smmu = dev_get_drvdata(dev); 2240 2241 clk_bulk_disable(smmu->num_clks, smmu->clks); 2242 2243 return 0; 2244 } 2245 2246 static int __maybe_unused arm_smmu_pm_resume(struct device *dev) 2247 { 2248 int ret; 2249 struct arm_smmu_device *smmu = dev_get_drvdata(dev); 2250 2251 ret = clk_bulk_prepare(smmu->num_clks, smmu->clks); 2252 if (ret) 2253 return ret; 2254 2255 if (pm_runtime_suspended(dev)) 2256 return 0; 2257 2258 ret = arm_smmu_runtime_resume(dev); 2259 if (ret) 2260 clk_bulk_unprepare(smmu->num_clks, smmu->clks); 2261 2262 return ret; 2263 } 2264 2265 static int __maybe_unused arm_smmu_pm_suspend(struct device *dev) 2266 { 2267 int ret = 0; 2268 struct arm_smmu_device *smmu = dev_get_drvdata(dev); 2269 2270 if (pm_runtime_suspended(dev)) 2271 goto clk_unprepare; 2272 2273 ret = arm_smmu_runtime_suspend(dev); 2274 if (ret) 2275 return ret; 2276 2277 clk_unprepare: 2278 clk_bulk_unprepare(smmu->num_clks, smmu->clks); 2279 return ret; 2280 } 2281 2282 static const struct dev_pm_ops arm_smmu_pm_ops = { 2283 SET_SYSTEM_SLEEP_PM_OPS(arm_smmu_pm_suspend, arm_smmu_pm_resume) 2284 SET_RUNTIME_PM_OPS(arm_smmu_runtime_suspend, 2285 arm_smmu_runtime_resume, NULL) 2286 }; 2287 2288 static struct platform_driver arm_smmu_driver = { 2289 .driver = { 2290 .name = "arm-smmu", 2291 .of_match_table = arm_smmu_of_match, 2292 .pm = &arm_smmu_pm_ops, 2293 .suppress_bind_attrs = true, 2294 }, 2295 .probe = arm_smmu_device_probe, 2296 .remove_new = arm_smmu_device_remove, 2297 .shutdown = arm_smmu_device_shutdown, 2298 }; 2299 module_platform_driver(arm_smmu_driver); 2300 2301 MODULE_DESCRIPTION("IOMMU API for ARM architected SMMU implementations"); 2302 MODULE_AUTHOR("Will Deacon <will@kernel.org>"); 2303 MODULE_ALIAS("platform:arm-smmu"); 2304 MODULE_LICENSE("GPL v2"); 2305