X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=UefiCpuPkg%2FLibrary%2FMpInitLib%2FMicrocode.c;h=15629591e2444cbe217b5946520e73fb35afa24e;hb=c788c2b1ade657e01a63001e8fee621001404af7;hp=67e214d463d38b030cb4d41960d403126c818a87;hpb=348a34d984d5265ae91a6a56f0ccbc613210238d;p=mirror_edk2.git diff --git a/UefiCpuPkg/Library/MpInitLib/Microcode.c b/UefiCpuPkg/Library/MpInitLib/Microcode.c index 67e214d463..15629591e2 100644 --- a/UefiCpuPkg/Library/MpInitLib/Microcode.c +++ b/UefiCpuPkg/Library/MpInitLib/Microcode.c @@ -619,109 +619,6 @@ OnExit: return; } -/** - Shadow the required microcode patches data into memory according to FIT microcode entry. - - @param[in, out] CpuMpData The pointer to CPU MP Data structure. - - @return EFI_SUCCESS Microcode patch is shadowed into memory. - @return EFI_UNSUPPORTED FIT based microcode shadowing is not supported. - @return EFI_OUT_OF_RESOURCES No enough memory resource. - @return EFI_NOT_FOUND There is something wrong in FIT microcode entry. - -**/ -EFI_STATUS -ShadowMicrocodePatchByFit ( - IN OUT CPU_MP_DATA *CpuMpData - ) -{ - UINT64 FitPointer; - FIRMWARE_INTERFACE_TABLE_ENTRY *FitEntry; - UINT32 EntryNum; - UINT32 Index; - MICROCODE_PATCH_INFO *PatchInfoBuffer; - UINTN MaxPatchNumber; - CPU_MICROCODE_HEADER *MicrocodeEntryPoint; - UINTN PatchCount; - UINTN TotalSize; - UINTN TotalLoadSize; - - if (!FeaturePcdGet (PcdCpuShadowMicrocodeByFit)) { - return EFI_UNSUPPORTED; - } - - FitPointer = *(UINT64 *) (UINTN) FIT_POINTER_ADDRESS; - if ((FitPointer == 0) || - (FitPointer == 0xFFFFFFFFFFFFFFFF) || - (FitPointer == 0xEEEEEEEEEEEEEEEE)) { - // - // No FIT table. - // - ASSERT (FALSE); - return EFI_NOT_FOUND; - } - FitEntry = (FIRMWARE_INTERFACE_TABLE_ENTRY *) (UINTN) FitPointer; - if ((FitEntry[0].Type != FIT_TYPE_00_HEADER) || - (FitEntry[0].Address != FIT_TYPE_00_SIGNATURE)) { - // - // Invalid FIT table, treat it as no FIT table. - // - ASSERT (FALSE); - return EFI_NOT_FOUND; - } - - EntryNum = *(UINT32 *)(&FitEntry[0].Size[0]) & 0xFFFFFF; - - // - // Calculate microcode entry number - // - MaxPatchNumber = 0; - for (Index = 0; Index < EntryNum; Index++) { - if (FitEntry[Index].Type == FIT_TYPE_01_MICROCODE) { - MaxPatchNumber++; - } - } - if (MaxPatchNumber == 0) { - return EFI_NOT_FOUND; - } - - PatchInfoBuffer = AllocatePool (MaxPatchNumber * sizeof (MICROCODE_PATCH_INFO)); - if (PatchInfoBuffer == NULL) { - return EFI_OUT_OF_RESOURCES; - } - - // - // Fill up microcode patch info buffer according to FIT table. - // - PatchCount = 0; - TotalLoadSize = 0; - for (Index = 0; Index < EntryNum; Index++) { - if (FitEntry[Index].Type == FIT_TYPE_01_MICROCODE) { - MicrocodeEntryPoint = (CPU_MICROCODE_HEADER *) (UINTN) FitEntry[Index].Address; - TotalSize = (MicrocodeEntryPoint->DataSize == 0) ? 2048 : MicrocodeEntryPoint->TotalSize; - if (IsMicrocodePatchNeedLoad (CpuMpData, MicrocodeEntryPoint)) { - PatchInfoBuffer[PatchCount].Address = (UINTN) MicrocodeEntryPoint; - PatchInfoBuffer[PatchCount].Size = TotalSize; - TotalLoadSize += TotalSize; - PatchCount++; - } - } - } - - if (PatchCount != 0) { - DEBUG (( - DEBUG_INFO, - "%a: 0x%x microcode patches will be loaded into memory, with size 0x%x.\n", - __FUNCTION__, PatchCount, TotalLoadSize - )); - - ShadowMicrocodePatchWorker (CpuMpData, PatchInfoBuffer, PatchCount, TotalLoadSize); - } - - FreePool (PatchInfoBuffer); - return EFI_SUCCESS; -} - /** Shadow the required microcode patches data into memory. @@ -734,7 +631,7 @@ ShadowMicrocodeUpdatePatch ( { EFI_STATUS Status; - Status = ShadowMicrocodePatchByFit (CpuMpData); + Status = PlatformShadowMicrocode (CpuMpData); if (EFI_ERROR (Status)) { ShadowMicrocodePatchByPcd (CpuMpData); }