Revision: 17176
          http://sourceforge.net/p/edk2/code/17176
Author:   oliviermartin
Date:     2015-04-14 11:54:40 +0000 (Tue, 14 Apr 2015)
Log Message:
-----------
ArmPkg: remove cache maintenance by VA operation range size threshold

This removes the range size threshold for virtual address based cache
maintenance instructions that operate on VA ranges to be 'promoted' to
use set/way instructions.

Doing so is unsafe: set/way operations are fundamentally different
from VA operations, and really only suitable for cleaning or invalidating
a cache when turning it on or off.

To quote the ARM ARM (DDI0487A_d G3.4):
"""
Since the set/way instructions are performed only locally, there is no
guarantee of the atomicity of cache maintenance between different PEs,
even if those different PEs are each performing the same cache maintenance
instructions at the same time. Since any cacheable line can be allocated
into the cache at any time, it is possible for [a] cache line to migrate
from an entry in the cache of one PE to the cache of a different PE in a
manner that the cache line avoids being affected by set/way based cache
maintenance. Therefore, ARM strongly discourages the use of set/way
instructions to manage coherency in coherent systems.
"""

Contributed-under: TianoCore Contribution Agreement 1.0
Reviewed-by: Olivier Martin <[email protected]>
Signed-off-by: Ard Biesheuvel <[email protected]>

Modified Paths:
--------------
    trunk/edk2/ArmPkg/ArmPkg.dec
    trunk/edk2/ArmPkg/Library/ArmCacheMaintenanceLib/ArmCacheMaintenanceLib.c
    trunk/edk2/ArmPkg/Library/ArmCacheMaintenanceLib/ArmCacheMaintenanceLib.inf
    trunk/edk2/ArmPkg/Library/ArmLib/AArch64/AArch64Lib.inf
    trunk/edk2/ArmPkg/Library/ArmLib/AArch64/AArch64LibPrePi.inf
    trunk/edk2/ArmPkg/Library/ArmLib/AArch64/AArch64LibSec.inf
    trunk/edk2/ArmPkg/Library/ArmLib/Arm11/Arm11Lib.inf
    trunk/edk2/ArmPkg/Library/ArmLib/Arm11/Arm11LibPrePi.inf
    trunk/edk2/ArmPkg/Library/ArmLib/Arm11/Arm11LibSec.inf
    trunk/edk2/ArmPkg/Library/ArmLib/Arm9/Arm9ArmLib.inf
    trunk/edk2/ArmPkg/Library/ArmLib/Arm9/Arm9ArmLibPrePi.inf
    trunk/edk2/ArmPkg/Library/ArmLib/ArmV7/ArmV7Lib.inf
    trunk/edk2/ArmPkg/Library/ArmLib/ArmV7/ArmV7LibPrePi.inf
    trunk/edk2/ArmPkg/Library/ArmLib/ArmV7/ArmV7LibSec.inf
    trunk/edk2/ArmPkg/Library/ArmLib/Null/NullArmLib.inf

Modified: trunk/edk2/ArmPkg/ArmPkg.dec
===================================================================
--- trunk/edk2/ArmPkg/ArmPkg.dec        2015-04-14 11:52:55 UTC (rev 17175)
+++ trunk/edk2/ArmPkg/ArmPkg.dec        2015-04-14 11:54:40 UTC (rev 17176)
@@ -82,8 +82,7 @@
   
gArmTokenSpaceGuid.PcdArmUncachedMemoryMask|0x0000000080000000|UINT64|0x00000002
   # This PCD will free the unallocated buffers if their size reach this 
threshold.
   # We set the default value to 512MB.
-  
gArmTokenSpaceGuid.PcdArmFreeUncachedMemorySizeThreshold|0x20000000|UINT64|0x00000043
-  gArmTokenSpaceGuid.PcdArmCacheOperationThreshold|1024|UINT32|0x00000003
+  
gArmTokenSpaceGuid.PcdArmFreeUncachedMemorySizeThreshold|0x20000000|UINT64|0x00000003
   gArmTokenSpaceGuid.PcdCpuVectorBaseAddress|0xffff0000|UINT32|0x00000004
   gArmTokenSpaceGuid.PcdCpuResetAddress|0x00000000|UINT32|0x00000005
 

