17#include <Library/PcdLib.h>
18#include <Library/UefiLib.h>
19#include <Library/BaseMemoryLib.h>
21#include <Library/UefiBootServicesTableLib.h>
22#include <Library/UefiRuntimeServicesTableLib.h>
23#include <Library/UefiApplicationEntryPoint.h>
24#include <Register/Msr.h>
25#include <Protocol/MpService.h>
38 MSR_BROADWELL_PKG_CST_CONFIG_CONTROL_REGISTER Value;
43 if (EFI_ERROR (Status)) {
44 Print (L
"Failed to detect CPU Number\n");
48 Value.Uint64 =
AsmReadMsr64 (MSR_BROADWELL_PKG_CST_CONFIG_CONTROL);
50 Print (L
"CPU%02d has MSR 0xE2: 0x%016LX\n", ProcNum, Value.Uint64);
52 if (Value.Bits.CFGLock) {
67 Print (L
"Looking up EFI_MP_SERVICES_PROTOCOL...\n");
70 if (EFI_ERROR (Status)) {
71 Print (L
"Failed to find EFI_MP_SERVICES_PROTOCOL - %r\n", Status);
75 Print (L
"Checking MSR 0xE2 on all CPUs. Values must be SAME!!!\n");
79 Print (L
"Starting All APs to verify 0xE2 register...\n", Status);
82 if (EFI_ERROR (Status)) {
83 Print (L
"Failed to StartupAllAPs - %r\n", Status);
87 Print (L
"Done checking MSR 0xE2 register, compare the values printed!\n");
90 Print (L
"This firmware has BORKED MSR 0xE2 register!\n");
91 Print (L
"Some cores are locked, some are not!!!\n");
93 Print (L
"This firmware has UNLOCKED MSR 0xE2 register!\n");
95 Print (L
"This firmware has LOCKED MSR 0xE2 register!\n");
OC_TYPING_BUFFER_ENTRY Buffer[OC_TYPING_BUFFER_SIZE]
EFI_GUID gEfiMpServiceProtocolGuid
UINT64 EFIAPI AsmReadMsr64(IN UINT32 Index)
STATIC EFI_MP_SERVICES_PROTOCOL * mMpServices
STATIC UINTN mHasLockedCores
STATIC UINTN mHasUnlockedCores
EFI_STATUS EFIAPI VerifyMSRE2(VOID)
VOID EFIAPI ReadMsrE2(IN VOID *Buffer)