On 13 June 2018 at 10:08, Ard Biesheuvel <ard.biesheuvel@linaro.org> wrote:
> This is the delta of code required to implement PersistAcrossReset on ARM
> systems, and to wire up the capsule handling routines in a way that makes
> the new progress reporting code do something meaningful on such platforms.
>
> Changes since v3:
> - let both UpdateCapsule() and QueryCapsuleCapabilities() return EFI_UNSUPPORTED
> when called at OS runtime on an ARM system
> - reset the system unconditionally after having processed any capsules (#3)
> - re-add Leif's ack (#3)
>
> Changes since v2:
> - move cache handling from CapsulePei to CapsuleRuntimeDxe, and make it ARM only
> - drop patch to change ProcessCapsules() logic in DxeCapsuleLibFmp; instead,
> the platform BDS code is modified to perform the ProcessCapsuleImage()
> call directly
>
> Changes since v1:
> - incorporate Star's feedback (#1, #2)
> - add Leif's ack (#4)
>
> Patch #1 ensures that the capsule data which is preserved in DRAM across
> a reboot is written back to main memory before attempting to access it
> with the caches off.
>
> Patch #2 updates DxeCapsuleLibFmp so it does not pass down the progress
> indication callback if its own attempt to invoke it has already failed.
>
> Patch #3 updates ArmPkg's generic PlatformBootManagerLib implementation
> to only call ProcessCapsules() after the [potentially non-trusted]
> console is up and running, to ensure that firmware update progress can
> be reported to the user.
>
> Patch #4 modifies ArmSmcPsciResetSystemLib to emulate a proper warm reboot
> by reentering PEI with interrupts, MMU and caches enabled. This works
> around the lack of an architected warm reboot in most current implementations.
> (The PSCI spec does cover warm reboot, but it was added recently and most
> secure firmware implementations haven't caught up yet)
>
> Ard Biesheuvel (4):
> MdeModulePkg/CapsuleRuntimeDxe: clean the capsule payload to DRAM
> MdeModulePkg/DxeCapsuleLibFmp: pass progress callback only if it works
> ArmPkg/PlatformBootManagerLib: call ProcessCapsules() only once
> ArmPkg/ArmSmcPsciResetSystemLib: implement fallback for warm reboot
>
Pushed as 488aab257f70..dde2dd64f070
Thanks all
> ArmPkg/ArmPkg.dec | 4 +
> .../ArmSmcPsciResetSystemLib.c | 21 ++++-
> .../ArmSmcPsciResetSystemLib.inf | 9 ++
> .../PlatformBootManagerLib/PlatformBm.c | 86 +++++++++++++------
> .../PlatformBootManagerLib.inf | 1 +
> .../Library/DxeCapsuleLibFmp/DxeCapsuleLib.c | 13 ++-
> .../CapsuleRuntimeDxe/Arm/CapsuleReset.c | 77 +++++++++++++++++
> .../CapsuleRuntimeDxe/CapsuleReset.c | 51 +++++++++++
> .../CapsuleRuntimeDxe/CapsuleRuntimeDxe.inf | 14 ++-
> .../CapsuleRuntimeDxe/CapsuleService.c | 33 ++-----
> .../CapsuleRuntimeDxe/CapsuleService.h | 73 ++++++++++++++++
> 11 files changed, 321 insertions(+), 61 deletions(-)
> create mode 100644 MdeModulePkg/Universal/CapsuleRuntimeDxe/Arm/CapsuleReset.c
> create mode 100644 MdeModulePkg/Universal/CapsuleRuntimeDxe/CapsuleReset.c
> create mode 100644 MdeModulePkg/Universal/CapsuleRuntimeDxe/CapsuleService.h
>
> --
> 2.17.1
>
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel