Jeff,

The other option is to skip SMRR programming on APs if the base/mask are not 
valid
And have the CPU with IsMonarch TRUE do debug message and halt.

Mike

> -----Original Message-----
> From: Fan, Jeff
> Sent: Tuesday, May 17, 2016 10:33 PM
> To: Kinney, Michael D <[email protected]>; [email protected]
> Cc: Yao, Jiewen <[email protected]>; Tian, Feng <[email protected]>
> Subject: RE: [Patch V2 1/2] UefiCpuPkg/SmmCpuFeaturesLib: Add SMRR 
> PhysBase/PhysMask
> fields check
> 
> Mike,
> 
> I tested this patch and found DEBUG() cannot be printed as expected if SMM 
> Base/Mask
> values do not meet SDM requirement.
> 
> The reason is that PiSmmCpuDxeSmm driver will do SMM relocation on Aps 
> firstly and
> then do SMM relocation on BSP at last.
> That means Aps will check SMM Base/Mask firstly and run into CpuDeadLoop().
> 
> Because PiSmmCpuDxeSmm will so SMM relocation on Aps one by one in blocking 
> mode, we
> could remove BSP checking and let the first running AP print the DEBUG 
> message.
> 
> Thanks!
> Jeff
> -----Original Message-----
> From: Kinney, Michael D
> Sent: Wednesday, May 18, 2016 3:08 AM
> To: [email protected]
> Cc: Fan, Jeff; Yao, Jiewen; Tian, Feng
> Subject: [Patch V2 1/2] UefiCpuPkg/SmmCpuFeaturesLib: Add SMRR 
> PhysBase/PhysMask
> fields check
> 
> SMRR range size and alignment should follow the rules like MTRR:
> a. The minimum range size is 4 KBytes and the base address of the
>    range must be on at least a 4-KByte boundary.
> b. For ranges greater than 4 KBytes, each range must be of length
>    2^n and its base address must be aligned on a 2^n boundary, where
>    n is a value equal to or greater than 12. The base-address
>    alignment value cannot be less than its length.
> Thus, it could meet "Address_Within_Range AND PhysMask = PhysBase AND 
> PhysMask".
> 
> Cc: Jeff Fan <[email protected]>
> Cc: Jiewen Yao <[email protected]>
> Cc: Feng Tian <[email protected]>
> Contributed-under: TianoCore Contribution Agreement 1.0
> Signed-off-by: Michael Kinney <[email protected]>
> ---
>  .../Library/SmmCpuFeaturesLib/SmmCpuFeaturesLib.c     | 19 
> ++++++++++++++++++-
>  1 file changed, 18 insertions(+), 1 deletion(-)
> 
> diff --git a/UefiCpuPkg/Library/SmmCpuFeaturesLib/SmmCpuFeaturesLib.c
> b/UefiCpuPkg/Library/SmmCpuFeaturesLib/SmmCpuFeaturesLib.c
> index 3e480e1..f525926 100644
> --- a/UefiCpuPkg/Library/SmmCpuFeaturesLib/SmmCpuFeaturesLib.c
> +++ b/UefiCpuPkg/Library/SmmCpuFeaturesLib/SmmCpuFeaturesLib.c
> @@ -1,7 +1,7 @@
>  /** @file
>  The CPU specific programming for PiSmmCpuDxeSmm module.
> 
> -Copyright (c) 2010 - 2015, Intel Corporation. All rights reserved.<BR>
> +Copyright (c) 2010 - 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 @@ -245,6 +245,23 @@
> SmmCpuFeaturesInitializeProcessor (
>    // is protected and the normal mode code execution will fail.
>    //
>    if (mSmrrSupported) {
> +    //
> +    // SMRR size cannot be less than 4-KBytes
> +    // SMRR size must be of length 2^n
> +    // SMRR base alignment cannot be less than SMRR length
> +    //
> +    if ((CpuHotPlugData->SmrrSize < SIZE_4KB) ||
> +        (CpuHotPlugData->SmrrSize != GetPowerOfTwo32 
> (CpuHotPlugData->SmrrSize)) ||
> +        ((CpuHotPlugData->SmrrBase & ~(CpuHotPlugData->SmrrSize - 1)) !=
> CpuHotPlugData->SmrrBase)) {
> +      //
> +      // Print message if CPU is BSP
> +      //
> +      if ((ProcessorInfo->StatusFlag & PROCESSOR_AS_BSP_BIT) != 0) {
> +        DEBUG ((EFI_D_ERROR, "SMM Base/Size does not meet alignment/size
> requirement!\n"));
> +      }
> +      CpuDeadLoop ();
> +    }
> +
>      AsmWriteMsr64 (mSmrrPhysBaseMsr, CpuHotPlugData->SmrrBase |
> MTRR_CACHE_WRITE_BACK);
>      AsmWriteMsr64 (mSmrrPhysMaskMsr, (~(CpuHotPlugData->SmrrSize - 1) &
> EFI_MSR_SMRR_MASK));
>      mSmrrEnabled[CpuIndex] = FALSE;
> --
> 2.6.3.windows.1

_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to