Modified: 
trunk/edk2/ArmPkg/Library/ArmCacheMaintenanceLib/ArmCacheMaintenanceLib.c
===================================================================
--- trunk/edk2/ArmPkg/Library/ArmCacheMaintenanceLib/ArmCacheMaintenanceLib.c   
2015-04-14 11:52:55 UTC (rev 17175)
+++ trunk/edk2/ArmPkg/Library/ArmCacheMaintenanceLib/ArmCacheMaintenanceLib.c   
2015-04-14 11:54:40 UTC (rev 17176)
@@ -20,27 +20,20 @@
 CacheRangeOperation (
   IN  VOID            *Start,
   IN  UINTN           Length,
-  IN  CACHE_OPERATION CacheOperation,
   IN  LINE_OPERATION  LineOperation
   )
 {
   UINTN ArmCacheLineLength         = ArmDataCacheLineLength();
   UINTN ArmCacheLineAlignmentMask  = ArmCacheLineLength - 1;
-  UINTN ArmCacheOperationThreshold = PcdGet32(PcdArmCacheOperationThreshold);
 
-  if ((CacheOperation != NULL) && (Length >= ArmCacheOperationThreshold)) {
-    ArmDrainWriteBuffer ();
-    CacheOperation ();
-  } else {
-    // Align address (rounding down)
-    UINTN AlignedAddress = (UINTN)Start - ((UINTN)Start & 
ArmCacheLineAlignmentMask);
-    UINTN EndAddress     = (UINTN)Start + Length;
+  // Align address (rounding down)
+  UINTN AlignedAddress = (UINTN)Start - ((UINTN)Start & 
ArmCacheLineAlignmentMask);
+  UINTN EndAddress     = (UINTN)Start + Length;
 
-    // Perform the line operation on an address in each cache line
-    while (AlignedAddress < EndAddress) {
-      LineOperation(AlignedAddress);
-      AlignedAddress += ArmCacheLineLength;
-    }
+  // Perform the line operation on an address in each cache line
+  while (AlignedAddress < EndAddress) {
+    LineOperation(AlignedAddress);
+    AlignedAddress += ArmCacheLineLength;
   }
 }
 
@@ -70,7 +63,7 @@
   IN      UINTN                     Length
   )
 {
-  CacheRangeOperation (Address, Length, ArmCleanDataCacheToPoU, 
ArmCleanDataCacheEntryByMVA);
+  CacheRangeOperation (Address, Length, ArmCleanDataCacheEntryByMVA);
   ArmInvalidateInstructionCache ();
   return Address;
 }
@@ -91,7 +84,7 @@
   IN      UINTN                     Length
   )
 {
-  CacheRangeOperation(Address, Length, ArmCleanInvalidateDataCache, 
ArmCleanInvalidateDataCacheEntryByMVA);
+  CacheRangeOperation(Address, Length, ArmCleanInvalidateDataCacheEntryByMVA);
   return Address;
 }
 
@@ -111,7 +104,7 @@
   IN      UINTN                     Length
   )
 {
-  CacheRangeOperation(Address, Length, ArmCleanDataCache, 
ArmCleanDataCacheEntryByMVA);
+  CacheRangeOperation(Address, Length, ArmCleanDataCacheEntryByMVA);
   return Address;
 }
 
@@ -122,6 +115,6 @@
   IN      UINTN                     Length
   )
 {
-  CacheRangeOperation(Address, Length, NULL, ArmInvalidateDataCacheEntryByMVA);
+  CacheRangeOperation(Address, Length, ArmInvalidateDataCacheEntryByMVA);
   return Address;
 }

Modified: 
trunk/edk2/ArmPkg/Library/ArmCacheMaintenanceLib/ArmCacheMaintenanceLib.inf
===================================================================
--- trunk/edk2/ArmPkg/Library/ArmCacheMaintenanceLib/ArmCacheMaintenanceLib.inf 
2015-04-14 11:52:55 UTC (rev 17175)
+++ trunk/edk2/ArmPkg/Library/ArmCacheMaintenanceLib/ArmCacheMaintenanceLib.inf 
2015-04-14 11:54:40 UTC (rev 17176)
@@ -31,6 +31,3 @@
 [LibraryClasses]
   ArmLib
   BaseLib
-
-[FixedPcd]
-  gArmTokenSpaceGuid.PcdArmCacheOperationThreshold

