VirtualBox

Changeset 86071 in vbox for trunk/src


Ignore:
Timestamp:
Sep 9, 2020 10:01:40 AM (4 years ago)
Author:
vboxsync
Message:

AMD IOMMU: bugref:9654 Report Coherent bit as 1 in the ACPI tables (since we also set it to 1 in the IOMMU control register reset).
I'm almost certain this bit only applies to HyperTransport but using the default value shouldn't hurt in the non-HT case as well.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/PC/DevACPI.cpp

    r85912 r86071  
    31803180    acpiR3PrepareHeader(pThis, &Ivrs.Hdr.header, "IVRS", sizeof(Ivrs), ACPI_IVRS_FMT_REV_FIXED);
    31813181    /* NOTE! The values here must match what we expose via MMIO/PCI config. space in the IOMMU device code. */
    3182     Ivrs.Hdr.u32IvInfo = RT_BF_MAKE(ACPI_IVINFO_BF_EFR_SUP,   1)
    3183                        | RT_BF_MAKE(ACPI_IVINFO_BF_GVA_SIZE,  0)
    3184                        | RT_BF_MAKE(ACPI_IVINFO_BF_GVA_SIZE,  2)    /* Guest Virt. Addr size (2=48 bits) */
    3185                        | RT_BF_MAKE(ACPI_IVINFO_BF_PA_SIZE,  48)    /* Physical Addr size (48 bits) */
    3186                        | RT_BF_MAKE(ACPI_IVINFO_BF_VA_SIZE,  64);   /* Virt. Addr size (64 bits) */
     3182    Ivrs.Hdr.u32IvInfo = RT_BF_MAKE(ACPI_IVINFO_BF_EFR_SUP,       1)
     3183                       | RT_BF_MAKE(ACPI_IVINFO_BF_DMA_REMAP_SUP, 0)   /* Pre-boot DMA remap support not supported. */
     3184                       | RT_BF_MAKE(ACPI_IVINFO_BF_GVA_SIZE,      2)   /* Guest Virt. Addr size (2=48 bits) */
     3185                       | RT_BF_MAKE(ACPI_IVINFO_BF_PA_SIZE,      48)   /* Physical Addr size (48 bits) */
     3186                       | RT_BF_MAKE(ACPI_IVINFO_BF_VA_SIZE,      64)   /* Virt. Addr size (64 bits) */
     3187                       | RT_BF_MAKE(ACPI_IVINFO_BF_HT_ATS_RESV,   0);  /* ATS response range reserved (only applicable for HT) */
    31873188
    31883189    /* IVHD type 10 definition block. */
     
    32003201    Ivrs.IvhdType10.u16PciSegmentGroup = 0;
    32013202    /* NOTE! Subfields in the following fields must match any corresponding field in PCI/MMIO registers of the IOMMU device. */
    3202     Ivrs.IvhdType10.u8Flags            = 0; /* Remote IOTLB, Prefetch IOMMU pages features etc. - currently none supported. */
     3203    Ivrs.IvhdType10.u8Flags            = ACPI_IVHD_10H_F_COHERENT; /* Remote IOTLB etc. not supported. */
    32033204    Ivrs.IvhdType10.u16IommuInfo       = RT_BF_MAKE(ACPI_IOMMU_INFO_BF_MSI_NUM, 0)
    32043205                                       | RT_BF_MAKE(ACPI_IOMMU_INFO_BF_UNIT_ID, 0);
     
    32593260    Ivrs.IvhdType11.u64BaseAddress     = Ivrs.IvhdType10.u64BaseAddress;
    32603261    Ivrs.IvhdType11.u16PciSegmentGroup = Ivrs.IvhdType10.u16PciSegmentGroup;
    3261     Ivrs.IvhdType11.u8Flags            = Ivrs.IvhdType10.u8Flags;
     3262    Ivrs.IvhdType11.u8Flags            = ACPI_IVHD_11H_F_COHERENT;
    32623263    Ivrs.IvhdType11.u16IommuInfo       = Ivrs.IvhdType10.u16IommuInfo;
    32633264    Ivrs.IvhdType11.u32IommuAttr       = RT_BF_MAKE(ACPI_IOMMU_ATTR_BF_PN_COUNTERS, 0)
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette