aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/iommu
diff options
context:
space:
mode:
authorJan Kiszka <jan.kiszka@siemens.com>2014-08-11 07:13:25 -0400
committerJoerg Roedel <jroedel@suse.de>2014-08-19 07:09:15 -0400
commitf63ef69028742b09c1c0896177d555a30ff6cf13 (patch)
treea58c73d58dcfabe96b8289c631e96cf64d1450e9 /drivers/iommu
parent7d1311b93e58ed55f3a31cc8f94c4b8fe988a2b9 (diff)
iommu/vt-d: Don't store SIRTP request
Don't store the SIRTP request bit in the register state. It will otherwise become sticky and could request an Interrupt Remap Table Pointer update on each command register write. Found while starting to emulate IR in QEMU, not by observing problems on real hardware. Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com> Signed-off-by: Joerg Roedel <jroedel@suse.de>
Diffstat (limited to 'drivers/iommu')
-rw-r--r--drivers/iommu/intel_irq_remapping.c3
1 files changed, 1 insertions, 2 deletions
diff --git a/drivers/iommu/intel_irq_remapping.c b/drivers/iommu/intel_irq_remapping.c
index 0df41f6264f5..a872874c2565 100644
--- a/drivers/iommu/intel_irq_remapping.c
+++ b/drivers/iommu/intel_irq_remapping.c
@@ -438,8 +438,7 @@ static void iommu_set_irq_remapping(struct intel_iommu *iommu, int mode)
438 (addr) | IR_X2APIC_MODE(mode) | INTR_REMAP_TABLE_REG_SIZE); 438 (addr) | IR_X2APIC_MODE(mode) | INTR_REMAP_TABLE_REG_SIZE);
439 439
440 /* Set interrupt-remapping table pointer */ 440 /* Set interrupt-remapping table pointer */
441 iommu->gcmd |= DMA_GCMD_SIRTP; 441 writel(iommu->gcmd | DMA_GCMD_SIRTP, iommu->reg + DMAR_GCMD_REG);
442 writel(iommu->gcmd, iommu->reg + DMAR_GCMD_REG);
443 442
444 IOMMU_WAIT_OP(iommu, DMAR_GSTS_REG, 443 IOMMU_WAIT_OP(iommu, DMAR_GSTS_REG,
445 readl, (sts & DMA_GSTS_IRTPS), sts); 444 readl, (sts & DMA_GSTS_IRTPS), sts);