From 00e29d6f33e9954b160ed50c9fa16b39b698098e Mon Sep 17 00:00:00 2001 From: Mitchel Humpherys Date: Wed, 19 Aug 2015 12:13:28 -0700 Subject: [PATCH] iommu/arm-smmu: Do a local halt around impl def programming As per the hardware spec, the SMMU must be halted during programming of the implementation defined registers. Add the missing halt. Change-Id: Id28b546e5b5b646c263d7431a32f3c95ed3f2042 Signed-off-by: Mitchel Humpherys --- drivers/iommu/arm-smmu.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/drivers/iommu/arm-smmu.c b/drivers/iommu/arm-smmu.c index 9af3b2beb2b4..85a3d41e159c 100644 --- a/drivers/iommu/arm-smmu.c +++ b/drivers/iommu/arm-smmu.c @@ -1663,14 +1663,19 @@ static void arm_smmu_domain_remove_master(struct arm_smmu_domain *smmu_domain, arm_smmu_disable_clocks(smmu); } +static int arm_smmu_halt(struct arm_smmu_device *smmu); +static void arm_smmu_resume(struct arm_smmu_device *smmu); + static void arm_smmu_impl_def_programming(struct arm_smmu_device *smmu) { int i; struct arm_smmu_impl_def_reg *regs = smmu->impl_def_attach_registers; + arm_smmu_halt(smmu); for (i = 0; i < smmu->num_impl_def_attach_registers; ++i) writel_relaxed(regs[i].value, ARM_SMMU_GR0(smmu) + regs[i].offset); + arm_smmu_resume(smmu); } static void arm_smmu_device_reset(struct arm_smmu_device *smmu); -- 2.11.0