sh4: cache: correct dcache flush to invalidate with write-back
authorVladimir Zapolskiy <vz@mleia.com>
Sun, 27 Nov 2016 22:15:13 +0000 (00:15 +0200)
committerTom Rini <trini@konsulko.com>
Sat, 3 Dec 2016 02:32:39 +0000 (21:32 -0500)
In common usecases flush_cache() assumes both cache invalidation and
write-back to memory, thus in flush_dcache_range() implementation
change SH4 cache write-back only instruction 'ocbwb' with cache purge
instruction 'ocbp', according to the User's Manual there should be no
performance penalty for that.

Note that under circumstances only cache invalidation is expected from
flush_cache() call, in these occasional cases the current version of
flush_cache() works, which is a wrapper over invalidate_dcache_range()
at the moment, this will be fixed in the following change.

Signed-off-by: Vladimir Zapolskiy <vz@mleia.com>
arch/sh/cpu/sh4/cache.c

index e1ee970a91cb53a9b091c94a18a73a7e30614264..b3e5fd559576dbc74bddf4954a50fdc2e7208f85 100644 (file)
@@ -97,7 +97,7 @@ void flush_dcache_range(unsigned long start, unsigned long end)
 
        start &= ~(L1_CACHE_BYTES - 1);
        for (v = start; v < end; v += L1_CACHE_BYTES) {
-               asm volatile ("ocbwb     %0" :  /* no output */
+               asm volatile ("ocbp     %0" :   /* no output */
                              : "m" (__m(v)));
        }
 }