UefiCpuPkg/SecCore: Support EFI_PEI_CORE_FV_LOCATION_PPI
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=1524 EFI_PEI_CORE_FV_LOCATION_PPI may be passed by platform when PeiCore not in BFV so SecCore has to search PeiCore either from the FV location provided by EFI_PEI_CORE_FV_LOCATION_PPI or from BFV. Test: Verified on internal platform and booting successfully. Cc: Eric Dong <eric.dong@intel.com> Cc: Ray Ni <ray.ni@intel.com> Cc: Laszlo Ersek <lersek@redhat.com> Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Chasel Chiu <chasel.chiu@intel.com> Reviewed-by: Ray Ni <ray.ni@intel.com> Reviewed-by: Star Zeng <star.zeng@intel.com>
This commit is contained in:
parent
9b23c7ba9c
commit
373c2c5b88
|
@ -7,7 +7,7 @@
|
||||||
# protected mode, setup flat memory model, enable temporary memory and
|
# protected mode, setup flat memory model, enable temporary memory and
|
||||||
# call into SecStartup().
|
# call into SecStartup().
|
||||||
#
|
#
|
||||||
# Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
|
# Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR>
|
||||||
# This program and the accompanying materials
|
# This program and the accompanying materials
|
||||||
# are licensed and made available under the terms and conditions of the BSD License
|
# are licensed and made available under the terms and conditions of the BSD License
|
||||||
# which accompanies this distribution. The full text of the license may be found at
|
# which accompanies this distribution. The full text of the license may be found at
|
||||||
|
@ -73,6 +73,7 @@
|
||||||
## NOTIFY
|
## NOTIFY
|
||||||
## SOMETIMES_CONSUMES
|
## SOMETIMES_CONSUMES
|
||||||
gPeiSecPerformancePpiGuid
|
gPeiSecPerformancePpiGuid
|
||||||
|
gEfiPeiCoreFvLocationPpiGuid
|
||||||
|
|
||||||
[Guids]
|
[Guids]
|
||||||
## SOMETIMES_PRODUCES ## HOB
|
## SOMETIMES_PRODUCES ## HOB
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/** @file
|
/** @file
|
||||||
C functions in SEC
|
C functions in SEC
|
||||||
|
|
||||||
Copyright (c) 2008 - 2018, Intel Corporation. All rights reserved.<BR>
|
Copyright (c) 2008 - 2019, Intel Corporation. All rights reserved.<BR>
|
||||||
This program and the accompanying materials
|
This program and the accompanying materials
|
||||||
are licensed and made available under the terms and conditions of the BSD License
|
are licensed and made available under the terms and conditions of the BSD License
|
||||||
which accompanies this distribution. The full text of the license may be found at
|
which accompanies this distribution. The full text of the license may be found at
|
||||||
|
@ -232,22 +232,45 @@ SecStartupPhase2(
|
||||||
EFI_PEI_PPI_DESCRIPTOR *AllSecPpiList;
|
EFI_PEI_PPI_DESCRIPTOR *AllSecPpiList;
|
||||||
EFI_PEI_CORE_ENTRY_POINT PeiCoreEntryPoint;
|
EFI_PEI_CORE_ENTRY_POINT PeiCoreEntryPoint;
|
||||||
|
|
||||||
|
PeiCoreEntryPoint = NULL;
|
||||||
SecCoreData = (EFI_SEC_PEI_HAND_OFF *) Context;
|
SecCoreData = (EFI_SEC_PEI_HAND_OFF *) Context;
|
||||||
AllSecPpiList = (EFI_PEI_PPI_DESCRIPTOR *) SecCoreData->PeiTemporaryRamBase;
|
AllSecPpiList = (EFI_PEI_PPI_DESCRIPTOR *) SecCoreData->PeiTemporaryRamBase;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Find Pei Core entry point. It will report SEC and Pei Core debug information if remote debug
|
// Find Pei Core entry point. It will report SEC and Pei Core debug information if remote debug
|
||||||
// is enabled.
|
// is enabled.
|
||||||
//
|
//
|
||||||
FindAndReportEntryPoints ((EFI_FIRMWARE_VOLUME_HEADER *) SecCoreData->BootFirmwareVolumeBase, &PeiCoreEntryPoint);
|
PpiList = SecPlatformMain (SecCoreData);
|
||||||
if (PeiCoreEntryPoint == NULL)
|
if (PpiList != NULL) {
|
||||||
{
|
for (Index = 0;
|
||||||
|
(PpiList[Index].Flags & EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST) != EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST;
|
||||||
|
Index++) {
|
||||||
|
if (CompareGuid (PpiList[Index].Guid, &gEfiPeiCoreFvLocationPpiGuid) && (((EFI_PEI_CORE_FV_LOCATION_PPI *) PpiList[Index].Ppi)->PeiCoreFvLocation != 0)) {
|
||||||
|
FindAndReportEntryPoints ((EFI_FIRMWARE_VOLUME_HEADER *) ((EFI_PEI_CORE_FV_LOCATION_PPI *) PpiList[Index].Ppi)->PeiCoreFvLocation, &PeiCoreEntryPoint);
|
||||||
|
if (PeiCoreEntryPoint != NULL) {
|
||||||
|
break;
|
||||||
|
} else {
|
||||||
|
//
|
||||||
|
// PeiCore not found
|
||||||
|
//
|
||||||
CpuDeadLoop ();
|
CpuDeadLoop ();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//
|
||||||
|
// If EFI_PEI_CORE_FV_LOCATION_PPI not found, try to locate PeiCore from BFV.
|
||||||
|
//
|
||||||
|
if (PeiCoreEntryPoint == NULL) {
|
||||||
|
FindAndReportEntryPoints ((EFI_FIRMWARE_VOLUME_HEADER *) SecCoreData->BootFirmwareVolumeBase, &PeiCoreEntryPoint);
|
||||||
|
if (PeiCoreEntryPoint == NULL) {
|
||||||
|
CpuDeadLoop ();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Perform platform specific initialization before entering PeiCore.
|
// Perform platform specific initialization before entering PeiCore.
|
||||||
//
|
//
|
||||||
PpiList = SecPlatformMain (SecCoreData);
|
|
||||||
if (PpiList != NULL) {
|
if (PpiList != NULL) {
|
||||||
//
|
//
|
||||||
// Remove the terminal flag from the terminal PPI
|
// Remove the terminal flag from the terminal PPI
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/** @file
|
/** @file
|
||||||
Master header file for SecCore.
|
Master header file for SecCore.
|
||||||
|
|
||||||
Copyright (c) 2008 - 2018, Intel Corporation. All rights reserved.<BR>
|
Copyright (c) 2008 - 2019, Intel Corporation. All rights reserved.<BR>
|
||||||
This program and the accompanying materials
|
This program and the accompanying materials
|
||||||
are licensed and made available under the terms and conditions of the BSD License
|
are licensed and made available under the terms and conditions of the BSD License
|
||||||
which accompanies this distribution. The full text of the license may be found at
|
which accompanies this distribution. The full text of the license may be found at
|
||||||
|
@ -20,6 +20,7 @@
|
||||||
#include <Ppi/SecPlatformInformation2.h>
|
#include <Ppi/SecPlatformInformation2.h>
|
||||||
#include <Ppi/TemporaryRamDone.h>
|
#include <Ppi/TemporaryRamDone.h>
|
||||||
#include <Ppi/SecPerformance.h>
|
#include <Ppi/SecPerformance.h>
|
||||||
|
#include <Ppi/PeiCoreFvLocation.h>
|
||||||
|
|
||||||
#include <Guid/FirmwarePerformance.h>
|
#include <Guid/FirmwarePerformance.h>
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue