diff options
author | Will Deacon <will.deacon@arm.com> | 2013-08-21 14:56:34 +0200 |
---|---|---|
committer | Will Deacon <will.deacon@arm.com> | 2013-09-17 13:03:11 +0200 |
commit | fd90cecbde065eac6ecc3ef38abace725ad27010 (patch) | |
tree | ee02fb709bfc734ec6ece4beae4601719558d2e3 /drivers/iommu/arm-smmu.c | |
parent | iommu/arm-smmu: fix iommu_present() test in init (diff) | |
download | linux-fd90cecbde065eac6ecc3ef38abace725ad27010.tar.xz linux-fd90cecbde065eac6ecc3ef38abace725ad27010.zip |
iommu/arm-smmu: don't enable SMMU device until probing has completed
We currently reset and enable the SMMU before the device has finished
being probed, so if we fail later on (for example, because we couldn't
request a global irq successfully) then we will leave the device in an
active state.
This patch delays the reset and enabling of the SMMU hardware until
probing has completed.
Cc: <stable@vger.kernel.org>
Signed-off-by: Will Deacon <will.deacon@arm.com>
Diffstat (limited to 'drivers/iommu/arm-smmu.c')
-rw-r--r-- | drivers/iommu/arm-smmu.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/iommu/arm-smmu.c b/drivers/iommu/arm-smmu.c index 913bd1565e41..181c9ba929cd 100644 --- a/drivers/iommu/arm-smmu.c +++ b/drivers/iommu/arm-smmu.c @@ -1858,8 +1858,6 @@ static int arm_smmu_device_dt_probe(struct platform_device *pdev) goto out_put_parent; } - arm_smmu_device_reset(smmu); - for (i = 0; i < smmu->num_global_irqs; ++i) { err = request_irq(smmu->irqs[i], arm_smmu_global_fault, @@ -1877,6 +1875,8 @@ static int arm_smmu_device_dt_probe(struct platform_device *pdev) spin_lock(&arm_smmu_devices_lock); list_add(&smmu->list, &arm_smmu_devices); spin_unlock(&arm_smmu_devices_lock); + + arm_smmu_device_reset(smmu); return 0; out_free_irqs: |