On 8 December 2015 at 14:05, Cohen, Eugene <[email protected]> wrote: > Reviewed-by: Eugene Cohen <[email protected]> >
Thanks Eugene @Leif: any concerns? >> -----Original Message----- >> From: Ard Biesheuvel [mailto:[email protected]] >> Sent: Monday, December 07, 2015 12:06 AM >> To: [email protected]; [email protected]; Cohen, Eugene >> <[email protected]> >> Cc: Ard Biesheuvel <[email protected]> >> Subject: [PATCH] ArmPkg: update InvalidateInstructionCacheRange to >> flush only to PoU >> >> From: "Cohen, Eugene" <[email protected]> >> >> 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 <[email protected]> >> >> Added AARCH64 and ARM/GCC implementations of the above. >> >> Contributed-under: TianoCore Contribution Agreement 1.0 >> Signed-off-by: Ard Biesheuvel <[email protected]> >> --- >> 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 [email protected] https://lists.01.org/mailman/listinfo/edk2-devel

