Unverified Commit e86cbfc1 authored by openeuler-ci-bot's avatar openeuler-ci-bot Committed by Gitee
Browse files

!5354 iommu/arm-smmu-v3: Disable ECMDQ before reset

parents 0ebcc3cd 436ea31c
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -3869,6 +3869,20 @@ static int arm_smmu_ecmdq_reset(struct arm_smmu_device *smmu)
			q->llq.prod = 0;
			q->llq.cons = 0;
		}

		reg = readl(q->prod_reg);
		if (reg & ECMDQ_PROD_EN) {
			/* disable ecmdq */
			writel(reg & ~ECMDQ_PROD_EN, q->prod_reg);
			ret = readl_relaxed_poll_timeout(q->cons_reg, reg,
				!(reg & ECMDQ_CONS_ENACK), 1, ARM_SMMU_POLL_TIMEOUT_US);
			if (ret) {
				dev_warn(smmu->dev, "ecmdq[%d] disable failed\n", i);
				smmu->ecmdq_enabled = 0;
				return ret;
			}
		}

		writeq_relaxed(q->q_base, ecmdq->base + ARM_SMMU_ECMDQ_BASE);
		writel_relaxed(q->llq.prod, ecmdq->base + ARM_SMMU_ECMDQ_PROD);
		writel_relaxed(q->llq.cons, ecmdq->base + ARM_SMMU_ECMDQ_CONS);