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

Reply via email to