]> Git Repo - qemu.git/commitdiff
intel_iommu: set IR bit for ECAP register
authorPeter Xu <[email protected]>
Thu, 14 Jul 2016 05:56:16 +0000 (13:56 +0800)
committerMichael S. Tsirkin <[email protected]>
Wed, 20 Jul 2016 16:30:27 +0000 (19:30 +0300)
Enable IR in IOMMU Extended Capability register.

Signed-off-by: Peter Xu <[email protected]>
Reviewed-by: Michael S. Tsirkin <[email protected]>
Signed-off-by: Michael S. Tsirkin <[email protected]>
hw/i386/intel_iommu.c
hw/i386/intel_iommu_internal.h

index 26e322a48460e81f3700530714719f4c2e7ff376..9c7a08424f2c113319e978821eeb088d1e4eb5a2 100644 (file)
@@ -1956,6 +1956,8 @@ VTDAddressSpace *vtd_find_add_as(IntelIOMMUState *s, PCIBus *bus, int devfn)
  */
 static void vtd_init(IntelIOMMUState *s)
 {
+    X86IOMMUState *x86_iommu = X86_IOMMU_DEVICE(s);
+
     memset(s->csr, 0, DMAR_REG_SIZE);
     memset(s->wmask, 0, DMAR_REG_SIZE);
     memset(s->w1cmask, 0, DMAR_REG_SIZE);
@@ -1977,6 +1979,10 @@ static void vtd_init(IntelIOMMUState *s)
              VTD_CAP_SAGAW | VTD_CAP_MAMV | VTD_CAP_PSI | VTD_CAP_SLLPS;
     s->ecap = VTD_ECAP_QI | VTD_ECAP_IRO;
 
+    if (x86_iommu->intr_supported) {
+        s->ecap |= VTD_ECAP_IR;
+    }
+
     vtd_reset_context_cache(s);
     vtd_reset_iotlb(s);
 
index b648e694cd800f787ec5f109544491d55ac5563e..5b98a1143cf2117cb7d3d992eb193c38ec52d00b 100644 (file)
 /* (offset >> 4) << 8 */
 #define VTD_ECAP_IRO                (DMAR_IOTLB_REG_OFFSET << 4)
 #define VTD_ECAP_QI                 (1ULL << 1)
+/* Interrupt Remapping support */
+#define VTD_ECAP_IR                 (1ULL << 3)
 
 /* CAP_REG */
 /* (offset >> 4) << 24 */
This page took 0.040094 seconds and 4 git commands to generate.