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

