MdeModulePkg/EhciDxe: enable 64-bit PCI DMA

PCI controller drivers must set the EFI_PCI_IO_ATTRIBUTE_DUAL_ADDRESS_CYCLE
attribute if the controller supports 64-bit DMA addressing.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Reviewed-by: Laszlo Ersek <lersek@redhat.com>
Reviewed-by: Feng Tian <feng.tian@Intel.com>
This commit is contained in:
Ard Biesheuvel
2016-09-05 09:51:16 +01:00
parent a2c9b0873a
commit 167c3fb456
3 changed files with 24 additions and 2 deletions

View File

@@ -89,7 +89,7 @@ EhcGetCapability (
*MaxSpeed = EFI_USB_SPEED_HIGH;
*PortNumber = (UINT8) (Ehc->HcStructParams & HCSP_NPORTS);
*Is64BitCapable = (UINT8) (Ehc->HcCapParams & HCCP_64BIT);
*Is64BitCapable = (UINT8) Ehc->Support64BitDma;
DEBUG ((EFI_D_INFO, "EhcGetCapability: %d ports, 64 bit %d\n", *PortNumber, *Is64BitCapable));
@@ -1877,6 +1877,26 @@ EhcDriverBindingStart (
goto CLOSE_PCIIO;
}
//
// Enable 64-bit DMA support in the PCI layer if this controller
// supports it.
//
if (EHC_BIT_IS_SET (Ehc->HcCapParams, HCCP_64BIT)) {
Status = PciIo->Attributes (
PciIo,
EfiPciIoAttributeOperationEnable,
EFI_PCI_IO_ATTRIBUTE_DUAL_ADDRESS_CYCLE,
NULL
);
if (!EFI_ERROR (Status)) {
Ehc->Support64BitDma = TRUE;
} else {
DEBUG ((EFI_D_WARN,
"%a: failed to enable 64-bit DMA on 64-bit capable controller @ %p (%r)\n",
__FUNCTION__, Controller, Status));
}
}
Status = gBS->InstallProtocolInterface (
&Controller,
&gEfiUsb2HcProtocolGuid,