Reviewed-by: [email protected]

> -----Original Message-----
> From: edk2-devel [mailto:[email protected]] On Behalf Of
> Star Zeng
> Sent: Wednesday, October 24, 2018 11:32 AM
> To: [email protected]
> Cc: Yao, Jiewen <[email protected]>; Zeng, Star <[email protected]>
> Subject: [edk2] [PATCH] IntelSiliconPkg VTdDxe: Option to force no early
> access attr request
> 
> REF: https://bugzilla.tianocore.org/show_bug.cgi?id=1272
> 
> To have high confidence in usage for platform, add option (BIT2 of
> PcdVTdPolicyPropertyMask) to force no IOMMU access attribute request
> recording before DMAR table is installed.
> 
> Check PcdVTdPolicyPropertyMask BIT2 before RequestAccessAttribute()
> and ProcessRequestedAccessAttribute(), then RequestAccessAttribute(),
> ProcessRequestedAccessAttribute() and mAccessRequestXXX variables
> could be optimized by compiler when PcdVTdPolicyPropertyMask BIT2 = 1.
> 
> Test done:
> 1: Created case that has IOMMU access attribute request before DMAR
>    table is installed, ASSERT was triggered after setting
>    PcdVTdPolicyPropertyMask BIT2 to 1.
> 
> 2. Confirmed RequestAccessAttribute(), ProcessRequestedAccessAttribute()
>    and mAccessRequestXXX variables were optimized by compiler after
>    setting PcdVTdPolicyPropertyMask BIT2 to 1.
> 
> Cc: Jiewen Yao <[email protected]>
> Cc: Rangasai V Chaganty <[email protected]>
> Contributed-under: TianoCore Contribution Agreement 1.1
> Signed-off-by: Star Zeng <[email protected]>
> ---
>  IntelSiliconPkg/Feature/VTd/IntelVTdDxe/DmaProtection.c | 8 +++++++-
>  IntelSiliconPkg/Feature/VTd/IntelVTdDxe/IntelVTdDxe.c   | 7 +++++++
>  IntelSiliconPkg/IntelSiliconPkg.dec                     | 1 +
>  3 files changed, 15 insertions(+), 1 deletion(-)
> 
> diff --git a/IntelSiliconPkg/Feature/VTd/IntelVTdDxe/DmaProtection.c
> b/IntelSiliconPkg/Feature/VTd/IntelVTdDxe/DmaProtection.c
> index 86d50eb6f288..7784545631b3 100644
> --- a/IntelSiliconPkg/Feature/VTd/IntelVTdDxe/DmaProtection.c
> +++ b/IntelSiliconPkg/Feature/VTd/IntelVTdDxe/DmaProtection.c
> @@ -515,7 +515,13 @@ SetupVtd (
> 
>    ParseDmarAcpiTableRmrr ();
> 
> -  ProcessRequestedAccessAttribute ();
> +  if ((PcdGet8 (PcdVTdPolicyPropertyMask) & BIT2) == 0) {
> +    //
> +    // Support IOMMU access attribute request recording before DMAR
> table is installed.
> +    // Here is to process the requests.
> +    //
> +    ProcessRequestedAccessAttribute ();
> +  }
> 
>    for (Index = 0; Index < mVtdUnitNumber; Index++) {
>      DEBUG ((DEBUG_INFO,"VTD Unit %d (Segment: %04x)\n", Index,
> mVtdUnitInformation[Index].Segment));
> diff --git a/IntelSiliconPkg/Feature/VTd/IntelVTdDxe/IntelVTdDxe.c
> b/IntelSiliconPkg/Feature/VTd/IntelVTdDxe/IntelVTdDxe.c
> index 25d7c80af1d4..09948ce50e94 100644
> --- a/IntelSiliconPkg/Feature/VTd/IntelVTdDxe/IntelVTdDxe.c
> +++ b/IntelSiliconPkg/Feature/VTd/IntelVTdDxe/IntelVTdDxe.c
> @@ -254,6 +254,13 @@ VTdSetAttribute (
>      // Record the entry to driver global variable.
>      // As such once VTd is activated, the setting can be adopted.
>      //
> +    if ((PcdGet8 (PcdVTdPolicyPropertyMask) & BIT2) != 0) {
> +      //
> +      // Force no IOMMU access attribute request recording before
> DMAR table is installed.
> +      //
> +      ASSERT_EFI_ERROR (EFI_NOT_READY);
> +      return EFI_NOT_READY;
> +    }
>      Status = RequestAccessAttribute (Segment, SourceId, DeviceAddress,
> Length, IoMmuAccess);
>    } else {
>      PERF_CODE (
> diff --git a/IntelSiliconPkg/IntelSiliconPkg.dec
> b/IntelSiliconPkg/IntelSiliconPkg.dec
> index b9646d773b95..900e8f63c64d 100644
> --- a/IntelSiliconPkg/IntelSiliconPkg.dec
> +++ b/IntelSiliconPkg/IntelSiliconPkg.dec
> @@ -64,6 +64,7 @@ [PcdsFixedAtBuild, PcdsPatchableInModule,
> PcdsDynamic, PcdsDynamicEx]
>    ## The mask is used to control VTd behavior.<BR><BR>
>    #  BIT0: Enable IOMMU during boot (If DMAR table is installed in DXE. If
> VTD_INFO_PPI is installed in PEI.)
>    #  BIT1: Enable IOMMU when transfer control to OS (ExitBootService in
> normal boot. EndOfPEI in S3)
> +  #  BIT2: Force no IOMMU access attribute request recording before
> DMAR table is installed.
>    # @Prompt The policy for VTd driver behavior.
> 
> gIntelSiliconPkgTokenSpaceGuid.PcdVTdPolicyPropertyMask|1|UINT8|0x000
> 00002
> 
> --
> 2.7.0.windows.1
> 
> _______________________________________________
> edk2-devel mailing list
> [email protected]
> https://lists.01.org/mailman/listinfo/edk2-devel
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to