You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by pk...@apache.org on 2022/02/09 17:16:59 UTC

[incubator-nuttx] 02/02: armv7-a/r: use flush/clean_all if size large than cache size

This is an automated email from the ASF dual-hosted git repository.

pkarashchenko pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git

commit 3ab65f9b08de0b7c6731878de51ef3dac58dc811
Author: zhuyanlin <zh...@xiaomi.com>
AuthorDate: Tue Feb 8 20:02:49 2022 +0800

    armv7-a/r: use flush/clean_all if size large than cache size
    
    For cache flush/clean performance
    
    Signed-off-by: zhuyanlin <zh...@xiaomi.com>
---
 arch/arm/src/a1x/Make.defs       |  2 +-
 arch/arm/src/am335x/Make.defs    |  2 +-
 arch/arm/src/armv7-a/arm_cache.c | 20 ++++++++++++++++++--
 arch/arm/src/armv7-r/arm_cache.c | 20 ++++++++++++++++++--
 arch/arm/src/imx6/Make.defs      |  2 +-
 arch/arm/src/sama5/Make.defs     |  2 +-
 arch/arm/src/tms570/Make.defs    |  2 +-
 7 files changed, 41 insertions(+), 9 deletions(-)

diff --git a/arch/arm/src/a1x/Make.defs b/arch/arm/src/a1x/Make.defs
index ab1b1b5..b6103dd 100644
--- a/arch/arm/src/a1x/Make.defs
+++ b/arch/arm/src/a1x/Make.defs
@@ -46,7 +46,7 @@ CMN_ASRCS += arm_saveusercontext.S arm_vectoraddrexcptn.S
 CMN_ASRCS += arm_testset.S arm_fetchadd.S vfork.S
 CMN_ASRCS += cp15_coherent_dcache.S cp15_invalidate_dcache.S
 CMN_ASRCS += cp15_clean_dcache.S cp15_flush_dcache.S cp15_invalidate_dcache_all.S
-CMN_ASRCS += cp15_clean_dcache_all.S cp15_flush_dcache_all.S
+CMN_ASRCS += cp15_clean_dcache_all.S cp15_flush_dcache_all.S cp15_cache_size.S
 
 # Common C source files
 
diff --git a/arch/arm/src/am335x/Make.defs b/arch/arm/src/am335x/Make.defs
index e1f4619..a307db5 100644
--- a/arch/arm/src/am335x/Make.defs
+++ b/arch/arm/src/am335x/Make.defs
@@ -46,7 +46,7 @@ CMN_ASRCS += arm_saveusercontext.S arm_vectoraddrexcptn.S
 CMN_ASRCS += arm_testset.S vfork.S
 CMN_ASRCS += cp15_coherent_dcache.S cp15_invalidate_dcache.S
 CMN_ASRCS += cp15_clean_dcache.S cp15_flush_dcache.S cp15_invalidate_dcache_all.S
-CMN_ASRCS += cp15_clean_dcache_all.S cp15_flush_dcache_all.S
+CMN_ASRCS += cp15_clean_dcache_all.S cp15_flush_dcache_all.S cp15_cache_size.S
 
 # Common C source files
 
diff --git a/arch/arm/src/armv7-a/arm_cache.c b/arch/arm/src/armv7-a/arm_cache.c
index f807ab1..c595fcc 100644
--- a/arch/arm/src/armv7-a/arm_cache.c
+++ b/arch/arm/src/armv7-a/arm_cache.c
@@ -134,7 +134,15 @@ void up_invalidate_icache_all(void)
 
 void up_clean_dcache(uintptr_t start, uintptr_t end)
 {
-  cp15_clean_dcache(start, end);
+  if (cp15_cache_size() < (end - start))
+    {
+      cp15_clean_dcache(start, end);
+    }
+  else
+    {
+      cp15_clean_dcache_all();
+    }
+
   l2cc_clean(start, end);
 }
 
@@ -190,7 +198,15 @@ void up_clean_dcache_all(void)
 
 void up_flush_dcache(uintptr_t start, uintptr_t end)
 {
-  cp15_flush_dcache(start, end);
+  if (cp15_cache_size() < (end - start))
+    {
+      cp15_flush_dcache(start, end);
+    }
+  else
+    {
+      cp15_flush_dcache_all();
+    }
+
   l2cc_flush(start, end);
 }
 
