From: "Gerd Hoffmann" <kraxel@redhat.com>
To: devel@edk2.groups.io
Cc: "Jordan Justen" <jordan.l.justen@intel.com>,
"Gerd Hoffmann" <kraxel@redhat.com>,
"Jiewen Yao" <jiewen.yao@intel.com>,
"Julien Grall" <julien@xen.org>,
"Stefan Berger" <stefanb@linux.ibm.com>,
"Leif Lindholm" <leif@nuviainc.com>,
"Ard Biesheuvel" <ardb+tianocore@kernel.org>,
"Andrew Fish" <afish@apple.com>,
"Michael D Kinney" <michael.d.kinney@intel.com>,
"Marc-André Lureau" <marcandre.lureau@redhat.com>,
"Anthony Perard" <anthony.perard@citrix.com>,
"Jiewen Yao" <Jiewen.yao@intel.com>
Subject: [PATCH v4 18/20] OvmfPkg/Microvm: wire up serial console, drop super-io
Date: Thu, 16 Sep 2021 14:20:25 +0200 [thread overview]
Message-ID: <20210916122027.2352393-19-kraxel@redhat.com> (raw)
In-Reply-To: <20210916122027.2352393-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.
Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=3599
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Acked-by: Jiewen Yao <Jiewen.yao@intel.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 399506874975..c11fc9fc3be0 100644
--- a/OvmfPkg/Microvm/MicrovmX64.dsc
+++ b/OvmfPkg/Microvm/MicrovmX64.dsc
@@ -233,6 +233,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
@@ -537,6 +539,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
@@ -732,9 +739,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 5536fcb8894d..b581a20cc6b7 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
next prev parent reply other threads:[~2021-09-16 12:21 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-09-16 12:20 [PATCH v4 00/20] OvmfPkg: Add support for microvm machine type Gerd Hoffmann
2021-09-16 12:20 ` [PATCH v4 01/20] OvmfPkg/Microvm: copy OvmfPkgX64 files as-is Gerd Hoffmann
2021-09-16 12:20 ` [PATCH v4 02/20] OvmfPkg/Microvm: rename output files, fix includes Gerd Hoffmann
2021-09-16 12:20 ` [PATCH v4 03/20] OvmfPkg/Microvm: no smm Gerd Hoffmann
2021-09-16 12:20 ` [PATCH v4 04/20] OvmfPkg/Microvm: no secure boot Gerd Hoffmann
2021-09-16 12:20 ` [PATCH v4 05/20] OvmfPkg/Microvm: no tpm Gerd Hoffmann
2021-09-16 12:20 ` [PATCH v4 06/20] OvmfPkg/Microvm: no sev Gerd Hoffmann
2021-09-16 12:20 ` [PATCH v4 07/20] OvmfPkg/Microvm: no csm Gerd Hoffmann
2021-09-16 12:20 ` [PATCH v4 08/20] OvmfPkg/Microvm: no emulated scsi Gerd Hoffmann
2021-09-16 12:20 ` [PATCH v4 09/20] OvmfPkg/Microvm: use MdePkg/Library/SecPeiDxeTimerLibCpu Gerd Hoffmann
2021-09-16 12:20 ` [PATCH v4 10/20] OvmfPkg/Microvm: use XenTimerDxe (lapic timer) Gerd Hoffmann
2021-09-16 12:20 ` [PATCH v4 11/20] OvmfPkg/Microvm: add header file Gerd Hoffmann
2021-09-16 12:20 ` [PATCH v4 12/20] OvmfPkg/Microvm: PlatformPei/MemDetect tweaks Gerd Hoffmann
2021-09-16 12:20 ` [PATCH v4 13/20] OvmfPkg/Microvm: PlatformPei/Platform memory map tweaks Gerd Hoffmann
2021-09-16 12:20 ` [PATCH v4 14/20] OvmfPkg/Microvm: PlatformPei/Platform: set id Gerd Hoffmann
2021-09-16 12:20 ` [PATCH v4 15/20] OvmfPkg/ResetSystemLib: add driver for microvm Gerd Hoffmann
2021-09-16 12:20 ` [PATCH v4 16/20] OvmfPkg/Microvm: BdsPlatform: PciAcpiInitialization tweak Gerd Hoffmann
2021-09-16 12:20 ` [PATCH v4 17/20] OvmfPkg/Microvm: use PciHostBridgeLibNull Gerd Hoffmann
2021-09-16 12:20 ` Gerd Hoffmann [this message]
2021-09-16 12:20 ` [PATCH v4 19/20] OvmfPkg/Microvm: add README Gerd Hoffmann
2021-09-16 12:20 ` [PATCH v4 20/20] OvmfPkg/Microvm: add Maintainers.txt entry Gerd Hoffmann
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=20210916122027.2352393-19-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