MdeModulePkg/DxeIpl: Support Capsule On Disk.

REF: https://github.com/tianocore/tianocore.github.io/wiki/
UEFI-Capsule-on-Disk-Introducation

If Capsule On Disk mode, call Capsule On Disk Load PPI to load
capsules. When it fails, still goes to Firmware Update boot path.
BDS will clear corresponding indicator and reboot later on.

Cc: Jian J Wang <jian.j.wang@intel.com>
Cc: Hao A Wu <hao.a.wu@intel.com>
Cc: Chao B Zhang <chao.b.zhang@intel.com>
Signed-off-by: Wei6 Xu <wei6.xu@intel.com>
Reviewed-by: Chao B Zhang <chao.b.zhang@intel.com>
Acked-by: Hao A Wu <hao.a.wu@intel.com>
This commit is contained in:
Wei6 Xu 2019-06-24 14:50:14 +08:00 committed by Zhang, Chao B
parent 4ef0b0ac8e
commit e761d18f01
3 changed files with 42 additions and 11 deletions

View File

@ -2,7 +2,7 @@
Master header file for DxeIpl PEIM. All source files in this module should Master header file for DxeIpl PEIM. All source files in this module should
include this file for common definitions. include this file for common definitions.
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 SPDX-License-Identifier: BSD-2-Clause-Patent
**/ **/
@ -21,6 +21,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#include <Ppi/LoadFile.h> #include <Ppi/LoadFile.h>
#include <Ppi/S3Resume2.h> #include <Ppi/S3Resume2.h>
#include <Ppi/RecoveryModule.h> #include <Ppi/RecoveryModule.h>
#include <Ppi/CapsuleOnDisk.h>
#include <Ppi/VectorHandoffInfo.h> #include <Ppi/VectorHandoffInfo.h>
#include <Guid/MemoryTypeInformation.h> #include <Guid/MemoryTypeInformation.h>

View File

@ -5,7 +5,7 @@
# PPI to discover and dispatch the DXE Foundation and components that are # PPI to discover and dispatch the DXE Foundation and components that are
# needed to run the DXE Foundation. # needed to run the DXE Foundation.
# #
# Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR> # Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR>
# Copyright (c) 2017, AMD Incorporated. All rights reserved.<BR> # Copyright (c) 2017, AMD Incorporated. All rights reserved.<BR>
# #
# SPDX-License-Identifier: BSD-2-Clause-Patent # SPDX-License-Identifier: BSD-2-Clause-Patent
@ -76,17 +76,19 @@
ArmMmuLib ArmMmuLib
[Ppis] [Ppis]
gEfiDxeIplPpiGuid ## PRODUCES gEfiDxeIplPpiGuid ## PRODUCES
gEfiPeiDecompressPpiGuid ## PRODUCES gEfiPeiDecompressPpiGuid ## PRODUCES
gEfiEndOfPeiSignalPpiGuid ## SOMETIMES_PRODUCES # Not produced on S3 boot path gEfiEndOfPeiSignalPpiGuid ## SOMETIMES_PRODUCES # Not produced on S3 boot path
gEfiPeiReadOnlyVariable2PpiGuid ## SOMETIMES_CONSUMES gEfiPeiReadOnlyVariable2PpiGuid ## SOMETIMES_CONSUMES
gEfiPeiLoadFilePpiGuid ## SOMETIMES_CONSUMES gEfiPeiLoadFilePpiGuid ## SOMETIMES_CONSUMES
gEfiPeiS3Resume2PpiGuid ## SOMETIMES_CONSUMES # Consumed on S3 boot path gEfiPeiS3Resume2PpiGuid ## SOMETIMES_CONSUMES # Consumed on S3 boot path
gEfiPeiRecoveryModulePpiGuid ## SOMETIMES_CONSUMES # Consumed on recovery boot path gEfiPeiRecoveryModulePpiGuid ## SOMETIMES_CONSUMES # Consumed on recovery boot path
## SOMETIMES_CONSUMES ## SOMETIMES_CONSUMES
## UNDEFINED # HOB ## UNDEFINED # HOB
gEfiVectorHandoffInfoPpiGuid gEfiVectorHandoffInfoPpiGuid
gEfiPeiMemoryDiscoveredPpiGuid ## SOMETIMES_CONSUMES gEfiPeiMemoryDiscoveredPpiGuid ## SOMETIMES_CONSUMES
gEdkiiPeiBootInCapsuleOnDiskModePpiGuid ## SOMETIMES_CONSUMES
gEdkiiPeiCapsuleOnDiskPpiGuid ## SOMETIMES_CONSUMES # Consumed on firmware update boot path
[Guids] [Guids]
## SOMETIMES_CONSUMES ## Variable:L"MemoryTypeInformation" ## SOMETIMES_CONSUMES ## Variable:L"MemoryTypeInformation"

View File

@ -3,7 +3,7 @@
Responsibility of this module is to load the DXE Core from a Firmware Volume. Responsibility of this module is to load the DXE Core from a Firmware Volume.
Copyright (c) 2016 HP Development Company, L.P. Copyright (c) 2016 HP Development Company, L.P.
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 SPDX-License-Identifier: BSD-2-Clause-Patent
**/ **/
@ -265,7 +265,9 @@ DxeLoadCore (
UINTN DataSize; UINTN DataSize;
EFI_PEI_S3_RESUME2_PPI *S3Resume; EFI_PEI_S3_RESUME2_PPI *S3Resume;
EFI_PEI_RECOVERY_MODULE_PPI *PeiRecovery; EFI_PEI_RECOVERY_MODULE_PPI *PeiRecovery;
EDKII_PEI_CAPSULE_ON_DISK_PPI *PeiCapsuleOnDisk;
EFI_MEMORY_TYPE_INFORMATION MemoryData[EfiMaxMemoryType + 1]; EFI_MEMORY_TYPE_INFORMATION MemoryData[EfiMaxMemoryType + 1];
VOID *CapsuleOnDiskModePpi;
// //
// if in S3 Resume, restore configure // if in S3 Resume, restore configure
@ -330,6 +332,32 @@ DxeLoadCore (
// //
// Now should have a HOB with the DXE core // Now should have a HOB with the DXE core
// //
} else if (BootMode == BOOT_ON_FLASH_UPDATE) {
//
// If Capsule On Disk mode, call storage stack to read Capsule Relocation file
// IoMmmu is highly recommmended to enable before reading
//
Status = PeiServicesLocatePpi (
&gEdkiiPeiBootInCapsuleOnDiskModePpiGuid,
0,
NULL,
&CapsuleOnDiskModePpi
);
if (!EFI_ERROR(Status)) {
Status = PeiServicesLocatePpi (
&gEdkiiPeiCapsuleOnDiskPpiGuid,
0,
NULL,
(VOID **) &PeiCapsuleOnDisk
);
//
// Whether failed, still goes to Firmware Update boot path. BDS will clear corresponding indicator and reboot later on
//
if (!EFI_ERROR (Status)) {
Status = PeiCapsuleOnDisk->LoadCapsuleOnDisk (PeiServices, PeiCapsuleOnDisk);
}
}
} }
if (GetFirstGuidHob ((CONST EFI_GUID *)&gEfiMemoryTypeInformationGuid) == NULL) { if (GetFirstGuidHob ((CONST EFI_GUID *)&gEfiMemoryTypeInformationGuid) == NULL) {