diff --git a/arch/arm/src/armv7-r/arm_cache.c b/arch/arm/src/armv7-r/arm_cache.c
index df176a9..827d572 100644
--- a/arch/arm/src/armv7-r/arm_cache.c
+++ b/arch/arm/src/armv7-r/arm_cache.c
@@ -134,7 +134,15 @@ void up_invalidate_icache_all(void)
 
 void up_clean_dcache(uintptr_t start, uintptr_t end)
 {
-  cp15_clean_dcache(start, end);
+  if (cp15_cache_size() < (end - start))
+    {
+      cp15_clean_dcache(start, end);
+    }
+  else
+    {
+      cp15_clean_dcache_all();
+    }
+
   l2cc_clean(start, end);
 }
 
@@ -190,7 +198,15 @@ void up_clean_dcache_all(void)
 
 void up_flush_dcache(uintptr_t start, uintptr_t end)
 {
-  cp15_flush_dcache(start, end);
+  if (cp15_cache_size() < (end - start))
+    {
+      cp15_flush_dcache(start, end);
+    }
+  else
+    {
+      cp15_flush_dcache_all();
+    }
+
   l2cc_flush(start, end);
 }
 
diff --git a/arch/arm/src/imx6/Make.defs b/arch/arm/src/imx6/Make.defs
index e0062a2..94bd4e4 100644
--- a/arch/arm/src/imx6/Make.defs
+++ b/arch/arm/src/imx6/Make.defs
@@ -49,7 +49,7 @@ CMN_ASRCS += arm_saveusercontext.S arm_vectoraddrexcptn.S
 CMN_ASRCS += arm_testset.S arm_fetchadd.S vfork.S
 CMN_ASRCS += cp15_coherent_dcache.S cp15_invalidate_dcache.S
 CMN_ASRCS += cp15_clean_dcache.S cp15_flush_dcache.S cp15_invalidate_dcache_all.S
-CMN_ASRCS += cp15_clean_dcache_all.S cp15_flush_dcache_all.S
+CMN_ASRCS += cp15_clean_dcache_all.S cp15_flush_dcache_all.S cp15_cache_size.S
 
 # Common C source files
 
diff --git a/arch/arm/src/sama5/Make.defs b/arch/arm/src/sama5/Make.defs
index 2bbc835..8e7ce55 100644
--- a/arch/arm/src/sama5/Make.defs
+++ b/arch/arm/src/sama5/Make.defs
@@ -46,7 +46,7 @@ CMN_ASRCS += arm_saveusercontext.S arm_vectoraddrexcptn.S
 CMN_ASRCS += arm_testset.S arm_fetchadd.S vfork.S
 CMN_ASRCS += cp15_coherent_dcache.S cp15_invalidate_dcache.S
 CMN_ASRCS += cp15_clean_dcache.S cp15_flush_dcache.S cp15_invalidate_dcache_all.S
-CMN_ASRCS += cp15_clean_dcache_all.S cp15_flush_dcache_all.S
+CMN_ASRCS += cp15_clean_dcache_all.S cp15_flush_dcache_all.S cp15_cache_size.S
 
 # Configuration dependent assembly language files
 
diff --git a/arch/arm/src/tms570/Make.defs b/arch/arm/src/tms570/Make.defs
index b289b86..cb2b3a0 100644
--- a/arch/arm/src/tms570/Make.defs
+++ b/arch/arm/src/tms570/Make.defs
@@ -31,7 +31,7 @@ CMN_ASRCS += arm_testset.S arm_fetchadd.S vfork.S
 CMN_ASRCS += cp15_coherent_dcache.S cp15_invalidate_dcache.S
 CMN_ASRCS += cp15_clean_dcache.S cp15_flush_dcache.S
 CMN_ASRCS += cp15_clean_dcache_all.S cp15_flush_dcache_all.S
-CMN_ASRCS += cp15_invalidate_dcache_all.S
+CMN_ASRCS += cp15_invalidate_dcache_all.S cp15_cache_size.S
 
 # Configuration dependent assembly language files