Reviewed-by: Zhichao Gao <zhichao....@intel.com> Thanks, Zhichao
> -----Original Message----- > From: Yang, Zhenhua <zhenhua.y...@intel.com> > Sent: Monday, November 21, 2022 5:35 PM > To: devel@edk2.groups.io > Cc: Ni, Ray <ray...@intel.com>; Gao, Zhichao <zhichao....@intel.com>; Zeng, > Star <star.z...@intel.com> > Subject: [AddResetEnd v1] ShellPkg/DpDynamicCommand: Add ResetEnd > support in DP command > > From: zhenhuay <zhenhua.y...@intel.com> > > 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...@intel.com> > Cc: Zhichao Gao <zhichao....@intel.com> > Cc: Star Zeng <star.z...@intel.com> > Signed-off-by: zhenhuay <zhenhua.y...@intel.com> > --- > ShellPkg/DynamicCommand/DpDynamicCommand/Dp.c | 14 > ++++++++++++++ > ShellPkg/DynamicCommand/DpDynamicCommand/DpTrace.c | 9 > +++++++++ > ShellPkg/DynamicCommand/DpDynamicCommand/Dp.uni | 1 + > ShellPkg/DynamicCommand/DpDynamicCommand/DpInternal.h | 1 + > 4 files changed, 25 insertions(+) > > 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/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) {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. -- > 2.31.1.windows.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#96622): https://edk2.groups.io/g/devel/message/96622 Mute This Topic: https://groups.io/mt/95182514/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-