Thanks Jeff, Please use @param[in] instead of @param. Reviewed-by: Giri P Mudusuru <[email protected]>
> -----Original Message----- > From: Fan, Jeff > Sent: Friday, July 1, 2016 12:02 AM > To: [email protected] > Cc: Kinney, Michael D <[email protected]>; Tian, Feng > <[email protected]>; Mudusuru, Giri P <[email protected]> > Subject: [Patch 2/3] UefiCpuPkg/CpuMpPei: Dump message if microcode > signature not matched > > Verification microcode signature is one enhancement and not one > requirement from > IA32 SDM. This update is just to dump debug message instead of ASSERT() if > the > updated microcode signature does not match the loaded microcode > signature. > > Cc: Michael Kinney <[email protected]> > Cc: Feng Tian <[email protected]> > Cc: Giri P Mudusuru <[email protected]> > Contributed-under: TianoCore Contribution Agreement 1.0 > Signed-off-by: Jeff Fan <[email protected]> > --- > UefiCpuPkg/CpuMpPei/CpuMpPei.c | 4 ++-- > UefiCpuPkg/CpuMpPei/CpuMpPei.h | 10 ++++++++++ > UefiCpuPkg/CpuMpPei/Microcode.c | 33 +++++++++++++++++++------------ > -- > UefiCpuPkg/CpuMpPei/Microcode.h | 9 --------- > 4 files changed, 31 insertions(+), 25 deletions(-) > > diff --git a/UefiCpuPkg/CpuMpPei/CpuMpPei.c > b/UefiCpuPkg/CpuMpPei/CpuMpPei.c > index 4ed1da9..bccff24 100644 > --- a/UefiCpuPkg/CpuMpPei/CpuMpPei.c > +++ b/UefiCpuPkg/CpuMpPei/CpuMpPei.c > @@ -302,7 +302,7 @@ ApCFunction ( > // Sync BSP's Mtrr table to all wakeup APs and load microcode on APs. > // > MtrrSetAllMtrrs (&PeiCpuMpData->MtrrTable); > - MicrocodeDetect (); > + MicrocodeDetect (PeiCpuMpData); > PeiCpuMpData->CpuData[ProcessorNumber].State = CpuStateIdle; > } else { > // > @@ -624,7 +624,7 @@ CountProcessorNumber ( > // > // Load Microcode on BSP > // > - MicrocodeDetect (); > + MicrocodeDetect (PeiCpuMpData); > // > // Store BSP's MTRR setting > // > diff --git a/UefiCpuPkg/CpuMpPei/CpuMpPei.h > b/UefiCpuPkg/CpuMpPei/CpuMpPei.h > index afbcb6e..5e56934 100644 > --- a/UefiCpuPkg/CpuMpPei/CpuMpPei.h > +++ b/UefiCpuPkg/CpuMpPei/CpuMpPei.h > @@ -321,4 +321,14 @@ SecPlatformInformation2 ( > OUT EFI_SEC_PLATFORM_INFORMATION_RECORD2 > *PlatformInformationRecord2 > ); > > +/** > + Detect whether specified processor can find matching microcode patch > and load it. > + > + @param PeiCpuMpData Pointer to PEI CPU MP Data > +**/ > +VOID > +MicrocodeDetect ( > + IN PEI_CPU_MP_DATA *PeiCpuMpData > + ); > + > #endif > diff --git a/UefiCpuPkg/CpuMpPei/Microcode.c > b/UefiCpuPkg/CpuMpPei/Microcode.c > index 8e7f3b0..51a0737 100644 > --- a/UefiCpuPkg/CpuMpPei/Microcode.c > +++ b/UefiCpuPkg/CpuMpPei/Microcode.c > @@ -36,10 +36,11 @@ GetCurrentMicrocodeSignature ( > /** > Detect whether specified processor can find matching microcode patch and > load it. > > + @param PeiCpuMpData Pointer to PEI CPU MP Data > **/ > VOID > MicrocodeDetect ( > - VOID > + IN PEI_CPU_MP_DATA *PeiCpuMpData > ) > { > UINT64 MicrocodePatchAddress; > @@ -187,25 +188,29 @@ MicrocodeDetect ( > MicrocodeEntryPoint = (EFI_CPU_MICROCODE_HEADER *) (((UINTN) > MicrocodeEntryPoint) + TotalSize); > } while (((UINTN) MicrocodeEntryPoint < MicrocodeEnd)); > > - if (LatestRevision > 0) { > + if (LatestRevision > CurrentRevision) { > // > // BIOS only authenticate updates that contain a numerically larger > revision > // than the currently loaded revision, where Current Signature < New > Update > // Revision. A processor with no loaded update is considered to have a > // revision equal to zero. > // > - if (LatestRevision > GetCurrentMicrocodeSignature ()) { > - AsmWriteMsr64 ( > - EFI_MSR_IA32_BIOS_UPDT_TRIG, > - (UINT64) (UINTN) MicrocodeInfo.MicrocodeData > - ); > - // > - // Get and verify new microcode signature > - // > - ASSERT (LatestRevision == GetCurrentMicrocodeSignature ()); > - MicrocodeInfo.Load = TRUE; > - } else { > - MicrocodeInfo.Load = FALSE; > + AsmWriteMsr64 ( > + EFI_MSR_IA32_BIOS_UPDT_TRIG, > + (UINT64) (UINTN) MicrocodeInfo.MicrocodeData > + ); > + // > + // Get and check new microcode signature > + // > + CurrentRevision = GetCurrentMicrocodeSignature (); > + if (CurrentRevision != LatestRevision) { > + AcquireSpinLock(&PeiCpuMpData->MpLock); > + DEBUG ((EFI_D_ERROR, "Updated microcode signature [0x%08x] does > not match \ > + loaded microcode signature [0x%08x]\n", CurrentRevision, > LatestRevision)); > + ReleaseSpinLock(&PeiCpuMpData->MpLock); > } > + MicrocodeInfo.Load = TRUE; > + } else { > + MicrocodeInfo.Load = FALSE; > } > } > diff --git a/UefiCpuPkg/CpuMpPei/Microcode.h > b/UefiCpuPkg/CpuMpPei/Microcode.h > index ea68669..f7d23a0 100644 > --- a/UefiCpuPkg/CpuMpPei/Microcode.h > +++ b/UefiCpuPkg/CpuMpPei/Microcode.h > @@ -56,13 +56,4 @@ typedef struct { > UINT32 ProcessorChecksum; > } EFI_CPU_MICROCODE_EXTENDED_TABLE; > > -/** > - Detect whether specified processor can find matching microcode patch and > load it. > - > -**/ > -VOID > -MicrocodeDetect ( > - VOID > - ); > - > #endif > -- > 2.7.4.windows.1 _______________________________________________ edk2-devel mailing list [email protected] https://lists.01.org/mailman/listinfo/edk2-devel