Modified: trunk/edk2/ArmPkg/Library/ArmLib/AArch64/AArch64Lib.inf
===================================================================
--- trunk/edk2/ArmPkg/Library/ArmLib/AArch64/AArch64Lib.inf     2015-04-14 
11:52:55 UTC (rev 17175)
+++ trunk/edk2/ArmPkg/Library/ArmLib/AArch64/AArch64Lib.inf     2015-04-14 
11:54:40 UTC (rev 17176)
@@ -41,6 +41,3 @@
 
 [Protocols]
   gEfiCpuArchProtocolGuid
-
-[FixedPcd]
-  gArmTokenSpaceGuid.PcdArmCacheOperationThreshold

Modified: trunk/edk2/ArmPkg/Library/ArmLib/AArch64/AArch64LibPrePi.inf
===================================================================
--- trunk/edk2/ArmPkg/Library/ArmLib/AArch64/AArch64LibPrePi.inf        
2015-04-14 11:52:55 UTC (rev 17175)
+++ trunk/edk2/ArmPkg/Library/ArmLib/AArch64/AArch64LibPrePi.inf        
2015-04-14 11:54:40 UTC (rev 17176)
@@ -43,6 +43,3 @@
 
 [Protocols]
   gEfiCpuArchProtocolGuid
-
-[FixedPcd]
-  gArmTokenSpaceGuid.PcdArmCacheOperationThreshold

Modified: trunk/edk2/ArmPkg/Library/ArmLib/AArch64/AArch64LibSec.inf
===================================================================
--- trunk/edk2/ArmPkg/Library/ArmLib/AArch64/AArch64LibSec.inf  2015-04-14 
11:52:55 UTC (rev 17175)
+++ trunk/edk2/ArmPkg/Library/ArmLib/AArch64/AArch64LibSec.inf  2015-04-14 
11:54:40 UTC (rev 17176)
@@ -38,6 +38,3 @@
 
 [Protocols]
   gEfiCpuArchProtocolGuid
-
-[FixedPcd]
-  gArmTokenSpaceGuid.PcdArmCacheOperationThreshold

Modified: trunk/edk2/ArmPkg/Library/ArmLib/Arm11/Arm11Lib.inf
===================================================================
--- trunk/edk2/ArmPkg/Library/ArmLib/Arm11/Arm11Lib.inf 2015-04-14 11:52:55 UTC 
(rev 17175)
+++ trunk/edk2/ArmPkg/Library/ArmLib/Arm11/Arm11Lib.inf 2015-04-14 11:54:40 UTC 
(rev 17176)
@@ -47,5 +47,4 @@
   gArmTokenSpaceGuid.PcdRelocateVectorTable
 
 [FixedPcd]
-  gArmTokenSpaceGuid.PcdArmCacheOperationThreshold
   gArmTokenSpaceGuid.PcdCpuVectorBaseAddress

Modified: trunk/edk2/ArmPkg/Library/ArmLib/Arm11/Arm11LibPrePi.inf
===================================================================
--- trunk/edk2/ArmPkg/Library/ArmLib/Arm11/Arm11LibPrePi.inf    2015-04-14 
11:52:55 UTC (rev 17175)
+++ trunk/edk2/ArmPkg/Library/ArmLib/Arm11/Arm11LibPrePi.inf    2015-04-14 
11:54:40 UTC (rev 17176)
@@ -47,5 +47,4 @@
   gArmTokenSpaceGuid.PcdRelocateVectorTable
 
 [FixedPcd]
-  gArmTokenSpaceGuid.PcdArmCacheOperationThreshold
   gArmTokenSpaceGuid.PcdCpuVectorBaseAddress

Modified: trunk/edk2/ArmPkg/Library/ArmLib/Arm11/Arm11LibSec.inf
===================================================================
--- trunk/edk2/ArmPkg/Library/ArmLib/Arm11/Arm11LibSec.inf      2015-04-14 
11:52:55 UTC (rev 17175)
+++ trunk/edk2/ArmPkg/Library/ArmLib/Arm11/Arm11LibSec.inf      2015-04-14 
11:54:40 UTC (rev 17176)
@@ -43,5 +43,4 @@
   gArmTokenSpaceGuid.PcdRelocateVectorTable
 
 [FixedPcd]
-  gArmTokenSpaceGuid.PcdArmCacheOperationThreshold
   gArmTokenSpaceGuid.PcdCpuVectorBaseAddress

Modified: trunk/edk2/ArmPkg/Library/ArmLib/Arm9/Arm9ArmLib.inf
===================================================================
--- trunk/edk2/ArmPkg/Library/ArmLib/Arm9/Arm9ArmLib.inf        2015-04-14 
11:52:55 UTC (rev 17175)
+++ trunk/edk2/ArmPkg/Library/ArmLib/Arm9/Arm9ArmLib.inf        2015-04-14 
11:54:40 UTC (rev 17176)
@@ -41,6 +41,3 @@
 
 [Protocols]
   gEfiCpuArchProtocolGuid
