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>
This commit is contained in:
parent
2c811b52b8
commit
10f35d741f
33
drivers/cache/cache_nrf.c
vendored
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)
|
||||
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
|
||||
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
|
||||
|
||||
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)
|
||||
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)
|
||||
|
||||
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)
|
||||
|
||||
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)
|
||||
|
||||
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…
Reference in New Issue
Block a user