Hi Add, The FmpDevicePkg is a different way to produce FMP and the recommendation will be to use this one instead of the existing one. The concept is to provide a simpler way to produce an FMP with a library instance and a few PCD settings. It has greater flexibility in managing public keys, supports multiple public keys per FMP, and it also enables a platform to produce multiple FMP instances to support the update of different regions of a FW storage device or update different devices that have support FW updates.
I have put FmpDevicePkg and the new tools to support building capsules as RFCs to get some initial feedback. My next step is to add an edk2-staging branch with this content along with a set of complete examples around the MinnowMax platform that demonstrate the capabilities and usage. I will also create a set of Wiki pages on how to integrate this feature into a platform. Thanks, Mike > -----Original Message----- > From: edk2-devel [mailto:edk2-devel- > [email protected]] On Behalf Of Ard Biesheuvel > Sent: Wednesday, May 30, 2018 12:08 AM > To: Kinney, Michael D <[email protected]> > Cc: [email protected]; Yao, Jiewen > <[email protected]> > Subject: Re: [edk2] [RFC v3 0/4] Add FmpDevicePkg > > On 30 May 2018 at 00:37, Michael D Kinney > <[email protected]> wrote: > > https://bugzilla.tianocore.org/show_bug.cgi?id=922 > > > > Changes in V3 > > ============= > > * Change CheckLowestSupportedVersion() to > LowestSupportedVersionCheckRequired() > > * Change LockFmpDeviceAtLockEventGuid() to > LockFmpDeviceAtLockEventGuidRequired() > > * Set EDKII_FIRMWARE_MANAGEMENT_PROGRESS_PROTOCOL > Version field to 1 > > * Fix description of return values in > LowestSupportedVersionCheckRequired() > > * Fix description of return values in > LockFmpDeviceAtLockEventGuidRequired() > > > > Changes in V2 > > ============= > > * FmpDevicePkg DEC file > > + Change PcdFmpDeviceSystemResetRequired from > FeatureFlag > > to FixedAtBuild > > + Add PcdFmpDeviceTestKeySha256Digest for test key > detection. > > Set to {0} to disable test key detection. > > * FmpDevicePkg DSC file > > + Fix ARM and AARCH64 build issues > > + Update DisplayUpdateProgressLib mappings to match > patches in > > Bug_801_DisplayUpdateProgressLib_V2 > > * FmpDeviceLib Class and Instance > > + Update FmpDeviceGetSize() to return EFI_STATUS > > + Update FmpDeviceGetAttributes() to return > EFI_STATUS > > + Update FmpDeviceGetVersionString() to return > EFI_STATUS > > * FmpDxe > > + Set depex to Variable Arch Write Protocol and > Variable Lock Protocol > > + Break out test key detection in FmpDxe into > DetectTestKey.c > > + Change LockAllVars() to LockAllFmpVariables() > > + Update LockAllFmpVariables() to lock each of the > UEFI variables used. > > + Always lock UEFI variables when > PcdFmpDeviceLockEventGuid is signaled > > + Remove ComputeVersionName(). FmpDeviceLib must > provide version string > > > > Based on content from the following branch: > > > > > https://github.com/Microsoft/MS_UEFI/tree/share/MsCapsul > eSupport/MsCapsuleUpdatePkg > > > > Branch for review: > > > > > https://github.com/mdkinney/edk2/tree/Bug_922_FmpDeviceP > kg_V2 > > > > This package provides an implementation of a Firmware > Management Protocol > > instance that supports the update of firmware storage > devices using UEFI > > Capsules. The behavior of the Firmware Management > Protocol instance is > > customized using libraries and PCDs. > > > > Let me ask again: how does this code relate to the > already existing > FMP implementation we have in the edk2 tree? > > > > Cc: Sean Brogan <[email protected]> > > Cc: Jiewen Yao <[email protected]> > > Contributed-under: TianoCore Contribution Agreement > 1.1 > > Signed-off-by: Michael D Kinney > <[email protected]> > > > > Kinney, Michael D (4): > > FmpDevicePkg: Add package, library classes, and PCDs > > FmpDevicePkg: Add library instances > > FmpDevicePkg: Add FmpDxe module > > FmpDevicePkg: Add DSC file to build all package > components > > > > FmpDevicePkg/FmpDevicePkg.dec | > 132 ++ > > FmpDevicePkg/FmpDevicePkg.dsc | > 134 ++ > > FmpDevicePkg/FmpDevicePkg.uni | > 80 ++ > > FmpDevicePkg/FmpDevicePkgExtra.uni | > 18 + > > FmpDevicePkg/FmpDxe/DetectTestKey.c | > 166 +++ > > FmpDevicePkg/FmpDxe/FmpDxe.c | > 1452 ++++++++++++++++++++ > > FmpDevicePkg/FmpDxe/FmpDxe.inf | > 93 ++ > > FmpDevicePkg/FmpDxe/FmpDxe.uni | > 20 + > > FmpDevicePkg/FmpDxe/FmpDxeExtra.uni | > 18 + > > FmpDevicePkg/FmpDxe/FmpDxeLib.inf | > 90 ++ > > FmpDevicePkg/FmpDxe/VariableSupport.c | > 461 +++++++ > > FmpDevicePkg/FmpDxe/VariableSupport.h | > 180 +++ > > .../Include/Library/CapsuleUpdatePolicyLib.h | > 120 ++ > > FmpDevicePkg/Include/Library/FmpDeviceLib.h | > 405 ++++++ > > FmpDevicePkg/Include/Library/FmpPayloadHeaderLib.h | > 100 ++ > > .../CapsuleUpdatePolicyLibNull.c | > 136 ++ > > .../CapsuleUpdatePolicyLibNull.inf | > 45 + > > .../CapsuleUpdatePolicyLibNull.uni | > 17 + > > .../Library/FmpDeviceLibNull/FmpDeviceLib.c | > 427 ++++++ > > .../Library/FmpDeviceLibNull/FmpDeviceLibNull.inf | > 48 + > > .../Library/FmpDeviceLibNull/FmpDeviceLibNull.uni | > 18 + > > .../FmpPayloadHeaderLibV1/FmpPayloadHeaderLib.c | > 188 +++ > > .../FmpPayloadHeaderLibV1.inf | > 48 + > > .../FmpPayloadHeaderLibV1.uni | > 21 + > > 24 files changed, 4417 insertions(+) > > create mode 100644 FmpDevicePkg/FmpDevicePkg.dec > > create mode 100644 FmpDevicePkg/FmpDevicePkg.dsc > > create mode 100644 FmpDevicePkg/FmpDevicePkg.uni > > create mode 100644 FmpDevicePkg/FmpDevicePkgExtra.uni > > create mode 100644 > FmpDevicePkg/FmpDxe/DetectTestKey.c > > create mode 100644 FmpDevicePkg/FmpDxe/FmpDxe.c > > create mode 100644 FmpDevicePkg/FmpDxe/FmpDxe.inf > > create mode 100644 FmpDevicePkg/FmpDxe/FmpDxe.uni > > create mode 100644 > FmpDevicePkg/FmpDxe/FmpDxeExtra.uni > > create mode 100644 FmpDevicePkg/FmpDxe/FmpDxeLib.inf > > create mode 100644 > FmpDevicePkg/FmpDxe/VariableSupport.c > > create mode 100644 > FmpDevicePkg/FmpDxe/VariableSupport.h > > create mode 100644 > FmpDevicePkg/Include/Library/CapsuleUpdatePolicyLib.h > > create mode 100644 > FmpDevicePkg/Include/Library/FmpDeviceLib.h > > create mode 100644 > FmpDevicePkg/Include/Library/FmpPayloadHeaderLib.h > > create mode 100644 > FmpDevicePkg/Library/CapsuleUpdatePolicyLibNull/CapsuleU > pdatePolicyLibNull.c > > create mode 100644 > FmpDevicePkg/Library/CapsuleUpdatePolicyLibNull/CapsuleU > pdatePolicyLibNull.inf > > create mode 100644 > FmpDevicePkg/Library/CapsuleUpdatePolicyLibNull/CapsuleU > pdatePolicyLibNull.uni > > create mode 100644 > FmpDevicePkg/Library/FmpDeviceLibNull/FmpDeviceLib.c > > create mode 100644 > FmpDevicePkg/Library/FmpDeviceLibNull/FmpDeviceLibNull.i > nf > > create mode 100644 > FmpDevicePkg/Library/FmpDeviceLibNull/FmpDeviceLibNull.u > ni > > create mode 100644 > FmpDevicePkg/Library/FmpPayloadHeaderLibV1/FmpPayloadHea > derLib.c > > create mode 100644 > FmpDevicePkg/Library/FmpPayloadHeaderLibV1/FmpPayloadHea > derLibV1.inf > > create mode 100644 > FmpDevicePkg/Library/FmpPayloadHeaderLibV1/FmpPayloadHea > derLibV1.uni > > > > -- > > 2.14.2.windows.3 > > > > _______________________________________________ > > 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 _______________________________________________ edk2-devel mailing list [email protected] https://lists.01.org/mailman/listinfo/edk2-devel

