**/\r
VOID\r
MicrocodeDetect (\r
- IN CPU_MP_DATA *CpuMpData,\r
- IN UINTN ProcessorNumber\r
+ IN CPU_MP_DATA *CpuMpData,\r
+ IN UINTN ProcessorNumber\r
)\r
{\r
- CPU_MICROCODE_HEADER *Microcode;\r
- UINTN MicrocodeEnd;\r
- CPU_AP_DATA *BspData;\r
- UINT32 LatestRevision;\r
- CPU_MICROCODE_HEADER *LatestMicrocode;\r
- UINT32 ThreadId;\r
- EDKII_PEI_MICROCODE_CPU_ID MicrocodeCpuId;\r
+ CPU_MICROCODE_HEADER *Microcode;\r
+ UINTN MicrocodeEnd;\r
+ CPU_AP_DATA *BspData;\r
+ UINT32 LatestRevision;\r
+ CPU_MICROCODE_HEADER *LatestMicrocode;\r
+ UINT32 ThreadId;\r
+ EDKII_PEI_MICROCODE_CPU_ID MicrocodeCpuId;\r
\r
if (CpuMpData->MicrocodePatchRegionSize == 0) {\r
//\r
\r
GetProcessorMicrocodeCpuId (&MicrocodeCpuId);\r
\r
- if (ProcessorNumber != (UINTN) CpuMpData->BspNumber) {\r
+ if (ProcessorNumber != (UINTN)CpuMpData->BspNumber) {\r
//\r
// Direct use microcode of BSP if AP is the same as BSP.\r
// Assume BSP calls this routine() before AP.\r
BspData = &(CpuMpData->CpuData[CpuMpData->BspNumber]);\r
if ((BspData->ProcessorSignature == MicrocodeCpuId.ProcessorSignature) &&\r
(BspData->PlatformId == MicrocodeCpuId.PlatformId) &&\r
- (BspData->MicrocodeEntryAddr != 0)) {\r
- LatestMicrocode = (CPU_MICROCODE_HEADER *)(UINTN) BspData->MicrocodeEntryAddr;\r
+ (BspData->MicrocodeEntryAddr != 0))\r
+ {\r
+ LatestMicrocode = (CPU_MICROCODE_HEADER *)(UINTN)BspData->MicrocodeEntryAddr;\r
LatestRevision = LatestMicrocode->UpdateRevision;\r
goto LoadMicrocode;\r
}\r
//\r
LatestRevision = 0;\r
LatestMicrocode = NULL;\r
- Microcode = (CPU_MICROCODE_HEADER *) (UINTN) CpuMpData->MicrocodePatchAddress;\r
- MicrocodeEnd = (UINTN) Microcode + (UINTN) CpuMpData->MicrocodePatchRegionSize;\r
+ Microcode = (CPU_MICROCODE_HEADER *)(UINTN)CpuMpData->MicrocodePatchAddress;\r
+ MicrocodeEnd = (UINTN)Microcode + (UINTN)CpuMpData->MicrocodePatchRegionSize;\r
\r
do {\r
- if (!IsValidMicrocode (Microcode, MicrocodeEnd - (UINTN) Microcode, LatestRevision, &MicrocodeCpuId, 1, TRUE)) {\r
+ if (!IsValidMicrocode (Microcode, MicrocodeEnd - (UINTN)Microcode, LatestRevision, &MicrocodeCpuId, 1, TRUE)) {\r
//\r
// It is the padding data between the microcode patches for microcode patches alignment.\r
// Because the microcode patch is the multiple of 1-KByte, the padding data should not\r
// alignment value should be larger than 1-KByte. We could skip SIZE_1KB padding data to\r
// find the next possible microcode patch header.\r
//\r
- Microcode = (CPU_MICROCODE_HEADER *) ((UINTN) Microcode + SIZE_1KB);\r
+ Microcode = (CPU_MICROCODE_HEADER *)((UINTN)Microcode + SIZE_1KB);\r
continue;\r
}\r
+\r
LatestMicrocode = Microcode;\r
LatestRevision = LatestMicrocode->UpdateRevision;\r
\r
- Microcode = (CPU_MICROCODE_HEADER *) (((UINTN) Microcode) + GetMicrocodeLength (Microcode));\r
- } while ((UINTN) Microcode < MicrocodeEnd);\r
+ Microcode = (CPU_MICROCODE_HEADER *)(((UINTN)Microcode) + GetMicrocodeLength (Microcode));\r
+ } while ((UINTN)Microcode < MicrocodeEnd);\r
\r
LoadMicrocode:\r
if (LatestRevision != 0) {\r
// patch header) for each processor even it's the same as the loaded one.\r
// It will be used when building the microcode patch cache HOB.\r
//\r
- CpuMpData->CpuData[ProcessorNumber].MicrocodeEntryAddr = (UINTN) LatestMicrocode;\r
+ CpuMpData->CpuData[ProcessorNumber].MicrocodeEntryAddr = (UINTN)LatestMicrocode;\r
}\r
\r
if (LatestRevision > GetProcessorMicrocodeSignature ()) {\r
//\r
LoadMicrocode (LatestMicrocode);\r
}\r
+\r
//\r
// It's possible that the microcode fails to load. Just capture the CPU microcode revision after loading.\r
//\r
**/\r
VOID\r
ShadowMicrocodePatchWorker (\r
- IN OUT CPU_MP_DATA *CpuMpData,\r
- IN MICROCODE_PATCH_INFO *Patches,\r
- IN UINTN PatchCount,\r
- IN UINTN TotalLoadSize\r
+ IN OUT CPU_MP_DATA *CpuMpData,\r
+ IN MICROCODE_PATCH_INFO *Patches,\r
+ IN UINTN PatchCount,\r
+ IN UINTN TotalLoadSize\r
)\r
{\r
- UINTN Index;\r
- VOID *MicrocodePatchInRam;\r
- UINT8 *Walker;\r
+ UINTN Index;\r
+ VOID *MicrocodePatchInRam;\r
+ UINT8 *Walker;\r
\r
ASSERT ((Patches != NULL) && (PatchCount != 0));\r
\r
for (Walker = MicrocodePatchInRam, Index = 0; Index < PatchCount; Index++) {\r
CopyMem (\r
Walker,\r
- (VOID *) Patches[Index].Address,\r
+ (VOID *)Patches[Index].Address,\r
Patches[Index].Size\r
);\r
Walker += Patches[Index].Size;\r
//\r
// Update the microcode patch related fields in CpuMpData\r
//\r
- CpuMpData->MicrocodePatchAddress = (UINTN) MicrocodePatchInRam;\r
+ CpuMpData->MicrocodePatchAddress = (UINTN)MicrocodePatchInRam;\r
CpuMpData->MicrocodePatchRegionSize = TotalLoadSize;\r
\r
DEBUG ((\r
DEBUG_INFO,\r
"%a: Required microcode patches have been loaded at 0x%lx, with size 0x%lx.\n",\r
- __FUNCTION__, CpuMpData->MicrocodePatchAddress, CpuMpData->MicrocodePatchRegionSize\r
+ __FUNCTION__,\r
+ CpuMpData->MicrocodePatchAddress,\r
+ CpuMpData->MicrocodePatchRegionSize\r
));\r
\r
return;\r
**/\r
VOID\r
ShadowMicrocodePatchByPcd (\r
- IN OUT CPU_MP_DATA *CpuMpData\r
+ IN OUT CPU_MP_DATA *CpuMpData\r
)\r
{\r
- UINTN Index;\r
- CPU_MICROCODE_HEADER *MicrocodeEntryPoint;\r
- UINTN MicrocodeEnd;\r
- UINTN TotalSize;\r
- MICROCODE_PATCH_INFO *PatchInfoBuffer;\r
- UINTN MaxPatchNumber;\r
- UINTN PatchCount;\r
- UINTN TotalLoadSize;\r
- EDKII_PEI_MICROCODE_CPU_ID *MicrocodeCpuIds;\r
- BOOLEAN Valid;\r
+ UINTN Index;\r
+ CPU_MICROCODE_HEADER *MicrocodeEntryPoint;\r
+ UINTN MicrocodeEnd;\r
+ UINTN TotalSize;\r
+ MICROCODE_PATCH_INFO *PatchInfoBuffer;\r
+ UINTN MaxPatchNumber;\r
+ UINTN PatchCount;\r
+ UINTN TotalLoadSize;\r
+ EDKII_PEI_MICROCODE_CPU_ID *MicrocodeCpuIds;\r
+ BOOLEAN Valid;\r
\r
//\r
// Initialize the microcode patch related fields in CpuMpData as the values\r
CpuMpData->MicrocodePatchAddress = PcdGet64 (PcdCpuMicrocodePatchAddress);\r
CpuMpData->MicrocodePatchRegionSize = PcdGet64 (PcdCpuMicrocodePatchRegionSize);\r
\r
- MicrocodeEntryPoint = (CPU_MICROCODE_HEADER *) (UINTN) CpuMpData->MicrocodePatchAddress;\r
- MicrocodeEnd = (UINTN) MicrocodeEntryPoint +\r
- (UINTN) CpuMpData->MicrocodePatchRegionSize;\r
- if ((MicrocodeEntryPoint == NULL) || ((UINTN) MicrocodeEntryPoint == MicrocodeEnd)) {\r
+ MicrocodeEntryPoint = (CPU_MICROCODE_HEADER *)(UINTN)CpuMpData->MicrocodePatchAddress;\r
+ MicrocodeEnd = (UINTN)MicrocodeEntryPoint +\r
+ (UINTN)CpuMpData->MicrocodePatchRegionSize;\r
+ if ((MicrocodeEntryPoint == NULL) || ((UINTN)MicrocodeEntryPoint == MicrocodeEnd)) {\r
//\r
// There is no microcode patches\r
//\r
do {\r
Valid = IsValidMicrocode (\r
MicrocodeEntryPoint,\r
- MicrocodeEnd - (UINTN) MicrocodeEntryPoint,\r
+ MicrocodeEnd - (UINTN)MicrocodeEntryPoint,\r
0,\r
MicrocodeCpuIds,\r
CpuMpData->CpuCount,\r
//\r
// Padding data between the microcode patches, skip 1KB to check next entry.\r
//\r
- MicrocodeEntryPoint = (CPU_MICROCODE_HEADER *) (((UINTN) MicrocodeEntryPoint) + SIZE_1KB);\r
+ MicrocodeEntryPoint = (CPU_MICROCODE_HEADER *)(((UINTN)MicrocodeEntryPoint) + SIZE_1KB);\r
continue;\r
}\r
\r
if (PatchInfoBuffer == NULL) {\r
goto OnExit;\r
}\r
+\r
MaxPatchNumber = MaxPatchNumber * 2;\r
}\r
\r
//\r
// Store the information of this microcode patch\r
//\r
- PatchInfoBuffer[PatchCount - 1].Address = (UINTN) MicrocodeEntryPoint;\r
+ PatchInfoBuffer[PatchCount - 1].Address = (UINTN)MicrocodeEntryPoint;\r
PatchInfoBuffer[PatchCount - 1].Size = TotalSize;\r
- TotalLoadSize += TotalSize;\r
+ TotalLoadSize += TotalSize;\r
\r
//\r
// Process the next microcode patch\r
//\r
- MicrocodeEntryPoint = (CPU_MICROCODE_HEADER *) ((UINTN) MicrocodeEntryPoint + TotalSize);\r
- } while ((UINTN) MicrocodeEntryPoint < MicrocodeEnd);\r
+ MicrocodeEntryPoint = (CPU_MICROCODE_HEADER *)((UINTN)MicrocodeEntryPoint + TotalSize);\r
+ } while ((UINTN)MicrocodeEntryPoint < MicrocodeEnd);\r
\r
if (PatchCount != 0) {\r
DEBUG ((\r
DEBUG_INFO,\r
"%a: 0x%x microcode patches will be loaded into memory, with size 0x%x.\n",\r
- __FUNCTION__, PatchCount, TotalLoadSize\r
+ __FUNCTION__,\r
+ PatchCount,\r
+ TotalLoadSize\r
));\r
\r
ShadowMicrocodePatchWorker (CpuMpData, PatchInfoBuffer, PatchCount, TotalLoadSize);\r
if (PatchInfoBuffer != NULL) {\r
FreePool (PatchInfoBuffer);\r
}\r
+\r
FreePages (MicrocodeCpuIds, EFI_SIZE_TO_PAGES (CpuMpData->CpuCount * sizeof (EDKII_PEI_MICROCODE_CPU_ID)));\r
}\r
\r
**/\r
VOID\r
ShadowMicrocodeUpdatePatch (\r
- IN OUT CPU_MP_DATA *CpuMpData\r
+ IN OUT CPU_MP_DATA *CpuMpData\r
)\r
{\r
- EFI_STATUS Status;\r
+ EFI_STATUS Status;\r
\r
Status = PlatformShadowMicrocode (CpuMpData);\r
if (EFI_ERROR (Status)) {\r
**/\r
BOOLEAN\r
GetMicrocodePatchInfoFromHob (\r
- UINT64 *Address,\r
- UINT64 *RegionSize\r
+ UINT64 *Address,\r
+ UINT64 *RegionSize\r
)\r
{\r
- EFI_HOB_GUID_TYPE *GuidHob;\r
- EDKII_MICROCODE_PATCH_HOB *MicrocodePathHob;\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
+ DEBUG ((DEBUG_INFO, "%a: Microcode patch cache HOB is not found.\n", __FUNCTION__));\r
return FALSE;\r
}\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
+ DEBUG ((\r
+ DEBUG_INFO,\r
+ "%a: MicrocodeBase = 0x%lx, MicrocodeSize = 0x%lx\n",\r
+ __FUNCTION__,\r
+ *Address,\r
+ *RegionSize\r
));\r
\r
return TRUE;\r