diff --git a/.gitignore b/.gitignore index a6ab119..45ec5cf 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,4 @@ /openssl-rhel-d00c3c5b8a9d6d3ea3dabfcafdf36afd61ba8bcc.tar.xz /DBXUpdate-20230314.x64.bin /DBXUpdate-20230509.x64.bin +/*.src.rpm diff --git a/edk2-ArmVirt-PlatformBootManagerLib-factor-out-IsVirtio.patch b/edk2-ArmVirt-PlatformBootManagerLib-factor-out-IsVirtio.patch new file mode 100644 index 0000000..e17b7ed --- /dev/null +++ b/edk2-ArmVirt-PlatformBootManagerLib-factor-out-IsVirtio.patch @@ -0,0 +1,74 @@ +From 9572a0fe959277c5b57df05a32503ff83a7e93af Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Thu, 1 Jun 2023 13:57:11 +0200 +Subject: [PATCH 02/12] ArmVirt/PlatformBootManagerLib: factor out IsVirtio() + +RH-Author: Gerd Hoffmann +RH-MergeRequest: 39: ArmVirt: add VirtioSerialDxe to ArmVirtQemu builds +RH-Jira: RHEL-643 +RH-Acked-by: Laszlo Ersek +RH-Commit: [2/6] 553a155707eb1c878133c1d13f6422c2b70fb78d (kraxel/centos-edk2) + +IsVirtioRng() becomes just a thin wrapper for IsVirtio(). +This allows to add similar thin wrappers for other virtio +devices in the future. + +Signed-off-by: Gerd Hoffmann +Reviewed-by: Ard Biesheuvel +(cherry picked from commit a196b04926e70880334fcd649837d0ac63b0bfd5) +--- + .../PlatformBootManagerLib/PlatformBm.c | 26 +++++++++++++++---- + 1 file changed, 21 insertions(+), 5 deletions(-) + +diff --git a/ArmVirtPkg/Library/PlatformBootManagerLib/PlatformBm.c b/ArmVirtPkg/Library/PlatformBootManagerLib/PlatformBm.c +index 10c815378c..5eb6f0f9c1 100644 +--- a/ArmVirtPkg/Library/PlatformBootManagerLib/PlatformBm.c ++++ b/ArmVirtPkg/Library/PlatformBootManagerLib/PlatformBm.c +@@ -269,15 +269,16 @@ IsPciDisplay ( + } + + /** +- This FILTER_FUNCTION checks if a handle corresponds to a Virtio RNG device at +- the VIRTIO_DEVICE_PROTOCOL level. ++ This function checks if a handle corresponds to the Virtio Device ID given ++ at the VIRTIO_DEVICE_PROTOCOL level. + **/ + STATIC + BOOLEAN + EFIAPI +-IsVirtioRng ( ++IsVirtio ( + IN EFI_HANDLE Handle, +- IN CONST CHAR16 *ReportText ++ IN CONST CHAR16 *ReportText, ++ IN UINT16 VirtIoDeviceId + ) + { + EFI_STATUS Status; +@@ -293,7 +294,22 @@ IsVirtioRng ( + } + + return (BOOLEAN)(VirtIo->SubSystemDeviceId == +- VIRTIO_SUBSYSTEM_ENTROPY_SOURCE); ++ VirtIoDeviceId); ++} ++ ++/** ++ This FILTER_FUNCTION checks if a handle corresponds to a Virtio RNG device at ++ the VIRTIO_DEVICE_PROTOCOL level. ++**/ ++STATIC ++BOOLEAN ++EFIAPI ++IsVirtioRng ( ++ IN EFI_HANDLE Handle, ++ IN CONST CHAR16 *ReportText ++ ) ++{ ++ return IsVirtio (Handle, ReportText, VIRTIO_SUBSYSTEM_ENTROPY_SOURCE); + } + + /** +-- +2.39.3 + diff --git a/edk2-ArmVirt-PlatformBootManagerLib-factor-out-IsVirtioPc.patch b/edk2-ArmVirt-PlatformBootManagerLib-factor-out-IsVirtioPc.patch new file mode 100644 index 0000000..c2c1642 --- /dev/null +++ b/edk2-ArmVirt-PlatformBootManagerLib-factor-out-IsVirtioPc.patch @@ -0,0 +1,96 @@ +From 8545529f2b6d967946f111d79455ec8896d53311 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Thu, 1 Jun 2023 13:57:12 +0200 +Subject: [PATCH 03/12] ArmVirt/PlatformBootManagerLib: factor out + IsVirtioPci() + +RH-Author: Gerd Hoffmann +RH-MergeRequest: 39: ArmVirt: add VirtioSerialDxe to ArmVirtQemu builds +RH-Jira: RHEL-643 +RH-Acked-by: Laszlo Ersek +RH-Commit: [3/6] d0000df1169e1f7b8ce3ad4942460cdc661a0ed9 (kraxel/centos-edk2) + +IsVirtioPciRng() becomes just a thin wrapper for IsVirtioPci(). +This allows to add similar thin wrappers for other virtio +devices in the future. + +Signed-off-by: Gerd Hoffmann +Reviewed-by: Ard Biesheuvel +(cherry picked from commit aaf546879ab71722c36738ccc6f0f0ab4ecf5076) +--- + .../PlatformBootManagerLib/PlatformBm.c | 30 ++++++++++++++----- + 1 file changed, 23 insertions(+), 7 deletions(-) + +diff --git a/ArmVirtPkg/Library/PlatformBootManagerLib/PlatformBm.c b/ArmVirtPkg/Library/PlatformBootManagerLib/PlatformBm.c +index 5eb6f0f9c1..ed38c42a43 100644 +--- a/ArmVirtPkg/Library/PlatformBootManagerLib/PlatformBm.c ++++ b/ArmVirtPkg/Library/PlatformBootManagerLib/PlatformBm.c +@@ -313,15 +313,16 @@ IsVirtioRng ( + } + + /** +- This FILTER_FUNCTION checks if a handle corresponds to a Virtio RNG device at +- the EFI_PCI_IO_PROTOCOL level. ++ This function checks if a handle corresponds to the Virtio Device ID given ++ at the EFI_PCI_IO_PROTOCOL level. + **/ + STATIC + BOOLEAN + EFIAPI +-IsVirtioPciRng ( ++IsVirtioPci ( + IN EFI_HANDLE Handle, +- IN CONST CHAR16 *ReportText ++ IN CONST CHAR16 *ReportText, ++ IN UINT16 VirtIoDeviceId + ) + { + EFI_STATUS Status; +@@ -387,11 +388,11 @@ IsVirtioPciRng ( + // + // From DeviceId and RevisionId, determine whether the device is a + // modern-only Virtio 1.0 device. In case of Virtio 1.0, DeviceId can +- // immediately be restricted to VIRTIO_SUBSYSTEM_ENTROPY_SOURCE, and ++ // immediately be restricted to VirtIoDeviceId, and + // SubsystemId will only play a sanity-check role. Otherwise, DeviceId can + // only be sanity-checked, and SubsystemId will decide. + // +- if ((DeviceId == 0x1040 + VIRTIO_SUBSYSTEM_ENTROPY_SOURCE) && ++ if ((DeviceId == 0x1040 + VirtIoDeviceId) && + (RevisionId >= 0x01)) + { + Virtio10 = TRUE; +@@ -419,7 +420,7 @@ IsVirtioPciRng ( + return TRUE; + } + +- if (!Virtio10 && (SubsystemId == VIRTIO_SUBSYSTEM_ENTROPY_SOURCE)) { ++ if (!Virtio10 && (SubsystemId == VirtIoDeviceId)) { + return TRUE; + } + +@@ -430,6 +431,21 @@ PciError: + return FALSE; + } + ++/** ++ This FILTER_FUNCTION checks if a handle corresponds to a Virtio RNG device at ++ the EFI_PCI_IO_PROTOCOL level. ++**/ ++STATIC ++BOOLEAN ++EFIAPI ++IsVirtioPciRng ( ++ IN EFI_HANDLE Handle, ++ IN CONST CHAR16 *ReportText ++ ) ++{ ++ return IsVirtioPci (Handle, ReportText, VIRTIO_SUBSYSTEM_ENTROPY_SOURCE); ++} ++ + /** + This CALLBACK_FUNCTION attempts to connect a handle non-recursively, asking + the matching driver to produce all first-level child handles. +-- +2.39.3 + diff --git a/edk2-ArmVirt-PlatformBootManagerLib-set-up-virtio-serial-.patch b/edk2-ArmVirt-PlatformBootManagerLib-set-up-virtio-serial-.patch new file mode 100644 index 0000000..2538ff9 --- /dev/null +++ b/edk2-ArmVirt-PlatformBootManagerLib-set-up-virtio-serial-.patch @@ -0,0 +1,228 @@ +From ad95ab2b76485458fed60ab20631b62a010c0e4d Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Thu, 1 Jun 2023 13:57:13 +0200 +Subject: [PATCH 04/12] ArmVirt/PlatformBootManagerLib: set up virtio serial as + console + +RH-Author: Gerd Hoffmann +RH-MergeRequest: 39: ArmVirt: add VirtioSerialDxe to ArmVirtQemu builds +RH-Jira: RHEL-643 +RH-Acked-by: Laszlo Ersek +RH-Commit: [4/6] 46540eeb8901cfeef83cffcdcb6e1c23995b391a (kraxel/centos-edk2) + +In case a virtio serial device is found in the system register the first +console port as EFI console, by updating ConIn, ConOut and ErrOut. + +Signed-off-by: Gerd Hoffmann +(cherry picked from commit 15f83fa36442eaa272300b31699b3b82ce7e07a9) +--- + .../PlatformBootManagerLib/PlatformBm.c | 172 ++++++++++++++++++ + 1 file changed, 172 insertions(+) + +diff --git a/ArmVirtPkg/Library/PlatformBootManagerLib/PlatformBm.c b/ArmVirtPkg/Library/PlatformBootManagerLib/PlatformBm.c +index ed38c42a43..b92a916f7e 100644 +--- a/ArmVirtPkg/Library/PlatformBootManagerLib/PlatformBm.c ++++ b/ArmVirtPkg/Library/PlatformBootManagerLib/PlatformBm.c +@@ -312,6 +312,21 @@ IsVirtioRng ( + return IsVirtio (Handle, ReportText, VIRTIO_SUBSYSTEM_ENTROPY_SOURCE); + } + ++/** ++ This FILTER_FUNCTION checks if a handle corresponds to a Virtio serial device at ++ the VIRTIO_DEVICE_PROTOCOL level. ++**/ ++STATIC ++BOOLEAN ++EFIAPI ++IsVirtioSerial ( ++ IN EFI_HANDLE Handle, ++ IN CONST CHAR16 *ReportText ++ ) ++{ ++ return IsVirtio (Handle, ReportText, VIRTIO_SUBSYSTEM_CONSOLE); ++} ++ + /** + This function checks if a handle corresponds to the Virtio Device ID given + at the EFI_PCI_IO_PROTOCOL level. +@@ -446,6 +461,21 @@ IsVirtioPciRng ( + return IsVirtioPci (Handle, ReportText, VIRTIO_SUBSYSTEM_ENTROPY_SOURCE); + } + ++/** ++ This FILTER_FUNCTION checks if a handle corresponds to a Virtio serial device at ++ the EFI_PCI_IO_PROTOCOL level. ++**/ ++STATIC ++BOOLEAN ++EFIAPI ++IsVirtioPciSerial ( ++ IN EFI_HANDLE Handle, ++ IN CONST CHAR16 *ReportText ++ ) ++{ ++ return IsVirtioPci (Handle, ReportText, VIRTIO_SUBSYSTEM_CONSOLE); ++} ++ + /** + This CALLBACK_FUNCTION attempts to connect a handle non-recursively, asking + the matching driver to produce all first-level child handles. +@@ -534,6 +564,142 @@ AddOutput ( + )); + } + ++/** ++ This CALLBACK_FUNCTION retrieves the EFI_DEVICE_PATH_PROTOCOL from ++ the handle, appends serial, uart and terminal nodes, finally updates ++ ConIn, ConOut and ErrOut. ++**/ ++STATIC ++VOID ++EFIAPI ++SetupVirtioSerial ( ++ IN EFI_HANDLE Handle, ++ IN CONST CHAR16 *ReportText ++ ) ++{ ++ STATIC CONST ACPI_HID_DEVICE_PATH SerialNode = { ++ { ++ ACPI_DEVICE_PATH, ++ ACPI_DP, ++ { ++ (UINT8)(sizeof (ACPI_HID_DEVICE_PATH)), ++ (UINT8)((sizeof (ACPI_HID_DEVICE_PATH)) >> 8) ++ }, ++ }, ++ EISA_PNP_ID (0x0501), ++ 0 ++ }; ++ ++ STATIC CONST UART_DEVICE_PATH UartNode = { ++ { ++ MESSAGING_DEVICE_PATH, ++ MSG_UART_DP, ++ { ++ (UINT8)(sizeof (UART_DEVICE_PATH)), ++ (UINT8)((sizeof (UART_DEVICE_PATH)) >> 8) ++ }, ++ }, ++ 0, ++ 115200, ++ 8, ++ 1, ++ 1 ++ }; ++ ++ STATIC CONST VENDOR_DEVICE_PATH TerminalNode = { ++ { ++ MESSAGING_DEVICE_PATH, ++ MSG_VENDOR_DP, ++ { ++ (UINT8)(sizeof (VENDOR_DEVICE_PATH)), ++ (UINT8)((sizeof (VENDOR_DEVICE_PATH)) >> 8) ++ }, ++ }, ++ DEVICE_PATH_MESSAGING_VT_UTF8 ++ }; ++ ++ EFI_STATUS Status; ++ EFI_DEVICE_PATH_PROTOCOL *DevicePath, *OldDevicePath; ++ ++ DevicePath = DevicePathFromHandle (Handle); ++ ++ if (DevicePath == NULL) { ++ DEBUG (( ++ DEBUG_ERROR, ++ "%a: %s: handle %p: device path not found\n", ++ __func__, ++ ReportText, ++ Handle ++ )); ++ return; ++ } ++ ++ DevicePath = AppendDevicePathNode ( ++ DevicePath, ++ &SerialNode.Header ++ ); ++ ++ OldDevicePath = DevicePath; ++ DevicePath = AppendDevicePathNode ( ++ DevicePath, ++ &UartNode.Header ++ ); ++ FreePool (OldDevicePath); ++ ++ OldDevicePath = DevicePath; ++ DevicePath = AppendDevicePathNode ( ++ DevicePath, ++ &TerminalNode.Header ++ ); ++ FreePool (OldDevicePath); ++ ++ Status = EfiBootManagerUpdateConsoleVariable (ConIn, DevicePath, NULL); ++ if (EFI_ERROR (Status)) { ++ DEBUG (( ++ DEBUG_ERROR, ++ "%a: %s: adding to ConIn: %r\n", ++ __func__, ++ ReportText, ++ Status ++ )); ++ return; ++ } ++ ++ Status = EfiBootManagerUpdateConsoleVariable (ConOut, DevicePath, NULL); ++ if (EFI_ERROR (Status)) { ++ DEBUG (( ++ DEBUG_ERROR, ++ ++ "%a: %s: adding to ConOut: %r\n", ++ __func__, ++ ReportText, ++ Status ++ )); ++ return; ++ } ++ ++ Status = EfiBootManagerUpdateConsoleVariable (ErrOut, DevicePath, NULL); ++ if (EFI_ERROR (Status)) { ++ DEBUG (( ++ DEBUG_ERROR, ++ "%a: %s: adding to ErrOut: %r\n", ++ __func__, ++ ReportText, ++ Status ++ )); ++ return; ++ } ++ ++ FreePool (DevicePath); ++ ++ DEBUG (( ++ DEBUG_VERBOSE, ++ "%a: %s: added to ConIn, ConOut and ErrOut\n", ++ __func__, ++ ReportText ++ )); ++} ++ + STATIC + VOID + PlatformRegisterFvBootOption ( +@@ -932,6 +1098,12 @@ PlatformBootManagerBeforeConsole ( + // instances on Virtio PCI RNG devices. + // + FilterAndProcess (&gEfiPciIoProtocolGuid, IsVirtioPciRng, Connect); ++ ++ // ++ // Register Virtio serial devices as console. ++ // ++ FilterAndProcess (&gVirtioDeviceProtocolGuid, IsVirtioSerial, SetupVirtioSerial); ++ FilterAndProcess (&gEfiPciIoProtocolGuid, IsVirtioPciSerial, SetupVirtioSerial); + } + + /** +-- +2.39.3 + diff --git a/edk2-ArmVirt-add-VirtioSerialDxe-to-ArmVirtQemu-builds.patch b/edk2-ArmVirt-add-VirtioSerialDxe-to-ArmVirtQemu-builds.patch new file mode 100644 index 0000000..43db3e0 --- /dev/null +++ b/edk2-ArmVirt-add-VirtioSerialDxe-to-ArmVirtQemu-builds.patch @@ -0,0 +1,59 @@ +From 262a607fbc608c02fc3c2a87244d033932d564bb Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Thu, 1 Jun 2023 13:57:10 +0200 +Subject: [PATCH 01/12] ArmVirt: add VirtioSerialDxe to ArmVirtQemu builds + +RH-Author: Gerd Hoffmann +RH-MergeRequest: 39: ArmVirt: add VirtioSerialDxe to ArmVirtQemu builds +RH-Jira: RHEL-643 +RH-Acked-by: Laszlo Ersek +RH-Commit: [1/6] 03b627e1fae7851fa51e6fe67253ff1b64948d0e (kraxel/centos-edk2) + +Signed-off-by: Gerd Hoffmann +Acked-by: Ard Biesheuvel +(cherry picked from commit 6925150febb3a76d8e40c19babcc578555ca78fe) +--- + ArmVirtPkg/ArmVirtQemu.dsc | 1 + + ArmVirtPkg/ArmVirtQemuFvMain.fdf.inc | 1 + + ArmVirtPkg/ArmVirtQemuKernel.dsc | 1 + + 3 files changed, 3 insertions(+) + +diff --git a/ArmVirtPkg/ArmVirtQemu.dsc b/ArmVirtPkg/ArmVirtQemu.dsc +index b1deefc2fd..5df6a89578 100644 +--- a/ArmVirtPkg/ArmVirtQemu.dsc ++++ b/ArmVirtPkg/ArmVirtQemu.dsc +@@ -453,6 +453,7 @@ + OvmfPkg/VirtioScsiDxe/VirtioScsi.inf + OvmfPkg/VirtioNetDxe/VirtioNet.inf + OvmfPkg/VirtioRngDxe/VirtioRng.inf ++ OvmfPkg/VirtioSerialDxe/VirtioSerial.inf + + # + # FAT filesystem + GPT/MBR partitioning + UDF filesystem + virtio-fs +diff --git a/ArmVirtPkg/ArmVirtQemuFvMain.fdf.inc b/ArmVirtPkg/ArmVirtQemuFvMain.fdf.inc +index 4dbb77a6ca..00ec4dd186 100644 +--- a/ArmVirtPkg/ArmVirtQemuFvMain.fdf.inc ++++ b/ArmVirtPkg/ArmVirtQemuFvMain.fdf.inc +@@ -96,6 +96,7 @@ READ_LOCK_STATUS = TRUE + INF OvmfPkg/VirtioNetDxe/VirtioNet.inf + INF OvmfPkg/VirtioScsiDxe/VirtioScsi.inf + INF OvmfPkg/VirtioRngDxe/VirtioRng.inf ++ INF OvmfPkg/VirtioSerialDxe/VirtioSerial.inf + + INF ShellPkg/Application/Shell/Shell.inf + +diff --git a/ArmVirtPkg/ArmVirtQemuKernel.dsc b/ArmVirtPkg/ArmVirtQemuKernel.dsc +index afebc46a04..76b7c128bb 100644 +--- a/ArmVirtPkg/ArmVirtQemuKernel.dsc ++++ b/ArmVirtPkg/ArmVirtQemuKernel.dsc +@@ -353,6 +353,7 @@ + OvmfPkg/VirtioScsiDxe/VirtioScsi.inf + OvmfPkg/VirtioNetDxe/VirtioNet.inf + OvmfPkg/VirtioRngDxe/VirtioRng.inf ++ OvmfPkg/VirtioSerialDxe/VirtioSerial.inf + + # + # FAT filesystem + GPT/MBR partitioning + UDF filesystem + virtio-fs +-- +2.39.3 + diff --git a/edk2-OvmfPkg-MicrovmX64-enable-1G-pages.patch b/edk2-OvmfPkg-MicrovmX64-enable-1G-pages.patch new file mode 100644 index 0000000..98d9d59 --- /dev/null +++ b/edk2-OvmfPkg-MicrovmX64-enable-1G-pages.patch @@ -0,0 +1,37 @@ +From db07792f9eb095a1f7570b23b1e9dad6edca17a5 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Wed, 17 May 2023 12:24:49 +0200 +Subject: [PATCH 12/12] OvmfPkg/MicrovmX64: enable 1G pages + +RH-Author: Gerd Hoffmann +RH-MergeRequest: 40: enable use of gigabyte pages +RH-Jira: RHEL-644 +RH-Acked-by: Laszlo Ersek +RH-Commit: [3/3] 369373082e4dd0be9a4f257e5be9c827cc7de3c5 (kraxel/centos-edk2) + +Reduces the memory footprint and speeds up booting. + +Signed-off-by: Gerd Hoffmann +Acked-by: Ard Biesheuvel +(cherry picked from commit 04c5b3023e49c35d291f41d2c39b4d12a62b8f9c) +--- + OvmfPkg/Microvm/MicrovmX64.dsc | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/OvmfPkg/Microvm/MicrovmX64.dsc b/OvmfPkg/Microvm/MicrovmX64.dsc +index 49d1d7ef5c..cc8e3abc45 100644 +--- a/OvmfPkg/Microvm/MicrovmX64.dsc ++++ b/OvmfPkg/Microvm/MicrovmX64.dsc +@@ -544,6 +544,9 @@ + gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiRuntimeServicesCode|0x100 + gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiRuntimeServicesData|0x100 + ++ # use 1G pages ++ gEfiMdeModulePkgTokenSpaceGuid.PcdUse1GPageTable|TRUE ++ + # + # Network Pcds + # +-- +2.39.3 + diff --git a/edk2-OvmfPkg-OvmfPkgIa32X64-enable-1G-pages.patch b/edk2-OvmfPkg-OvmfPkgIa32X64-enable-1G-pages.patch new file mode 100644 index 0000000..3fe7c0e --- /dev/null +++ b/edk2-OvmfPkg-OvmfPkgIa32X64-enable-1G-pages.patch @@ -0,0 +1,37 @@ +From 943b4994942d550bef98685d13ffb26d4b5dd665 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Wed, 17 May 2023 12:24:48 +0200 +Subject: [PATCH 11/12] OvmfPkg/OvmfPkgIa32X64: enable 1G pages + +RH-Author: Gerd Hoffmann +RH-MergeRequest: 40: enable use of gigabyte pages +RH-Jira: RHEL-644 +RH-Acked-by: Laszlo Ersek +RH-Commit: [2/3] 7385647b30e5096b356a13085a8081de79c916f8 (kraxel/centos-edk2) + +Reduces the memory footprint and speeds up booting. + +Signed-off-by: Gerd Hoffmann +Acked-by: Ard Biesheuvel +(cherry picked from commit b63e17d746aa6bab2b1101711395725005e71a02) +--- + OvmfPkg/OvmfPkgIa32X64.dsc | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/OvmfPkg/OvmfPkgIa32X64.dsc b/OvmfPkg/OvmfPkgIa32X64.dsc +index a41bc32454..a6714cea91 100644 +--- a/OvmfPkg/OvmfPkgIa32X64.dsc ++++ b/OvmfPkg/OvmfPkgIa32X64.dsc +@@ -557,6 +557,9 @@ + # never lets the RAM below 4 GB exceed 2816 MB. + gEfiMdePkgTokenSpaceGuid.PcdPciExpressBaseAddress|0xE0000000 + ++ # use 1G pages ++ gEfiMdeModulePkgTokenSpaceGuid.PcdUse1GPageTable|TRUE ++ + !if $(SOURCE_DEBUG_ENABLE) == TRUE + gEfiSourceLevelDebugPkgTokenSpaceGuid.PcdDebugLoadImageMethod|0x2 + !endif +-- +2.39.3 + diff --git a/edk2-OvmfPkg-PlatformInitLib-check-PcdUse1GPageTable.patch b/edk2-OvmfPkg-PlatformInitLib-check-PcdUse1GPageTable.patch new file mode 100644 index 0000000..6564284 --- /dev/null +++ b/edk2-OvmfPkg-PlatformInitLib-check-PcdUse1GPageTable.patch @@ -0,0 +1,57 @@ +From f24768ae482651073db9050fdaad49afe930b127 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Wed, 17 May 2023 12:24:47 +0200 +Subject: [PATCH 10/12] OvmfPkg/PlatformInitLib: check PcdUse1GPageTable + +RH-Author: Gerd Hoffmann +RH-MergeRequest: 40: enable use of gigabyte pages +RH-Jira: RHEL-644 +RH-Acked-by: Laszlo Ersek +RH-Commit: [1/3] 5d8b87d3b6a6b8af4d1a4aabedd8f69c512bf01c (kraxel/centos-edk2) + +If PcdUse1GPageTable is not enabled restrict the physical address space +used to 1TB, to limit the amount of memory needed for identity mapping +page tables. + +The same already happens in case the processor has no support for +gigabyte pages. + +Signed-off-by: Gerd Hoffmann +Acked-by: Ard Biesheuvel +(cherry picked from commit d4d24001f78bcee965d8854fba6f08f48b4ec446) +--- + OvmfPkg/Library/PlatformInitLib/MemDetect.c | 5 +++++ + OvmfPkg/Library/PlatformInitLib/PlatformInitLib.inf | 1 + + 2 files changed, 6 insertions(+) + +diff --git a/OvmfPkg/Library/PlatformInitLib/MemDetect.c b/OvmfPkg/Library/PlatformInitLib/MemDetect.c +index 0482d8906d..662e7e85bb 100644 +--- a/OvmfPkg/Library/PlatformInitLib/MemDetect.c ++++ b/OvmfPkg/Library/PlatformInitLib/MemDetect.c +@@ -666,6 +666,11 @@ PlatformAddressWidthFromCpuid ( + PhysBits = 40; + } + ++ if (!FixedPcdGetBool (PcdUse1GPageTable) && (PhysBits > 40)) { ++ DEBUG ((DEBUG_INFO, "%a: limit PhysBits to 40 (PcdUse1GPageTable is false)\n", __func__)); ++ PhysBits = 40; ++ } ++ + PlatformInfoHob->PhysMemAddressWidth = PhysBits; + PlatformInfoHob->FirstNonAddress = LShiftU64 (1, PlatformInfoHob->PhysMemAddressWidth); + } +diff --git a/OvmfPkg/Library/PlatformInitLib/PlatformInitLib.inf b/OvmfPkg/Library/PlatformInitLib/PlatformInitLib.inf +index 86a82ad3e0..5a79d95b68 100644 +--- a/OvmfPkg/Library/PlatformInitLib/PlatformInitLib.inf ++++ b/OvmfPkg/Library/PlatformInitLib/PlatformInitLib.inf +@@ -58,6 +58,7 @@ + + [Pcd] + gEfiMdePkgTokenSpaceGuid.PcdPciExpressBaseAddress ++ gEfiMdeModulePkgTokenSpaceGuid.PcdUse1GPageTable + + [FixedPcd] + gUefiOvmfPkgTokenSpaceGuid.PcdOvmfWorkAreaBase +-- +2.39.3 + diff --git a/edk2-OvmfPkg-PlatformInitLib-limit-phys-bits-to-46.patch b/edk2-OvmfPkg-PlatformInitLib-limit-phys-bits-to-46.patch new file mode 100644 index 0000000..7f4434b --- /dev/null +++ b/edk2-OvmfPkg-PlatformInitLib-limit-phys-bits-to-46.patch @@ -0,0 +1,53 @@ +From b1643b16a4a70ea576b5f90476fd9c59750eafe8 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Thu, 1 Jun 2023 09:57:31 +0200 +Subject: [PATCH 07/12] OvmfPkg/PlatformInitLib: limit phys-bits to 46. + +RH-Author: Gerd Hoffmann +RH-MergeRequest: 41: enable dynamic mmio window +RH-Bugzilla: 2174749 +RH-Acked-by: Laszlo Ersek +RH-Commit: [1/2] d08a95b72276cba504176b3837714db67122ed66 (kraxel/centos-edk2) + +Older linux kernels have problems with phys-bits larger than 46, +ubuntu 18.04 (kernel 4.15) has been reported to be affected. + +Reduce phys-bits limit from 47 to 46. + +Reported-by: Fiona Ebner +Signed-off-by: Gerd Hoffmann +(cherry picked from commit c1e853769046b322690ad336fdb98966757e7414) +--- + OvmfPkg/Library/PlatformInitLib/MemDetect.c | 9 ++++++--- + 1 file changed, 6 insertions(+), 3 deletions(-) + +diff --git a/OvmfPkg/Library/PlatformInitLib/MemDetect.c b/OvmfPkg/Library/PlatformInitLib/MemDetect.c +index 86700fc028..aab266399f 100644 +--- a/OvmfPkg/Library/PlatformInitLib/MemDetect.c ++++ b/OvmfPkg/Library/PlatformInitLib/MemDetect.c +@@ -646,16 +646,19 @@ PlatformAddressWidthFromCpuid ( + )); + + if (Valid) { +- if (PhysBits > 47) { ++ if (PhysBits > 46) { + /* + * Avoid 5-level paging altogether for now, which limits + * PhysBits to 48. Also avoid using address bit 48, due to sign + * extension we can't identity-map these addresses (and lots of + * places in edk2 assume we have everything identity-mapped). + * So the actual limit is 47. ++ * ++ * Also some older linux kernels apparently have problems handling ++ * phys-bits > 46 correctly, so use that as limit. + */ +- DEBUG ((DEBUG_INFO, "%a: limit PhysBits to 47 (avoid 5-level paging)\n", __func__)); +- PhysBits = 47; ++ DEBUG ((DEBUG_INFO, "%a: limit PhysBits to 46 (avoid 5-level paging)\n", __func__)); ++ PhysBits = 46; + } + + if (!Page1GSupport && (PhysBits > 40)) { +-- +2.39.3 + diff --git a/edk2-OvmfPkg-VirtioSerialDxe-Remove-noisy-debug-print-on-.patch b/edk2-OvmfPkg-VirtioSerialDxe-Remove-noisy-debug-print-on-.patch new file mode 100644 index 0000000..21da9bf --- /dev/null +++ b/edk2-OvmfPkg-VirtioSerialDxe-Remove-noisy-debug-print-on-.patch @@ -0,0 +1,42 @@ +From 60a5604388fa73872d67e9ed46a29c7fd0e4fc32 Mon Sep 17 00:00:00 2001 +From: Ard Biesheuvel +Date: Tue, 27 Jun 2023 13:14:06 +0200 +Subject: [PATCH 06/12] OvmfPkg/VirtioSerialDxe: Remove noisy debug print on + supported() call + +RH-Author: Gerd Hoffmann +RH-MergeRequest: 39: ArmVirt: add VirtioSerialDxe to ArmVirtQemu builds +RH-Jira: RHEL-643 +RH-Acked-by: Laszlo Ersek +RH-Commit: [6/6] 62b611c1d82f1b87cac2a07655ca37117d438989 (kraxel/centos-edk2) + +The UEFI driver model invokes the supported() method on every driver +every time a connection attempt is made on any handle, and so doing an +unconditional DEBUG() print inside this method produced a lot of noise. + +So let's drop this DEBUG() call from the VirtioSerial driver's +Supported() method. + +Signed-off-by: Ard Biesheuvel +Acked-by: Gerd Hoffmann +(cherry picked from commit ea7a3015a2404e1358218463dd25df5ae7615352) +--- + OvmfPkg/VirtioSerialDxe/VirtioSerial.c | 2 -- + 1 file changed, 2 deletions(-) + +diff --git a/OvmfPkg/VirtioSerialDxe/VirtioSerial.c b/OvmfPkg/VirtioSerialDxe/VirtioSerial.c +index bfb2b324ea..9e27a519f4 100644 +--- a/OvmfPkg/VirtioSerialDxe/VirtioSerial.c ++++ b/OvmfPkg/VirtioSerialDxe/VirtioSerial.c +@@ -510,8 +510,6 @@ VirtioSerialDriverBindingSupported ( + Status = EFI_UNSUPPORTED; + } + +- DEBUG ((DEBUG_INFO, "%a:%d: subsystem %d -> %r\n", __func__, __LINE__, VirtIo->SubSystemDeviceId, Status)); +- + // + // We needed VirtIo access only transitorily, to see whether we support the + // device or not. +-- +2.39.3 + diff --git a/edk2-OvmfPkg-VirtioSerialDxe-use-TPL_NOTIFY.patch b/edk2-OvmfPkg-VirtioSerialDxe-use-TPL_NOTIFY.patch new file mode 100644 index 0000000..4227206 --- /dev/null +++ b/edk2-OvmfPkg-VirtioSerialDxe-use-TPL_NOTIFY.patch @@ -0,0 +1,45 @@ +From 2ab130462062bfcd66d3047eaa6947a151296a21 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Fri, 12 May 2023 16:23:06 +0200 +Subject: [PATCH 05/12] OvmfPkg/VirtioSerialDxe: use TPL_NOTIFY + +RH-Author: Gerd Hoffmann +RH-MergeRequest: 39: ArmVirt: add VirtioSerialDxe to ArmVirtQemu builds +RH-Jira: RHEL-643 +RH-Acked-by: Laszlo Ersek +RH-Commit: [5/6] 08998538804a8d62903e44e716bcafd9674d208f (kraxel/centos-edk2) + +Apparently TPL_CALLBACK is too low, code runs into an ASSERT +complaining the new TPL is lower than the old TPL. + +Signed-off-by: Gerd Hoffmann +(cherry picked from commit 4e5a804222415ec7b2bec90ea0300b8a9f60f131) +--- + OvmfPkg/VirtioSerialDxe/VirtioSerialPort.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/OvmfPkg/VirtioSerialDxe/VirtioSerialPort.c b/OvmfPkg/VirtioSerialDxe/VirtioSerialPort.c +index 522b25e969..e4a58deff1 100644 +--- a/OvmfPkg/VirtioSerialDxe/VirtioSerialPort.c ++++ b/OvmfPkg/VirtioSerialDxe/VirtioSerialPort.c +@@ -158,7 +158,7 @@ VirtioSerialIoWrite ( + + VirtioSerialRingClearTx (SerialIo->Dev, PortTx (SerialIo->PortId)); + +- OldTpl = gBS->RaiseTPL (TPL_CALLBACK); ++ OldTpl = gBS->RaiseTPL (TPL_NOTIFY); + if (SerialIo->WriteOffset && + (SerialIo->WriteOffset + *BufferSize > PORT_TX_BUFSIZE)) + { +@@ -201,7 +201,7 @@ VirtioSerialIoRead ( + goto NoData; + } + +- OldTpl = gBS->RaiseTPL (TPL_CALLBACK); ++ OldTpl = gBS->RaiseTPL (TPL_NOTIFY); + if (SerialIo->WriteOffset) { + DEBUG ((DEBUG_VERBOSE, "%a:%d: WriteFlush %d\n", __func__, __LINE__, SerialIo->WriteOffset)); + VirtioSerialRingSendBuffer ( +-- +2.39.3 + diff --git a/edk2-Revert-OvmfPkg-disable-dynamic-mmio-window-rhel-only.patch b/edk2-Revert-OvmfPkg-disable-dynamic-mmio-window-rhel-only.patch new file mode 100644 index 0000000..3416dfe --- /dev/null +++ b/edk2-Revert-OvmfPkg-disable-dynamic-mmio-window-rhel-only.patch @@ -0,0 +1,34 @@ +From e4fe4b80159b7df136f419da69251f45b62f36ec Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Thu, 29 Jun 2023 13:37:33 +0200 +Subject: [PATCH 08/12] Revert "OvmfPkg: disable dynamic mmio window (rhel + only)" + +RH-Author: Gerd Hoffmann +RH-MergeRequest: 41: enable dynamic mmio window +RH-Bugzilla: 2174749 +RH-Acked-by: Laszlo Ersek +RH-Commit: [2/2] 10ace0e012602153f82fccee3c555be40b3c6753 (kraxel/centos-edk2) + +This reverts commit 218d3b32592bffe5ec7317c4838d29e92b4b86f0. +--- + OvmfPkg/Library/PlatformInitLib/MemDetect.c | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +diff --git a/OvmfPkg/Library/PlatformInitLib/MemDetect.c b/OvmfPkg/Library/PlatformInitLib/MemDetect.c +index aab266399f..0482d8906d 100644 +--- a/OvmfPkg/Library/PlatformInitLib/MemDetect.c ++++ b/OvmfPkg/Library/PlatformInitLib/MemDetect.c +@@ -682,8 +682,7 @@ PlatformDynamicMmioWindow ( + AddrSpace = LShiftU64 (1, PlatformInfoHob->PhysMemAddressWidth); + MmioSpace = LShiftU64 (1, PlatformInfoHob->PhysMemAddressWidth - 3); + +- if (FALSE /* disable for RHEL-9.2, libvirt is not ready yet */ && +- (PlatformInfoHob->PcdPciMmio64Size < MmioSpace) && ++ if ((PlatformInfoHob->PcdPciMmio64Size < MmioSpace) && + (PlatformInfoHob->PcdPciMmio64Base + MmioSpace < AddrSpace)) + { + DEBUG ((DEBUG_INFO, "%a: using dynamic mmio window\n", __func__)); +-- +2.39.3 + diff --git a/edk2-UefiCpuPkg-MpInitLib-fix-apic-mode-for-cpu-hotplug.patch b/edk2-UefiCpuPkg-MpInitLib-fix-apic-mode-for-cpu-hotplug.patch new file mode 100644 index 0000000..0a09514 --- /dev/null +++ b/edk2-UefiCpuPkg-MpInitLib-fix-apic-mode-for-cpu-hotplug.patch @@ -0,0 +1,48 @@ +From a920227615c895522739bbbf3a5fb7f6a470de86 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Tue, 28 Feb 2023 15:47:00 +0100 +Subject: [PATCH 09/12] UefiCpuPkg/MpInitLib: fix apic mode for cpu hotplug + +RH-Author: Gerd Hoffmann +RH-MergeRequest: 42: UefiCpuPkg/MpInitLib: fix apic mode for cpu hotplug +RH-Bugzilla: 2124143 +RH-Acked-by: Laszlo Ersek +RH-Commit: [1/1] 5168501c31541a57aaeb3b3bd7c3602205eb7cdf (kraxel/centos-edk2) + +In case the number of CPUs can in increase beyond 255 +due to CPU hotplug choose x2apic mode. + +Signed-off-by: Gerd Hoffmann +--- + UefiCpuPkg/Library/MpInitLib/MpLib.c | 8 +++++++- + 1 file changed, 7 insertions(+), 1 deletion(-) + +diff --git a/UefiCpuPkg/Library/MpInitLib/MpLib.c b/UefiCpuPkg/Library/MpInitLib/MpLib.c +index f1f2840714..79fd8fb04d 100644 +--- a/UefiCpuPkg/Library/MpInitLib/MpLib.c ++++ b/UefiCpuPkg/Library/MpInitLib/MpLib.c +@@ -526,7 +526,9 @@ CollectProcessorCount ( + // + // Enable x2APIC mode if + // 1. Number of CPU is greater than 255; or +- // 2. There are any logical processors reporting an Initial APIC ID of 255 or greater. ++ // 2. The platform exposed the exact *boot* CPU count to us in advance, and ++ // more than 255 logical processors are possible later, with hotplug; or ++ // 3. There are any logical processors reporting an Initial APIC ID of 255 or greater. + // + X2Apic = FALSE; + if (CpuMpData->CpuCount > 255) { +@@ -534,6 +536,10 @@ CollectProcessorCount ( + // If there are more than 255 processor found, force to enable X2APIC + // + X2Apic = TRUE; ++ } else if ((PcdGet32 (PcdCpuBootLogicalProcessorNumber) > 0) && ++ (PcdGet32 (PcdCpuMaxLogicalProcessorNumber) > 255)) ++ { ++ X2Apic = TRUE; + } else { + CpuInfoInHob = (CPU_INFO_IN_HOB *)(UINTN)CpuMpData->CpuInfoInHob; + for (Index = 0; Index < CpuMpData->CpuCount; Index++) { +-- +2.39.3 + diff --git a/edk2.spec b/edk2.spec index fca5b17..8526959 100644 --- a/edk2.spec +++ b/edk2.spec @@ -18,7 +18,7 @@ ExclusiveArch: x86_64 aarch64 Name: edk2 Version: %{GITDATE} -Release: 1%{?dist} +Release: 2%{?dist} Summary: UEFI firmware for 64-bit virtual machines License: BSD-2-Clause-Patent and OpenSSL and MIT URL: http://www.tianocore.org @@ -77,6 +77,30 @@ Patch0026: 0026-CryptoPkg-OpensslLib-list-RHEL8-specific-OpenSSL-fil.patch Patch0027: 0027-OvmfPkg-disable-dynamic-mmio-window-rhel-only.patch Patch0028: 0028-ArmPkg-Disable-EFI_MEMORY_ATTRIBUTE_PROTOCOL-RH-only.patch Patch0029: 0029-OvmfPkg-PciHotPlugInitDxe-Do-not-reserve-IO-ports-by.patch +# For RHEL-643 - add virtio serial support to armvirt +Patch30: edk2-ArmVirt-add-VirtioSerialDxe-to-ArmVirtQemu-builds.patch +# For RHEL-643 - add virtio serial support to armvirt +Patch31: edk2-ArmVirt-PlatformBootManagerLib-factor-out-IsVirtio.patch +# For RHEL-643 - add virtio serial support to armvirt +Patch32: edk2-ArmVirt-PlatformBootManagerLib-factor-out-IsVirtioPc.patch +# For RHEL-643 - add virtio serial support to armvirt +Patch33: edk2-ArmVirt-PlatformBootManagerLib-set-up-virtio-serial-.patch +# For RHEL-643 - add virtio serial support to armvirt +Patch34: edk2-OvmfPkg-VirtioSerialDxe-use-TPL_NOTIFY.patch +# For RHEL-643 - add virtio serial support to armvirt +Patch35: edk2-OvmfPkg-VirtioSerialDxe-Remove-noisy-debug-print-on-.patch +# For bz#2174749 - [edk2] re-enable dynamic mmio window +Patch36: edk2-OvmfPkg-PlatformInitLib-limit-phys-bits-to-46.patch +# For bz#2174749 - [edk2] re-enable dynamic mmio window +Patch37: edk2-Revert-OvmfPkg-disable-dynamic-mmio-window-rhel-only.patch +# For bz#2124143 - ovmf must consider max cpu count not boot cpu count for apic mode [rhel-9] +Patch38: edk2-UefiCpuPkg-MpInitLib-fix-apic-mode-for-cpu-hotplug.patch +# For RHEL-644 - enable gigabyte pages +Patch39: edk2-OvmfPkg-PlatformInitLib-check-PcdUse1GPageTable.patch +# For RHEL-644 - enable gigabyte pages +Patch40: edk2-OvmfPkg-OvmfPkgIa32X64-enable-1G-pages.patch +# For RHEL-644 - enable gigabyte pages +Patch41: edk2-OvmfPkg-MicrovmX64-enable-1G-pages.patch # python3-devel and libuuid-devel are required for building tools. @@ -396,6 +420,28 @@ install -m 0644 \ %changelog +* Mon Jul 10 2023 Miroslav Rezanina - 20230524-2 +- edk2-ArmVirt-add-VirtioSerialDxe-to-ArmVirtQemu-builds.patch [RHEL-643] +- edk2-ArmVirt-PlatformBootManagerLib-factor-out-IsVirtio.patch [RHEL-643] +- edk2-ArmVirt-PlatformBootManagerLib-factor-out-IsVirtioPc.patch [RHEL-643] +- edk2-ArmVirt-PlatformBootManagerLib-set-up-virtio-serial-.patch [RHEL-643] +- edk2-OvmfPkg-VirtioSerialDxe-use-TPL_NOTIFY.patch [RHEL-643] +- edk2-OvmfPkg-VirtioSerialDxe-Remove-noisy-debug-print-on-.patch [RHEL-643] +- edk2-OvmfPkg-PlatformInitLib-limit-phys-bits-to-46.patch [bz#2174749] +- edk2-Revert-OvmfPkg-disable-dynamic-mmio-window-rhel-only.patch [bz#2174749] +- edk2-UefiCpuPkg-MpInitLib-fix-apic-mode-for-cpu-hotplug.patch [bz#2124143] +- edk2-OvmfPkg-PlatformInitLib-check-PcdUse1GPageTable.patch [RHEL-644] +- edk2-OvmfPkg-OvmfPkgIa32X64-enable-1G-pages.patch [RHEL-644] +- edk2-OvmfPkg-MicrovmX64-enable-1G-pages.patch [RHEL-644] +- Resolves: RHEL-643 + (add virtio serial support to armvirt) +- Resolves: bz#2174749 + ([edk2] re-enable dynamic mmio window) +- Resolves: bz#2124143 + (ovmf must consider max cpu count not boot cpu count for apic mode [rhel-9]) +- Resolves: RHEL-644 + (enable gigabyte pages) + * Tue Jun 27 2023 Oliver Steffen - 20230524-1 - Rebase to edk2-stable202305 tag [RHEL-585] Resolves: RHEL-585