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

Reply via email to