]> git.proxmox.com Git - mirror_edk2.git/blobdiff - UefiCpuPkg/Library/MpInitLib/Microcode.c
UefiCpuPkg/Microcode: Fix InComplete CheckSum32 issue
[mirror_edk2.git] / UefiCpuPkg / Library / MpInitLib / Microcode.c
index e1f661d6b10431f170cf4246cfe82dabe164e4a7..5f9ae22794ebbc771675229f13552da704959edd 100644 (file)
@@ -159,30 +159,31 @@ MicrocodeDetect (
   MicrocodeEnd = (UINTN) (CpuMpData->MicrocodePatchAddress + CpuMpData->MicrocodePatchRegionSize);\r
   MicrocodeEntryPoint = (CPU_MICROCODE_HEADER *) (UINTN) CpuMpData->MicrocodePatchAddress;\r
 \r
-  //\r
-  // Save an in-complete CheckSum32 from CheckSum Part1 for common parts.\r
-  //\r
-  if (MicrocodeEntryPoint->DataSize == 0) {\r
-    InCompleteCheckSum32 = CalculateSum32 (\r
-                             (UINT32 *) MicrocodeEntryPoint,\r
-                             sizeof (CPU_MICROCODE_HEADER) + 2000\r
-                             );\r
-  } else {\r
-    InCompleteCheckSum32 = CalculateSum32 (\r
-                             (UINT32 *) MicrocodeEntryPoint,\r
-                             sizeof (CPU_MICROCODE_HEADER) + MicrocodeEntryPoint->DataSize\r
-                             );\r
-  }\r
-  InCompleteCheckSum32 -= MicrocodeEntryPoint->ProcessorSignature.Uint32;\r
-  InCompleteCheckSum32 -= MicrocodeEntryPoint->ProcessorFlags;\r
-  InCompleteCheckSum32 -= MicrocodeEntryPoint->Checksum;\r
-\r
   do {\r
     //\r
     // Check if the microcode is for the Cpu and the version is newer\r
     // and the update can be processed on the platform\r
     //\r
     CorrectMicrocode = FALSE;\r
+\r
+    //\r
+    // Save an in-complete CheckSum32 from CheckSum Part1 for common parts.\r
+    //\r
+    if (MicrocodeEntryPoint->DataSize == 0) {\r
+      InCompleteCheckSum32 = CalculateSum32 (\r
+                               (UINT32 *) MicrocodeEntryPoint,\r
+                               sizeof (CPU_MICROCODE_HEADER) + 2000\r
+                               );\r
+    } else {\r
+      InCompleteCheckSum32 = CalculateSum32 (\r
+                               (UINT32 *) MicrocodeEntryPoint,\r
+                               sizeof (CPU_MICROCODE_HEADER) + MicrocodeEntryPoint->DataSize\r
+                               );\r
+    }\r
+    InCompleteCheckSum32 -= MicrocodeEntryPoint->ProcessorSignature.Uint32;\r
+    InCompleteCheckSum32 -= MicrocodeEntryPoint->ProcessorFlags;\r
+    InCompleteCheckSum32 -= MicrocodeEntryPoint->Checksum;\r
+\r
     if (MicrocodeEntryPoint->HeaderVersion == 0x1) {\r
       //\r
       // It is the microcode header. It is not the padding data between microcode patches\r