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.c28
1 files changed, 14 insertions, 14 deletions
diff --git a/drivers/pci/intr_remapping.c b/drivers/pci/intr_remapping.c
index f5e0ea724a6f..5c2142656e96 100644
--- a/drivers/pci/intr_remapping.c
+++ b/drivers/pci/intr_remapping.c
@@ -423,20 +423,6 @@ static void iommu_set_intr_remapping(struct intel_iommu *iommu, int mode)
423 readl, (sts & DMA_GSTS_IRTPS), sts); 423 readl, (sts & DMA_GSTS_IRTPS), sts);
424 spin_unlock_irqrestore(&iommu->register_lock, flags); 424 spin_unlock_irqrestore(&iommu->register_lock, flags);
425 425
426 if (mode == 0) {
427 spin_lock_irqsave(&iommu->register_lock, flags);
428
429 /* enable comaptiblity format interrupt pass through */
430 cmd = iommu->gcmd | DMA_GCMD_CFI;
431 iommu->gcmd |= DMA_GCMD_CFI;
432 writel(cmd, iommu->reg + DMAR_GCMD_REG);
433
434 IOMMU_WAIT_OP(iommu, DMAR_GSTS_REG,
435 readl, (sts & DMA_GSTS_CFIS), sts);
436
437 spin_unlock_irqrestore(&iommu->register_lock, flags);
438 }
439
440 /* 426 /*
441 * global invalidation of interrupt entry cache before enabling 427 * global invalidation of interrupt entry cache before enabling
442 * interrupt-remapping. 428 * interrupt-remapping.
@@ -516,6 +502,20 @@ end:
516 spin_unlock_irqrestore(&iommu->register_lock, flags); 502 spin_unlock_irqrestore(&iommu->register_lock, flags);
517} 503}
518 504
505int __init intr_remapping_supported(void)
506{
507 struct dmar_drhd_unit *drhd;
508
509 for_each_drhd_unit(drhd) {
510 struct intel_iommu *iommu = drhd->iommu;
511
512 if (!ecap_ir_support(iommu->ecap))
513 return 0;
514 }
515
516 return 1;
517}
518
519int __init enable_intr_remapping(int eim) 519int __init enable_intr_remapping(int eim)
520{ 520{
521 struct dmar_drhd_unit *drhd; 521 struct dmar_drhd_unit *drhd;