Browse Source

[libcpu][arm] fix rt_hw_cpu_dcache_ops clean invalid bug

clean_invalid must be set at the same time, and call
clean_invalid, or call clean/invalid
Martin 2 years ago
parent
commit
e4d6dd88c9
1 changed files with 2 additions and 1 deletions
  1. 2 1
      libcpu/arm/cortex-m7/cpu_cache.c

+ 2 - 1
libcpu/arm/cortex-m7/cpu_cache.c

@@ -69,8 +69,9 @@ void rt_hw_cpu_dcache_ops(int ops, void* addr, int size)
 {
     rt_uint32_t startAddr = (rt_uint32_t)addr & (rt_uint32_t)~(L1CACHE_LINESIZE_BYTE - 1);
     rt_uint32_t size_byte = size + (rt_uint32_t)addr - startAddr;
+    rt_uint32_t clean_invalid = RT_HW_CACHE_FLUSH | RT_HW_CACHE_INVALIDATE;
 
-    if (ops & (RT_HW_CACHE_FLUSH | RT_HW_CACHE_INVALIDATE))
+    if ((ops & clean_invalid) == clean_invalid)
     {
         SCB_CleanInvalidateDCache_by_Addr((uint32_t *)startAddr, size_byte);
     }