Add CPU AP hlt-loop code into startup code structure which is located in ACPI
NVS range and will be safe during OS booting.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Jeff Fan <[email protected]>
CC: Michael Kinney <[email protected]>
CC: Laszlo Ersek <[email protected]>
---
 UefiCpuPkg/CpuDxe/ApStartup.c | 12 ++++++++++++
 UefiCpuPkg/CpuDxe/CpuMp.h     |  8 ++++++++
 2 files changed, 20 insertions(+)

diff --git a/UefiCpuPkg/CpuDxe/ApStartup.c b/UefiCpuPkg/CpuDxe/ApStartup.c
index 77476ae..7449889 100644
--- a/UefiCpuPkg/CpuDxe/ApStartup.c
+++ b/UefiCpuPkg/CpuDxe/ApStartup.c
@@ -36,6 +36,12 @@ ENABLE_EXECUTE_DISABLE_CODE 
mEnableExecuteDisableCodeTemplate = {
 #endif
 };
 
+CPU_AP_RUN_HLT_LOOP_CODE   mCpuApRunHltLoopCodeTemplate = {
+  0xFA,                               // cli (Clear Interrupts)
+  0xF4,                               // hlt
+  {0xEB, 0xFA}                        // jmp $-2
+};
+
 /**
   This .asm code used for translating processor from 16 bit real mode into
   64 bit long mode. which help to create the mStartupCodeTemplate value.
@@ -317,6 +323,12 @@ PrepareAPStartupCode (
   StartupCode->EnableExecuteDisable.Cr3Value = (UINT32) AsmReadCr3 ();
 #endif
 
+  CopyMem (
+    (VOID*) &StartupCode->CpuApRunHltLoopCode,
+    &mCpuApRunHltLoopCodeTemplate,
+    sizeof (CPU_AP_RUN_HLT_LOOP_CODE)
+    );
+
   return EFI_SUCCESS;
 }
 
diff --git a/UefiCpuPkg/CpuDxe/CpuMp.h b/UefiCpuPkg/CpuDxe/CpuMp.h
index feca3be..907e993 100644
--- a/UefiCpuPkg/CpuDxe/CpuMp.h
+++ b/UefiCpuPkg/CpuDxe/CpuMp.h
@@ -46,6 +46,12 @@ typedef struct {
 } ENABLE_EXECUTE_DISABLE_CODE;
 
 typedef struct {
+  UINT8      Cli;                     // cli
+  UINT8      Hlt;                     // hlt
+  UINT8      JmpToHlt[2];             // jmp $-2
+} CPU_AP_RUN_HLT_LOOP_CODE;
+
+typedef struct {
   UINT8  JmpToCli[2];
 
   UINT16 GdtLimit;
@@ -117,6 +123,8 @@ typedef struct {
 #endif
   UINT8  JmpToCpuDxeEntry[2];
 
+  CPU_AP_RUN_HLT_LOOP_CODE CpuApRunHltLoopCode;
+
 } STARTUP_CODE;
 
 #pragma pack()
-- 
1.9.5.msysgit.0

_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to