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