<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<div style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 11pt; color: rgb(0, 0, 0);" class="elementToProof">
<span style="font-size:11pt;margin:0px" class="ContentPasted0">Reviewed-by: Ray Ni <ray.ni@intel.com></span>
<div style="margin:0px"><br class="ContentPasted0">
<span style="font-size:11pt;margin:0px"></span></div>
<br>
</div>
<div class="elementToProof">
<div style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 11pt; color: rgb(0, 0, 0);">
<br>
</div>
<div id="Signature">
<div>
<div style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 11pt; color: rgb(0, 0, 0);">
Thanks,</div>
<div style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 11pt; color: rgb(0, 0, 0);">
Ray</div>
</div>
</div>
</div>
<div id="appendonsend"></div>
<hr style="display:inline-block;width:98%" tabindex="-1">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" style="font-size:11pt" color="#000000"><b>From:</b> Tan, Dun <dun.tan@intel.com><br>
<b>Sent:</b> Wednesday, August 30, 2023 3:34 PM<br>
<b>To:</b> devel@edk2.groups.io <devel@edk2.groups.io><br>
<b>Cc:</b> Dong, Eric <eric.dong@intel.com>; Ni, Ray <ray.ni@intel.com>; Kumar, Rahul R <rahul.r.kumar@intel.com><br>
<b>Subject:</b> [Patch V3 5/5] UefiCpuPkg/PiSmmCpuDxe: use MpService2Ppi to wakeup AP in s3</font>
<div> </div>
</div>
<div class="BodyFragment"><font size="2"><span style="font-size:11pt;">
<div class="PlainText">Use MpService2Ppi to wakeup AP in s3 boot flow during initializing<br>
CPU. If mSmmS3ResumeState->MpService2Ppi is not 0, then BSP will<br>
use MpService2Ppi->StartupAllCPUs to do CPU initialization for both<br>
BSP and AP instead of only sending InitSipiSipi for AP.<br>
<br>
Signed-off-by: Dun Tan <dun.tan@intel.com><br>
Cc: Eric Dong <eric.dong@intel.com><br>
Cc: Ray Ni <ray.ni@intel.com><br>
Cc: Rahul Kumar <rahul1.kumar@intel.com><br>
---<br>
UefiCpuPkg/PiSmmCpuDxeSmm/CpuS3.c | 58 +++++++++++++++++++++++++++++++++++-----------------------<br>
1 file changed, 35 insertions(+), 23 deletions(-)<br>
<br>
diff --git a/UefiCpuPkg/PiSmmCpuDxeSmm/CpuS3.c b/UefiCpuPkg/PiSmmCpuDxeSmm/CpuS3.c<br>
index b9dbeaef87..0bae0e33f1 100644<br>
--- a/UefiCpuPkg/PiSmmCpuDxeSmm/CpuS3.c<br>
+++ b/UefiCpuPkg/PiSmmCpuDxeSmm/CpuS3.c<br>
@@ -7,6 +7,8 @@ SPDX-License-Identifier: BSD-2-Clause-Patent<br>
**/<br>
<br>
#include "PiSmmCpuDxeSmm.h"<br>
+#include <PiPei.h><br>
+#include <Ppi/MpServices2.h><br>
<br>
#pragma pack(1)<br>
typedef struct {<br>
@@ -594,18 +596,21 @@ InitializeCpuAfterRebase (<br>
UINT8 Stack[128];<br>
<br>
SetRegister (FALSE);<br>
- if (IsBsp) {<br>
- while (mNumberToFinish > 0) {<br>
- CpuPause ();<br>
+<br>
+ if (mSmmS3ResumeState->MpService2Ppi == 0) {<br>
+ if (IsBsp) {<br>
+ while (mNumberToFinish > 0) {<br>
+ CpuPause ();<br>
+ }<br>
+ } else {<br>
+ //<br>
+ // Place AP into the safe code, count down the number with lock mechanism in the safe code.<br>
+ //<br>
+ TopOfStack = (UINTN)Stack + sizeof (Stack);<br>
+ TopOfStack &= ~(UINTN)(CPU_STACK_ALIGNMENT - 1);<br>
+ CopyMem ((VOID *)(UINTN)mApHltLoopCode, mApHltLoopCodeTemplate, sizeof (mApHltLoopCodeTemplate));<br>
+ TransferApToSafeState ((UINTN)mApHltLoopCode, TopOfStack, (UINTN)&mNumberToFinish);<br>
}<br>
- } else {<br>
- //<br>
- // Place AP into the safe code, count down the number with lock mechanism in the safe code.<br>
- //<br>
- TopOfStack = (UINTN)Stack + sizeof (Stack);<br>
- TopOfStack &= ~(UINTN)(CPU_STACK_ALIGNMENT - 1);<br>
- CopyMem ((VOID *)(UINTN)mApHltLoopCode, mApHltLoopCodeTemplate, sizeof (mApHltLoopCodeTemplate));<br>
- TransferApToSafeState ((UINTN)mApHltLoopCode, TopOfStack, (UINTN)&mNumberToFinish);<br>
}<br>
}<br>
<br>
@@ -783,11 +788,12 @@ SmmRestoreCpu (<br>
VOID<br>
)<br>
{<br>
- SMM_S3_RESUME_STATE *SmmS3ResumeState;<br>
- IA32_DESCRIPTOR Ia32Idtr;<br>
- IA32_DESCRIPTOR X64Idtr;<br>
- IA32_IDT_GATE_DESCRIPTOR IdtEntryTable[EXCEPTION_VECTOR_NUMBER];<br>
- EFI_STATUS Status;<br>
+ SMM_S3_RESUME_STATE *SmmS3ResumeState;<br>
+ IA32_DESCRIPTOR Ia32Idtr;<br>
+ IA32_DESCRIPTOR X64Idtr;<br>
+ IA32_IDT_GATE_DESCRIPTOR IdtEntryTable[EXCEPTION_VECTOR_NUMBER];<br>
+ EFI_STATUS Status;<br>
+ EDKII_PEI_MP_SERVICES2_PPI *Mp2ServicePpi;<br>
<br>
DEBUG ((DEBUG_INFO, "SmmRestoreCpu()\n"));<br>
<br>
@@ -852,15 +858,21 @@ SmmRestoreCpu (<br>
//<br>
mInitApsAfterSmmBaseReloc = FALSE;<br>
<br>
- PrepareApStartupVector (mAcpiCpuData.StartupVector);<br>
- //<br>
- // Send INIT IPI - SIPI to all APs<br>
- //<br>
- SendInitSipiSipiAllExcludingSelf ((UINT32)mAcpiCpuData.StartupVector);<br>
+ if (mSmmS3ResumeState->MpService2Ppi != 0) {<br>
+ Mp2ServicePpi = (EDKII_PEI_MP_SERVICES2_PPI *)(UINTN)mSmmS3ResumeState->MpService2Ppi;<br>
+ Mp2ServicePpi->StartupAllCPUs (Mp2ServicePpi, InitializeCpuProcedure, 0, NULL);<br>
+ } else {<br>
+ PrepareApStartupVector (mAcpiCpuData.StartupVector);<br>
+ //<br>
+ // Send INIT IPI - SIPI to all APs<br>
+ //<br>
+ SendInitSipiSipiAllExcludingSelf ((UINT32)mAcpiCpuData.StartupVector);<br>
+ InitializeCpuProcedure (NULL);<br>
+ }<br>
+ } else {<br>
+ InitializeCpuProcedure (NULL);<br>
}<br>
<br>
- InitializeCpuProcedure (NULL);<br>
-<br>
//<br>
// Set a flag to restore SMM configuration in S3 path.<br>
//<br>
-- <br>
2.31.1.windows.1<br>
<br>
</div>
</span></font></div>
</body>
</html>
<div width="1" style="color:white;clear:both">_._,_._,_</div>
<hr>
Groups.io Links:<p>
You receive all messages sent to this group.
<p>
<a target="_blank" href="https://edk2.groups.io/g/devel/message/108304">View/Reply Online (#108304)</a> |
|
<a target="_blank" href="https://groups.io/mt/101047983/1813853">Mute This Topic</a>
| <a href="https://edk2.groups.io/g/devel/post">New Topic</a>
<br>
<a href="https://edk2.groups.io/g/devel/editsub/1813853">Your Subscription</a> |
<a href="mailto:devel+owner@edk2.groups.io">Contact Group Owner</a> |
<a href="https://edk2.groups.io/g/devel/leave/3943202/1813853/130120423/xyzzy">Unsubscribe</a>
[edk2-devel-archive@redhat.com]<br>
<div width="1" style="color:white;clear:both">_._,_._,_</div>