Commit fd90cecb authored by Will Deacon's avatar Will Deacon

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: default avatarWill Deacon <will.deacon@arm.com>
parent 6614ee77
...@@ -1858,8 +1858,6 @@ static int arm_smmu_device_dt_probe(struct platform_device *pdev) ...@@ -1858,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,
...@@ -1877,6 +1875,8 @@ static int arm_smmu_device_dt_probe(struct platform_device *pdev) ...@@ -1877,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:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment