OpenCore  1.0.4
OpenCore Bootloader
Loading...
Searching...
No Matches
VerifyMsrE2.c
Go to the documentation of this file.
1
15#include <Uefi.h>
16#include <PiDxe.h>
17#include <Library/PcdLib.h>
18#include <Library/UefiLib.h>
19#include <Library/BaseMemoryLib.h>
20#include <Library/OcMiscLib.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>
26
27STATIC EFI_MP_SERVICES_PROTOCOL *mMpServices;
28STATIC UINTN mHasLockedCores;
29STATIC UINTN mHasUnlockedCores;
30
31VOID
32EFIAPI
34 IN VOID *Buffer
35 )
36{
37 UINTN ProcNum = 0;
38 MSR_BROADWELL_PKG_CST_CONFIG_CONTROL_REGISTER Value;
39 EFI_STATUS Status;
40
41 Status = mMpServices->WhoAmI (mMpServices, &ProcNum);
42
43 if (EFI_ERROR (Status)) {
44 Print (L"Failed to detect CPU Number\n");
45 return;
46 }
47
48 Value.Uint64 = AsmReadMsr64 (MSR_BROADWELL_PKG_CST_CONFIG_CONTROL);
49
50 Print (L"CPU%02d has MSR 0xE2: 0x%016LX\n", ProcNum, Value.Uint64);
51
52 if (Value.Bits.CFGLock) {
54 } else {
56 }
57}
58
59EFI_STATUS
60EFIAPI
62 VOID
63 )
64{
65 EFI_STATUS Status;
66
67 Print (L"Looking up EFI_MP_SERVICES_PROTOCOL...\n");
68
69 Status = gBS->LocateProtocol (&gEfiMpServiceProtocolGuid, NULL, (VOID **)&mMpServices);
70 if (EFI_ERROR (Status)) {
71 Print (L"Failed to find EFI_MP_SERVICES_PROTOCOL - %r\n", Status);
72 return Status;
73 }
74
75 Print (L"Checking MSR 0xE2 on all CPUs. Values must be SAME!!!\n");
76
77 ReadMsrE2 (NULL);
78
79 Print (L"Starting All APs to verify 0xE2 register...\n", Status);
80
81 Status = mMpServices->StartupAllAPs (mMpServices, ReadMsrE2, TRUE, NULL, 5000000, NULL, NULL);
82 if (EFI_ERROR (Status)) {
83 Print (L"Failed to StartupAllAPs - %r\n", Status);
84 return Status;
85 }
86
87 Print (L"Done checking MSR 0xE2 register, compare the values printed!\n");
88
90 Print (L"This firmware has BORKED MSR 0xE2 register!\n");
91 Print (L"Some cores are locked, some are not!!!\n");
92 } else if (mHasUnlockedCores) {
93 Print (L"This firmware has UNLOCKED MSR 0xE2 register!\n");
94 } else {
95 Print (L"This firmware has LOCKED MSR 0xE2 register!\n");
96 }
97
98 return EFI_SUCCESS;
99}
EFI_BOOT_SERVICES * gBS
OC_TYPING_BUFFER_ENTRY Buffer[OC_TYPING_BUFFER_SIZE]
Definition OcTypingLib.h:42
EFI_GUID gEfiMpServiceProtocolGuid
UINT64 EFIAPI AsmReadMsr64(IN UINT32 Index)
Definition UserMisc.c:223
STATIC EFI_MP_SERVICES_PROTOCOL * mMpServices
Definition VerifyMsrE2.c:27
STATIC UINTN mHasLockedCores
Definition VerifyMsrE2.c:28
STATIC UINTN mHasUnlockedCores
Definition VerifyMsrE2.c:29
EFI_STATUS EFIAPI VerifyMSRE2(VOID)
Definition VerifyMsrE2.c:61
VOID EFIAPI ReadMsrE2(IN VOID *Buffer)
Definition VerifyMsrE2.c:33