Reviewed-by: <michael.d.kin...@intel.com> Mike
> -----Original Message----- > From: Fan, Jeff > Sent: Tuesday, March 1, 2016 11:37 PM > To: edk2-devel@lists.01.org > Cc: Tian, Feng <feng.t...@intel.com>; Kinney, Michael D > <michael.d.kin...@intel.com> > Subject: [Patch v2] UefiCpuPkg/CpuMpPei: Load microcode if found newer > revision > > Current implementation only loads the latest revision if there is no microcode > loaded. Per IA32 User Manual, we should load the newer revision by comparing > the existing microcode loaded with the updating revision. > > Cc: Feng Tian <feng.t...@intel.com> > Cc: Michael Kinney <michael.d.kin...@intel.com> > Contributed-under: TianoCore Contribution Agreement 1.0 > Signed-off-by: Jeff Fan <jeff....@intel.com> > --- > UefiCpuPkg/CpuMpPei/Microcode.c | 18 ++++++++++-------- > 1 file changed, 10 insertions(+), 8 deletions(-) > > diff --git a/UefiCpuPkg/CpuMpPei/Microcode.c b/UefiCpuPkg/CpuMpPei/Microcode.c > index 70e149b..9dcbf99 100644 > --- a/UefiCpuPkg/CpuMpPei/Microcode.c > +++ b/UefiCpuPkg/CpuMpPei/Microcode.c > @@ -1,7 +1,7 @@ > /** @file > Implementation of loading microcode on processors. > > - Copyright (c) 2015, Intel Corporation. All rights reserved.<BR> > + Copyright (c) 2015 - 2016, Intel Corporation. All rights reserved.<BR> > This program and the accompanying materials > are licensed and made available under the terms and conditions of the BSD > License > which accompanies this distribution. The full text of the license may be > found at > @@ -57,7 +57,6 @@ MicrocodeDetect ( > UINTN TotalSize; > UINT32 CheckSum32; > BOOLEAN CorrectMicrocode; > - INT32 CurrentSignature; > MICROCODE_INFO MicrocodeInfo; > > ZeroMem (&MicrocodeInfo, sizeof (MICROCODE_INFO)); > @@ -181,17 +180,20 @@ MicrocodeDetect ( > > if (LatestRevision > 0) { > // > - // Get microcode update signature of currently loaded microcode update > + // 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. > // > - CurrentSignature = GetCurrentMicrocodeSignature (); > - // > - // If no microcode update has been loaded, then trigger microcode load. > - // > - if (CurrentSignature == 0) { > + 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; > -- > 1.9.5.msysgit.0 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel