From 2a189488222f9edd161ff0d394f3e3c83768999a Mon Sep 17 00:00:00 2001 From: Yang Yingliang Date: Sat, 22 Dec 2018 16:46:45 +0800 Subject: [PATCH] Revert "iommu/arm-smmu-v3: Abort all transactions if SMMU is enabled in kdump kernel" euler inclusion category: bugfix bugzilla: 5452 CVE: NA This patchset is add a kernel parameter to avoid kdump problem on Hi1620ES. It will be revert when we have better solution on Hi1620CS. [PATCH 1/4] Revert "iommu/arm-smmu-v3: Abort all transactions if SMMU is enabled in kdump kernel" [PATCH 2/4] device: add device_shutdown_one() helper [PATCH 3/4] device: add device_shutdown_by_driver() helper [PATCH 4/4] kexec: add kexec_device_shutdown() ------------------------------------------------ This reverts commit b63b3439b85609338e4faabd5d2588dbda137e5c. Signed-off-by: Yang Yingliang --- drivers/iommu/arm-smmu-v3.c | 22 ++++++---------------- 1 file changed, 6 insertions(+), 16 deletions(-) diff --git a/drivers/iommu/arm-smmu-v3.c b/drivers/iommu/arm-smmu-v3.c index 93a80abab24d..20da714b234b 100644 --- a/drivers/iommu/arm-smmu-v3.c +++ b/drivers/iommu/arm-smmu-v3.c @@ -24,7 +24,6 @@ #include #include #include -#include #include #include #include @@ -2244,12 +2243,8 @@ static int arm_smmu_update_gbpa(struct arm_smmu_device *smmu, u32 set, u32 clr) reg &= ~clr; reg |= set; writel_relaxed(reg | GBPA_UPDATE, gbpa); - ret = readl_relaxed_poll_timeout(gbpa, reg, !(reg & GBPA_UPDATE), - 1, ARM_SMMU_POLL_TIMEOUT_US); - - if (ret) - dev_err(smmu->dev, "GBPA not responding to update\n"); - return ret; + return readl_relaxed_poll_timeout(gbpa, reg, !(reg & GBPA_UPDATE), + 1, ARM_SMMU_POLL_TIMEOUT_US); } static void arm_smmu_free_msis(void *data) @@ -2429,15 +2424,8 @@ static int arm_smmu_device_reset(struct arm_smmu_device *smmu, bool bypass) /* Clear CR0 and sync (disables SMMU and queue processing) */ reg = readl_relaxed(smmu->base + ARM_SMMU_CR0); - if (reg & CR0_SMMUEN) { - if (is_kdump_kernel()) { - arm_smmu_update_gbpa(smmu, GBPA_ABORT, 0); - arm_smmu_device_disable(smmu); - return -EBUSY; - } - + if (reg & CR0_SMMUEN) dev_warn(smmu->dev, "SMMU currently enabled! Resetting...\n"); - } ret = arm_smmu_device_disable(smmu); if (ret) @@ -2535,8 +2523,10 @@ static int arm_smmu_device_reset(struct arm_smmu_device *smmu, bool bypass) enables |= CR0_SMMUEN; } else { ret = arm_smmu_update_gbpa(smmu, 0, GBPA_ABORT); - if (ret) + if (ret) { + dev_err(smmu->dev, "GBPA not responding to update\n"); return ret; + } } ret = arm_smmu_write_reg_sync(smmu, enables, ARM_SMMU_CR0, ARM_SMMU_CR0ACK); -- GitLab