public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Gerd Hoffmann" <kraxel@redhat.com>
To: devel@edk2.groups.io
Cc: "Marc-André Lureau" <marcandre.lureau@redhat.com>,
	"Anthony Perard" <anthony.perard@citrix.com>,
	"Gerd Hoffmann" <kraxel@redhat.com>,
	"Ard Biesheuvel" <ardb+tianocore@kernel.org>,
	"Jiewen Yao" <jiewen.yao@intel.com>,
	"Jordan Justen" <jordan.l.justen@intel.com>,
	"Julien Grall" <julien@xen.org>,
	"Stefan Berger" <stefanb@linux.ibm.com>
Subject: [PATCH 17/17] OvmfPkg/Microvm: wire up serial console, drop super-io
Date: Tue, 31 Aug 2021 11:57:14 +0200	[thread overview]
Message-ID: <20210831095714.2834550-18-kraxel@redhat.com> (raw)
In-Reply-To: <20210831095714.2834550-1-kraxel@redhat.com>

Microvm has no LPC bridge, so drop the PciSioSerialDxe driver.
Use SerialDxe instead, with ioport hardcoded to 0x3f8 aka com1 aka ttyS0.

With this tianocore boots to uefi shell prompt on the serial console.
Direct kernel boot can be used too.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 OvmfPkg/Microvm/MicrovmX64.dsc                | 11 +++--
 OvmfPkg/Microvm/MicrovmX64.fdf                |  4 +-
 .../PlatformBootManagerLib/BdsPlatform.c      | 40 +++++++++++++++++++
 3 files changed, 49 insertions(+), 6 deletions(-)

diff --git a/OvmfPkg/Microvm/MicrovmX64.dsc b/OvmfPkg/Microvm/MicrovmX64.dsc
index e32387c6c9c6..ab575db5bcfa 100644
--- a/OvmfPkg/Microvm/MicrovmX64.dsc
+++ b/OvmfPkg/Microvm/MicrovmX64.dsc
@@ -230,6 +230,8 @@ [LibraryClasses]
 [LibraryClasses.common]
   BaseCryptLib|CryptoPkg/Library/BaseCryptLib/BaseCryptLib.inf
   VmgExitLib|OvmfPkg/Library/VmgExitLib/VmgExitLib.inf
+  SerialPortLib|MdeModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.inf
+  PlatformHookLib|MdeModulePkg/Library/BasePlatformHookLibNull/BasePlatformHookLibNull.inf
 
 [LibraryClasses.common.SEC]
   QemuFwCfgLib|OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgSecLib.inf
@@ -534,6 +536,11 @@ [PcdsFixedAtBuild]
   # Point to the MdeModulePkg/Application/UiApp/UiApp.inf
   gEfiMdeModulePkgTokenSpaceGuid.PcdBootManagerMenuFile|{ 0x21, 0xaa, 0x2c, 0x46, 0x14, 0x76, 0x03, 0x45, 0x83, 0x6e, 0x8a, 0xb6, 0xf4, 0x66, 0x23, 0x31 }
 
+  # microvm serial port^M
+  gEfiMdeModulePkgTokenSpaceGuid.PcdSerialUseMmio|FALSE
+  gEfiMdeModulePkgTokenSpaceGuid.PcdSerialPciDeviceInfo|{0xFF}
+  gEfiMdeModulePkgTokenSpaceGuid.PcdSerialRegisterBase|0x3f8
+
 ################################################################################
 #
 # Pcd Dynamic Section - list of all EDK II PCD Entries defined by this Platform
@@ -728,9 +735,7 @@ [Components]
   #
   # ISA Support
   #
-  OvmfPkg/SioBusDxe/SioBusDxe.inf
-  MdeModulePkg/Bus/Pci/PciSioSerialDxe/PciSioSerialDxe.inf
-  MdeModulePkg/Bus/Isa/Ps2KeyboardDxe/Ps2KeyboardDxe.inf
+  MdeModulePkg/Universal/SerialDxe/SerialDxe.inf
 
   #
   # SMBIOS Support
