Revision: 19174
http://sourceforge.net/p/edk2/code/19174
Author: abiesheuvel
Date: 2015-12-08 15:58:53 +0000 (Tue, 08 Dec 2015)
Log Message:
-----------
ArmPkg: update InvalidateInstructionCacheRange to flush only to PoU
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]>
Reviewed-by: Eugene Cohen <[email protected]>
Reviewed-by: Leif Lindholm <[email protected]>
Modified Paths:
--------------
trunk/edk2/ArmPkg/Include/Library/ArmLib.h
trunk/edk2/ArmPkg/Library/ArmCacheMaintenanceLib/ArmCacheMaintenanceLib.c
trunk/edk2/ArmPkg/Library/ArmLib/AArch64/AArch64Support.S
trunk/edk2/ArmPkg/Library/ArmLib/ArmV7/ArmV7Support.S
trunk/edk2/ArmPkg/Library/ArmLib/ArmV7/ArmV7Support.asm
Modified: trunk/edk2/ArmPkg/Include/Library/ArmLib.h
===================================================================
--- trunk/edk2/ArmPkg/Include/Library/ArmLib.h 2015-12-08 14:16:30 UTC (rev
19173)
+++ trunk/edk2/ArmPkg/Include/Library/ArmLib.h 2015-12-08 15:58:53 UTC (rev
19174)
@@ -183,12 +183,18 @@
VOID
EFIAPI
-ArmCleanDataCacheEntryByMVA (
+ArmCleanDataCacheEntryToPoUByMVA(
IN UINTN Address
);
VOID
EFIAPI
+ArmCleanDataCacheEntryByMVA(
+IN UINTN Address
+);
+
+VOID
+EFIAPI
ArmCleanInvalidateDataCacheEntryByMVA (
IN UINTN Address
);
Modified:
trunk/edk2/ArmPkg/Library/ArmCacheMaintenanceLib/ArmCacheMaintenanceLib.c
===================================================================
--- trunk/edk2/ArmPkg/Library/ArmCacheMaintenanceLib/ArmCacheMaintenanceLib.c
2015-12-08 14:16:30 UTC (rev 19173)
+++ trunk/edk2/ArmPkg/Library/ArmCacheMaintenanceLib/ArmCacheMaintenanceLib.c
2015-12-08 15:58:53 UTC (rev 19174)
@@ -64,7 +64,7 @@
IN UINTN Length
)
{
- CacheRangeOperation (Address, Length, ArmCleanDataCacheEntryByMVA);
+ CacheRangeOperation (Address, Length, ArmCleanDataCacheEntryToPoUByMVA);
ArmInvalidateInstructionCache ();
return Address;
}
Modified: trunk/edk2/ArmPkg/Library/ArmLib/AArch64/AArch64Support.S
===================================================================
--- trunk/edk2/ArmPkg/Library/ArmLib/AArch64/AArch64Support.S 2015-12-08
14:16:30 UTC (rev 19173)
+++ trunk/edk2/ArmPkg/Library/ArmLib/AArch64/AArch64Support.S 2015-12-08
15:58:53 UTC (rev 19174)
@@ -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 @@
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
Modified: trunk/edk2/ArmPkg/Library/ArmLib/ArmV7/ArmV7Support.S
===================================================================
--- trunk/edk2/ArmPkg/Library/ArmLib/ArmV7/ArmV7Support.S 2015-12-08
14:16:30 UTC (rev 19173)
+++ trunk/edk2/ArmPkg/Library/ArmLib/ArmV7/ArmV7Support.S 2015-12-08
15:58:53 UTC (rev 19174)
@@ -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 @@
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
Modified: trunk/edk2/ArmPkg/Library/ArmLib/ArmV7/ArmV7Support.asm
===================================================================
--- trunk/edk2/ArmPkg/Library/ArmLib/ArmV7/ArmV7Support.asm 2015-12-08
14:16:30 UTC (rev 19173)
+++ trunk/edk2/ArmPkg/Library/ArmLib/ArmV7/ArmV7Support.asm 2015-12-08
15:58:53 UTC (rev 19174)
@@ -34,6 +34,11 @@
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
------------------------------------------------------------------------------
Go from Idea to Many App Stores Faster with Intel(R) XDK
Give your users amazing mobile app experiences with Intel(R) XDK.
Use one codebase in this all-in-one HTML5 development environment.
Design, debug & build mobile apps & 2D/3D high-impact games for multiple OSs.
http://pubads.g.doubleclick.net/gampad/clk?id=254741911&iu=/4140
_______________________________________________
edk2-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-commits