summaryrefslogtreecommitdiff
path: root/ShellPkg
diff options
context:
space:
mode:
authorzhenhuay <zhenhua.yang@intel.com>2022-11-21 17:34:56 +0800
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>2022-11-29 04:23:39 +0000
commitc8c978d32882413eeaf2b9917409af83af68cb5d (patch)
tree8bb4ce8ec63470551ad6ca81ecf8c1e08dfdcfe3 /ShellPkg
parentae3bc559f98e68983df0a4b223dad7afeb6eee2c (diff)
downloadedk2-c8c978d32882413eeaf2b9917409af83af68cb5d.zip
edk2-c8c978d32882413eeaf2b9917409af83af68cb5d.tar.gz
edk2-c8c978d32882413eeaf2b9917409af83af68cb5d.tar.bz2
ShellPkg/DpDynamicCommand: Add ResetEnd support in DP command
DP command should be able to parse the FPDT ACPI table and dump the ResetEnd which was logged at the beginning of the firmware image execution. So that DP can calculate SEC phase time duration start from the beginning of firmware image execution. Cc: Ray Ni <ray.ni@intel.com> Cc: Zhichao Gao <zhichao.gao@intel.com> Cc: Star Zeng <star.zeng@intel.com> Signed-off-by: zhenhuay <zhenhua.yang@intel.com> Reviewed-by: Zhichao Gao <zhichao.gao@intel.com>
Diffstat (limited to 'ShellPkg')
-rw-r--r--ShellPkg/DynamicCommand/DpDynamicCommand/Dp.c14
-rw-r--r--ShellPkg/DynamicCommand/DpDynamicCommand/Dp.uni1
-rw-r--r--ShellPkg/DynamicCommand/DpDynamicCommand/DpInternal.h1
-rw-r--r--ShellPkg/DynamicCommand/DpDynamicCommand/DpTrace.c9
4 files changed, 25 insertions, 0 deletions
diff --git a/ShellPkg/DynamicCommand/DpDynamicCommand/Dp.c b/ShellPkg/DynamicCommand/DpDynamicCommand/Dp.c
index 1799ab1..512a146 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 8d87005..ef2e770 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 39878c6..97f47f2 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 0abb879..9c0a9a0 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) {