]> git.proxmox.com Git - mirror_edk2.git/blobdiff - UefiCpuPkg/Library/MpInitLib/Microcode.c
UefiCpuPkg/MpInitLib: Not pass microcode info between archs in CPU_MP_DATA
[mirror_edk2.git] / UefiCpuPkg / Library / MpInitLib / Microcode.c
index 247f835b09fc6ac792de1a8cafd3df05f0a06b92..67e214d463d38b030cb4d41960d403126c818a87 100644 (file)
@@ -739,3 +739,46 @@ ShadowMicrocodeUpdatePatch (
     ShadowMicrocodePatchByPcd (CpuMpData);\r
   }\r
 }\r
+\r
+/**\r
+  Get the cached microcode patch base address and size from the microcode patch\r
+  information cache HOB.\r
+\r
+  @param[out] Address       Base address of the microcode patches data.\r
+                            It will be updated if the microcode patch\r
+                            information cache HOB is found.\r
+  @param[out] RegionSize    Size of the microcode patches data.\r
+                            It will be updated if the microcode patch\r
+                            information cache HOB is found.\r
+\r
+  @retval  TRUE     The microcode patch information cache HOB is found.\r
+  @retval  FALSE    The microcode patch information cache HOB is not found.\r
+\r
+**/\r
+BOOLEAN\r
+GetMicrocodePatchInfoFromHob (\r
+  UINT64                         *Address,\r
+  UINT64                         *RegionSize\r
+  )\r
+{\r
+  EFI_HOB_GUID_TYPE            *GuidHob;\r
+  EDKII_MICROCODE_PATCH_HOB    *MicrocodePathHob;\r
+\r
+  GuidHob = GetFirstGuidHob (&gEdkiiMicrocodePatchHobGuid);\r
+  if (GuidHob == NULL) {\r
+    DEBUG((DEBUG_INFO, "%a: Microcode patch cache HOB is not found.\n", __FUNCTION__));\r
+    return FALSE;\r
+  }\r
+\r
+  MicrocodePathHob = GET_GUID_HOB_DATA (GuidHob);\r
+\r
+  *Address    = MicrocodePathHob->MicrocodePatchAddress;\r
+  *RegionSize = MicrocodePathHob->MicrocodePatchRegionSize;\r
+\r
+  DEBUG((\r
+    DEBUG_INFO, "%a: MicrocodeBase = 0x%lx, MicrocodeSize = 0x%lx\n",\r
+    __FUNCTION__, *Address, *RegionSize\r
+    ));\r
+\r
+  return TRUE;\r
+}\r