diff options
Diffstat (limited to 'ShellPkg')
4 files changed, 25 insertions, 0 deletions
diff --git a/ShellPkg/DynamicCommand/DpDynamicCommand/Dp.c b/ShellPkg/DynamicCommand/DpDynamicCommand/Dp.c index 1799ab176a..512a146da6 100644 --- a/ShellPkg/DynamicCommand/DpDynamicCommand/Dp.c +++ b/ShellPkg/DynamicCommand/DpDynamicCommand/Dp.c @@ -57,6 +57,7 @@ UINT8 *mBootPerformanceTable; UINTN mBootPerformanceTableSize;
BOOLEAN mPeiPhase = FALSE;
BOOLEAN mDxePhase = FALSE;
+UINT64 mResetEnd = 0;
PERF_SUMMARY_DATA SummaryData = { 0 }; ///< Create the SummaryData structure and init. to ZERO.
MEASUREMENT_RECORD *mMeasurementList = NULL;
@@ -542,6 +543,8 @@ BuildMeasurementList ( {
EFI_ACPI_5_0_FPDT_PERFORMANCE_RECORD_HEADER *RecordHeader;
UINT8 *PerformanceTablePtr;
+ UINT8 *BasicBootTablePtr;
+ UINT64 ResetEnd;
UINT16 StartProgressId;
UINTN TableLength;
UINT8 *StartRecordEvent;
@@ -552,6 +555,17 @@ BuildMeasurementList ( return EFI_OUT_OF_RESOURCES;
}
+ //
+ // Update the ResetEnd which was logged at the beginning of firmware image execution
+ //
+ TableLength = sizeof (EFI_ACPI_5_0_FPDT_PERFORMANCE_TABLE_HEADER);
+ BasicBootTablePtr = (mBootPerformanceTable + TableLength);
+ ResetEnd = ((EFI_ACPI_5_0_FPDT_FIRMWARE_BASIC_BOOT_RECORD *)BasicBootTablePtr)->ResetEnd;
+
+ if (ResetEnd > 0) {
+ mResetEnd = ResetEnd;
+ }
+
TableLength = sizeof (BOOT_PERFORMANCE_TABLE);
PerformanceTablePtr = (mBootPerformanceTable + TableLength);
diff --git a/ShellPkg/DynamicCommand/DpDynamicCommand/Dp.uni b/ShellPkg/DynamicCommand/DpDynamicCommand/Dp.uni index 8d8700573e..ef2e7708b8 100644 --- a/ShellPkg/DynamicCommand/DpDynamicCommand/Dp.uni +++ b/ShellPkg/DynamicCommand/DpDynamicCommand/Dp.uni @@ -41,6 +41,7 @@ #string STR_DP_TIMER_PROPERTIES #language en-US "System Performance Timer counts %s from 0x%Lx to 0x%Lx\n"
#string STR_DP_VERBOSE_THRESHOLD #language en-US "Measurements less than %,Ld microseconds are not displayed.\n"
#string STR_DP_SECTION_PHASES #language en-US "Major Phases"
+#string STR_DP_RESET_END #language en-US " Reset End: %L8d (us)\n"
#string STR_DP_SEC_PHASE #language en-US " SEC Phase Duration: %L8d (us)\n"
#string STR_DP_PHASE_BDSTO #language en-US " BDS Timeout: %L8d (ms) included in BDS Duration\n"
#string STR_DP_PHASE_DURATION #language en-US "%5a Phase Duration: %L8d (ms)\n"
diff --git a/ShellPkg/DynamicCommand/DpDynamicCommand/DpInternal.h b/ShellPkg/DynamicCommand/DpDynamicCommand/DpInternal.h index 39878c6085..97f47f2960 100644 --- a/ShellPkg/DynamicCommand/DpDynamicCommand/DpInternal.h +++ b/ShellPkg/DynamicCommand/DpDynamicCommand/DpInternal.h @@ -28,6 +28,7 @@ extern UINT8 *mBootPerformanceTable; extern UINTN mBootPerformanceTableLength;
extern MEASUREMENT_RECORD *mMeasurementList;
extern UINTN mMeasurementNum;
+extern UINT64 mResetEnd;
extern PERF_SUMMARY_DATA SummaryData; ///< Create the SummaryData structure and init. to ZERO.
diff --git a/ShellPkg/DynamicCommand/DpDynamicCommand/DpTrace.c b/ShellPkg/DynamicCommand/DpDynamicCommand/DpTrace.c index 0abb8797ec..9c0a9a06a1 100644 --- a/ShellPkg/DynamicCommand/DpDynamicCommand/DpTrace.c +++ b/ShellPkg/DynamicCommand/DpDynamicCommand/DpTrace.c @@ -548,6 +548,15 @@ ProcessPhases ( Total = 0;
+ // print Reset End if it's valid
+ //
+ if (SecTime > mResetEnd) {
+ SecTime = SecTime - mResetEnd; // Calculate sec time duration start from the beginning of firmware image execution
+ ElapsedTime = DurationInMicroSeconds (mResetEnd); // Calculate elapsed time in microseconds
+ Total += DivU64x32 (ElapsedTime, 1000); // Accumulate time in milliseconds
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DP_RESET_END), mDpHiiHandle, ElapsedTime);
+ }
+
// print SEC phase duration time
//
if (SecTime > 0) {
|