-
-[FixedPcd]
-  gArmTokenSpaceGuid.PcdArmCacheOperationThreshold

Modified: trunk/edk2/ArmPkg/Library/ArmLib/Arm9/Arm9ArmLibPrePi.inf
===================================================================
--- trunk/edk2/ArmPkg/Library/ArmLib/Arm9/Arm9ArmLibPrePi.inf   2015-04-14 
11:52:55 UTC (rev 17175)
+++ trunk/edk2/ArmPkg/Library/ArmLib/Arm9/Arm9ArmLibPrePi.inf   2015-04-14 
11:54:40 UTC (rev 17176)
@@ -41,6 +41,3 @@
 
 [Protocols]
   gEfiCpuArchProtocolGuid
-
-[FixedPcd]
-  gArmTokenSpaceGuid.PcdArmCacheOperationThreshold

Modified: trunk/edk2/ArmPkg/Library/ArmLib/ArmV7/ArmV7Lib.inf
===================================================================
--- trunk/edk2/ArmPkg/Library/ArmLib/ArmV7/ArmV7Lib.inf 2015-04-14 11:52:55 UTC 
(rev 17175)
+++ trunk/edk2/ArmPkg/Library/ArmLib/ArmV7/ArmV7Lib.inf 2015-04-14 11:54:40 UTC 
(rev 17176)
@@ -48,6 +48,3 @@
 
 [Protocols]
   gEfiCpuArchProtocolGuid
-
-[FixedPcd]
-  gArmTokenSpaceGuid.PcdArmCacheOperationThreshold

Modified: trunk/edk2/ArmPkg/Library/ArmLib/ArmV7/ArmV7LibPrePi.inf
===================================================================
--- trunk/edk2/ArmPkg/Library/ArmLib/ArmV7/ArmV7LibPrePi.inf    2015-04-14 
11:52:55 UTC (rev 17175)
+++ trunk/edk2/ArmPkg/Library/ArmLib/ArmV7/ArmV7LibPrePi.inf    2015-04-14 
11:54:40 UTC (rev 17176)
@@ -48,6 +48,3 @@
 
 [Protocols]
   gEfiCpuArchProtocolGuid
-
-[FixedPcd]
-  gArmTokenSpaceGuid.PcdArmCacheOperationThreshold

Modified: trunk/edk2/ArmPkg/Library/ArmLib/ArmV7/ArmV7LibSec.inf
===================================================================
--- trunk/edk2/ArmPkg/Library/ArmLib/ArmV7/ArmV7LibSec.inf      2015-04-14 
11:52:55 UTC (rev 17175)
+++ trunk/edk2/ArmPkg/Library/ArmLib/ArmV7/ArmV7LibSec.inf      2015-04-14 
11:54:40 UTC (rev 17176)
@@ -42,6 +42,3 @@
 
 [Protocols]
   gEfiCpuArchProtocolGuid
-
-[FixedPcd]
-  gArmTokenSpaceGuid.PcdArmCacheOperationThreshold

Modified: trunk/edk2/ArmPkg/Library/ArmLib/Null/NullArmLib.inf
===================================================================
--- trunk/edk2/ArmPkg/Library/ArmLib/Null/NullArmLib.inf        2015-04-14 
11:52:55 UTC (rev 17175)
+++ trunk/edk2/ArmPkg/Library/ArmLib/Null/NullArmLib.inf        2015-04-14 
11:54:40 UTC (rev 17176)
@@ -40,6 +40,3 @@
 
 [Protocols]
   gEfiCpuArchProtocolGuid
-
-[FixedPcd]
-  gArmTokenSpaceGuid.PcdArmCacheOperationThreshold


------------------------------------------------------------------------------
BPM Camp - Free Virtual Workshop May 6th at 10am PDT/1PM EDT
Develop your own process in accordance with the BPMN 2 standard
Learn Process modeling best practices with Bonita BPM through live exercises
http://www.bonitasoft.com/be-part-of-it/events/bpm-camp-virtual- event?utm_
source=Sourceforge_BPM_Camp_5_6_15&utm_medium=email&utm_campaign=VA_SF
_______________________________________________
edk2-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-commits

Reply via email to