arc: cache: Rework cache API
And use the new API.
Signed-off-by: Carlo Caione <ccaione@baylibre.com>
diff --git a/arch/arc/core/cache.c b/arch/arc/core/cache.c
index fd882d8..c67db46 100644
--- a/arch/arc/core/cache.c
+++ b/arch/arc/core/cache.c
@@ -40,7 +40,6 @@
#define DC_CTRL_INDIRECT_ACCESS 0x20 /* indirect access mode */
#define DC_CTRL_OP_SUCCEEDED 0x4 /* d-cache operation succeeded */
-
static bool dcache_available(void)
{
unsigned long val = z_arc_v2_aux_reg_read(_ARC_V2_D_CACHE_BUILD);
@@ -61,7 +60,12 @@
dcache_dc_ctrl(DC_CTRL_DC_ENABLE);
}
-static void arch_dcache_flush(void *start_addr_ptr, size_t size)
+void arch_dcache_disable(void)
+{
+ /* nothing */
+}
+
+int arch_dcache_flush_range(void *start_addr_ptr, size_t size)
{
size_t line_size = sys_cache_data_line_size_get();
uintptr_t start_addr = (uintptr_t)start_addr_ptr;
@@ -69,7 +73,7 @@
unsigned int key;
if (!dcache_available() || (size == 0U) || line_size == 0U) {
- return;
+ return -ENOTSUP;
}
end_addr = start_addr + size;
@@ -95,9 +99,10 @@
arch_irq_unlock(key); /* --exit critical section-- */
+ return 0;
}
-static void arch_dcache_invd(void *start_addr_ptr, size_t size)
+int arch_dcache_invd_range(void *start_addr_ptr, size_t size)
{
size_t line_size = sys_cache_data_line_size_get();
uintptr_t start_addr = (uintptr_t)start_addr_ptr;
@@ -105,7 +110,7 @@
unsigned int key;
if (!dcache_available() || (size == 0U) || line_size == 0U) {
- return;
+ return -ENOTSUP;
}
end_addr = start_addr + size;
start_addr = ROUND_DOWN(start_addr, line_size);
@@ -120,36 +125,26 @@
start_addr += line_size;
} while (start_addr < end_addr);
irq_unlock(key); /* -exit critical section- */
-}
-
-int arch_dcache_range(void *addr, size_t size, int op)
-{
- if (op == K_CACHE_INVD) {
- /*
- * TODO: On invalidate we can contextually flush by setting the
- * DC_CTRL_INVALID_FLUSH bit
- */
- arch_dcache_invd(addr, size);
- } else if (op == K_CACHE_WB) {
- arch_dcache_flush(addr, size);
- } else {
- return -ENOTSUP;
- }
return 0;
}
-int arch_icache_range(void *addr, size_t size, int op)
+int arch_dcache_flush_and_invd_range(void *start_addr_ptr, size_t size)
{
return -ENOTSUP;
}
-int arch_dcache_all(int op)
+int arch_dcache_flush_all(void)
{
return -ENOTSUP;
}
-int arch_icache_all(int op)
+int arch_dcache_invd_all(void)
+{
+ return -ENOTSUP;
+}
+
+int arch_dcache_flush_and_invd_all(void)
{
return -ENOTSUP;
}
@@ -172,6 +167,55 @@
}
#endif
+void arch_icache_enable(void)
+{
+ /* nothing */
+}
+
+void arch_icache_disable(void)
+{
+ /* nothing */
+}
+
+int arch_icache_flush_all(void)
+{
+ return -ENOTSUP;
+}
+
+int arch_icache_invd_all(void)
+{
+ return -ENOTSUP;
+}
+
+int arch_icache_flush_and_invd_all(void)
+{
+ return -ENOTSUP;
+}
+
+int arch_icache_flush_range(void *addr, size_t size)
+{
+ ARG_UNUSED(addr);
+ ARG_UNUSED(size);
+
+ return -ENOTSUP;
+}
+
+int arch_icache_invd_range(void *addr, size_t size)
+{
+ ARG_UNUSED(addr);
+ ARG_UNUSED(size);
+
+ return -ENOTSUP;
+}
+
+int arch_icache_flush_and_invd_range(void *addr, size_t size)
+{
+ ARG_UNUSED(addr);
+ ARG_UNUSED(size);
+
+ return -ENOTSUP;
+}
+
static int init_dcache(const struct device *unused)
{
ARG_UNUSED(unused);