From 542f7a560fe424158b1093e2a3c8be36ba187e0c Mon Sep 17 00:00:00 2001 From: Keir Fraser Date: Tue, 13 Jan 2009 15:16:46 +0000 Subject: [PATCH] AMD IOMMU: Reset tail and head pointer of cmd buffer and event log Reset the tail and the head pointers of command buffer and event log to zero in case that iommu does not reset them after the base addresses of those buffers are updated. Signed-off-by: Wei Wang --- xen/drivers/passthrough/amd/iommu_init.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/xen/drivers/passthrough/amd/iommu_init.c b/xen/drivers/passthrough/amd/iommu_init.c index 18643f44c4..5b01579845 100644 --- a/xen/drivers/passthrough/amd/iommu_init.c +++ b/xen/drivers/passthrough/amd/iommu_init.c @@ -195,6 +195,10 @@ static void __init set_iommu_command_buffer_control(struct amd_iommu *iommu, IOMMU_CONTROL_COMMAND_BUFFER_ENABLE_MASK, IOMMU_CONTROL_COMMAND_BUFFER_ENABLE_SHIFT, &entry); writel(entry, iommu->mmio_base+IOMMU_CONTROL_MMIO_OFFSET); + + /*reset head and tail pointer */ + writel(0x0, iommu->mmio_base + IOMMU_CMD_BUFFER_HEAD_OFFSET); + writel(0x0, iommu->mmio_base + IOMMU_CMD_BUFFER_TAIL_OFFSET); } static void __init register_iommu_exclusion_range(struct amd_iommu *iommu) @@ -259,6 +263,10 @@ static void __init set_iommu_event_log_control(struct amd_iommu *iommu, IOMMU_CONTROL_COMP_WAIT_INT_MASK, IOMMU_CONTROL_COMP_WAIT_INT_SHIFT, &entry); writel(entry, iommu->mmio_base+IOMMU_CONTROL_MMIO_OFFSET); + + /*reset head and tail pointer */ + writel(0x0, iommu->mmio_base + IOMMU_EVENT_LOG_HEAD_OFFSET); + writel(0x0, iommu->mmio_base + IOMMU_EVENT_LOG_TAIL_OFFSET); } static int amd_iommu_read_event_log(struct amd_iommu *iommu, u32 event[]) -- 2.30.2