From: Abdul Lateef Attar <abdullateef.at...@amd.com>

BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=4182

Handles S3 save state restore condition.
Implements SmmCpuFeaturesCompleteSmmReadyToLock() to
sync all processor and update S3 resume entry point.

Cc: Paul Grimes <paul.gri...@amd.com>
Cc: Garrett Kirkendall <garrett.kirkend...@amd.com>
Cc: Abner Chang <abner.ch...@amd.com>
Cc: Eric Dong <eric.d...@intel.com>
Cc: Ray Ni <ray...@intel.com>
Cc: Rahul Kumar <rahul1.ku...@intel.com>
Signed-off-by: Abdul Lateef Attar <abdullateef.at...@amd.com>
---
 .../AmdSmmCpuFeaturesLib.inf                  |  1 +
 .../SmmCpuFeaturesLib/Amd/SmramSaveState.h    | 19 +++++++++++
 .../SmmCpuFeaturesLib/Amd/SmmCpuFeaturesLib.c | 32 +++++++++++++++++++
 3 files changed, 52 insertions(+)

diff --git a/UefiCpuPkg/Library/SmmCpuFeaturesLib/AmdSmmCpuFeaturesLib.inf 
b/UefiCpuPkg/Library/SmmCpuFeaturesLib/AmdSmmCpuFeaturesLib.inf
index 95eb31d16ead..7fd559e91ad8 100644
--- a/UefiCpuPkg/Library/SmmCpuFeaturesLib/AmdSmmCpuFeaturesLib.inf
+++ b/UefiCpuPkg/Library/SmmCpuFeaturesLib/AmdSmmCpuFeaturesLib.inf
@@ -27,6 +27,7 @@ [Sources]
 [Packages]

   MdePkg/MdePkg.dec

   UefiCpuPkg/UefiCpuPkg.dec

+  MdeModulePkg/MdeModulePkg.dec

 

 [LibraryClasses]

   BaseLib

diff --git a/UefiCpuPkg/Library/SmmCpuFeaturesLib/Amd/SmramSaveState.h 
b/UefiCpuPkg/Library/SmmCpuFeaturesLib/Amd/SmramSaveState.h
index 290ebdbc9227..474a5dbd9765 100644
--- a/UefiCpuPkg/Library/SmmCpuFeaturesLib/Amd/SmramSaveState.h
+++ b/UefiCpuPkg/Library/SmmCpuFeaturesLib/Amd/SmramSaveState.h
@@ -17,6 +17,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
 #include <Library/DebugLib.h>

 #include <Library/SmmServicesTableLib.h>

 #include <Register/Amd/SmramSaveStateMap.h>

+#include <Guid/AcpiS3Context.h>

 

 // EFER register LMA bit

 #define LMA  BIT10

@@ -106,4 +107,22 @@ InternalSmmCpuFeaturesWriteSaveStateRegister (
   IN CONST VOID                   *Buffer

   );

 

+/**

+  Initialize MP synchronization data.

+**/

+VOID

+EFIAPI

+InitializeMpSyncData (

+  VOID

+  );

+

+/**

+  Perform SMM MP sync Semaphores re-initialization in the S3 boot path.

+**/

+VOID

+EFIAPI

+SmmS3MpSemaphoreInit (

+  VOID

+  );

+

 #endif

diff --git a/UefiCpuPkg/Library/SmmCpuFeaturesLib/Amd/SmmCpuFeaturesLib.c 
b/UefiCpuPkg/Library/SmmCpuFeaturesLib/Amd/SmmCpuFeaturesLib.c
index 10bed4116397..b855573d9401 100644
--- a/UefiCpuPkg/Library/SmmCpuFeaturesLib/Amd/SmmCpuFeaturesLib.c
+++ b/UefiCpuPkg/Library/SmmCpuFeaturesLib/Amd/SmmCpuFeaturesLib.c
@@ -14,6 +14,9 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
 // The mode of the CPU at the time an SMI occurs

 extern UINT8  mSmmSaveStateRegisterLma;

 

+// SMM S3 resume state Ptr

+extern SMM_S3_RESUME_STATE  *mSmmS3ResumeState;

+

 /**

   Read an SMM Save State register on the target processor.  If this function

   returns EFI_UNSUPPORTED, then the caller is responsible for reading the

@@ -441,4 +444,33 @@ SmmCpuFeaturesCompleteSmmReadyToLock (
   VOID

   )

 {

+  if (mSmmS3ResumeState != NULL ) {

+    mSmmS3ResumeState->SmmS3ResumeEntryPoint = 
(EFI_PHYSICAL_ADDRESS)(UINTN)SmmS3MpSemaphoreInit;

+  }

+}

+

+/**

+  Perform SMM MP sync Semaphores re-initialization in the S3 boot path.

+**/

+VOID

+EFIAPI

+SmmS3MpSemaphoreInit (

+  VOID

+  )

+{

+  InitializeMpSyncData ();

+

+  DEBUG ((DEBUG_INFO, "SMM S3 Return CS                = %x\n", 
mSmmS3ResumeState->ReturnCs));

+  DEBUG ((DEBUG_INFO, "SMM S3 Return Entry Point       = %x\n", 
mSmmS3ResumeState->ReturnEntryPoint));

+  DEBUG ((DEBUG_INFO, "SMM S3 Return Context1          = %x\n", 
mSmmS3ResumeState->ReturnContext1));

+  DEBUG ((DEBUG_INFO, "SMM S3 Return Context2          = %x\n", 
mSmmS3ResumeState->ReturnContext2));

+  DEBUG ((DEBUG_INFO, "SMM S3 Return Stack Pointer     = %x\n", 
mSmmS3ResumeState->ReturnStackPointer));

+

+  AsmDisablePaging64 (

+    mSmmS3ResumeState->ReturnCs,

+    (UINT32)mSmmS3ResumeState->ReturnEntryPoint,

+    (UINT32)mSmmS3ResumeState->ReturnContext1,

+    (UINT32)mSmmS3ResumeState->ReturnContext2,

+    (UINT32)mSmmS3ResumeState->ReturnStackPointer

+    );

 }

-- 
2.25.1



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#97034): https://edk2.groups.io/g/devel/message/97034
Mute This Topic: https://groups.io/mt/95492572/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-


Reply via email to