diff --git a/OvmfPkg/Microvm/MicrovmX64.fdf b/OvmfPkg/Microvm/MicrovmX64.fdf
index b4d56bd2d0e7..6314014f3de7 100644
--- a/OvmfPkg/Microvm/MicrovmX64.fdf
+++ b/OvmfPkg/Microvm/MicrovmX64.fdf
@@ -260,11 +260,9 @@ [FV.DXEFV]
 INF  MdeModulePkg/Universal/DisplayEngineDxe/DisplayEngineDxe.inf
 INF  MdeModulePkg/Universal/MemoryTest/NullMemoryTestDxe/NullMemoryTestDxe.inf
 
-INF  OvmfPkg/SioBusDxe/SioBusDxe.inf
 !if $(SOURCE_DEBUG_ENABLE) == FALSE
-INF  MdeModulePkg/Bus/Pci/PciSioSerialDxe/PciSioSerialDxe.inf
+INF  MdeModulePkg/Universal/SerialDxe/SerialDxe.inf
 !endif
-INF  MdeModulePkg/Bus/Isa/Ps2KeyboardDxe/Ps2KeyboardDxe.inf
 
 INF  MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe.inf
 INF  OvmfPkg/SmbiosPlatformDxe/SmbiosPlatformDxe.inf
diff --git a/OvmfPkg/Library/PlatformBootManagerLib/BdsPlatform.c b/OvmfPkg/Library/PlatformBootManagerLib/BdsPlatform.c
index 618a96a8ba58..8933a5895229 100644
--- a/OvmfPkg/Library/PlatformBootManagerLib/BdsPlatform.c
+++ b/OvmfPkg/Library/PlatformBootManagerLib/BdsPlatform.c
@@ -8,6 +8,7 @@
 
 #include "BdsPlatform.h"
 #include <Guid/RootBridgesConnectedEventGroup.h>
+#include <Guid/SerialPortLibVendor.h>
 #include <Protocol/FirmwareVolume2.h>
 #include <Library/PlatformBmPrintScLib.h>
 #include <Library/Tcg2PhysicalPresenceLib.h>
@@ -661,6 +662,43 @@ PrepareLpcBridgeDevicePath (
   return EFI_SUCCESS;
 }
 
