From: Lin, Gary (HPS OE-Linux) Date: Tue, 31 Aug 2021 01:31:12 +0000 (+0800) Subject: OvmfPkg/OvmfXen: set PcdAcpiS3Enable at initialization X-Git-Tag: edk2-stable202202~524 X-Git-Url: https://git.proxmox.com/?a=commitdiff_plain;h=cb0d24637dfdd869618b9635dfb8e3b0746393a6;p=mirror_edk2.git OvmfPkg/OvmfXen: set PcdAcpiS3Enable at initialization There are several functions in OvmfPkg/Library using QemuFwCfgS3Enabled() to detect the S3 support status. However, in MdeModulePkg, PcdAcpiS3Enable is used to check S3 support. Since InitializeXenPlatform() didn't set PcdAcpiS3Enable as InitializePlatform() did, this made the inconsistency between drivers/functions. For example, S3SaveStateDxe checked PcdAcpiS3Enable and skipped S3BootScript because the default value is FALSE. On the other hand, PlatformBootManagerBeforeConsole() from OvmfPkg/Library called QemuFwCfgS3Enabled() and found it returned TRUE, so it invoked SaveS3BootScript(). However, S3SaveStateDxe skipped S3BootScript, so SaveS3BootScript() asserted due to EFI_NOT_FOUND. This issue mainly affects "HVM Direct Kernel Boot". When used, "fw_cfg" is enabled in QEMU and QemuFwCfgS3Enabled() returns true in that case. Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=3573 Signed-off-by: Gary Lin Reviewed-by: Anthony PERARD Reviewed-by: Gerd Hoffmann Reviewed-by: Jiewen Yao Tested-by: Jim Fehlig --- diff --git a/OvmfPkg/XenPlatformPei/Platform.c b/OvmfPkg/XenPlatformPei/Platform.c index a811e72ee3..e60478fdb4 100644 --- a/OvmfPkg/XenPlatformPei/Platform.c +++ b/OvmfPkg/XenPlatformPei/Platform.c @@ -26,6 +26,7 @@ #include #include #include +#include #include #include #include @@ -423,6 +424,8 @@ InitializeXenPlatform ( IN CONST EFI_PEI_SERVICES **PeiServices ) { + EFI_STATUS Status; + DEBUG ((DEBUG_INFO, "Platform PEIM Loaded\n")); DebugDumpCmos (); @@ -433,6 +436,16 @@ InitializeXenPlatform ( CpuDeadLoop (); } + // + // This S3 conditional test is mainly for HVM Direct Kernel Boot since + // QEMU fwcfg isn't really supported other than that. + // + if (QemuFwCfgS3Enabled ()) { + DEBUG ((DEBUG_INFO, "S3 support was detected on QEMU\n")); + Status = PcdSetBoolS (PcdAcpiS3Enable, TRUE); + ASSERT_EFI_ERROR (Status); + } + XenConnect (); BootModeInitialization (); diff --git a/OvmfPkg/XenPlatformPei/XenPlatformPei.inf b/OvmfPkg/XenPlatformPei/XenPlatformPei.inf index 597cb6fcd7..20c27ff34b 100644 --- a/OvmfPkg/XenPlatformPei/XenPlatformPei.inf +++ b/OvmfPkg/XenPlatformPei/XenPlatformPei.inf @@ -57,6 +57,7 @@ ResourcePublicationLib PeiServicesLib PeimEntryPoint + QemuFwCfgS3Lib MtrrLib MemEncryptSevLib PcdLib @@ -79,6 +80,7 @@ gUefiOvmfPkgTokenSpaceGuid.PcdPciMmio64Base gUefiOvmfPkgTokenSpaceGuid.PcdPciMmio64Size gUefiOvmfPkgTokenSpaceGuid.PcdQ35TsegMbytes + gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiS3Enable gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareSize gEfiMdeModulePkgTokenSpaceGuid.PcdEmuVariableNvStoreReserved gEfiMdeModulePkgTokenSpaceGuid.PcdDxeIplSwitchToLongMode