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