]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
mips: octeon: cache.c: Flush all pending writes in flush_dcache_range()
authorStefan Roese <sr@denx.de>
Mon, 24 Aug 2020 11:04:41 +0000 (13:04 +0200)
committerDaniel Schwierzeck <daniel.schwierzeck@gmail.com>
Wed, 7 Oct 2020 18:25:57 +0000 (20:25 +0200)
As noticed while working on the USB xHCI support, Octeon needs to flush
all pending writes so that the values are present in the memory. Add
this "syncw" instruction (twice) to flush_dcache_range().

Signed-off-by: Stefan Roese <sr@denx.de>
arch/mips/mach-octeon/cache.c

index 9a88bb97c73ac67f91071038f11db0431d950083..f293d65daead352f8fff6cd69d5be9d131ee98b0 100644 (file)
@@ -5,14 +5,13 @@
 
 #include <cpu_func.h>
 
-/*
- * The Octeon platform is cache coherent and cache flushes and invalidates
- * are not needed. Define some platform specific empty flush_foo()
- * functions here to overwrite the _weak common function as a no-op.
- * This effectively disables all cache operations.
- */
+/* Octeon memory write barrier */
+#define CVMX_SYNCW     asm volatile ("syncw\nsyncw\n" : : : "memory")
+
 void flush_dcache_range(ulong start_addr, ulong stop)
 {
+       /* Flush all pending writes */
+       CVMX_SYNCW;
 }
 
 void flush_cache(ulong start_addr, ulong size)
@@ -21,4 +20,5 @@ void flush_cache(ulong start_addr, ulong size)
 
 void invalidate_dcache_range(ulong start_addr, ulong stop)
 {
+       /* Don't need to do anything for OCTEON */
 }