I add my comments. > -----Original Message----- > From: Jagadeesh Ujja [mailto:[email protected]] > Sent: Thursday, December 13, 2018 8:00 PM > To: Gao, Liming <[email protected]> > Cc: [email protected]; Zhang, Chao B <[email protected]>; Leif > Lindholm <[email protected]> > Subject: Re: [edk2] [RFC PATCH v4 00/12] Extend secure variable service to be > usable from Standalone MM > > Hi Liming > > On Wed, Dec 12, 2018 at 8:44 PM Gao, Liming <[email protected]> wrote: > > > > This version is better. I have some comments on edk2 coding style. > > Thank you for your review. Please see reply to your comments below. > > > > > 1. This patch set can't be applied in edk2 trunk. Seemly, they base on > > previous version edk2. > > The v4 patchset was based on the tip of the edk2 master branch on the > day it was posted. The commit id on which this series was based is > "f7f94ffe". > So, can you fork edk2 tree and upload these changes into your branch in fork edk2 tree? If so, it will be easy for review.
> > 2. Pcd is for Standalone MM Code, not specific for Variable. So, I suggest > > to use the generic name PcdStandaloneMmCodeEnabled. Its > description is also required to be updated. > > The intention of the changes done in the patchset is to reuse the > variable service driver in MM_STANDALONE mode. There could be > platforms that enable Standalone MM mode but would not want a secure > storage for EFI variables. In which case, the PCD named > PcdStandaloneMmCodeEnabled would not be sufficient. And this the > reason it was named " PcdStandaloneMmVariableEnabled". > I see this PCD is also used in CryptoPkg/Library/BaseCryptLib/SysCall/TimerWrapper.c. So, I understand it is general purpose, not only for Variable. If it is for Variable only, please define this PCD into MdeModulePkg instead of MdePkg. > > 3. Library header file name (StandaloneMmServicesTableLib.h) is also > > library class name. Library class name and header file mapping > is required to be listed in MdePkg.dec file [LibraryClasses] section. And, > this header file doesn't need to include Library/DebugLib.h, > because it doesn't depend on it. > > 4. Library implementation INF file (StandaloneMmRuntimeDxe.inf) should list > > its library class name in LIBRARY_CLASS of [Defines] > section. Its library class name is StandaloneMmServicesTableLib. And, MdePkg > library implementation depends on MdePkg.dec only in > [Packages] section. > > 5. Library implementation should implement all interfaces defined in > > library class header file. StandaloneMmRuntimeDxe library > should initialize gMmst as NULL if it has no real value. > StandaloneMmRuntimeDxe library doesn't depend on any other library class. It > doesn't need to list other library class in its [LibraryClasses] section of > INF file. > > Point 3, 4 and 5 will be fixed > > > 6. When other module depends on this library class header file, it should > > list StandaloneMmServicesTableLib in its [LibraryClasses] > section of INF file. > > 7. Platform DSC also needs to list LibraryClassName|Library implementation > > INF in [LibraryClasses] section. > > Points 6 and 7 are taken care and are part of edk2platform specific > changes, will post those changes soon > > > 8. I don't suggest to add AsmLfence API in BaseLib for AArch64, because it > > is X86 specific API. I suggest to update Variable driver with > the wrapper function FenceFunc() for AsmLfence() and MemoryFence(). FenceFunc > can be implemented for the different arch in > Variable driver. Variable driver will call FenceFunc() instead of > AsmLfence(). So, only variable driver is required to be updated. There is > no change in BaseLib. > > > Okay, the variable driver can be updated to call a wrapper > "FenceFunc()" but wouldn't it be useful to add the architecture > specific implantation of this in BaseLib. In that way, not just the > variable driver but other drivers can use this implementation of > "FenceFunc()". For instance, > FaultTolerantWriteDxe/FaultTolerantWriteSmm.c does calls to > AsmLfence() and an architecture specific implementation of > "FenceFunc()" in BaseLib can be reused in FaultTolerantWriteDxe driver > as well. > Now, there are two drivers VariableSmm and FaultTolerantWriteSmm that have this usage. For sharing the code, I prefer not to add new API, and change AsmLfence() as the generic API for all processors. It is similar to current patch. But, I would like to see one AsmLfence() declaration in BaseLib.h. Its description can list the different behavior for the different processors. Then, you add its implementation for Arm and AArch64 arch. > > > -----Original Message----- > > > From: Jagadeesh Ujja [mailto:[email protected]] > > > Sent: Tuesday, December 11, 2018 2:22 PM > > > To: [email protected]; Gao, Liming <[email protected]>; Zhang, > > > Chao B <[email protected]>; > [email protected] > > > Subject: [RFC PATCH v4 00/12] Extend secure variable service to be usable > > > from Standalone MM > > > > > > Changes since v3: > > > - Addressed all the comments from Liming Gao > > > - Added a AArch64 implementation of AsmLfence which is a wrapper for > > > MemoryFence. The changes in variable service driver in v3 of this > > > patchset that used MemoryFence instead of AsmLfence have been removed. > > > - Added StandaloneMmServicesTableLib.h and StandaloneMmRuntimeDxe > > > library into MdePkg. > > > - Renamed PcdStandaloneMmEnable as PcdStandaloneMmVariableEnabled and > > > added to in to MdePkg. > > > - Now with above changes, edk2 packages don't need to depend on > > > StandaloneMmPkg/StandaloneMmPkg.dec > > > - Addressed comments from Ting Ye > > > - Removed the hacks in the v3 version. > > > - Will relook into the “TimerWrapp.c” file and add a appropriate > > > implementation of this for MM Standalone mode code. > > > > > > Changes since v2: > > > - Added 'Contributed-under' tag, removed Change-ID tag and > > > maintained a single signed-off-by for the all the patches. > > > > > > Changes since v1: > > > - Addressed all the comments from Liming Gao > > > - Removed the use of #ifdef/#else/#endif and used a Pcd instead to > > > select between MM and non-MM paths. > > > - Removed all dependencies on edk2-platforms. > > > - Dropped the use of mMmst and used gSmst instead. > > > - Added a dummy implementation UefiRuntimeServiceTableLib for > > > MM_STANDALONE usage > > > - Replaced all uses of AsmLfence with MemoryFence from variable > > > service code. > > > - Add a new StandaloneMmRuntimeDxe library to for use by non-MM code. > > > > > > This RFC patch series extends the existing secure variable service > > > support for > > > use with Standalone MM. This is applicable to paltforms that use > > > Standalone > > > Management Mode to protect access to non-volatile memory (NOR flash in > > > case > > > of these patches) used to store the secure EFI variables. > > > > > > The first patch pulls in additional libraries from the staging branch of > > > StandaloneMmPkg into the edk2's StandaloneMmPkg. The existing secure > > > variable > > > service implementation supports only the traditional MM mode and so the > > > rest > > > of the patches extends the existing secure variable service support to be > > > useable with Standalone MM mode as well. > > > > > > This patch series is being posted as an RFC to get feedback on the > > > approach taken > > > in these patches. > > > > > > Jagadeesh Ujja (12): > > > StandaloneMmPkg: Pull in additonal libraries from staging branch > > > MdePkg: Add a PCD to enable secure storage of variables > > > MdePkg/Include: add StandaloneMmServicesTableLib header file > > > MdePkg/Library/BaseLib/AArch64: Add AsmLfence function > > > MdePkg/Library: Add StandaloneMmRuntimeDxe library > > > MdeModulePkg/FaultTolerantWriteDxe: allow reusability as a MM driver > > > MdeModulePkg/Variable/RuntimeDxe: adapt for usability with MM > > > Standalone > > > MdeModulePkg/Variable/RuntimeDxe: adapt as a MM Standalone driver > > > MdeModulePkg/VarCheckLib: allow MM_STANDALONE drivers to use this > > > library > > > ArmPlatformPkg/NorFlashDxe: allow reusability as a MM driver > > > SecurityPkg/AuthVariableLib: allow MM_STANDALONE drivers to use this > > > library > > > CryptoPkg/BaseCryptLib: allow MM_STANDALONE drivers to use this > > > library > > > > > > ArmPlatformPkg/Drivers/NorFlashDxe/NorFlashBlockIoDxe.c > > > | 2 +- > > > ArmPlatformPkg/Drivers/NorFlashDxe/NorFlashDxe.c > > > | 210 ++++- > > > ArmPlatformPkg/Drivers/NorFlashDxe/NorFlashDxe.h > > > | 4 +- > > > ArmPlatformPkg/Drivers/NorFlashDxe/NorFlashDxe.inf > > > | 3 + > > > ArmPlatformPkg/Drivers/NorFlashDxe/NorFlashFvbDxe.c > > > | 96 +-- > > > ArmPlatformPkg/Drivers/NorFlashDxe/NorFlashStandaloneMm.inf > > > | 76 ++ > > > CryptoPkg/Library/BaseCryptLib/BaseCryptLib.inf > > > | 7 +- > > > CryptoPkg/Library/BaseCryptLib/RuntimeCryptLib.inf > > > | 4 + > > > CryptoPkg/Library/BaseCryptLib/SysCall/TimerWrapper.c > > > | 15 +- > > > MdeModulePkg/Library/VarCheckLib/VarCheckLib.inf > > > | 5 +- > > > MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteDxe.inf > > > | 1 + > > > MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteSmm.c > > > | 203 +++-- > > > > > > MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteStandaloneMm.inf > > > | 101 +++ > > > MdeModulePkg/Universal/FaultTolerantWriteDxe/UpdateWorkingBlock.c > > > | 27 +- > > > MdeModulePkg/Universal/Variable/RuntimeDxe/Variable.c > > > | 37 +- > > > MdeModulePkg/Universal/Variable/RuntimeDxe/VariableRuntimeDxe.inf > > > | 1 + > > > MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmm.c > > > | 201 ++++- > > > MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmmRuntimeDxe.c > > > | 31 +- > > > MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmmRuntimeDxe.inf > > > | 3 + > > > MdeModulePkg/Universal/Variable/RuntimeDxe/VariableStandaloneMm.inf > > > | 132 ++++ > > > MdePkg/Include/Library/BaseLib.h > > > | 10 + > > > MdePkg/Include/Library/StandaloneMmServicesTableLib.h > > > | 45 ++ > > > MdePkg/Library/BaseLib/AArch64/AsmLfence.S > > > | 42 + > > > MdePkg/Library/BaseLib/AArch64/AsmLfence.asm > > > | 41 + > > > MdePkg/Library/BaseLib/BaseLib.inf > > > | 2 + > > > MdePkg/Library/StandaloneMmRuntimeDxe/StandaloneMmRuntimeDxe.c > > > | 36 + > > > MdePkg/Library/StandaloneMmRuntimeDxe/StandaloneMmRuntimeDxe.inf > > > | 42 + > > > MdePkg/MdePkg.dec > > > | 5 + > > > SecurityPkg/Library/AuthVariableLib/AuthVariableLib.inf > > > | 5 +- > > > > > > StandaloneMmPkg/Library/StandaloneMmCoreHobLib/StandaloneMmCoreHobLib.inf > > > | 2 +- > > > > > > StandaloneMmPkg/Library/StandaloneMmHobLib/AArch64/StandaloneMmCoreHobLibInternal.c > > > | 64 ++ > > > StandaloneMmPkg/Library/StandaloneMmHobLib/StandaloneMmHobLib.c > > > | 655 > > > ++++++++++++++++ > > > StandaloneMmPkg/Library/StandaloneMmHobLib/StandaloneMmHobLib.inf > > > | 48 ++ > > > > > > StandaloneMmPkg/Library/StandaloneMmMemoryAllocationLib/StandaloneMmMemoryAllocationLib.c > > > | 824 > > > ++++++++++++++++++++ > > > > > > StandaloneMmPkg/Library/StandaloneMmMemoryAllocationLib/StandaloneMmMemoryAllocationLib.inf > > > | 45 ++ > > > > > > StandaloneMmPkg/Library/StandaloneMmServicesTableLib/StandaloneMmServicesTableLib.c > > > | 64 ++ > > > > > > StandaloneMmPkg/Library/StandaloneMmServicesTableLib/StandaloneMmServicesTableLib.inf > > > | 36 + > > > 37 files changed, 2894 insertions(+), 231 deletions(-) > > > create mode 100644 > > > ArmPlatformPkg/Drivers/NorFlashDxe/NorFlashStandaloneMm.inf > > > create mode 100644 > > > MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteStandaloneMm.inf > > > create mode 100644 > > > MdeModulePkg/Universal/Variable/RuntimeDxe/VariableStandaloneMm.inf > > > create mode 100644 MdePkg/Include/Library/StandaloneMmServicesTableLib.h > > > create mode 100644 MdePkg/Library/BaseLib/AArch64/AsmLfence.S > > > create mode 100644 MdePkg/Library/BaseLib/AArch64/AsmLfence.asm > > > create mode 100644 > > > MdePkg/Library/StandaloneMmRuntimeDxe/StandaloneMmRuntimeDxe.c > > > create mode 100644 > > > MdePkg/Library/StandaloneMmRuntimeDxe/StandaloneMmRuntimeDxe.inf > > > create mode 100644 > > > StandaloneMmPkg/Library/StandaloneMmHobLib/AArch64/StandaloneMmCoreHobLibInternal.c > > > create mode 100644 > > > StandaloneMmPkg/Library/StandaloneMmHobLib/StandaloneMmHobLib.c > > > create mode 100644 > > > StandaloneMmPkg/Library/StandaloneMmHobLib/StandaloneMmHobLib.inf > > > create mode 100644 > > > StandaloneMmPkg/Library/StandaloneMmMemoryAllocationLib/StandaloneMmMemoryAllocationLib.c > > > create mode 100644 > > > StandaloneMmPkg/Library/StandaloneMmMemoryAllocationLib/StandaloneMmMemoryAllocationLib.inf > > > create mode 100644 > > > StandaloneMmPkg/Library/StandaloneMmServicesTableLib/StandaloneMmServicesTableLib.c > > > create mode 100644 > > > StandaloneMmPkg/Library/StandaloneMmServicesTableLib/StandaloneMmServicesTableLib.inf > > > > > > -- > > > 2.7.4 > > > > _______________________________________________ > > 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

