After moving ArmVirtQemu to the generic PciHostBridgeDxe, we noticed that setting DmaAbove4G resulted in problems with the emulated EHCI USB host controller, which were caused by the fact that the PCI layer was providing DMA buffers allocated above 4 GB while the emulated EHCI controller in QEMU does not indicate support for 64-bit addressing.
As it turns out, the PCI drivers in MdeModulePkg *completely* ignore the EFI_PCI_ATTRIBUTE_DUAL_ADDRESS_CYCLE attribute, and simply assume that no PCI root bridge driver will produce mappings above 4 GB. On ARM, this is problematic, since not all platforms have memory below 4 GB, and so having full support for DMA above 4 GB is indispensable. So first, make the various drivers under MdeModulePkg/Pci/Bus set the EFI_PCI_IO_ATTRIBUTE_DUAL_ADDRESS_CYCLE attributes for devices that can support 64-bit DMA addressing (patches #1 - #5). Then, we can update the host bridge driver to actually take these attributes into account, and only create mappings above 4 GB for devices that have indicated support for it. Finally, in patch #7 we can remove the 4 GB DMA limit from ArmVirtPkg. Branch can be found here: https://git.linaro.org/people/ard.biesheuvel/uefi-next.git/shortlog/refs/heads/pci-64bit-dma-fixes Ard Biesheuvel (7): MdeModulePkg/AtaAtapiPassThru: enable 64-bit PCI DMA MdeModulePkg/EhciDxe: enable 64-bit PCI DMA MdeModulePkg/NvmExpressDxe: enable 64-bit PCI DMA MdeModulePkg/SdMmcPciHcDxe: enable 64-bit PCI DMA MdeModulePkg/XhciDxe: enable 64-bit PCI DMA MdeModulePkg/PciHostBridgeDxe: restrict 64-bit DMA to devices that support it ArmVirtPkg/FdtPciHostBridgeLib: enable 64-bit PCI DMA ArmVirtPkg/Library/FdtPciHostBridgeLib/FdtPciHostBridgeLib.c | 2 +- MdeModulePkg/Bus/Ata/AtaAtapiPassThru/AhciMode.c | 20 +++++++++++++++++- MdeModulePkg/Bus/Pci/EhciDxe/Ehci.c | 22 +++++++++++++++++++- MdeModulePkg/Bus/Pci/EhciDxe/Ehci.h | 2 ++ MdeModulePkg/Bus/Pci/EhciDxe/EhciSched.c | 2 +- MdeModulePkg/Bus/Pci/NvmExpressDxe/NvmExpressHci.c | 13 ++++++++++++ MdeModulePkg/Bus/Pci/PciHostBridgeDxe/PciRootBridgeIo.c | 14 +++++++++---- MdeModulePkg/Bus/Pci/SdMmcPciHcDxe/SdMmcPciHcDxe.c | 20 ++++++++++++++++++ MdeModulePkg/Bus/Pci/XhciDxe/Xhci.c | 22 +++++++++++++++++++- MdeModulePkg/Bus/Pci/XhciDxe/Xhci.h | 2 ++ 10 files changed, 110 insertions(+), 9 deletions(-) -- 2.7.4 _______________________________________________ edk2-devel mailing list [email protected] https://lists.01.org/mailman/listinfo/edk2-devel

