aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/pci/intr_remapping.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/pci/intr_remapping.c')
-rw-r--r--drivers/pci/intr_remapping.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/drivers/pci/intr_remapping.c b/drivers/pci/intr_remapping.c
index c26633d7e7da..ef25caade54b 100644
--- a/drivers/pci/intr_remapping.c
+++ b/drivers/pci/intr_remapping.c
@@ -415,12 +415,27 @@ static void iommu_set_intr_remapping(struct intel_iommu *iommu, int mode)
415 415
416 /* Set interrupt-remapping table pointer */ 416 /* Set interrupt-remapping table pointer */
417 cmd = iommu->gcmd | DMA_GCMD_SIRTP; 417 cmd = iommu->gcmd | DMA_GCMD_SIRTP;
418 iommu->gcmd |= DMA_GCMD_SIRTP;
418 writel(cmd, iommu->reg + DMAR_GCMD_REG); 419 writel(cmd, iommu->reg + DMAR_GCMD_REG);
419 420
420 IOMMU_WAIT_OP(iommu, DMAR_GSTS_REG, 421 IOMMU_WAIT_OP(iommu, DMAR_GSTS_REG,
421 readl, (sts & DMA_GSTS_IRTPS), sts); 422 readl, (sts & DMA_GSTS_IRTPS), sts);
422 spin_unlock_irqrestore(&iommu->register_lock, flags); 423 spin_unlock_irqrestore(&iommu->register_lock, flags);
423 424
425 if (mode == 0) {
426 spin_lock_irqsave(&iommu->register_lock, flags);
427
428 /* enable comaptiblity format interrupt pass through */
429 cmd = iommu->gcmd | DMA_GCMD_CFI;
430 iommu->gcmd |= DMA_GCMD_CFI;
431 writel(cmd, iommu->reg + DMAR_GCMD_REG);
432
433 IOMMU_WAIT_OP(iommu, DMAR_GSTS_REG,
434 readl, (sts & DMA_GSTS_CFIS), sts);
435
436 spin_unlock_irqrestore(&iommu->register_lock, flags);
437 }
438
424 /* 439 /*
425 * global invalidation of interrupt entry cache before enabling 440 * global invalidation of interrupt entry cache before enabling
426 * interrupt-remapping. 441 * interrupt-remapping.