Browse Source

drivers: cache: nrf: Resolve NRF_CACHE_HAS_LINEADDR issue

Add new function called _cache_all_check that cache all if
NRF_CACHE has no LINEADDR.

Signed-off-by: Travis Lam <travis.lam@nordicsemi.no>
pull/91527/head
Travis Lam 1 month ago committed by Dan Kalowsky
parent
commit
10f35d741f
  1. 33
      drivers/cache/cache_nrf.c

33
drivers/cache/cache_nrf.c vendored

@ -97,6 +97,7 @@ static inline int _cache_all(NRF_CACHE_Type *cache, enum k_nrf_cache_op op) @@ -97,6 +97,7 @@ static inline int _cache_all(NRF_CACHE_Type *cache, enum k_nrf_cache_op op)
return 0;
}
#if NRF_CACHE_HAS_LINEADDR
static inline void _cache_line(NRF_CACHE_Type *cache, enum k_nrf_cache_op op, uintptr_t line_addr)
{
do {
@ -165,7 +166,7 @@ static inline int _cache_checks(NRF_CACHE_Type *cache, enum k_nrf_cache_op op, v @@ -165,7 +166,7 @@ static inline int _cache_checks(NRF_CACHE_Type *cache, enum k_nrf_cache_op op, v
size_t size, bool is_range)
{
/* Check if the cache is enabled */
if (!(cache->ENABLE & CACHE_ENABLE_ENABLE_Enabled)) {
if (!nrf_cache_enable_check(cache)) {
return -EAGAIN;
}
@ -180,6 +181,16 @@ static inline int _cache_checks(NRF_CACHE_Type *cache, enum k_nrf_cache_op op, v @@ -180,6 +181,16 @@ static inline int _cache_checks(NRF_CACHE_Type *cache, enum k_nrf_cache_op op, v
return _cache_range(cache, op, addr, size);
}
#else
static inline int _cache_all_checks(NRF_CACHE_Type *cache, enum k_nrf_cache_op op)
{
/* Check if the cache is enabled */
if (!nrf_cache_enable_check(cache)) {
return -EAGAIN;
}
return _cache_all(cache, op);
}
#endif /* NRF_CACHE_HAS_LINEADDR */
#if defined(NRF_DCACHE) && NRF_CACHE_HAS_TASKS
@ -301,7 +312,11 @@ void cache_instr_disable(void) @@ -301,7 +312,11 @@ void cache_instr_disable(void)
int cache_instr_flush_all(void)
{
#if NRF_CACHE_HAS_TASK_CLEAN
#if NRF_CACHE_HAS_LINEADDR
return _cache_checks(NRF_ICACHE, K_NRF_CACHE_CLEAN, NULL, 0, false);
#else
return _cache_all_checks(NRF_ICACHE, K_NRF_CACHE_CLEAN);
#endif
#else
return -ENOTSUP;
#endif
@ -309,13 +324,21 @@ int cache_instr_flush_all(void) @@ -309,13 +324,21 @@ int cache_instr_flush_all(void)
int cache_instr_invd_all(void)
{
#if NRF_CACHE_HAS_LINEADDR
return _cache_checks(NRF_ICACHE, K_NRF_CACHE_INVD, NULL, 0, false);
#else
return _cache_all_checks(NRF_ICACHE, K_NRF_CACHE_INVD);
#endif
}
int cache_instr_flush_and_invd_all(void)
{
#if NRF_CACHE_HAS_TASK_FLUSH
#if NRF_CACHE_HAS_LINEADDR
return _cache_checks(NRF_ICACHE, K_NRF_CACHE_FLUSH, NULL, 0, false);
#else
return _cache_all_checks(NRF_ICACHE, K_NRF_CACHE_FLUSH);
#endif
#else
return -ENOTSUP;
#endif
@ -323,7 +346,7 @@ int cache_instr_flush_and_invd_all(void) @@ -323,7 +346,7 @@ int cache_instr_flush_and_invd_all(void)
int cache_instr_flush_range(void *addr, size_t size)
{
#if NRF_CACHE_HAS_TASK_CLEAN
#if NRF_CACHE_HAS_TASK_CLEAN && NRF_CACHE_HAS_LINEADDR
return _cache_checks(NRF_ICACHE, K_NRF_CACHE_CLEAN, addr, size, true);
#else
return -ENOTSUP;
@ -332,12 +355,16 @@ int cache_instr_flush_range(void *addr, size_t size) @@ -332,12 +355,16 @@ int cache_instr_flush_range(void *addr, size_t size)
int cache_instr_invd_range(void *addr, size_t size)
{
#if NRF_CACHE_HAS_LINEADDR
return _cache_checks(NRF_ICACHE, K_NRF_CACHE_INVD, addr, size, true);
#else
return -ENOTSUP;
#endif
}
int cache_instr_flush_and_invd_range(void *addr, size_t size)
{
#if NRF_CACHE_HAS_TASK_FLUSH
#if NRF_CACHE_HAS_TASK_FLUSH && NRF_CACHE_HAS_LINEADDR
return _cache_checks(NRF_ICACHE, K_NRF_CACHE_FLUSH, addr, size, true);
#else
return -ENOTSUP;

Loading…
Cancel
Save