From 7b526e2447cf374d33868dd8c7bd799d32ce497e Mon Sep 17 00:00:00 2001 From: Benjamin Walsh Date: Fri, 30 Oct 2015 17:04:00 -0400 Subject: [PATCH] cache: add implementation for cache-less systems Add NOP functions to allow writing cache-availabiliy-agnostic code. Change-Id: Id8e392271329095abad3db6856a4e621702d1dae Signed-off-by: Benjamin Walsh --- include/cache.h | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/include/cache.h b/include/cache.h index 432ebb986b1..5e5a341a689 100644 --- a/include/cache.h +++ b/include/cache.h @@ -23,21 +23,44 @@ extern "C" { #endif -#if defined(CONFIG_CACHE_FLUSHING) #define _sys_cache_flush_sig(x) void (x)(vaddr_t virt, size_t size) +#if defined(CONFIG_CACHE_FLUSHING) + #if defined(CONFIG_ARCH_CACHE_FLUSH_DETECT) typedef _sys_cache_flush_sig(_sys_cache_flush_t); extern _sys_cache_flush_t *sys_cache_flush; #else extern _sys_cache_flush_sig(sys_cache_flush); #endif + +#else + +/* + * Provide NOP APIs for systems that do not have caches. + * + * An example is the Cortex-M chips. However, the functions are provided so + * that code that need to manipulate caches can be written in an + * architecture-agnostic manner. The functions do nothing. The cache line size + * value is always 0. + */ + +static inline _sys_cache_flush_sig(sys_cache_flush) +{ + ARG_UNUSED(virt); + ARG_UNUSED(size); + + /* do nothing */ +} + #endif /* CACHE_FLUSHING */ #if defined(CONFIG_CACHE_LINE_SIZE_DETECT) extern size_t sys_cache_line_size; -#else +#elif defined(CONFIG_CACHE_LINE_SIZE) #define sys_cache_line_size CONFIG_CACHE_LINE_SIZE +#else + #define sys_cache_line_size 0 #endif #ifdef __cplusplus