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 31F8B1A1DF9 for ; Tue, 30 Aug 2016 08:07:46 -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 8E9D280F6C; Tue, 30 Aug 2016 15:07:45 +0000 (UTC) Received: from lacos-laptop-7.usersys.redhat.com (ovpn-116-135.phx2.redhat.com [10.3.116.135]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id u7UF7iRh008374; Tue, 30 Aug 2016 11:07:44 -0400 References: <20160819124932.29711-1-lersek@redhat.com> Cc: edk2-devel-01 , Ard Biesheuvel To: Jordan Justen From: Laszlo Ersek Message-ID: <500a3b05-4b02-8258-3b9c-56a93eb2bd9a@redhat.com> Date: Tue, 30 Aug 2016 17:07:43 +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: <20160819124932.29711-1-lersek@redhat.com> 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.27]); Tue, 30 Aug 2016 15:07:45 +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: Tue, 30 Aug 2016 15:07:46 -0000 Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit On 08/19/16 14:49, 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 > Ping. Thanks Laszlo