From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 824381A1E76 for ; Thu, 1 Sep 2016 14:07:36 -0700 (PDT) Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id D9A647F7A7; Thu, 1 Sep 2016 21:07:35 +0000 (UTC) Received: from lacos-laptop-7.usersys.redhat.com (ovpn-116-28.phx2.redhat.com [10.3.116.28]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id u81L7YIX009049; Thu, 1 Sep 2016 17:07:34 -0400 To: Jordan Justen , edk2-devel-01 References: <20160819124932.29711-1-lersek@redhat.com> <147276194919.22123.5557877246569164251@jljusten-ivb> Cc: Ard Biesheuvel From: Laszlo Ersek Message-ID: <46e52c90-f6e3-b64f-29b1-6b3fcb376719@redhat.com> Date: Thu, 1 Sep 2016 23:07:33 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.2.0 MIME-Version: 1.0 In-Reply-To: <147276194919.22123.5557877246569164251@jljusten-ivb> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.24 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.28]); Thu, 01 Sep 2016 21:07:35 +0000 (UTC) Subject: Re: [PATCH 00/11] OvmfPkg, ArmVirtPkg: GOP driver for the VirtIo GPU (virtio-gpu-pci) X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 01 Sep 2016 21:07:36 -0000 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit On 09/01/16 22:32, Jordan Justen wrote: > Series Reviewed-by: Jordan Justen Thank you! Series committed as b10d5ddc0385..3ef3209d3028. Cheers, Laszlo > On 2016-08-19 05:49:21, Laszlo Ersek wrote: >> This series solves >> . In particular, >> it gives AARCH64 guests running on KVM a clean, uncorrupted graphical >> console. >> >> Anatomy of the series: >> >> - Patches 01 and 02 fix small bugs in QemuVideoDxe and Virtio10Dxe, so >> that virtio-vga is bound only by QemuVideoDxe, and virtio-gpu-pci is >> bound only by Virtio10Dxe (and then, on top, by the driver being >> posted). >> >> - Patch 03 makes OVMF' BDS pick up virtio-gpu-pci automatically as >> ConOut. (ArmVirtPkg already has the necessary code.) A small tweak. >> >> - Patch 04 adds the VirtIo GPU stuff to IndustryStandard, using Gerd's >> WIP additions to the VirtIo 1.0 spec, at >> . (See the "GPU Device" section.) The >> URLs are also captured in the code. >> >> - Patches 05 through 07 add the basic (= UEFI driver model) skeleton of >> the driver, and include it in OvmfPkg and ArmVirtPkg. >> >> In this series I managed to erect the driver in such a way that the >> series doesn't only build at every stage, the driver even runs at >> every stage (and the then-present functionality is testable). I used >> this to test each layer of functionality in separation, during >> development. >> >> - Patch 08 implements the basic VirtIo GPU initialization. >> >> - Patch 09 implements VirtIo GPU command primitives ("remote procedure >> calls"), for performing graphics operations. >> >> - Patch 10 implements the Graphics Output Protocol. >> >> - Patch 11 drops PcdKludgeMapPciMmioAsCached from ArmVirtPkg. >> >> Tests done: >> >> - Virtio-vga regression testing on x86_64 KVM (OvmfPkgIa32X64 build). >> >> - Repeated "disconnect" and "connect -r" checks in the UEFI shell, >> issued (also) from the serial console (ArmVirtQemu build on AARCH64 >> KVM, OvmfPkgIa32X64 build on x86_64 KVM). >> >> - Repeated mode switches with the "mode" command in the UEFI shell (same >> platforms). >> >> - Changing the preferred resolution in the Device Manager, then >> verifying with "mode" in the UEFI shell after reboot (same platforms). >> >> - Tested GRUB, using Fedora 23 / Fedora 24 installer ISOs (both >> platforms). >> >> - Also tested loading and launching Linux from GRUB. Here the results >> differ of course: x86_64 Fedora 24 drives virtio-gpu-pci with its >> native driver without problems, whereas AARCH64 Fedora 23 doesn't even >> look for virtio-gpu-pci, apparently. >> >> - Standard VGA continues to work in AARCH64 guests with TCG (tested on >> x86_64 host). In addition, I've verified that the display corruption >> readily reproduces when using standard VGA in AARCH64/KVM guests, at >> the end of the series. >> >> - Verified Driver Name and Controller Name in the UEFI shell, issuing >> "devices", "drivers", and "dh" commands. >> >> Interestingly, they work perfectly with OVMF, but in ArmVirtQemu, the >> formatted names are not displayed for *any* driver or device. Likely a >> general problem with the ArmVirtQemu (or more generally, AARCH64) >> build of the shell. >> >> I also ran into a couple of UEFI shell crashes with "devtree" and "dh >> -d -v" (when listing all devices in the system). However, those >> crashes reproduce identically when the series is not applied. >> >> Testing instructions: >> >> * OVMF guests: just add >> >> -device virtio-gpu-pci >> >> to the QEMU command line. >> >> For the host display, I prefer SDL when I use the raw QEMU command >> line: >> >> -display sdl >> >> but that's entirely up to the user. >> >> * ArmVirtQemu guests: again, add >> >> -device virtio-gpu-pci >> >> I ran my AARCH64/KVM tests on my Mustang, and for host display, there >> I prefer VNC (when using the raw QEMU command line): >> >> -display vnc=:0 >> >> Connect with "vncviewer" or another VNC client, optionally forwarded >> over SSH. >> >> If you'd even like to type on the graphical console, I recommend >> adding a USB 3.0 keyboard: >> >> -device nec-usb-xhci -device usb-kbd >> >> * On both guest arches, check out the nice graphical progress bar (five >> seconds, and you can enter the Setup utility with F2 or ESC): >> >> -boot menu=on,splash-time=5000 >> >> >> ... This got to be one of my longest blurbs. Sorry about that :) >> >> Ard: I haven't forgotten about the beer you promised! ;) >> >> Public branch: . >> >> Cc: Ard Biesheuvel >> Cc: Jordan Justen >> >> Thanks >> Laszlo >> >> Laszlo Ersek (11): >> OvmfPkg/QemuVideoDxe: don't incorrectly bind virtio-gpu-pci >> OvmfPkg/Virtio10Dxe: don't bind virtio-vga >> OvmfPkg/PlatformBootManagerLib: relax device class requirement for >> ConOut >> OvmfPkg/IndustryStandard: add type definitions for the virtio GPU >> device >> OvmfPkg/VirtioGpuDxe: introduce with Component Name 2 and Driver >> Binding >> OvmfPkg: include VirtioGpuDxe in the platform DSC/FDF files >> ArmVirtPkg/ArmVirtQemu: include VirtioGpuDxe in the platform DSC/FDF >> files >> OvmfPkg/VirtioGpuDxe: initialize and tear down VirtIo GPU device >> OvmfPkg/VirtioGpuDxe: provide functions for sending VirtIo GPU >> commands >> OvmfPkg/VirtioGpuDxe: implement EFI_GRAPHICS_OUTPUT_PROTOCOL >> ArmVirtPkg: remove PcdKludgeMapPciMmioAsCached >> >> ArmVirtPkg/ArmVirtPkg.dec | 24 - >> ArmVirtPkg/ArmVirtQemu.dsc | 4 +- >> ArmVirtPkg/ArmVirtQemuFvMain.fdf.inc | 1 + >> ArmVirtPkg/ArmVirtQemuKernel.dsc | 4 +- >> ArmVirtPkg/PciHostBridgeDxe/PciHostBridge.c | 3 +- >> ArmVirtPkg/PciHostBridgeDxe/PciHostBridgeDxe.inf | 1 - >> OvmfPkg/Include/IndustryStandard/Virtio10.h | 5 + >> OvmfPkg/Include/IndustryStandard/VirtioGpu.h | 216 +++++ >> OvmfPkg/Library/PlatformBootManagerLib/BdsPlatform.c | 10 +- >> OvmfPkg/OvmfPkgIa32.dsc | 1 + >> OvmfPkg/OvmfPkgIa32.fdf | 1 + >> OvmfPkg/OvmfPkgIa32X64.dsc | 1 + >> OvmfPkg/OvmfPkgIa32X64.fdf | 1 + >> OvmfPkg/OvmfPkgX64.dsc | 1 + >> OvmfPkg/OvmfPkgX64.fdf | 1 + >> OvmfPkg/QemuVideoDxe/Driver.c | 3 + >> OvmfPkg/Virtio10Dxe/Virtio10.c | 18 +- >> OvmfPkg/VirtioGpuDxe/Commands.c | 559 +++++++++++++ >> OvmfPkg/VirtioGpuDxe/DriverBinding.c | 844 ++++++++++++++++++++ >> OvmfPkg/VirtioGpuDxe/Gop.c | 647 +++++++++++++++ >> OvmfPkg/VirtioGpuDxe/VirtioGpu.h | 327 ++++++++ >> OvmfPkg/VirtioGpuDxe/VirtioGpu.inf | 51 ++ >> 22 files changed, 2682 insertions(+), 41 deletions(-) >> create mode 100644 OvmfPkg/VirtioGpuDxe/VirtioGpu.inf >> create mode 100644 OvmfPkg/Include/IndustryStandard/VirtioGpu.h >> create mode 100644 OvmfPkg/VirtioGpuDxe/VirtioGpu.h >> create mode 100644 OvmfPkg/VirtioGpuDxe/Commands.c >> create mode 100644 OvmfPkg/VirtioGpuDxe/DriverBinding.c >> create mode 100644 OvmfPkg/VirtioGpuDxe/Gop.c >> >> -- >> 2.9.2 >>