diff options
| -rw-r--r-- | drivers/iommu/arm-smmu-v3.c | 10 |
1 files changed, 4 insertions, 6 deletions
diff --git a/drivers/iommu/arm-smmu-v3.c b/drivers/iommu/arm-smmu-v3.c index 99b83fda11e4..4d5a694f02c2 100644 --- a/drivers/iommu/arm-smmu-v3.c +++ b/drivers/iommu/arm-smmu-v3.c | |||
| @@ -2649,13 +2649,9 @@ static int arm_smmu_device_reset(struct arm_smmu_device *smmu, bool bypass) | |||
| 2649 | /* Clear CR0 and sync (disables SMMU and queue processing) */ | 2649 | /* Clear CR0 and sync (disables SMMU and queue processing) */ |
| 2650 | reg = readl_relaxed(smmu->base + ARM_SMMU_CR0); | 2650 | reg = readl_relaxed(smmu->base + ARM_SMMU_CR0); |
| 2651 | if (reg & CR0_SMMUEN) { | 2651 | if (reg & CR0_SMMUEN) { |
| 2652 | if (is_kdump_kernel()) { | ||
| 2653 | arm_smmu_update_gbpa(smmu, GBPA_ABORT, 0); | ||
| 2654 | arm_smmu_device_disable(smmu); | ||
| 2655 | return -EBUSY; | ||
| 2656 | } | ||
| 2657 | |||
| 2658 | dev_warn(smmu->dev, "SMMU currently enabled! Resetting...\n"); | 2652 | dev_warn(smmu->dev, "SMMU currently enabled! Resetting...\n"); |
| 2653 | WARN_ON(is_kdump_kernel() && !disable_bypass); | ||
| 2654 | arm_smmu_update_gbpa(smmu, GBPA_ABORT, 0); | ||
| 2659 | } | 2655 | } |
| 2660 | 2656 | ||
| 2661 | ret = arm_smmu_device_disable(smmu); | 2657 | ret = arm_smmu_device_disable(smmu); |
| @@ -2758,6 +2754,8 @@ static int arm_smmu_device_reset(struct arm_smmu_device *smmu, bool bypass) | |||
| 2758 | return ret; | 2754 | return ret; |
| 2759 | } | 2755 | } |
| 2760 | 2756 | ||
| 2757 | if (is_kdump_kernel()) | ||
| 2758 | enables &= ~(CR0_EVTQEN | CR0_PRIQEN); | ||
| 2761 | 2759 | ||
| 2762 | /* Enable the SMMU interface, or ensure bypass */ | 2760 | /* Enable the SMMU interface, or ensure bypass */ |
| 2763 | if (!bypass || disable_bypass) { | 2761 | if (!bypass || disable_bypass) { |
