Sorry, I am not familiar with EBC. I only keep the original logic of it. Thanks, Zhichao
> -----Original Message----- > From: Ard Biesheuvel [mailto:ard.biesheu...@linaro.org] > Sent: Monday, March 25, 2019 4:26 PM > To: Gao, Zhichao <zhichao....@intel.com> > Cc: edk2-devel@lists.01.org; Wang, Jian J <jian.j.w...@intel.com>; Wu, Hao > A <hao.a...@intel.com>; Ni, Ray <ray...@intel.com>; Zeng, Star > <star.z...@intel.com>; Gao, Liming <liming....@intel.com> > Subject: Re: [PATCH V2 1/2] MdeModulePkg/CapsuleRuntimeDxe: IA32 add > cache flush function > > On Fri, 22 Mar 2019 at 04:09, Zhichao Gao <zhichao....@intel.com> wrote: > > > > BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=1462 > > > > The IA32 ARCH need cache flush function during capsule update. > > Both arm ARCH and IA32 do not need flush cache function, so merge the > > CapsuleCacheWriteBack() to one file. And add a null version for EBC. > > > > What is the point of being able to build a DXE_RUNTIME_DRIVER module for > EBC? > > > Contributed-under: TianoCore Contribution Agreement 1.1 > > Signed-off-by: Zhichao Gao <zhichao....@intel.com> > > Cc: Jian J Wang <jian.j.w...@intel.com> > > Cc: Hao Wu <hao.a...@intel.com> > > Cc: Ray Ni <ray...@intel.com> > > Cc: Star Zeng <star.z...@intel.com> > > Cc: Liming Gao <liming....@intel.com> > > Cc: Ard Biesheuvel <ard.biesheu...@linaro.org> > > --- > > .../Universal/CapsuleRuntimeDxe/Arm/CapsuleReset.c | 35 +----------- > > .../Universal/CapsuleRuntimeDxe/CapsuleCache.c | 63 > ++++++++++++++++++++++ > > .../Universal/CapsuleRuntimeDxe/CapsuleCacheNull.c | 38 > +++++++++++++ > > .../Universal/CapsuleRuntimeDxe/CapsuleReset.c | 16 +----- > > .../CapsuleRuntimeDxe/CapsuleRuntimeDxe.inf | 20 ++++--- > > 5 files changed, 115 insertions(+), 57 deletions(-) > > create mode 100644 > MdeModulePkg/Universal/CapsuleRuntimeDxe/CapsuleCache.c > > create mode 100644 > MdeModulePkg/Universal/CapsuleRuntimeDxe/CapsuleCacheNull.c > > > > diff --git > a/MdeModulePkg/Universal/CapsuleRuntimeDxe/Arm/CapsuleReset.c > b/MdeModulePkg/Universal/CapsuleRuntimeDxe/Arm/CapsuleReset.c > > index d79d2fc693..ec630ab7a8 100644 > > --- a/MdeModulePkg/Universal/CapsuleRuntimeDxe/Arm/CapsuleReset.c > > +++ > b/MdeModulePkg/Universal/CapsuleRuntimeDxe/Arm/CapsuleReset.c > > @@ -3,6 +3,7 @@ > > PersistAcrossReset capsules > > > > Copyright (c) 2018, Linaro, Ltd. All rights reserved.<BR> > > + Copyright (c) 2019, Intel Corporation. All rights reserved.<BR> > > > > This program and the accompanying materials are licensed and made > available > > under the terms and conditions of the BSD License which accompanies > this > > @@ -16,8 +17,6 @@ > > > > #include "CapsuleService.h" > > > > -#include <Library/CacheMaintenanceLib.h> > > - > > /** > > Whether the platform supports capsules that persist across reset. Note > that > > some platforms only support such capsules at boot time. > > @@ -41,35 +40,3 @@ IsPersistAcrossResetCapsuleSupported ( > > return FeaturePcdGet (PcdSupportUpdateCapsuleReset) > && !EfiAtRuntime (); > > } > > > > -/** > > - Writes Back a range of data cache lines covering a set of capsules in > memory. > > - > > - Writes Back the data cache lines specified by ScatterGatherList. > > - > > - @param ScatterGatherList Physical address of the data structure that > > - describes a set of capsules in memory > > - > > -**/ > > -VOID > > -CapsuleCacheWriteBack ( > > - IN EFI_PHYSICAL_ADDRESS ScatterGatherList > > - ) > > -{ > > - EFI_CAPSULE_BLOCK_DESCRIPTOR *Desc; > > - > > - Desc = (EFI_CAPSULE_BLOCK_DESCRIPTOR *)(UINTN)ScatterGatherList; > > - do { > > - WriteBackDataCacheRange (Desc, sizeof *Desc); > > - > > - if (Desc->Length > 0) { > > - WriteBackDataCacheRange ((VOID *)(UINTN)Desc->Union.DataBlock, > > - Desc->Length > > - ); > > - Desc++; > > - } else if (Desc->Union.ContinuationPointer > 0) { > > - Desc = (EFI_CAPSULE_BLOCK_DESCRIPTOR *)(UINTN)Desc- > >Union.ContinuationPointer; > > - } > > - } while (Desc->Length > 0 || Desc->Union.ContinuationPointer > 0); > > - > > - WriteBackDataCacheRange (Desc, sizeof *Desc); > > -} > > diff --git a/MdeModulePkg/Universal/CapsuleRuntimeDxe/CapsuleCache.c > b/MdeModulePkg/Universal/CapsuleRuntimeDxe/CapsuleCache.c > > new file mode 100644 > > index 0000000000..ab81296a65 > > --- /dev/null > > +++ b/MdeModulePkg/Universal/CapsuleRuntimeDxe/CapsuleCache.c > > @@ -0,0 +1,63 @@ > > +/** @file > > + Flush the cache is required for most architectures while do capsule > > + update. It is not support at Runtime. > > + > > + Copyright (c) 2018, Linaro, Ltd. All rights reserved.<BR> > > + Copyright (c) 2019, Intel Corporation. All rights reserved.<BR> > > + > > + This program and the accompanying materials are licensed and made > available > > + under the terms and conditions of the BSD License which accompanies > this > > + distribution. The full text of the license may be found at > > + http://opensource.org/licenses/bsd-license.php > > + > > + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" > BASIS, > > + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER > EXPRESS OR IMPLIED. > > + > > +**/ > > + > > +#include "CapsuleService.h" > > + > > +#include <Library/CacheMaintenanceLib.h> > > + > > +/** > > + Writes Back a range of data cache lines covering a set of capsules in > memory. > > + > > + Writes Back the data cache lines specified by ScatterGatherList. > > + > > + @param ScatterGatherList Physical address of the data structure that > > + describes a set of capsules in memory > > + > > +**/ > > +VOID > > +CapsuleCacheWriteBack ( > > + IN EFI_PHYSICAL_ADDRESS ScatterGatherList > > + ) > > +{ > > + EFI_CAPSULE_BLOCK_DESCRIPTOR *Desc; > > + > > + if (!EfiAtRuntime ()) { > > + Desc = (EFI_CAPSULE_BLOCK_DESCRIPTOR *)(UINTN)ScatterGatherList; > > + do { > > + WriteBackDataCacheRange ( > > + (VOID *)(UINTN)Desc, > > + (UINTN)sizeof (*Desc) > > + ); > > + > > + if (Desc->Length > 0) { > > + WriteBackDataCacheRange ( > > + (VOID *)(UINTN)Desc->Union.DataBlock, > > + (UINTN)Desc->Length > > + ); > > + Desc++; > > + } else if (Desc->Union.ContinuationPointer > 0) { > > + Desc = (EFI_CAPSULE_BLOCK_DESCRIPTOR *)(UINTN)Desc- > >Union.ContinuationPointer; > > + } > > + } while (Desc->Length > 0 || Desc->Union.ContinuationPointer > 0); > > + > > + WriteBackDataCacheRange ( > > + (VOID *)(UINTN)Desc, > > + (UINTN)sizeof (*Desc) > > + ); > > + } > > +} > > + > > diff --git > a/MdeModulePkg/Universal/CapsuleRuntimeDxe/CapsuleCacheNull.c > b/MdeModulePkg/Universal/CapsuleRuntimeDxe/CapsuleCacheNull.c > > new file mode 100644 > > index 0000000000..cfb9bb1bf1 > > --- /dev/null > > +++ b/MdeModulePkg/Universal/CapsuleRuntimeDxe/CapsuleCacheNull.c > > @@ -0,0 +1,38 @@ > > +/** @file > > + Null function version of cache function. > > + > > + Copyright (c) 2018, Linaro, Ltd. All rights reserved.<BR> > > + Copyright (c) 2019, Intel Corporation. All rights reserved.<BR> > > + > > + This program and the accompanying materials are licensed and made > available > > + under the terms and conditions of the BSD License which accompanies > this > > + distribution. The full text of the license may be found at > > + http://opensource.org/licenses/bsd-license.php > > + > > + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" > BASIS, > > + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER > EXPRESS OR IMPLIED. > > + > > +**/ > > + > > +#include "CapsuleService.h" > > + > > +#include <Library/CacheMaintenanceLib.h> > > + > > +/** > > + Writes Back a range of data cache lines covering a set of capsules in > memory. > > + > > + Writes Back the data cache lines specified by ScatterGatherList. > > + > > + Null version, do nothing. > > + > > + @param ScatterGatherList Physical address of the data structure that > > + describes a set of capsules in memory > > + > > +**/ > > +VOID > > +CapsuleCacheWriteBack ( > > + IN EFI_PHYSICAL_ADDRESS ScatterGatherList > > + ) > > +{ > > +} > > + > > diff --git a/MdeModulePkg/Universal/CapsuleRuntimeDxe/CapsuleReset.c > b/MdeModulePkg/Universal/CapsuleRuntimeDxe/CapsuleReset.c > > index 353f6f2090..8990cf2a35 100644 > > --- a/MdeModulePkg/Universal/CapsuleRuntimeDxe/CapsuleReset.c > > +++ b/MdeModulePkg/Universal/CapsuleRuntimeDxe/CapsuleReset.c > > @@ -3,6 +3,7 @@ > > PersistAcrossReset capsules > > > > Copyright (c) 2018, Linaro, Ltd. All rights reserved.<BR> > > + Copyright (c) 2019, Intel Corporation. All rights reserved.<BR> > > > > This program and the accompanying materials are licensed and made > available > > under the terms and conditions of the BSD License which accompanies > this > > @@ -32,18 +33,3 @@ IsPersistAcrossResetCapsuleSupported ( > > return FeaturePcdGet (PcdSupportUpdateCapsuleReset); > > } > > > > -/** > > - Writes Back a range of data cache lines covering a set of capsules in > memory. > > - > > - Writes Back the data cache lines specified by ScatterGatherList. > > - > > - @param ScatterGatherList Physical address of the data structure that > > - describes a set of capsules in memory > > - > > -**/ > > -VOID > > -CapsuleCacheWriteBack ( > > - IN EFI_PHYSICAL_ADDRESS ScatterGatherList > > - ) > > -{ > > -} > > diff --git > a/MdeModulePkg/Universal/CapsuleRuntimeDxe/CapsuleRuntimeDxe.inf > b/MdeModulePkg/Universal/CapsuleRuntimeDxe/CapsuleRuntimeDxe.inf > > index ad7af5fe62..a0cb32a06f 100644 > > --- > a/MdeModulePkg/Universal/CapsuleRuntimeDxe/CapsuleRuntimeDxe.inf > > +++ > b/MdeModulePkg/Universal/CapsuleRuntimeDxe/CapsuleRuntimeDxe.inf > > @@ -4,7 +4,7 @@ > > # It installs the Capsule Architectural Protocol defined in PI1.0a to > > signify > > # the capsule runtime services are ready. > > # > > -# Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR> > > +# Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR> > > # This program and the accompanying materials > > # are licensed and made available under the terms and conditions of the > BSD License > > # which accompanies this distribution. The full text of the license may > > be > found at > > @@ -36,16 +36,22 @@ > > > > [Sources.Ia32, Sources.EBC, Sources.ARM, Sources.AARCH64] > > SaveLongModeContext.c > > - CapsuleReset.c > > > > -[Sources.X64] > > - X64/SaveLongModeContext.c > > +[Sources.Ia32, Sources.X64, Sources.ARM, Sources.AARCH64] > > + CapsuleCache.c > > + > > +[Sources.Ia32, Sources.X64, Sources.EBC] > > CapsuleReset.c > > > > [Sources.ARM, Sources.AARCH64] > > - SaveLongModeContext.c > > Arm/CapsuleReset.c > > > > +[Sources.EBC] > > + CapsuleCacheNull.c > > + > > +[Sources.X64] > > + X64/SaveLongModeContext.c > > + > > [Packages] > > MdePkg/MdePkg.dec > > MdeModulePkg/MdeModulePkg.dec > > @@ -61,14 +67,12 @@ > > BaseLib > > PrintLib > > BaseMemoryLib > > + CacheMaintenanceLib > > > > [LibraryClasses.X64] > > UefiLib > > BaseMemoryLib > > > > -[LibraryClasses.ARM, LibraryClasses.AARCH64] > > - CacheMaintenanceLib > > - > > [Guids] > > ## SOMETIMES_PRODUCES ## Variable:L"CapsuleUpdateData" # > (Process across reset capsule image) for capsule updated data > > ## SOMETIMES_PRODUCES ## Variable:L"CapsuleLongModeBuffer" # > The long mode buffer used by IA32 Capsule PEIM to call X64 CapsuleCoalesce > code to handle >4GB capsule blocks > > -- > > 2.16.2.windows.1 > > _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel