On 8 December 2015 at 16:49, Leif Lindholm <leif.lindh...@linaro.org> wrote:
> On Tue, Dec 08, 2015 at 04:19:47PM +0100, Ard Biesheuvel wrote:
>> On 8 December 2015 at 14:05, Cohen, Eugene <eug...@hp.com> wrote:
>> > Reviewed-by: Eugene Cohen <eug...@hp.com>
>> >
>>
>> Thanks Eugene
>>
>> @Leif: any concerns?
>
> None - just stuck in a meeting :)
> Thanks.
>
> Reviewed-by: Leif Lindholm <leif.lindh...@linaro.org>
>

Committed as SVN r19174

Thanks

>> >> -----Original Message-----
>> >> From: Ard Biesheuvel [mailto:ard.biesheu...@linaro.org]
>> >> Sent: Monday, December 07, 2015 12:06 AM
>> >> To: edk2-devel@lists.01.org; leif.lindh...@linaro.org; Cohen, Eugene
>> >> <eug...@hp.com>
>> >> Cc: Ard Biesheuvel <ard.biesheu...@linaro.org>
>> >> Subject: [PATCH] ArmPkg: update InvalidateInstructionCacheRange to
>> >> flush only to PoU
>> >>
>> >> From: "Cohen, Eugene" <eug...@hp.com>
>> >>
>> >> This patch updates the ArmPkg variant of
>> >> InvalidateInstructionCacheRange to
>> >> flush the data cache only to the point of unification (PoU). This
>> >> improves
>> >> performance and also allows invalidation in scenarios where it would
>> >> be
>> >> inappropriate to flush to the point of coherency (like when executing
>> >> code
>> >> from L2 configured as cache-as-ram).
>> >>
>> >> Contributed-under: TianoCore Contribution Agreement 1.0
>> >> Signed-off-by: Eugene Cohen <eug...@hp.com>
>> >>
>> >> Added AARCH64 and ARM/GCC implementations of the above.
>> >>
>> >> Contributed-under: TianoCore Contribution Agreement 1.0
>> >> Signed-off-by: Ard Biesheuvel <ard.biesheu...@linaro.org>
>> >> ---
>> >>  ArmPkg/Include/Library/ArmLib.h                                | 8 
>> >> +++++++-
>> >>
>> >> ArmPkg/Library/ArmCacheMaintenanceLib/ArmCacheMaintenanceLib
>> >> .c | 2 +-
>> >>  ArmPkg/Library/ArmLib/AArch64/AArch64Support.S                 | 6
>> >> ++++++
>> >>  ArmPkg/Library/ArmLib/ArmV7/ArmV7Support.S                     | 6
>> >> ++++++
>> >>  ArmPkg/Library/ArmLib/ArmV7/ArmV7Support.asm                   | 5
>> >> +++++
>> >>  5 files changed, 25 insertions(+), 2 deletions(-)
>> >>
>> >> diff --git a/ArmPkg/Include/Library/ArmLib.h
>> >> b/ArmPkg/Include/Library/ArmLib.h
>> >> index 9622444ec63f..85fa1f600ba9 100644
>> >> --- a/ArmPkg/Include/Library/ArmLib.h
>> >> +++ b/ArmPkg/Include/Library/ArmLib.h
>> >> @@ -183,12 +183,18 @@ ArmInvalidateDataCacheEntryByMVA (
>> >>
>> >>  VOID
>> >>  EFIAPI
>> >> -ArmCleanDataCacheEntryByMVA (
>> >> +ArmCleanDataCacheEntryToPoUByMVA(
>> >>    IN  UINTN   Address
>> >>    );
>> >>
>> >>  VOID
>> >>  EFIAPI
>> >> +ArmCleanDataCacheEntryByMVA(
>> >> +IN  UINTN   Address
>> >> +);
>> >> +
>> >> +VOID
>> >> +EFIAPI
>> >>  ArmCleanInvalidateDataCacheEntryByMVA (
>> >>    IN  UINTN   Address
>> >>    );
>> >> diff --git
>> >> a/ArmPkg/Library/ArmCacheMaintenanceLib/ArmCacheMaintenanceL
>> >> ib.c
>> >> b/ArmPkg/Library/ArmCacheMaintenanceLib/ArmCacheMaintenanceL
>> >> ib.c
>> >> index feab4497ac1b..1045f9068f4d 100644
>> >> ---
>> >> a/ArmPkg/Library/ArmCacheMaintenanceLib/ArmCacheMaintenanceL
>> >> ib.c
>> >> +++
>> >> b/ArmPkg/Library/ArmCacheMaintenanceLib/ArmCacheMaintenanceL
>> >> ib.c
>> >> @@ -64,7 +64,7 @@ InvalidateInstructionCacheRange (
>> >>    IN      UINTN                     Length
>> >>    )
>> >>  {
>> >> -  CacheRangeOperation (Address, Length,
>> >> ArmCleanDataCacheEntryByMVA);
>> >> +  CacheRangeOperation (Address, Length,
>> >> ArmCleanDataCacheEntryToPoUByMVA);
>> >>    ArmInvalidateInstructionCache ();
>> >>    return Address;
>> >>  }
>> >> diff --git a/ArmPkg/Library/ArmLib/AArch64/AArch64Support.S
>> >> b/ArmPkg/Library/ArmLib/AArch64/AArch64Support.S
>> >> index c530d19e897e..db21f73f0ed7 100644
>> >> --- a/ArmPkg/Library/ArmLib/AArch64/AArch64Support.S
>> >> +++ b/ArmPkg/Library/ArmLib/AArch64/AArch64Support.S
>> >> @@ -22,6 +22,7 @@
>> >>  GCC_ASM_EXPORT (ArmInvalidateInstructionCache)
>> >>  GCC_ASM_EXPORT (ArmInvalidateDataCacheEntryByMVA)
>> >>  GCC_ASM_EXPORT (ArmCleanDataCacheEntryByMVA)
>> >> +GCC_ASM_EXPORT (ArmCleanDataCacheEntryToPoUByMVA)
>> >>  GCC_ASM_EXPORT (ArmCleanInvalidateDataCacheEntryByMVA)
>> >>  GCC_ASM_EXPORT (ArmInvalidateDataCacheEntryBySetWay)
>> >>  GCC_ASM_EXPORT (ArmCleanDataCacheEntryBySetWay)
>> >> @@ -72,6 +73,11 @@ ASM_PFX(ArmCleanDataCacheEntryByMVA):
>> >>    ret
>> >>
>> >>
>> >> +ASM_PFX(ArmCleanDataCacheEntryToPoUByMVA):
>> >> +  dc      cvau, x0    // Clean single data cache line to PoU
>> >> +  ret
>> >> +
>> >> +
>> >>  ASM_PFX(ArmCleanInvalidateDataCacheEntryByMVA):
>> >>    dc      civac, x0   // Clean and invalidate single data cache line
>> >>    ret
>> >> diff --git a/ArmPkg/Library/ArmLib/ArmV7/ArmV7Support.S
>> >> b/ArmPkg/Library/ArmLib/ArmV7/ArmV7Support.S
>> >> index 5f030d92de31..7de1b11ef818 100644
>> >> --- a/ArmPkg/Library/ArmLib/ArmV7/ArmV7Support.S
>> >> +++ b/ArmPkg/Library/ArmLib/ArmV7/ArmV7Support.S
>> >> @@ -19,6 +19,7 @@
>> >>  GCC_ASM_EXPORT (ArmInvalidateInstructionCache)
>> >>  GCC_ASM_EXPORT (ArmInvalidateDataCacheEntryByMVA)
>> >>  GCC_ASM_EXPORT (ArmCleanDataCacheEntryByMVA)
>> >> +GCC_ASM_EXPORT (ArmCleanDataCacheEntryToPoUByMVA)
>> >>  GCC_ASM_EXPORT (ArmCleanInvalidateDataCacheEntryByMVA)
>> >>  GCC_ASM_EXPORT (ArmInvalidateDataCacheEntryBySetWay)
>> >>  GCC_ASM_EXPORT (ArmCleanDataCacheEntryBySetWay)
>> >> @@ -69,6 +70,11 @@ ASM_PFX(ArmCleanDataCacheEntryByMVA):
>> >>    bx      lr
>> >>
>> >>
>> >> +ASM_PFX(ArmCleanDataCacheEntryToPoUByMVA):
>> >> +  mcr     p15, 0, r0, c7, c11, 1  @clean single data cache line to PoU
>> >> +  bx      lr
>> >> +
>> >> +
>> >>  ASM_PFX(ArmCleanInvalidateDataCacheEntryByMVA):
>> >>    mcr     p15, 0, r0, c7, c14, 1  @clean and invalidate single data cache
>> >> line
>> >>    bx      lr
>> >> diff --git a/ArmPkg/Library/ArmLib/ArmV7/ArmV7Support.asm
>> >> b/ArmPkg/Library/ArmLib/ArmV7/ArmV7Support.asm
>> >> index df7e22dca2d9..a460bd2da7a9 100644
>> >> --- a/ArmPkg/Library/ArmLib/ArmV7/ArmV7Support.asm
>> >> +++ b/ArmPkg/Library/ArmLib/ArmV7/ArmV7Support.asm
>> >> @@ -34,6 +34,11 @@ CTRL_I_BIT      EQU     (1 << 12)
>> >>    bx      lr
>> >>
>> >>
>> >> + RVCT_ASM_EXPORT ArmCleanDataCacheEntryToPoUByMVA
>> >> +  mcr     p15, 0, r0, c7, c11, 1  ; clean single data cache line to PoU
>> >> +  bx      lr
>> >> +
>> >> +
>> >>   RVCT_ASM_EXPORT ArmCleanInvalidateDataCacheEntryByMVA
>> >>    mcr     p15, 0, r0, c7, c14, 1  ; clean and invalidate single data 
>> >> cache line
>> >>    bx      lr
>> >> --
>> >> 1.9.1
>> >
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to