MdeModulePkg/Capsule: Remove RT restriction in UpdateCapsule service.

Current UpdateCapsule service will reject all non-reset capsule images and
return EFI_OUT_OF_RESOURCE if the system is at runtime. This will block a
platform CapsuleLib from implementing ProcessCapsuleImage() with runtime
capsule processing capability.

This patch removes this restriction. The change is controled by a feature
PCD PcdSupportProcessCapsuleAtRuntime, and the default value is FALSE
which means not enable this feature.

BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=2501

Cc: Hao A Wu <hao.a.wu@intel.com>
Cc: Liming Gao <liming.gao@intel.com>
Reviewed-by: Liming Gao <liming.gao@intel.com>
Signed-off-by: Siyuan Fu <siyuan.fu@intel.com>
This commit is contained in:
Siyuan Fu 2020-02-07 14:35:01 +08:00 committed by mergify[bot]
parent 01712e6508
commit 1333d8c8d3
4 changed files with 20 additions and 6 deletions

View File

@ -4,7 +4,7 @@
# and libraries instances, which are used for those modules. # and libraries instances, which are used for those modules.
# #
# Copyright (c) 2019, NVIDIA CORPORATION. All rights reserved. # Copyright (c) 2019, NVIDIA CORPORATION. All rights reserved.
# Copyright (c) 2007 - 2019, Intel Corporation. All rights reserved.<BR> # Copyright (c) 2007 - 2020, Intel Corporation. All rights reserved.<BR>
# Copyright (c) 2016, Linaro Ltd. All rights reserved.<BR> # Copyright (c) 2016, Linaro Ltd. All rights reserved.<BR>
# (C) Copyright 2016 - 2019 Hewlett Packard Enterprise Development LP<BR> # (C) Copyright 2016 - 2019 Hewlett Packard Enterprise Development LP<BR>
# Copyright (c) 2017, AMD Incorporated. All rights reserved.<BR> # Copyright (c) 2017, AMD Incorporated. All rights reserved.<BR>
@ -870,6 +870,12 @@
# @Prompt Degrade 64-bit PCI MMIO BARs for legacy BIOS option ROMs # @Prompt Degrade 64-bit PCI MMIO BARs for legacy BIOS option ROMs
gEfiMdeModulePkgTokenSpaceGuid.PcdPciDegradeResourceForOptionRom|TRUE|BOOLEAN|0x0001003a gEfiMdeModulePkgTokenSpaceGuid.PcdPciDegradeResourceForOptionRom|TRUE|BOOLEAN|0x0001003a
## Indicates if the platform can support process non-reset capsule image at runtime.<BR><BR>
# TRUE - Supports process non-reset capsule image at runtime.<BR>
# FALSE - Does not support process non-reset capsule image at runtime.<BR>
# @Prompt Enable process non-reset capsule image at runtime.
gEfiMdeModulePkgTokenSpaceGuid.PcdSupportProcessCapsuleAtRuntime|FALSE|BOOLEAN|0x00010079
[PcdsFeatureFlag.IA32, PcdsFeatureFlag.ARM, PcdsFeatureFlag.AARCH64] [PcdsFeatureFlag.IA32, PcdsFeatureFlag.ARM, PcdsFeatureFlag.AARCH64]
gEfiMdeModulePkgTokenSpaceGuid.PcdPciDegradeResourceForOptionRom|FALSE|BOOLEAN|0x0001003a gEfiMdeModulePkgTokenSpaceGuid.PcdPciDegradeResourceForOptionRom|FALSE|BOOLEAN|0x0001003a

View File

