public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
* [PATCH 0/7] MdeModulePkg ArmVirtPkg: fixes for 64-bit PCI DMA
@ 2016-09-05  9:17 Ard Biesheuvel
  2016-09-05  9:17 ` [PATCH 1/7] MdeModulePkg/AtaAtapiPassThru: enable " Ard Biesheuvel
                   ` (7 more replies)
  0 siblings, 8 replies; 20+ messages in thread
From: Ard Biesheuvel @ 2016-09-05  9:17 UTC (permalink / raw)
  To: edk2-devel, feng.tian, star.zeng, liming.gao
  Cc: lersek, leif.lindholm, Ard Biesheuvel

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



^ permalink raw reply	[flat|nested] 20+ messages in thread

end of thread, other threads:[~2016-09-06 14:48 UTC | newest]

Thread overview: 20+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-09-05  9:17 [PATCH 0/7] MdeModulePkg ArmVirtPkg: fixes for 64-bit PCI DMA Ard Biesheuvel
2016-09-05  9:17 ` [PATCH 1/7] MdeModulePkg/AtaAtapiPassThru: enable " Ard Biesheuvel
2016-09-05  9:17 ` [PATCH 2/7] MdeModulePkg/EhciDxe: " Ard Biesheuvel
2016-09-05 12:19   ` Laszlo Ersek
2016-09-05 12:44     ` Ard Biesheuvel
2016-09-05 13:06       ` Laszlo Ersek
2016-09-05  9:17 ` [PATCH 3/7] MdeModulePkg/NvmExpressDxe: " Ard Biesheuvel
2016-09-05  9:17 ` [PATCH 4/7] MdeModulePkg/SdMmcPciHcDxe: " Ard Biesheuvel
2016-09-05  9:17 ` [PATCH 5/7] MdeModulePkg/XhciDxe: " Ard Biesheuvel
2016-09-05 12:14   ` Laszlo Ersek
2016-09-05  9:17 ` [PATCH 6/7] MdeModulePkg/PciHostBridgeDxe: restrict 64-bit DMA to devices that support it Ard Biesheuvel
2016-09-05 12:04   ` Laszlo Ersek
2016-09-05  9:17 ` [PATCH 7/7] ArmVirtPkg/FdtPciHostBridgeLib: enable 64-bit PCI DMA Ard Biesheuvel
2016-09-05 12:04   ` Laszlo Ersek
2016-09-06  7:48 ` [PATCH 0/7] MdeModulePkg ArmVirtPkg: fixes for " Ard Biesheuvel
2016-09-06  8:04   ` Zeng, Star
2016-09-06  8:54   ` Ni, Ruiyu
2016-09-06 10:36     ` Ard Biesheuvel
2016-09-06 12:41       ` Tian, Feng
2016-09-06 14:48         ` Ard Biesheuvel

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox