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:
committed by
Jiewen Yao
parent
0a18956d54
commit
19d29d358f
@ -25,6 +25,7 @@
|
||||
#include <Library/FspWrapperPlatformLib.h>
|
||||
#include <Library/PerformanceLib.h>
|
||||
#include <Library/HobLib.h>
|
||||
#include <FspStatusCode.h>
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
@ -91,9 +92,9 @@ OnPciEnumerationComplete (
|
||||
}
|
||||
|
||||
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);
|
||||
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
|
||||
@ -130,16 +131,13 @@ OnReadyToBoot (
|
||||
{
|
||||
NOTIFY_PHASE_PARAMS NotifyPhaseParams;
|
||||
EFI_STATUS Status;
|
||||
ADD_PERFORMANCE_RECORD_PROTOCOL *AddPerfRecordInterface;
|
||||
EFI_PEI_HOB_POINTERS Hob;
|
||||
VOID **FspHobListPtr;
|
||||
|
||||
gBS->CloseEvent (Event);
|
||||
|
||||
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);
|
||||
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
|
||||
@ -154,23 +152,6 @@ OnReadyToBoot (
|
||||
} else {
|
||||
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
|
||||
)
|
||||
{
|
||||
NOTIFY_PHASE_PARAMS NotifyPhaseParams;
|
||||
EFI_STATUS Status;
|
||||
NOTIFY_PHASE_PARAMS NotifyPhaseParams;
|
||||
EFI_STATUS Status;
|
||||
ADD_PERFORMANCE_RECORD_PROTOCOL *AddPerfRecordInterface;
|
||||
EFI_PEI_HOB_POINTERS Hob;
|
||||
VOID **FspHobListPtr;
|
||||
|
||||
gBS->CloseEvent (Event);
|
||||
|
||||
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);
|
||||
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
|
||||
@ -212,6 +196,21 @@ OnEndOfFirmware (
|
||||
} else {
|
||||
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 <Library/FspWrapperApiTestLib.h>
|
||||
#include <FspEas.h>
|
||||
#include <FspStatusCode.h>
|
||||
|
||||
extern EFI_GUID gFspHobGuid;
|
||||
|
||||
@ -89,8 +90,8 @@ PeiFspMemoryInit (
|
||||
TimeStampCounterStart = AsmReadTsc ();
|
||||
Status = CallFspMemoryInit (FspmUpdDataPtr, &FspHobListPtr);
|
||||
// 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_END_EX(&gFspApiPerformanceGuid, "EventRec", NULL, 0, 0xD07F);
|
||||
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, 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)));
|
||||
|
||||
//
|
||||
|
@ -38,6 +38,7 @@
|
||||
#include <Ppi/SecPlatformInformation.h>
|
||||
#include <Library/FspWrapperApiTestLib.h>
|
||||
#include <FspEas.h>
|
||||
#include <FspStatusCode.h>
|
||||
|
||||
extern EFI_PEI_NOTIFY_DESCRIPTOR mS3EndOfPeiNotifyDesc;
|
||||
extern EFI_GUID gFspHobGuid;
|
||||
@ -253,9 +254,9 @@ PeiMemoryDiscoveredNotify (
|
||||
UpdateFspsUpdData ((VOID *)FspsUpdDataPtr);
|
||||
|
||||
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);
|
||||
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)));
|
||||
|
||||
//
|
||||
|
Reference in New Issue
Block a user