[edk2-devel] [AddResetEnd v1] ShellPkg/DpDynamicCommand: Add ResetEnd support in DP command

Zhenhua Yang posted 1 patch 2 weeks, 3 days ago
Failed in applying to current master (apply log)
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(+)
[edk2-devel] [AddResetEnd v1] ShellPkg/DpDynamicCommand: Add ResetEnd support in DP command
Posted by Zhenhua Yang 2 weeks, 3 days ago
From: zhenhuay <zhenhua.yang@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.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>
---
 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 (#96520): https://edk2.groups.io/g/devel/message/96520
Mute This Topic: https://groups.io/mt/95182514/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-
Re: [edk2-devel] [AddResetEnd v1] ShellPkg/DpDynamicCommand: Add ResetEnd support in DP command
Posted by Gao, Zhichao 1 week, 6 days ago
Reviewed-by: Zhichao Gao <zhichao.gao@intel.com>

Thanks,
Zhichao

> -----Original Message-----
> From: Yang, Zhenhua <zhenhua.yang@intel.com>
> Sent: Monday, November 21, 2022 5:35 PM
> To: devel@edk2.groups.io
> Cc: Ni, Ray <ray.ni@intel.com>; Gao, Zhichao <zhichao.gao@intel.com>; Zeng,
> Star <star.zeng@intel.com>
> Subject: [AddResetEnd v1] ShellPkg/DpDynamicCommand: Add ResetEnd
> support in DP command
> 
> From: zhenhuay <zhenhua.yang@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.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>
> ---
>  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/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-