+typedef struct {
+  VENDOR_DEVICE_PATH        Guid;
+  EFI_DEVICE_PATH_PROTOCOL  End;
+} SERIAL_DEVICE_PATH;
+
+SERIAL_DEVICE_PATH serialDevicePath = {
+  {
+    { HARDWARE_DEVICE_PATH, HW_VENDOR_DP, { sizeof (VENDOR_DEVICE_PATH), 0} },
+    EDKII_SERIAL_PORT_LIB_VENDOR_GUID
+  },
+  { END_DEVICE_PATH_TYPE, END_ENTIRE_DEVICE_PATH_SUBTYPE, { sizeof (EFI_DEVICE_PATH_PROTOCOL), 0 } }
+};
+
+VOID
+PrepareMicrovmDevicePath (
+  VOID
+  )
+{
+  EFI_DEVICE_PATH_PROTOCOL  *DevicePath;
+  UINT16                    HostBridgeDevId;
+
+  HostBridgeDevId = PcdGet16 (PcdOvmfHostBridgePciDevId);
+  if (HostBridgeDevId != MICROVM_PSEUDO_DEVICE_ID) {
+    return;
+  }
+
+  DevicePath = (EFI_DEVICE_PATH_PROTOCOL*)&serialDevicePath;
+  DevicePath = AppendDevicePathNode (DevicePath,
+                 (EFI_DEVICE_PATH_PROTOCOL *)&gUartDeviceNode);
+  DevicePath = AppendDevicePathNode (DevicePath,
+                 (EFI_DEVICE_PATH_PROTOCOL *)&gTerminalTypeDeviceNode);
+
+  EfiBootManagerUpdateConsoleVariable (ConOut, DevicePath, NULL);
+  EfiBootManagerUpdateConsoleVariable (ConIn, DevicePath, NULL);
+  EfiBootManagerUpdateConsoleVariable (ErrOut, DevicePath, NULL);
+}
+
 EFI_STATUS
 GetGopDevicePath (
    IN  EFI_DEVICE_PATH_PROTOCOL *PciDevicePath,
@@ -1021,6 +1059,8 @@ PlatformInitializeConsole (
   //
   VisitAllPciInstances (DetectAndPreparePlatformPciDevicePath);
 
+  PrepareMicrovmDevicePath ();
+
   //
   // Have chance to connect the platform default console,
   // the platform default console is the minimum device group
-- 
2.31.1


  parent reply	other threads:[~2021-08-31  9:58 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-08-31  9:56 [PATCH 00/17] [RFC] OvmfPkg: Add support for microvm machine type Gerd Hoffmann
2021-08-31  9:56 ` [PATCH 01/17] OvmfPkg/Microvm: copy OvmfPkgX64 files as-is Gerd Hoffmann
2021-08-31  9:56 ` [PATCH 02/17] OvmfPkg/Microvm: rename output files, fix includes Gerd Hoffmann
2021-08-31  9:57 ` [PATCH 03/17] OvmfPkg/Microvm: no smm Gerd Hoffmann
2021-08-31  9:57 ` [PATCH 04/17] OvmfPkg/Microvm: no secure boot Gerd Hoffmann
2021-08-31  9:57 ` [PATCH 05/17] OvmfPkg/Microvm: no tpm Gerd Hoffmann
2021-09-01 21:17   ` Stefan Berger
2021-08-31  9:57 ` [PATCH 06/17] OvmfPkg/Microvm: no sev Gerd Hoffmann
2021-08-31  9:57 ` [PATCH 07/17] OvmfPkg/Microvm: no csm Gerd Hoffmann
2021-08-31  9:57 ` [PATCH 08/17] OvmfPkg/Microvm: no emulated scsi Gerd Hoffmann
2021-08-31  9:57 ` [PATCH 09/17] OvmfPkg/Microvm: use MdePkg/Library/SecPeiDxeTimerLibCpu Gerd Hoffmann
2021-08-31  9:57 ` [PATCH 10/17] OvmfPkg/Microvm: use XenTimerDxe (lapic timer) Gerd Hoffmann
2021-08-31 16:25   ` [edk2-devel] " Philippe Mathieu-Daudé
2021-09-01  7:19     ` Gerd Hoffmann
2021-09-01  7:37       ` Ard Biesheuvel
2021-08-31  9:57 ` [PATCH 11/17] OvmfPkg/Microvm: PlatformPei/MemDetect tweaks Gerd Hoffmann
2021-08-31  9:57 ` [PATCH 12/17] OvmfPkg/Microvm: PlatformPei/Platform memory map tweaks Gerd Hoffmann
2021-08-31  9:57 ` [PATCH 13/17] OvmfPkg/Microvm: PlatformPei/Platform misc tweaks Gerd Hoffmann
2021-08-31  9:57 ` [PATCH 14/17] OvmfPkg/ResetSystemLib: add driver for microvm Gerd Hoffmann
2021-08-31  9:57 ` [PATCH 15/17] OvmfPkg/Microvm: BdsPlatform: PciAcpiInitialization tweak Gerd Hoffmann
2021-08-31  9:57 ` [PATCH 16/17] OvmfPkg/Microvm: use PciHostBridgeLibNull Gerd Hoffmann
2021-08-31  9:57 ` Gerd Hoffmann [this message]
2021-08-31 10:23 ` [edk2-devel] [PATCH 00/17] [RFC] OvmfPkg: Add support for microvm machine type Ard Biesheuvel
2021-08-31 11:41   ` Gerd Hoffmann
2021-08-31 10:31 ` Yao, Jiewen
2021-08-31 11:26   ` Gerd Hoffmann
2021-08-31 14:32     ` Yao, Jiewen
2021-09-01  7:24       ` Gerd Hoffmann
2021-09-03  4:12         ` [edk2-devel] " Yao, Jiewen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210831095714.2834550-18-kraxel@redhat.com \
    --to=devel@edk2.groups.io \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox