mirror of https://github.com/acidanthera/audk.git
MdeModulePkg/XhciDxe: 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:
parent
df0a0e4b6f
commit
5c1b371a88
|
@ -125,7 +125,7 @@ XhcGetCapability (
|
||||||
Xhc = XHC_FROM_THIS (This);
|
Xhc = XHC_FROM_THIS (This);
|
||||||
*MaxSpeed = EFI_USB_SPEED_SUPER;
|
*MaxSpeed = EFI_USB_SPEED_SUPER;
|
||||||
*PortNumber = (UINT8) (Xhc->HcSParams1.Data.MaxPorts);
|
*PortNumber = (UINT8) (Xhc->HcSParams1.Data.MaxPorts);
|
||||||
*Is64BitCapable = (UINT8) (Xhc->HcCParams.Data.Ac64);
|
*Is64BitCapable = (UINT8) Xhc->Support64BitDma;
|
||||||
DEBUG ((EFI_D_INFO, "XhcGetCapability: %d ports, 64 bit %d\n", *PortNumber, *Is64BitCapable));
|
DEBUG ((EFI_D_INFO, "XhcGetCapability: %d ports, 64 bit %d\n", *PortNumber, *Is64BitCapable));
|
||||||
|
|
||||||
gBS->RestoreTPL (OldTpl);
|
gBS->RestoreTPL (OldTpl);
|
||||||
|
@ -2020,6 +2020,26 @@ XhcDriverBindingStart (
|
||||||
return EFI_OUT_OF_RESOURCES;
|
return EFI_OUT_OF_RESOURCES;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Enable 64-bit DMA support in the PCI layer if this controller
|
||||||
|
// supports it.
|
||||||
|
//
|
||||||
|
if (Xhc->HcCParams.Data.Ac64 != 0) {
|
||||||
|
Status = PciIo->Attributes (
|
||||||
|
PciIo,
|
||||||
|
EfiPciIoAttributeOperationEnable,
|
||||||
|
EFI_PCI_IO_ATTRIBUTE_DUAL_ADDRESS_CYCLE,
|
||||||
|
NULL
|
||||||
|
);
|
||||||
|
if (!EFI_ERROR (Status)) {
|
||||||
|
Xhc->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));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
XhcSetBiosOwnership (Xhc);
|
XhcSetBiosOwnership (Xhc);
|
||||||
|
|
||||||
XhcResetHC (Xhc, XHC_RESET_TIMEOUT);
|
XhcResetHC (Xhc, XHC_RESET_TIMEOUT);
|
||||||
|
|
|
@ -256,6 +256,8 @@ struct _USB_XHCI_INSTANCE {
|
||||||
// The array supports up to 255 devices, entry 0 is reserved and should not be used.
|
// The array supports up to 255 devices, entry 0 is reserved and should not be used.
|
||||||
//
|
//
|
||||||
USB_DEV_CONTEXT UsbDevContext[256];
|
USB_DEV_CONTEXT UsbDevContext[256];
|
||||||
|
|
||||||
|
BOOLEAN Support64BitDma; // Whether 64 bit DMA may be used with this device
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue