mirror of
https://github.com/torvalds/linux.git
synced 2026-05-27 16:44:58 +02:00
iommu/riscv: Empty iommu queue before enabling it
Changing cqen/fqen/pqen from 0 to 1 sets the cqh/fqt/pqt registers to 0. But the cqt/fqh/pqh registers are left unmodified. This commit resets cqt/fqh/pqh registers to ensure corresponding queues are empty before being enabled during initialization. Signed-off-by: Xu Lu <luxu.kernel@bytedance.com> Link: https://lore.kernel.org/r/20250103093220.38106-2-luxu.kernel@bytedance.com Signed-off-by: Joerg Roedel <jroedel@suse.de>
This commit is contained in:
parent
d5f88acdd6
commit
8d8d3752c0
|
|
@ -240,6 +240,12 @@ static int riscv_iommu_queue_enable(struct riscv_iommu_device *iommu,
|
|||
return rc;
|
||||
}
|
||||
|
||||
/* Empty queue before enabling it */
|
||||
if (queue->qid == RISCV_IOMMU_INTR_CQ)
|
||||
riscv_iommu_writel(queue->iommu, Q_TAIL(queue), 0);
|
||||
else
|
||||
riscv_iommu_writel(queue->iommu, Q_HEAD(queue), 0);
|
||||
|
||||
/*
|
||||
* Enable queue with interrupts, clear any memory fault if any.
|
||||
* Wait for the hardware to acknowledge request and activate queue
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user