mirror of https://github.com/acidanthera/audk.git
IntelFsp2Pkg: Added changes to enable FPDT performance measurements
IntelFsp2Pkg: 1.Defined performance measure mask to mask the Perf id (Bits 63:56) of the Perf Data from FSP Global data. 2.Replaced the hard coded perf ids to use the standard defines from FspStatuscode.h 3.Add the PerfData form Fsp Global data ( for TempRaminit entry, TempramInit exit, memoryinit entry) to FPDT entries IntelFsp2WrapperPkg: Moved the code to add the FSP FPDT records and wrapper FPDT records from ReadytoBoot event to EndofFirmware event Cc: Maurice Ma <maurice.ma@intel.com> Cc: Jiewen Yao <jiewen.yao@intel.com> Cc: Giri P Mudusuru <giri.p.mudusuru@intel.com> Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Satya Yarlagadda <satya.p.yarlagadda@intel.com> Reviewed-by: Maurice Ma <maurice.ma@intel.com> Reviewed-by: Jiewen Yao <jiewen.yao@intel.com>
This commit is contained in:
parent
0a18956d54
commit
19d29d358f
|
@ -38,6 +38,7 @@ typedef struct {
|
||||||
|
|
||||||
#define FSP_GLOBAL_DATA_SIGNATURE SIGNATURE_32 ('F', 'S', 'P', 'D')
|
#define FSP_GLOBAL_DATA_SIGNATURE SIGNATURE_32 ('F', 'S', 'P', 'D')
|
||||||
#define FSP_PERFORMANCE_DATA_SIGNATURE SIGNATURE_32 ('P', 'E', 'R', 'F')
|
#define FSP_PERFORMANCE_DATA_SIGNATURE SIGNATURE_32 ('P', 'E', 'R', 'F')
|
||||||
|
#define FSP_PERFORMANCE_DATA_TIMER_MASK 0xFFFFFFFFFFFFFF
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
UINT32 Signature;
|
UINT32 Signature;
|
||||||
|
|
|
@ -44,6 +44,10 @@
|
||||||
[Guids]
|
[Guids]
|
||||||
gFspPerformanceDataGuid ## CONSUMES ## GUID
|
gFspPerformanceDataGuid ## CONSUMES ## GUID
|
||||||
gFspEventEndOfFirmwareGuid ## PRODUCES ## GUID
|
gFspEventEndOfFirmwareGuid ## PRODUCES ## GUID
|
||||||
|
gEfiEventReadyToBootGuid ## CONSUMES ## Event
|
||||||
|
|
||||||
|
[Protocols]
|
||||||
|
gEfiPciEnumerationCompleteProtocolGuid ## CONSUMES
|
||||||
|
|
||||||
[FixedPcd]
|
[FixedPcd]
|
||||||
gIntelFsp2PkgTokenSpaceGuid.PcdFspMaxPatchEntry ## CONSUMES
|
gIntelFsp2PkgTokenSpaceGuid.PcdFspMaxPatchEntry ## CONSUMES
|
||||||
|
|
|
@ -121,15 +121,12 @@ FspSiliconInitDone (
|
||||||
//
|
//
|
||||||
SetFspMeasurePoint (FSP_PERF_ID_API_FSP_SILICON_INIT_EXIT);
|
SetFspMeasurePoint (FSP_PERF_ID_API_FSP_SILICON_INIT_EXIT);
|
||||||
DEBUG ((DEBUG_INFO | DEBUG_INIT, "FspSiliconInitApi() - End\n"));
|
DEBUG ((DEBUG_INFO | DEBUG_INIT, "FspSiliconInitApi() - End\n"));
|
||||||
|
PERF_END_EX (&gFspPerformanceDataGuid, "EventRec", NULL, 0, FSP_STATUS_CODE_SILICON_INIT | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_EXIT);
|
||||||
PERF_END_EX (&gFspPerformanceDataGuid, "EventRec", NULL, 0, 0x907F);
|
|
||||||
|
|
||||||
REPORT_STATUS_CODE (EFI_PROGRESS_CODE, FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_EXIT);
|
REPORT_STATUS_CODE (EFI_PROGRESS_CODE, FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_EXIT);
|
||||||
SetFspApiReturnStatus (EFI_SUCCESS);
|
SetFspApiReturnStatus (EFI_SUCCESS);
|
||||||
|
|
||||||
Pei2LoaderSwitchStack();
|
Pei2LoaderSwitchStack();
|
||||||
|
|
||||||
PERF_START_EX (&gFspPerformanceDataGuid, "EventRec", NULL, 0, 0x6000);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -143,6 +140,7 @@ FspMemoryInitDone (
|
||||||
IN OUT VOID **HobListPtr
|
IN OUT VOID **HobListPtr
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
FSP_GLOBAL_DATA *FspData;
|
||||||
//
|
//
|
||||||
// Calling use FspMemoryInit API
|
// Calling use FspMemoryInit API
|
||||||
// Update HOB and return the control directly
|
// Update HOB and return the control directly
|
||||||
|
@ -155,8 +153,13 @@ FspMemoryInitDone (
|
||||||
// This is the end of the FspMemoryInit API
|
// This is the end of the FspMemoryInit API
|
||||||
// Give control back to the boot loader
|
// Give control back to the boot loader
|
||||||
//
|
//
|
||||||
SetFspMeasurePoint (FSP_PERF_ID_API_FSP_MEMORY_INIT_EXIT);
|
|
||||||
DEBUG ((DEBUG_INFO | DEBUG_INIT, "FspMemoryInitApi() - End\n"));
|
DEBUG ((DEBUG_INFO | DEBUG_INIT, "FspMemoryInitApi() - End\n"));
|
||||||
|
SetFspMeasurePoint (FSP_PERF_ID_API_FSP_MEMORY_INIT_EXIT);
|
||||||
|
FspData = GetFspGlobalDataPointer ();
|
||||||
|
PERF_START_EX(&gFspPerformanceDataGuid, "EventRec", NULL, (FspData->PerfData[0] & FSP_PERFORMANCE_DATA_TIMER_MASK), FSP_STATUS_CODE_TEMP_RAM_INIT | FSP_STATUS_CODE_COMMON_CODE| FSP_STATUS_CODE_API_ENTRY);
|
||||||
|
PERF_END_EX(&gFspPerformanceDataGuid, "EventRec", NULL, (FspData->PerfData[1] & FSP_PERFORMANCE_DATA_TIMER_MASK), FSP_STATUS_CODE_TEMP_RAM_INIT | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_EXIT);
|
||||||
|
PERF_START_EX(&gFspPerformanceDataGuid, "EventRec", NULL, (FspData->PerfData[2] & FSP_PERFORMANCE_DATA_TIMER_MASK), FSP_STATUS_CODE_MEMORY_INIT | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_ENTRY);
|
||||||
|
PERF_END_EX(&gFspPerformanceDataGuid, "EventRec", NULL, 0, FSP_STATUS_CODE_MEMORY_INIT | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_EXIT);
|
||||||
REPORT_STATUS_CODE (EFI_PROGRESS_CODE, FSP_STATUS_CODE_MEMORY_INIT | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_EXIT);
|
REPORT_STATUS_CODE (EFI_PROGRESS_CODE, FSP_STATUS_CODE_MEMORY_INIT | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_EXIT);
|
||||||
SetFspApiReturnStatus (EFI_SUCCESS);
|
SetFspApiReturnStatus (EFI_SUCCESS);
|
||||||
Pei2LoaderSwitchStack ();
|
Pei2LoaderSwitchStack ();
|
||||||
|
@ -166,14 +169,16 @@ FspMemoryInitDone (
|
||||||
//
|
//
|
||||||
if (GetFspApiCallingIndex () == TempRamExitApiIndex) {
|
if (GetFspApiCallingIndex () == TempRamExitApiIndex) {
|
||||||
SetPhaseStatusCode (FSP_STATUS_CODE_TEMP_RAM_EXIT);
|
SetPhaseStatusCode (FSP_STATUS_CODE_TEMP_RAM_EXIT);
|
||||||
REPORT_STATUS_CODE (EFI_PROGRESS_CODE, FSP_STATUS_CODE_TEMP_RAM_EXIT | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_ENTRY);
|
|
||||||
SetFspMeasurePoint (FSP_PERF_ID_API_TEMP_RAM_EXIT_ENTRY);
|
SetFspMeasurePoint (FSP_PERF_ID_API_TEMP_RAM_EXIT_ENTRY);
|
||||||
|
PERF_START_EX(&gFspPerformanceDataGuid, "EventRec", NULL, 0, FSP_STATUS_CODE_TEMP_RAM_EXIT | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_ENTRY);
|
||||||
|
REPORT_STATUS_CODE (EFI_PROGRESS_CODE, FSP_STATUS_CODE_TEMP_RAM_EXIT | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_ENTRY);
|
||||||
DEBUG ((DEBUG_INFO | DEBUG_INIT, "TempRamExitApi() - Begin\n"));
|
DEBUG ((DEBUG_INFO | DEBUG_INIT, "TempRamExitApi() - Begin\n"));
|
||||||
} else {
|
} else {
|
||||||
SetFspMeasurePoint (FSP_PERF_ID_API_FSP_SILICON_INIT_ENTRY);
|
|
||||||
DEBUG ((DEBUG_INFO | DEBUG_INIT, "FspSiliconInitApi() - Begin\n"));
|
|
||||||
SetPhaseStatusCode (FSP_STATUS_CODE_SILICON_INIT);
|
SetPhaseStatusCode (FSP_STATUS_CODE_SILICON_INIT);
|
||||||
|
SetFspMeasurePoint (FSP_PERF_ID_API_FSP_SILICON_INIT_ENTRY);
|
||||||
|
PERF_START_EX(&gFspPerformanceDataGuid, "EventRec", NULL, 0, FSP_STATUS_CODE_SILICON_INIT | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_ENTRY);
|
||||||
REPORT_STATUS_CODE (EFI_PROGRESS_CODE, FSP_STATUS_CODE_SILICON_INIT | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_ENTRY);
|
REPORT_STATUS_CODE (EFI_PROGRESS_CODE, FSP_STATUS_CODE_SILICON_INIT | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_ENTRY);
|
||||||
|
DEBUG ((DEBUG_INFO | DEBUG_INIT, "FspSiliconInitApi() - Begin\n"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -192,16 +197,18 @@ FspTempRamExitDone (
|
||||||
// This is the end of the TempRamExit API
|
// This is the end of the TempRamExit API
|
||||||
// Give control back to the boot loader
|
// Give control back to the boot loader
|
||||||
//
|
//
|
||||||
SetFspMeasurePoint (FSP_PERF_ID_API_TEMP_RAM_EXIT_EXIT);
|
|
||||||
DEBUG ((DEBUG_INFO | DEBUG_INIT, "TempRamExitApi() - End\n"));
|
DEBUG ((DEBUG_INFO | DEBUG_INIT, "TempRamExitApi() - End\n"));
|
||||||
|
SetFspMeasurePoint (FSP_PERF_ID_API_TEMP_RAM_EXIT_EXIT);
|
||||||
|
PERF_END_EX(&gFspPerformanceDataGuid, "EventRec", NULL, 0, FSP_STATUS_CODE_TEMP_RAM_EXIT | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_EXIT);
|
||||||
REPORT_STATUS_CODE (EFI_PROGRESS_CODE, FSP_STATUS_CODE_TEMP_RAM_EXIT | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_EXIT);
|
REPORT_STATUS_CODE (EFI_PROGRESS_CODE, FSP_STATUS_CODE_TEMP_RAM_EXIT | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_EXIT);
|
||||||
SetFspApiReturnStatus (EFI_SUCCESS);
|
SetFspApiReturnStatus (EFI_SUCCESS);
|
||||||
Pei2LoaderSwitchStack ();
|
Pei2LoaderSwitchStack ();
|
||||||
|
|
||||||
SetPhaseStatusCode (FSP_STATUS_CODE_SILICON_INIT);
|
SetPhaseStatusCode (FSP_STATUS_CODE_SILICON_INIT);
|
||||||
SetFspMeasurePoint (FSP_PERF_ID_API_FSP_SILICON_INIT_ENTRY);
|
SetFspMeasurePoint (FSP_PERF_ID_API_FSP_SILICON_INIT_ENTRY);
|
||||||
DEBUG ((DEBUG_INFO | DEBUG_INIT, "SiliconInitApi() - Begin\n"));
|
PERF_START_EX(&gFspPerformanceDataGuid, "EventRec", NULL, 0, FSP_STATUS_CODE_SILICON_INIT | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_ENTRY);
|
||||||
REPORT_STATUS_CODE (EFI_PROGRESS_CODE, FSP_STATUS_CODE_SILICON_INIT | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_ENTRY);
|
REPORT_STATUS_CODE (EFI_PROGRESS_CODE, FSP_STATUS_CODE_SILICON_INIT | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_ENTRY);
|
||||||
|
DEBUG ((DEBUG_INFO | DEBUG_INIT, "SiliconInitApi() - Begin\n"));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -229,12 +236,15 @@ FspWaitForNotify (
|
||||||
|
|
||||||
if (NotificationCount == 0) {
|
if (NotificationCount == 0) {
|
||||||
SetPhaseStatusCode (FSP_STATUS_CODE_POST_PCIE_ENUM_NOTIFICATION);
|
SetPhaseStatusCode (FSP_STATUS_CODE_POST_PCIE_ENUM_NOTIFICATION);
|
||||||
|
PERF_START_EX (&gFspPerformanceDataGuid, "EventRec", NULL, 0, FSP_STATUS_CODE_POST_PCIE_ENUM_NOTIFICATION | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_ENTRY);
|
||||||
REPORT_STATUS_CODE (EFI_PROGRESS_CODE, FSP_STATUS_CODE_POST_PCIE_ENUM_NOTIFICATION | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_ENTRY);
|
REPORT_STATUS_CODE (EFI_PROGRESS_CODE, FSP_STATUS_CODE_POST_PCIE_ENUM_NOTIFICATION | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_ENTRY);
|
||||||
} else if (NotificationCount == 1) {
|
} else if (NotificationCount == 1) {
|
||||||
SetPhaseStatusCode (FSP_STATUS_CODE_READY_TO_BOOT_NOTIFICATION);
|
SetPhaseStatusCode (FSP_STATUS_CODE_READY_TO_BOOT_NOTIFICATION);
|
||||||
|
PERF_START_EX(&gFspPerformanceDataGuid, "EventRec", NULL, 0, FSP_STATUS_CODE_READY_TO_BOOT_NOTIFICATION | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_ENTRY);
|
||||||
REPORT_STATUS_CODE (EFI_PROGRESS_CODE, FSP_STATUS_CODE_READY_TO_BOOT_NOTIFICATION | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_ENTRY);
|
REPORT_STATUS_CODE (EFI_PROGRESS_CODE, FSP_STATUS_CODE_READY_TO_BOOT_NOTIFICATION | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_ENTRY);
|
||||||
} else if (NotificationCount == 2) {
|
} else if (NotificationCount == 2) {
|
||||||
SetPhaseStatusCode (FSP_STATUS_CODE_END_OF_FIRMWARE_NOTIFICATION);
|
SetPhaseStatusCode (FSP_STATUS_CODE_END_OF_FIRMWARE_NOTIFICATION);
|
||||||
|
PERF_START_EX (&gFspPerformanceDataGuid, "EventRec", NULL, 0, FSP_STATUS_CODE_END_OF_FIRMWARE_NOTIFICATION | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_ENTRY);
|
||||||
REPORT_STATUS_CODE (EFI_PROGRESS_CODE, FSP_STATUS_CODE_END_OF_FIRMWARE_NOTIFICATION | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_ENTRY);
|
REPORT_STATUS_CODE (EFI_PROGRESS_CODE, FSP_STATUS_CODE_END_OF_FIRMWARE_NOTIFICATION | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_ENTRY);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -262,10 +272,13 @@ FspWaitForNotify (
|
||||||
SetFspMeasurePoint (FSP_PERF_ID_API_NOTIFY_POST_PCI_EXIT + Count);
|
SetFspMeasurePoint (FSP_PERF_ID_API_NOTIFY_POST_PCI_EXIT + Count);
|
||||||
|
|
||||||
if ((NotificationCount - 1) == 0) {
|
if ((NotificationCount - 1) == 0) {
|
||||||
|
PERF_END_EX(&gFspPerformanceDataGuid, "EventRec", NULL, 0, FSP_STATUS_CODE_POST_PCIE_ENUM_NOTIFICATION | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_EXIT);
|
||||||
REPORT_STATUS_CODE (EFI_PROGRESS_CODE, FSP_STATUS_CODE_POST_PCIE_ENUM_NOTIFICATION | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_EXIT);
|
REPORT_STATUS_CODE (EFI_PROGRESS_CODE, FSP_STATUS_CODE_POST_PCIE_ENUM_NOTIFICATION | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_EXIT);
|
||||||
} else if ((NotificationCount - 1) == 1) {
|
} else if ((NotificationCount - 1) == 1) {
|
||||||
|
PERF_END_EX(&gFspPerformanceDataGuid, "EventRec", NULL, 0, FSP_STATUS_CODE_READY_TO_BOOT_NOTIFICATION | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_EXIT);
|
||||||
REPORT_STATUS_CODE (EFI_PROGRESS_CODE, FSP_STATUS_CODE_READY_TO_BOOT_NOTIFICATION | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_EXIT);
|
REPORT_STATUS_CODE (EFI_PROGRESS_CODE, FSP_STATUS_CODE_READY_TO_BOOT_NOTIFICATION | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_EXIT);
|
||||||
} else if ((NotificationCount - 1) == 2) {
|
} else if ((NotificationCount - 1) == 2) {
|
||||||
|
PERF_END_EX(&gFspPerformanceDataGuid, "EventRec", NULL, 0, FSP_STATUS_CODE_END_OF_FIRMWARE_NOTIFICATION | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_EXIT);
|
||||||
REPORT_STATUS_CODE (EFI_PROGRESS_CODE, FSP_STATUS_CODE_END_OF_FIRMWARE_NOTIFICATION | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_EXIT);
|
REPORT_STATUS_CODE (EFI_PROGRESS_CODE, FSP_STATUS_CODE_END_OF_FIRMWARE_NOTIFICATION | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_EXIT);
|
||||||
}
|
}
|
||||||
Pei2LoaderSwitchStack();
|
Pei2LoaderSwitchStack();
|
||||||
|
|
|
@ -25,6 +25,7 @@
|
||||||
#include <Library/FspWrapperPlatformLib.h>
|
#include <Library/FspWrapperPlatformLib.h>
|
||||||
#include <Library/PerformanceLib.h>
|
#include <Library/PerformanceLib.h>
|
||||||
#include <Library/HobLib.h>
|
#include <Library/HobLib.h>
|
||||||
|
#include <FspStatusCode.h>
|
||||||
|
|
||||||
typedef
|
typedef
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
|
@ -91,9 +92,9 @@ OnPciEnumerationComplete (
|
||||||
}
|
}
|
||||||
|
|
||||||
NotifyPhaseParams.Phase = EnumInitPhaseAfterPciEnumeration;
|
NotifyPhaseParams.Phase = EnumInitPhaseAfterPciEnumeration;
|
||||||
PERF_START_EX(&gFspApiPerformanceGuid, "EventRec", NULL, 0, 0x6000);
|
PERF_START_EX(&gFspApiPerformanceGuid, "EventRec", NULL, 0, FSP_STATUS_CODE_POST_PCIE_ENUM_NOTIFICATION | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_ENTRY);
|
||||||
Status = CallFspNotifyPhase (&NotifyPhaseParams);
|
Status = CallFspNotifyPhase (&NotifyPhaseParams);
|
||||||
PERF_END_EX(&gFspApiPerformanceGuid, "EventRec", NULL, 0, 0x607F);
|
PERF_END_EX(&gFspApiPerformanceGuid, "EventRec", NULL, 0, FSP_STATUS_CODE_POST_PCIE_ENUM_NOTIFICATION | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_EXIT);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Reset the system if FSP API returned FSP_STATUS_RESET_REQUIRED status
|
// Reset the system if FSP API returned FSP_STATUS_RESET_REQUIRED status
|
||||||
|
@ -130,16 +131,13 @@ OnReadyToBoot (
|
||||||
{
|
{
|
||||||
NOTIFY_PHASE_PARAMS NotifyPhaseParams;
|
NOTIFY_PHASE_PARAMS NotifyPhaseParams;
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
ADD_PERFORMANCE_RECORD_PROTOCOL *AddPerfRecordInterface;
|
|
||||||
EFI_PEI_HOB_POINTERS Hob;
|
|
||||||
VOID **FspHobListPtr;
|
|
||||||
|
|
||||||
gBS->CloseEvent (Event);
|
gBS->CloseEvent (Event);
|
||||||
|
|
||||||
NotifyPhaseParams.Phase = EnumInitPhaseReadyToBoot;
|
NotifyPhaseParams.Phase = EnumInitPhaseReadyToBoot;
|
||||||
PERF_START_EX(&gFspApiPerformanceGuid, "EventRec", NULL, 0, 0x4000);
|
PERF_START_EX(&gFspApiPerformanceGuid, "EventRec", NULL, 0, FSP_STATUS_CODE_READY_TO_BOOT_NOTIFICATION | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_ENTRY);
|
||||||
Status = CallFspNotifyPhase (&NotifyPhaseParams);
|
Status = CallFspNotifyPhase (&NotifyPhaseParams);
|
||||||
PERF_END_EX(&gFspApiPerformanceGuid, "EventRec", NULL, 0, 0x407F);
|
PERF_END_EX(&gFspApiPerformanceGuid, "EventRec", NULL, 0, FSP_STATUS_CODE_READY_TO_BOOT_NOTIFICATION | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_EXIT);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Reset the system if FSP API returned FSP_STATUS_RESET_REQUIRED status
|
// Reset the system if FSP API returned FSP_STATUS_RESET_REQUIRED status
|
||||||
|
@ -154,23 +152,6 @@ OnReadyToBoot (
|
||||||
} else {
|
} else {
|
||||||
DEBUG((DEBUG_INFO, "FSP NotifyPhase ReadyToBoot Success.\n"));
|
DEBUG((DEBUG_INFO, "FSP NotifyPhase ReadyToBoot Success.\n"));
|
||||||
}
|
}
|
||||||
|
|
||||||
Status = gBS->LocateProtocol (
|
|
||||||
&gAddPerfRecordProtocolGuid,
|
|
||||||
NULL,
|
|
||||||
(VOID**) &AddPerfRecordInterface
|
|
||||||
);
|
|
||||||
if (EFI_ERROR (Status)) {
|
|
||||||
DEBUG((DEBUG_INFO, "gAddPerfRecordProtocolGuid - Locate protocol failed\n"));
|
|
||||||
return;
|
|
||||||
} else {
|
|
||||||
Hob.Raw = GetHobList ();
|
|
||||||
if (Hob.Raw != NULL) {
|
|
||||||
Hob.Raw = GetNextGuidHob (&gFspHobGuid, Hob.Raw);
|
|
||||||
FspHobListPtr = GET_GUID_HOB_DATA(Hob.Raw);
|
|
||||||
AddPerfRecordInterface->AddPerformanceRecords((VOID *)(UINTN)(((UINT32)(UINTN)*FspHobListPtr) & 0xFFFFFFFF));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -189,15 +170,18 @@ OnEndOfFirmware (
|
||||||
IN VOID *Context
|
IN VOID *Context
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
NOTIFY_PHASE_PARAMS NotifyPhaseParams;
|
NOTIFY_PHASE_PARAMS NotifyPhaseParams;
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
|
ADD_PERFORMANCE_RECORD_PROTOCOL *AddPerfRecordInterface;
|
||||||
|
EFI_PEI_HOB_POINTERS Hob;
|
||||||
|
VOID **FspHobListPtr;
|
||||||
|
|
||||||
gBS->CloseEvent (Event);
|
gBS->CloseEvent (Event);
|
||||||
|
|
||||||
NotifyPhaseParams.Phase = EnumInitPhaseEndOfFirmware;
|
NotifyPhaseParams.Phase = EnumInitPhaseEndOfFirmware;
|
||||||
PERF_START_EX(&gFspApiPerformanceGuid, "EventRec", NULL, 0, 0x2000);
|
PERF_START_EX(&gFspApiPerformanceGuid, "EventRec", NULL, 0, FSP_STATUS_CODE_END_OF_FIRMWARE_NOTIFICATION | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_ENTRY);
|
||||||
Status = CallFspNotifyPhase (&NotifyPhaseParams);
|
Status = CallFspNotifyPhase (&NotifyPhaseParams);
|
||||||
PERF_END_EX(&gFspApiPerformanceGuid, "EventRec", NULL, 0, 0x207F);
|
PERF_END_EX(&gFspApiPerformanceGuid, "EventRec", NULL, 0, FSP_STATUS_CODE_END_OF_FIRMWARE_NOTIFICATION | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_EXIT);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Reset the system if FSP API returned FSP_STATUS_RESET_REQUIRED status
|
// Reset the system if FSP API returned FSP_STATUS_RESET_REQUIRED status
|
||||||
|
@ -212,6 +196,21 @@ OnEndOfFirmware (
|
||||||
} else {
|
} else {
|
||||||
DEBUG((DEBUG_INFO, "FSP NotifyPhase EndOfFirmware Success.\n"));
|
DEBUG((DEBUG_INFO, "FSP NotifyPhase EndOfFirmware Success.\n"));
|
||||||
}
|
}
|
||||||
|
Status = gBS->LocateProtocol (
|
||||||
|
&gAddPerfRecordProtocolGuid,
|
||||||
|
NULL,
|
||||||
|
(VOID**) &AddPerfRecordInterface
|
||||||
|
);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
DEBUG((DEBUG_INFO, "gAddPerfRecordProtocolGuid - Locate protocol failed\n"));
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
Hob.Raw = GetFirstGuidHob (&gFspHobGuid);
|
||||||
|
if (Hob.Raw != NULL) {
|
||||||
|
FspHobListPtr = GET_GUID_HOB_DATA (Hob.Raw);
|
||||||
|
AddPerfRecordInterface->AddPerformanceRecords ((VOID *)(UINTN)(((UINT32)(UINTN)*FspHobListPtr) & 0xFFFFFFFF));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -38,6 +38,7 @@
|
||||||
#include <Ppi/SecPlatformInformation.h>
|
#include <Ppi/SecPlatformInformation.h>
|
||||||
#include <Library/FspWrapperApiTestLib.h>
|
#include <Library/FspWrapperApiTestLib.h>
|
||||||
#include <FspEas.h>
|
#include <FspEas.h>
|
||||||
|
#include <FspStatusCode.h>
|
||||||
|
|
||||||
extern EFI_GUID gFspHobGuid;
|
extern EFI_GUID gFspHobGuid;
|
||||||
|
|
||||||
|
@ -89,8 +90,8 @@ PeiFspMemoryInit (
|
||||||
TimeStampCounterStart = AsmReadTsc ();
|
TimeStampCounterStart = AsmReadTsc ();
|
||||||
Status = CallFspMemoryInit (FspmUpdDataPtr, &FspHobListPtr);
|
Status = CallFspMemoryInit (FspmUpdDataPtr, &FspHobListPtr);
|
||||||
// Create hobs after memory initialization and not in temp RAM. Hence passing the recorded timestamp here
|
// Create hobs after memory initialization and not in temp RAM. Hence passing the recorded timestamp here
|
||||||
PERF_START_EX(&gFspApiPerformanceGuid, "EventRec", NULL, TimeStampCounterStart, 0xD000);
|
PERF_START_EX(&gFspApiPerformanceGuid, "EventRec", NULL, TimeStampCounterStart, FSP_STATUS_CODE_MEMORY_INIT | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_ENTRY);
|
||||||
PERF_END_EX(&gFspApiPerformanceGuid, "EventRec", NULL, 0, 0xD07F);
|
PERF_END_EX(&gFspApiPerformanceGuid, "EventRec", NULL, 0, FSP_STATUS_CODE_MEMORY_INIT | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_EXIT);
|
||||||
DEBUG ((DEBUG_INFO, "Total time spent executing FspMemoryInitApi: %d millisecond\n", DivU64x32 (GetTimeInNanoSecond (AsmReadTsc () - TimeStampCounterStart), 1000000)));
|
DEBUG ((DEBUG_INFO, "Total time spent executing FspMemoryInitApi: %d millisecond\n", DivU64x32 (GetTimeInNanoSecond (AsmReadTsc () - TimeStampCounterStart), 1000000)));
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
|
@ -38,6 +38,7 @@
|
||||||
#include <Ppi/SecPlatformInformation.h>
|
#include <Ppi/SecPlatformInformation.h>
|
||||||
#include <Library/FspWrapperApiTestLib.h>
|
#include <Library/FspWrapperApiTestLib.h>
|
||||||
#include <FspEas.h>
|
#include <FspEas.h>
|
||||||
|
#include <FspStatusCode.h>
|
||||||
|
|
||||||
extern EFI_PEI_NOTIFY_DESCRIPTOR mS3EndOfPeiNotifyDesc;
|
extern EFI_PEI_NOTIFY_DESCRIPTOR mS3EndOfPeiNotifyDesc;
|
||||||
extern EFI_GUID gFspHobGuid;
|
extern EFI_GUID gFspHobGuid;
|
||||||
|
@ -253,9 +254,9 @@ PeiMemoryDiscoveredNotify (
|
||||||
UpdateFspsUpdData ((VOID *)FspsUpdDataPtr);
|
UpdateFspsUpdData ((VOID *)FspsUpdDataPtr);
|
||||||
|
|
||||||
TimeStampCounterStart = AsmReadTsc ();
|
TimeStampCounterStart = AsmReadTsc ();
|
||||||
PERF_START_EX(&gFspApiPerformanceGuid, "EventRec", NULL, 0, 0x9000);
|
PERF_START_EX(&gFspApiPerformanceGuid, "EventRec", NULL, 0, FSP_STATUS_CODE_SILICON_INIT | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_ENTRY);
|
||||||
Status = CallFspSiliconInit ((VOID *)FspsUpdDataPtr);
|
Status = CallFspSiliconInit ((VOID *)FspsUpdDataPtr);
|
||||||
PERF_END_EX(&gFspApiPerformanceGuid, "EventRec", NULL, 0, 0x907F);
|
PERF_END_EX(&gFspApiPerformanceGuid, "EventRec", NULL, 0, FSP_STATUS_CODE_SILICON_INIT | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_EXIT);
|
||||||
DEBUG ((DEBUG_INFO, "Total time spent executing FspSiliconInitApi: %d millisecond\n", DivU64x32 (GetTimeInNanoSecond (AsmReadTsc () - TimeStampCounterStart), 1000000)));
|
DEBUG ((DEBUG_INFO, "Total time spent executing FspSiliconInitApi: %d millisecond\n", DivU64x32 (GetTimeInNanoSecond (AsmReadTsc () - TimeStampCounterStart), 1000000)));
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
Loading…
Reference in New Issue