You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by gu...@apache.org on 2021/10/22 16:31:40 UTC
[incubator-nuttx] 01/02: arch:cache: add lock feature for cache
This is an automated email from the ASF dual-hosted git repository.
gustavonihei pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git
commit b4ea11f7b14d3168dab1951c4876d0626d632cf0
Author: zhuyanlin <zh...@xiaomi.com>
AuthorDate: Tue Oct 19 12:15:43 2021 +0800
arch:cache: add lock feature for cache
Some architectures support lock & unlock cache feature.
Signed-off-by: zhuyanlin <zh...@xiaomi.com>
---
arch/Kconfig | 10 ++++
include/nuttx/cache.h | 130 ++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 140 insertions(+)
diff --git a/arch/Kconfig b/arch/Kconfig
index 9171e8e..b2a933f 100644
--- a/arch/Kconfig
+++ b/arch/Kconfig
@@ -244,10 +244,20 @@ config ARCH_ICACHE
bool
default n
+config ARCH_ICACHE_LOCK
+ bool
+ depends on ARCH_ICACHE
+ default n
+
config ARCH_DCACHE
bool
default n
+config ARCH_DCACHE_LOCK
+ bool
+ depends on ARCH_DCACHE
+ default n
+
config ARCH_L2CACHE
bool
default n
diff --git a/include/nuttx/cache.h b/include/nuttx/cache.h
index 054eeff..139c034 100644
--- a/include/nuttx/cache.h
+++ b/include/nuttx/cache.h
@@ -133,6 +133,71 @@ void up_invalidate_icache_all(void);
#endif
/****************************************************************************
+ * Name: up_lock_icache
+ *
+ * Description:
+ * Prefetch and lock the instruction cache within the specified region.
+ * If the specified address if not present in the instruction cache,
+ * some architectures transfer the line from memory, others wait the
+ * address be read from memory, and then lock.
+ *
+ * Input Parameters:
+ * start - virtual start address of region
+ * end - virtual end address of region + 1
+ *
+ * Returned Value:
+ * None
+ *
+ ****************************************************************************/
+
+#ifdef CONFIG_ARCH_ICACHE_LOCK
+void up_lock_icache(uintptr_t start, uintptr_t end);
+#else
+# define up_lock_icache()
+#endif
+
+/****************************************************************************
+ * Name: up_unlock_icache
+ *
+ * Description:
+ * Unlock the instruction cache within the specified region.
+ *
+ * Input Parameters:
+ * start - virtual start address of region
+ * end - virtual end address of region + 1
+ *
+ * Returned Value:
+ * None
+ *
+ ****************************************************************************/
+
+#ifdef CONFIG_ARCH_ICACHE_LOCK
+void up_unlock_icache(uintptr_t start, uintptr_t end);
+#else
+# define up_unlock_icache()
+#endif
+
+/****************************************************************************
+ * Name: up_unlock_icache_all
+ *
+ * Description:
+ * Unlock the entire contents of instruction cache.
+ *
+ * Input Parameters:
+ * None
+ *
+ * Returned Value:
+ * None
+ *
+ ****************************************************************************/
+
+#ifdef CONFIG_ARCH_ICACHE_LOCK
+void up_unlock_icache_all(void);
+#else
+# define up_unlock_icache_all()
+#endif
+
+/****************************************************************************
* Name: up_enable_dcache
*
* Description:
@@ -304,6 +369,71 @@ void up_flush_dcache_all(void);
#endif
/****************************************************************************
+ * Name: up_lock_dcache
+ *
+ * Description:
+ * Prefetch and lock the data cache within the specified region.
+ * If the specified address is not present in the data cache,
+ * some architectures transfer the line from memory, others wait the
+ * address be read from memory, and then lock.
+ *
+ * Input Parameters:
+ * start - virtual start address of region
+ * end - virtual end address of region + 1
+ *
+ * Returned Value:
+ * None
+ *
+ ****************************************************************************/
+
+#ifdef CONFIG_ARCH_DCACHE_LOCK
+void up_lock_dcache(uintptr_t start, uintptr_t end);
+#else
+# define up_lock_dcache()
+#endif
+
+/****************************************************************************
+ * Name: up_unlock_dcache
+ *
+ * Description:
+ * Unlock the data cache within the specified region.
+ *
+ * Input Parameters:
+ * start - virtual start address of region
+ * end - virtual end address of region + 1
+ *
+ * Returned Value:
+ * None
+ *
+ ****************************************************************************/
+
+#ifdef CONFIG_ARCH_DCACHE_LOCK
+void up_unlock_dcache(uintptr_t start, uintptr_t end);
+#else
+# define up_unlock_dcache()
+#endif
+
+/****************************************************************************
+ * Name: up_unlock_dcache_all
+ *
+ * Description:
+ * Unlock the entire contents of data cache.
+ *
+ * Input Parameters:
+ * None
+ *
+ * Returned Value:
+ * None
+ *
+ ****************************************************************************/
+
+#ifdef CONFIG_ARCH_DCACHE_LOCK
+void up_unlock_dcache_all(void);
+#else
+# define up_unlock_dcache_all()
+#endif
+
+/****************************************************************************
* Name: up_coherent_dcache
*
* Description: