Merge branch 'for-joerg/arm-smmu/fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/will/linux into iommu/fixes
This commit is contained in:
commit
6188d75b9e
1 changed files with 7 additions and 6 deletions
|
@ -377,6 +377,7 @@ struct arm_smmu_cfg {
|
||||||
u32 cbar;
|
u32 cbar;
|
||||||
pgd_t *pgd;
|
pgd_t *pgd;
|
||||||
};
|
};
|
||||||
|
#define INVALID_IRPTNDX 0xff
|
||||||
|
|
||||||
#define ARM_SMMU_CB_ASID(cfg) ((cfg)->cbndx)
|
#define ARM_SMMU_CB_ASID(cfg) ((cfg)->cbndx)
|
||||||
#define ARM_SMMU_CB_VMID(cfg) ((cfg)->cbndx + 1)
|
#define ARM_SMMU_CB_VMID(cfg) ((cfg)->cbndx + 1)
|
||||||
|
@ -840,7 +841,7 @@ static int arm_smmu_init_domain_context(struct iommu_domain *domain,
|
||||||
if (IS_ERR_VALUE(ret)) {
|
if (IS_ERR_VALUE(ret)) {
|
||||||
dev_err(smmu->dev, "failed to request context IRQ %d (%u)\n",
|
dev_err(smmu->dev, "failed to request context IRQ %d (%u)\n",
|
||||||
root_cfg->irptndx, irq);
|
root_cfg->irptndx, irq);
|
||||||
root_cfg->irptndx = -1;
|
root_cfg->irptndx = INVALID_IRPTNDX;
|
||||||
goto out_free_context;
|
goto out_free_context;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -869,7 +870,7 @@ static void arm_smmu_destroy_domain_context(struct iommu_domain *domain)
|
||||||
writel_relaxed(0, cb_base + ARM_SMMU_CB_SCTLR);
|
writel_relaxed(0, cb_base + ARM_SMMU_CB_SCTLR);
|
||||||
arm_smmu_tlb_inv_context(root_cfg);
|
arm_smmu_tlb_inv_context(root_cfg);
|
||||||
|
|
||||||
if (root_cfg->irptndx != -1) {
|
if (root_cfg->irptndx != INVALID_IRPTNDX) {
|
||||||
irq = smmu->irqs[smmu->num_global_irqs + root_cfg->irptndx];
|
irq = smmu->irqs[smmu->num_global_irqs + root_cfg->irptndx];
|
||||||
free_irq(irq, domain);
|
free_irq(irq, domain);
|
||||||
}
|
}
|
||||||
|
@ -1857,8 +1858,6 @@ static int arm_smmu_device_dt_probe(struct platform_device *pdev)
|
||||||
goto out_put_parent;
|
goto out_put_parent;
|
||||||
}
|
}
|
||||||
|
|
||||||
arm_smmu_device_reset(smmu);
|
|
||||||
|
|
||||||
for (i = 0; i < smmu->num_global_irqs; ++i) {
|
for (i = 0; i < smmu->num_global_irqs; ++i) {
|
||||||
err = request_irq(smmu->irqs[i],
|
err = request_irq(smmu->irqs[i],
|
||||||
arm_smmu_global_fault,
|
arm_smmu_global_fault,
|
||||||
|
@ -1876,6 +1875,8 @@ static int arm_smmu_device_dt_probe(struct platform_device *pdev)
|
||||||
spin_lock(&arm_smmu_devices_lock);
|
spin_lock(&arm_smmu_devices_lock);
|
||||||
list_add(&smmu->list, &arm_smmu_devices);
|
list_add(&smmu->list, &arm_smmu_devices);
|
||||||
spin_unlock(&arm_smmu_devices_lock);
|
spin_unlock(&arm_smmu_devices_lock);
|
||||||
|
|
||||||
|
arm_smmu_device_reset(smmu);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
out_free_irqs:
|
out_free_irqs:
|
||||||
|
@ -1966,10 +1967,10 @@ static int __init arm_smmu_init(void)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
/* Oh, for a proper bus abstraction */
|
/* Oh, for a proper bus abstraction */
|
||||||
if (!iommu_present(&platform_bus_type));
|
if (!iommu_present(&platform_bus_type))
|
||||||
bus_set_iommu(&platform_bus_type, &arm_smmu_ops);
|
bus_set_iommu(&platform_bus_type, &arm_smmu_ops);
|
||||||
|
|
||||||
if (!iommu_present(&amba_bustype));
|
if (!iommu_present(&amba_bustype))
|
||||||
bus_set_iommu(&amba_bustype, &arm_smmu_ops);
|
bus_set_iommu(&amba_bustype, &arm_smmu_ops);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
Loading…
Add table
Reference in a new issue