On 09/02/16 16:58, Ard Biesheuvel wrote:
> (on the road atm, will reply in full later)
>
>> On 2 sep. 2016, at 14:09, Laszlo Ersek <[email protected]> wrote:
>> (2) aarch64 KVM, using virtio-gpu-pci and USB 2 keyboard and
>> tablet. I actually booted a Fedora 24 guest with this, and in the
>> guest, everything works just fine (display, keyboard,
>> mouse/tablet). Most of the firmware log looks good too.
>>
>> (2a) However, the USB 2 keyboard is broken while in the firmware
>> (in spite of it working well in the guest OS).
>>
>> -device ich9-usb-ehci1,multifunction=on,id=ehci,addr=05.0 \
>> -device
>> ich9-usb-uhci1,multifunction=on,masterbus=ehci.0,firstport=0,addr=05.1 \
>> -device
>> ich9-usb-uhci2,multifunction=on,masterbus=ehci.0,firstport=2,addr=05.2 \
>> -device
>> ich9-usb-uhci3,multifunction=on,masterbus=ehci.0,firstport=4,addr=05.3 \
>> -device usb-kbd,bus=ehci.0 \
>> -device usb-tablet,bus=ehci.0 \
>>
>> My QEMU has your commit 5d636e21c44e ("hw/arm/virt: mark the PCIe
>> host controller as DMA coherent in the DT"), but I guess the EHCI
>> driver in edk2 doesn't comply with the "guest drivers should use
>> cacheable accesses as well when running under KVM" part. :(
>>
>> The following snippet repeats in the log:
>>
>> EhcClearLegacySupport: called to clear legacy support
>> processing error - resetting ehci HC
>> EhcInitHC: failed to enable period schedule
>> EhcDriverBindingStart: failed to init host controller
>> EhcCreateUsb2Hc: capability length 32
>>
>> Interestingly, if I back out your series, then USB2 works in the
>> firmware. I don't understand this, given that my build includes
>> commit 3ef3209d3028 ("ArmVirtPkg: remove
>> PcdKludgeMapPciMmioAsCached") from the master branch!
>>
>
> Does it work when you limit DMA to < 4 GB?
You are one wicked genius, man; the following change
> diff --git a/ArmVirtPkg/Library/FdtPciHostBridgeLib/FdtPciHostBridgeLib.c
> b/ArmVirtPkg/Library/FdtPciHostBridgeLib/FdtPciHostBridgeLib.c
> index efccedcca14f..1f0f87cac8a9 100644
> --- a/ArmVirtPkg/Library/FdtPciHostBridgeLib/FdtPciHostBridgeLib.c
> +++ b/ArmVirtPkg/Library/FdtPciHostBridgeLib/FdtPciHostBridgeLib.c
> @@ -317,7 +317,7 @@ PciHostBridgeGetRootBridges (
> EFI_PCI_ATTRIBUTE_VGA_PALETTE_IO_16;
> mRootBridge.Attributes = mRootBridge.Supports;
>
> - mRootBridge.DmaAbove4G = TRUE;
> + mRootBridge.DmaAbove4G = FALSE;
> mRootBridge.NoExtendedConfigSpace = FALSE;
> mRootBridge.ResourceAssigned = FALSE;
>
does make it work! Excellent!
Explain please. :) (Although, I'll look into PciHostBridgeDxe in a moment too.
:))
Thank you!
Laszlo
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel