Skip to content

Commit

Permalink
MdeModulePkg: Enable/Disable S3BootScript dynamically.
Browse files Browse the repository at this point in the history
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2212

In binary model the same binary may have to support both
S3 enabled and disabled scenarios, however not all DXE
drivers linking PiDxeS3BootScriptLib can return error to
invoke library DESTRUCTOR for releasing resource.

To support this usage model below PCD is used to skip
S3BootScript functions when PCD set to FALSE:
  gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiS3Enable

Test: Verified on internal platform and S3BootScript
      functions can be skipped by PCD during boot time.

Cc: Hao A Wu <hao.a.wu@intel.com>
Cc: Eric Dong <eric.dong@intel.com>
Cc: Nate DeSimone <nathaniel.l.desimone@intel.com>
Cc: Liming Gao <liming.gao@intel.com>
Cc: Laszlo Ersek <lersek@redhat.com>
Signed-off-by: Chasel Chiu <chasel.chiu@intel.com>
Reviewed-by: Nate DeSimone <nathaniel.l.desimone@intel.com>
Reviewed-by: Eric Dong <eric.dong@intel.com>
Acked-by: Laszlo Ersek <lersek@redhat.com>
  • Loading branch information
ChaselChiu committed Oct 1, 2019
1 parent f835e1d commit ed9db1b
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 3 deletions.
17 changes: 16 additions & 1 deletion MdeModulePkg/Library/PiDxeS3BootScriptLib/BootScriptSave.c
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/** @file
Save the S3 data to S3 boot script.
Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.<BR>
Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
Expand Down Expand Up @@ -124,6 +124,7 @@ VOID *mRegistrationSmmReadyToLock = NULL;
BOOLEAN mS3BootScriptTableAllocated = FALSE;
BOOLEAN mS3BootScriptTableSmmAllocated = FALSE;
EFI_SMM_SYSTEM_TABLE2 *mBootScriptSmst = NULL;
BOOLEAN mAcpiS3Enable = TRUE;

/**
This is an internal function to add a terminate node the entry, recalculate the table
Expand Down Expand Up @@ -436,6 +437,12 @@ S3BootScriptLibInitialize (
BOOLEAN InSmm;
EFI_PHYSICAL_ADDRESS Buffer;

if (!PcdGetBool (PcdAcpiS3Enable)) {
mAcpiS3Enable = FALSE;
DEBUG ((DEBUG_INFO, "%a: Skip S3BootScript because ACPI S3 disabled.\n", gEfiCallerBaseName));
return RETURN_SUCCESS;
}

S3TablePtr = (SCRIPT_TABLE_PRIVATE_DATA*)(UINTN)PcdGet64(PcdS3BootScriptTablePrivateDataPtr);
//
// The Boot script private data is not be initialized. create it
Expand Down Expand Up @@ -562,6 +569,10 @@ S3BootScriptLibDeinitialize (
{
EFI_STATUS Status;

if (!mAcpiS3Enable) {
return RETURN_SUCCESS;
}

DEBUG ((EFI_D_INFO, "%a() in %a module\n", __FUNCTION__, gEfiCallerBaseName));

if (mEventDxeSmmReadyToLock != NULL) {
Expand Down Expand Up @@ -810,6 +821,10 @@ S3BootScriptGetEntryAddAddress (
{
UINT8* NewEntryPtr;

if (!mAcpiS3Enable) {
return NULL;
}

if (mS3BootScriptTablePtr->SmmLocked) {
//
// We need check InSmm, because after SmmReadyToLock, only SMM driver is allowed to write boot script.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
## @file
# DXE S3 boot script Library.
#
# Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
# Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR>
#
# SPDX-License-Identifier: BSD-2-Clause-Patent
#
Expand Down Expand Up @@ -65,4 +65,4 @@
## SOMETIMES_PRODUCES
gEfiMdeModulePkgTokenSpaceGuid.PcdS3BootScriptTablePrivateSmmDataPtr
gEfiMdeModulePkgTokenSpaceGuid.PcdS3BootScriptRuntimeTableReservePageNumber ## CONSUMES

gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiS3Enable ## CONSUMES

0 comments on commit ed9db1b

Please sign in to comment.