Loading drivers/iommu/arm-smmu.c +27 −26 Original line number Diff line number Diff line Loading @@ -928,10 +928,10 @@ static int arm_smmu_power_on_atomic(struct arm_smmu_power_resources *pwr) } /* Clocks should be unprepared after this (arm_smmu_unprepare_clocks) */ static void arm_smmu_power_off_atomic(struct arm_smmu_power_resources *pwr) static void arm_smmu_power_off_atomic(struct arm_smmu_device *smmu, struct arm_smmu_power_resources *pwr) { unsigned long flags; struct arm_smmu_device *smmu = pwr->dev->driver_data; arm_smmu_arch_write_sync(smmu); Loading Loading @@ -1029,9 +1029,10 @@ static int arm_smmu_power_on(struct arm_smmu_power_resources *pwr) return ret; } static void arm_smmu_power_off(struct arm_smmu_power_resources *pwr) static void arm_smmu_power_off(struct arm_smmu_device *smmu, struct arm_smmu_power_resources *pwr) { arm_smmu_power_off_atomic(pwr); arm_smmu_power_off_atomic(smmu, pwr); arm_smmu_power_off_slow(pwr); } Loading Loading @@ -1064,11 +1065,11 @@ static void arm_smmu_domain_power_off(struct iommu_domain *domain, (1ULL << DOMAIN_ATTR_ATOMIC); if (atomic_domain) { arm_smmu_power_off_atomic(smmu->pwr); arm_smmu_power_off_atomic(smmu, smmu->pwr); return; } arm_smmu_power_off(smmu->pwr); arm_smmu_power_off(smmu, smmu->pwr); } /* Wait for any pending TLB invalidations to complete */ Loading Loading @@ -1578,7 +1579,7 @@ static irqreturn_t arm_smmu_context_fault(int irq, void *dev) } out_power_off: arm_smmu_power_off(smmu->pwr); arm_smmu_power_off(smmu, smmu->pwr); return ret; } Loading @@ -1598,7 +1599,7 @@ static irqreturn_t arm_smmu_global_fault(int irq, void *dev) gfsynr2 = readl_relaxed(gr0_base + ARM_SMMU_GR0_sGFSYNR2); if (!gfsr) { arm_smmu_power_off(smmu->pwr); arm_smmu_power_off(smmu, smmu->pwr); return IRQ_NONE; } Loading @@ -1609,7 +1610,7 @@ static irqreturn_t arm_smmu_global_fault(int irq, void *dev) gfsr, gfsynr0, gfsynr1, gfsynr2); writel(gfsr, gr0_base + ARM_SMMU_GR0_sGFSR); arm_smmu_power_off(smmu->pwr); arm_smmu_power_off(smmu, smmu->pwr); return IRQ_HANDLED; } Loading Loading @@ -2216,7 +2217,7 @@ static void arm_smmu_destroy_domain_context(struct iommu_domain *domain) if (dynamic) { arm_smmu_free_asid(domain); free_io_pgtable_ops(smmu_domain->pgtbl_ops); arm_smmu_power_off(smmu->pwr); arm_smmu_power_off(smmu, smmu->pwr); arm_smmu_rpm_put(smmu); arm_smmu_secure_domain_lock(smmu_domain); arm_smmu_secure_pool_destroy(smmu_domain); Loading Loading @@ -2246,7 +2247,7 @@ static void arm_smmu_destroy_domain_context(struct iommu_domain *domain) arm_smmu_secure_domain_unlock(smmu_domain); __arm_smmu_free_bitmap(smmu->context_map, cfg->cbndx); arm_smmu_power_off(smmu->pwr); arm_smmu_power_off(smmu, smmu->pwr); arm_smmu_rpm_put(smmu); arm_smmu_domain_reinit(smmu_domain); } Loading Loading @@ -2593,7 +2594,7 @@ static void arm_smmu_detach_dev(struct iommu_domain *domain, arm_smmu_power_on(smmu->pwr); arm_smmu_domain_remove_master(smmu_domain, fwspec); arm_smmu_power_off(smmu->pwr); arm_smmu_power_off(smmu, smmu->pwr); } static int arm_smmu_assign_table(struct arm_smmu_domain *smmu_domain) Loading Loading @@ -2953,10 +2954,10 @@ static int arm_smmu_attach_dev(struct iommu_domain *domain, struct device *dev) */ if (!ret && atomic_domain) { WARN_ON(arm_smmu_power_on(smmu->pwr)); arm_smmu_power_off_atomic(smmu->pwr); arm_smmu_power_off_atomic(smmu, smmu->pwr); } arm_smmu_power_off(smmu->pwr); arm_smmu_power_off(smmu, smmu->pwr); arm_smmu_rpm_put(smmu); return ret; Loading Loading @@ -3262,7 +3263,7 @@ static phys_addr_t arm_smmu_iova_to_phys_hard(struct iommu_domain *domain, spin_unlock_irqrestore(&smmu_domain->cb_lock, flags); out: arm_smmu_power_off(smmu_domain->smmu->pwr); arm_smmu_power_off(smmu, smmu_domain->smmu->pwr); return ret; } Loading Loading @@ -3367,7 +3368,7 @@ static int arm_smmu_add_device(struct device *dev) ret = arm_smmu_master_alloc_smes(dev); if (ret) goto out_dev_link_free; arm_smmu_power_off(smmu->pwr); arm_smmu_power_off(smmu, smmu->pwr); return 0; out_dev_link_free: Loading @@ -3375,7 +3376,7 @@ static int arm_smmu_add_device(struct device *dev) out_cfg_free: kfree(cfg); out_pwr_off: arm_smmu_power_off(smmu->pwr); arm_smmu_power_off(smmu, smmu->pwr); out_free: iommu_fwspec_free(dev); return ret; Loading Loading @@ -3413,7 +3414,7 @@ static void arm_smmu_remove_device(struct device *dev) iommu_group_remove_device(dev); kfree(fwspec->iommu_priv); iommu_fwspec_free(dev); arm_smmu_power_off(smmu->pwr); arm_smmu_power_off(smmu, smmu->pwr); arm_smmu_rpm_put(smmu); } Loading Loading @@ -3917,7 +3918,7 @@ static int arm_smmu_enable_s1_translations(struct arm_smmu_domain *smmu_domain) reg |= SCTLR_M; writel_relaxed(reg, cb_base + ARM_SMMU_CB_SCTLR); arm_smmu_power_off(smmu->pwr); arm_smmu_power_off(smmu, smmu->pwr); return ret; } Loading Loading @@ -3963,7 +3964,7 @@ static void arm_smmu_trigger_fault(struct iommu_domain *domain, /* give the interrupt time to fire... */ msleep(1000); arm_smmu_power_off(smmu->pwr); arm_smmu_power_off(smmu, smmu->pwr); } static void arm_smmu_tlbi_domain(struct iommu_domain *domain) Loading @@ -3982,7 +3983,7 @@ static void arm_smmu_disable_config_clocks(struct iommu_domain *domain) { struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain); arm_smmu_power_off(smmu_domain->smmu->pwr); arm_smmu_power_off(smmu_domain->smmu, smmu_domain->smmu->pwr); } static struct msm_iommu_ops arm_smmu_ops = { Loading Loading @@ -4914,7 +4915,7 @@ static int arm_smmu_device_dt_probe(struct platform_device *pdev) arm_smmu_device_reset(smmu); arm_smmu_test_smr_masks(smmu); arm_smmu_interrupt_selftest(smmu); arm_smmu_power_off(smmu->pwr); arm_smmu_power_off(smmu, smmu->pwr); /* * We want to avoid touching dev->power.lock in fastpaths unless Loading @@ -4938,7 +4939,7 @@ static int arm_smmu_device_dt_probe(struct platform_device *pdev) return 0; out_power_off: arm_smmu_power_off(smmu->pwr); arm_smmu_power_off(smmu, smmu->pwr); out_exit_power_resources: arm_smmu_exit_power_resources(smmu->pwr); Loading Loading @@ -4978,7 +4979,7 @@ static int arm_smmu_device_remove(struct platform_device *pdev) /* Turn the thing off */ writel_relaxed(sCR0_CLIENTPD, ARM_SMMU_GR0_NS(smmu) + ARM_SMMU_GR0_sCR0); arm_smmu_power_off(smmu->pwr); arm_smmu_power_off(smmu, smmu->pwr); arm_smmu_exit_power_resources(smmu->pwr); Loading @@ -4999,7 +5000,7 @@ static int __maybe_unused arm_smmu_runtime_resume(struct device *dev) return ret; arm_smmu_device_reset(smmu); arm_smmu_power_off(smmu->pwr); arm_smmu_power_off(smmu, smmu->pwr); return 0; } Loading Loading @@ -5451,7 +5452,7 @@ static phys_addr_t qsmmuv500_iova_to_phys( /* Wait for read to complete before off */ rmb(); arm_smmu_power_off(tbu->pwr); arm_smmu_power_off(tbu->smmu, tbu->pwr); return phys; } Loading Loading
drivers/iommu/arm-smmu.c +27 −26 Original line number Diff line number Diff line Loading @@ -928,10 +928,10 @@ static int arm_smmu_power_on_atomic(struct arm_smmu_power_resources *pwr) } /* Clocks should be unprepared after this (arm_smmu_unprepare_clocks) */ static void arm_smmu_power_off_atomic(struct arm_smmu_power_resources *pwr) static void arm_smmu_power_off_atomic(struct arm_smmu_device *smmu, struct arm_smmu_power_resources *pwr) { unsigned long flags; struct arm_smmu_device *smmu = pwr->dev->driver_data; arm_smmu_arch_write_sync(smmu); Loading Loading @@ -1029,9 +1029,10 @@ static int arm_smmu_power_on(struct arm_smmu_power_resources *pwr) return ret; } static void arm_smmu_power_off(struct arm_smmu_power_resources *pwr) static void arm_smmu_power_off(struct arm_smmu_device *smmu, struct arm_smmu_power_resources *pwr) { arm_smmu_power_off_atomic(pwr); arm_smmu_power_off_atomic(smmu, pwr); arm_smmu_power_off_slow(pwr); } Loading Loading @@ -1064,11 +1065,11 @@ static void arm_smmu_domain_power_off(struct iommu_domain *domain, (1ULL << DOMAIN_ATTR_ATOMIC); if (atomic_domain) { arm_smmu_power_off_atomic(smmu->pwr); arm_smmu_power_off_atomic(smmu, smmu->pwr); return; } arm_smmu_power_off(smmu->pwr); arm_smmu_power_off(smmu, smmu->pwr); } /* Wait for any pending TLB invalidations to complete */ Loading Loading @@ -1578,7 +1579,7 @@ static irqreturn_t arm_smmu_context_fault(int irq, void *dev) } out_power_off: arm_smmu_power_off(smmu->pwr); arm_smmu_power_off(smmu, smmu->pwr); return ret; } Loading @@ -1598,7 +1599,7 @@ static irqreturn_t arm_smmu_global_fault(int irq, void *dev) gfsynr2 = readl_relaxed(gr0_base + ARM_SMMU_GR0_sGFSYNR2); if (!gfsr) { arm_smmu_power_off(smmu->pwr); arm_smmu_power_off(smmu, smmu->pwr); return IRQ_NONE; } Loading @@ -1609,7 +1610,7 @@ static irqreturn_t arm_smmu_global_fault(int irq, void *dev) gfsr, gfsynr0, gfsynr1, gfsynr2); writel(gfsr, gr0_base + ARM_SMMU_GR0_sGFSR); arm_smmu_power_off(smmu->pwr); arm_smmu_power_off(smmu, smmu->pwr); return IRQ_HANDLED; } Loading Loading @@ -2216,7 +2217,7 @@ static void arm_smmu_destroy_domain_context(struct iommu_domain *domain) if (dynamic) { arm_smmu_free_asid(domain); free_io_pgtable_ops(smmu_domain->pgtbl_ops); arm_smmu_power_off(smmu->pwr); arm_smmu_power_off(smmu, smmu->pwr); arm_smmu_rpm_put(smmu); arm_smmu_secure_domain_lock(smmu_domain); arm_smmu_secure_pool_destroy(smmu_domain); Loading Loading @@ -2246,7 +2247,7 @@ static void arm_smmu_destroy_domain_context(struct iommu_domain *domain) arm_smmu_secure_domain_unlock(smmu_domain); __arm_smmu_free_bitmap(smmu->context_map, cfg->cbndx); arm_smmu_power_off(smmu->pwr); arm_smmu_power_off(smmu, smmu->pwr); arm_smmu_rpm_put(smmu); arm_smmu_domain_reinit(smmu_domain); } Loading Loading @@ -2593,7 +2594,7 @@ static void arm_smmu_detach_dev(struct iommu_domain *domain, arm_smmu_power_on(smmu->pwr); arm_smmu_domain_remove_master(smmu_domain, fwspec); arm_smmu_power_off(smmu->pwr); arm_smmu_power_off(smmu, smmu->pwr); } static int arm_smmu_assign_table(struct arm_smmu_domain *smmu_domain) Loading Loading @@ -2953,10 +2954,10 @@ static int arm_smmu_attach_dev(struct iommu_domain *domain, struct device *dev) */ if (!ret && atomic_domain) { WARN_ON(arm_smmu_power_on(smmu->pwr)); arm_smmu_power_off_atomic(smmu->pwr); arm_smmu_power_off_atomic(smmu, smmu->pwr); } arm_smmu_power_off(smmu->pwr); arm_smmu_power_off(smmu, smmu->pwr); arm_smmu_rpm_put(smmu); return ret; Loading Loading @@ -3262,7 +3263,7 @@ static phys_addr_t arm_smmu_iova_to_phys_hard(struct iommu_domain *domain, spin_unlock_irqrestore(&smmu_domain->cb_lock, flags); out: arm_smmu_power_off(smmu_domain->smmu->pwr); arm_smmu_power_off(smmu, smmu_domain->smmu->pwr); return ret; } Loading Loading @@ -3367,7 +3368,7 @@ static int arm_smmu_add_device(struct device *dev) ret = arm_smmu_master_alloc_smes(dev); if (ret) goto out_dev_link_free; arm_smmu_power_off(smmu->pwr); arm_smmu_power_off(smmu, smmu->pwr); return 0; out_dev_link_free: Loading @@ -3375,7 +3376,7 @@ static int arm_smmu_add_device(struct device *dev) out_cfg_free: kfree(cfg); out_pwr_off: arm_smmu_power_off(smmu->pwr); arm_smmu_power_off(smmu, smmu->pwr); out_free: iommu_fwspec_free(dev); return ret; Loading Loading @@ -3413,7 +3414,7 @@ static void arm_smmu_remove_device(struct device *dev) iommu_group_remove_device(dev); kfree(fwspec->iommu_priv); iommu_fwspec_free(dev); arm_smmu_power_off(smmu->pwr); arm_smmu_power_off(smmu, smmu->pwr); arm_smmu_rpm_put(smmu); } Loading Loading @@ -3917,7 +3918,7 @@ static int arm_smmu_enable_s1_translations(struct arm_smmu_domain *smmu_domain) reg |= SCTLR_M; writel_relaxed(reg, cb_base + ARM_SMMU_CB_SCTLR); arm_smmu_power_off(smmu->pwr); arm_smmu_power_off(smmu, smmu->pwr); return ret; } Loading Loading @@ -3963,7 +3964,7 @@ static void arm_smmu_trigger_fault(struct iommu_domain *domain, /* give the interrupt time to fire... */ msleep(1000); arm_smmu_power_off(smmu->pwr); arm_smmu_power_off(smmu, smmu->pwr); } static void arm_smmu_tlbi_domain(struct iommu_domain *domain) Loading @@ -3982,7 +3983,7 @@ static void arm_smmu_disable_config_clocks(struct iommu_domain *domain) { struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain); arm_smmu_power_off(smmu_domain->smmu->pwr); arm_smmu_power_off(smmu_domain->smmu, smmu_domain->smmu->pwr); } static struct msm_iommu_ops arm_smmu_ops = { Loading Loading @@ -4914,7 +4915,7 @@ static int arm_smmu_device_dt_probe(struct platform_device *pdev) arm_smmu_device_reset(smmu); arm_smmu_test_smr_masks(smmu); arm_smmu_interrupt_selftest(smmu); arm_smmu_power_off(smmu->pwr); arm_smmu_power_off(smmu, smmu->pwr); /* * We want to avoid touching dev->power.lock in fastpaths unless Loading @@ -4938,7 +4939,7 @@ static int arm_smmu_device_dt_probe(struct platform_device *pdev) return 0; out_power_off: arm_smmu_power_off(smmu->pwr); arm_smmu_power_off(smmu, smmu->pwr); out_exit_power_resources: arm_smmu_exit_power_resources(smmu->pwr); Loading Loading @@ -4978,7 +4979,7 @@ static int arm_smmu_device_remove(struct platform_device *pdev) /* Turn the thing off */ writel_relaxed(sCR0_CLIENTPD, ARM_SMMU_GR0_NS(smmu) + ARM_SMMU_GR0_sCR0); arm_smmu_power_off(smmu->pwr); arm_smmu_power_off(smmu, smmu->pwr); arm_smmu_exit_power_resources(smmu->pwr); Loading @@ -4999,7 +5000,7 @@ static int __maybe_unused arm_smmu_runtime_resume(struct device *dev) return ret; arm_smmu_device_reset(smmu); arm_smmu_power_off(smmu->pwr); arm_smmu_power_off(smmu, smmu->pwr); return 0; } Loading Loading @@ -5451,7 +5452,7 @@ static phys_addr_t qsmmuv500_iova_to_phys( /* Wait for read to complete before off */ rmb(); arm_smmu_power_off(tbu->pwr); arm_smmu_power_off(tbu->smmu, tbu->pwr); return phys; } Loading