@ -4,7 +4,7 @@
// It also provides the definitions(including PPIs/PROTOCOLs/GUIDs and library classes) // It also provides the definitions(including PPIs/PROTOCOLs/GUIDs and library classes)
// and libraries instances, which are used for those modules. // and libraries instances, which are used for those modules.
// //
// Copyright (c) 2007 - 2019, Intel Corporation. All rights reserved.<BR> // Copyright (c) 2007 - 2020, Intel Corporation. All rights reserved.<BR>
// //
// SPDX-License-Identifier: BSD-2-Clause-Patent // SPDX-License-Identifier: BSD-2-Clause-Patent
// //
@ -1009,6 +1009,13 @@
"TRUE - All PCI MMIO BARs of a device will be located below 4 GB if it has an option ROM.<BR>" "TRUE - All PCI MMIO BARs of a device will be located below 4 GB if it has an option ROM.<BR>"
"FALSE - PCI MMIO BARs of a device may be located above 4 GB even if it has an option ROM.<BR>" "FALSE - PCI MMIO BARs of a device may be located above 4 GB even if it has an option ROM.<BR>"
#string STR_gEfiMdeModulePkgTokenSpaceGuid_PcdSupportProcessCapsuleAtRuntime_PROMPT #language en-US "Enable process non-reset capsule image at runtime."
#string STR_gEfiMdeModulePkgTokenSpaceGuid_PcdSupportProcessCapsuleAtRuntime_HELP #language en-US "Indicates if the platform can support process non-reset capsule image at runtime.<BR><BR>\n"
"TRUE - Supports process non-reset capsule image at runtime.<BR>\n"
"FALSE - Does not support process non-reset capsule image at runtime.<BR>"
#string STR_gEfiMdeModulePkgTokenSpaceGuid_PcdStatusCodeSubClassCapsule_PROMPT #language en-US "Status Code for Capsule subclass definitions" #string STR_gEfiMdeModulePkgTokenSpaceGuid_PcdStatusCodeSubClassCapsule_PROMPT #language en-US "Status Code for Capsule subclass definitions"
#string STR_gEfiMdeModulePkgTokenSpaceGuid_PcdStatusCodeSubClassCapsule_HELP #language en-US "Status Code for Capsule subclass definitions.<BR><BR>\n" #string STR_gEfiMdeModulePkgTokenSpaceGuid_PcdStatusCodeSubClassCapsule_HELP #language en-US "Status Code for Capsule subclass definitions.<BR><BR>\n"

View File

@ -4,7 +4,7 @@
# It installs the Capsule Architectural Protocol defined in PI1.0a to signify # It installs the Capsule Architectural Protocol defined in PI1.0a to signify
# the capsule runtime services are ready. # the capsule runtime services are ready.
# #
# Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR> # Copyright (c) 2006 - 2020, Intel Corporation. All rights reserved.<BR>
# SPDX-License-Identifier: BSD-2-Clause-Patent # SPDX-License-Identifier: BSD-2-Clause-Patent
# #
## ##
@ -82,7 +82,8 @@
gEdkiiVariableLockProtocolGuid gEdkiiVariableLockProtocolGuid
[FeaturePcd] [FeaturePcd]
gEfiMdeModulePkgTokenSpaceGuid.PcdSupportUpdateCapsuleReset ## CONSUMES gEfiMdeModulePkgTokenSpaceGuid.PcdSupportUpdateCapsuleReset ## CONSUMES
gEfiMdeModulePkgTokenSpaceGuid.PcdSupportProcessCapsuleAtRuntime ## CONSUMES
[FeaturePcd.X64] [FeaturePcd.X64]
gEfiMdeModulePkgTokenSpaceGuid.PcdDxeIplSwitchToLongMode ## CONSUMES gEfiMdeModulePkgTokenSpaceGuid.PcdDxeIplSwitchToLongMode ## CONSUMES

View File

@ -4,7 +4,7 @@
It installs the Capsule Architectural Protocol defined in PI1.0a to signify It installs the Capsule Architectural Protocol defined in PI1.0a to signify
the capsule runtime services are ready. the capsule runtime services are ready.
Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR> Copyright (c) 2006 - 2020, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent SPDX-License-Identifier: BSD-2-Clause-Patent
**/ **/
@ -138,7 +138,7 @@ UpdateCapsule (
// Platform specific update for the non-reset capsule image. // Platform specific update for the non-reset capsule image.
// //
if ((CapsuleHeader->Flags & CAPSULE_FLAGS_PERSIST_ACROSS_RESET) == 0) { if ((CapsuleHeader->Flags & CAPSULE_FLAGS_PERSIST_ACROSS_RESET) == 0) {
if (EfiAtRuntime ()) { if (EfiAtRuntime () && !FeaturePcdGet (PcdSupportProcessCapsuleAtRuntime)) {
Status = EFI_OUT_OF_RESOURCES; Status = EFI_OUT_OF_RESOURCES;
} else { } else {
Status = ProcessCapsuleImage(CapsuleHeader); Status = ProcessCapsuleImage(CapsuleHeader);