[PATCH] cache: sifive_ccache: Optimize cache flushes

Samuel Holland posted 1 patch 3 weeks, 1 day ago
drivers/cache/sifive_ccache.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
[PATCH] cache: sifive_ccache: Optimize cache flushes
Posted by Samuel Holland 3 weeks, 1 day ago
Fence instructions are required only at the beginning and the end of
a flush operation, not separately for each cache line being flushed.
Speed up cache flushes by about 15% by removing the extra fences.

Signed-off-by: Samuel Holland <samuel.holland@sifive.com>
---

 drivers/cache/sifive_ccache.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/cache/sifive_ccache.c b/drivers/cache/sifive_ccache.c
index e1a283805ea7f..a86800b123b9e 100644
--- a/drivers/cache/sifive_ccache.c
+++ b/drivers/cache/sifive_ccache.c
@@ -151,16 +151,16 @@ static void ccache_flush_range(phys_addr_t start, size_t len)
 	if (!len)
 		return;
 
-	mb();
+	mb(); /* complete earlier memory accesses before the cache flush */
 	for (line = ALIGN_DOWN(start, SIFIVE_CCACHE_LINE_SIZE); line < end;
 			line += SIFIVE_CCACHE_LINE_SIZE) {
 #ifdef CONFIG_32BIT
-		writel(line >> 4, ccache_base + SIFIVE_CCACHE_FLUSH32);
+		writel_relaxed(line >> 4, ccache_base + SIFIVE_CCACHE_FLUSH32);
 #else
-		writeq(line, ccache_base + SIFIVE_CCACHE_FLUSH64);
+		writeq_relaxed(line, ccache_base + SIFIVE_CCACHE_FLUSH64);
 #endif
-		mb();
 	}
+	mb(); /* issue later memory accesses after the cache flush */
 }
 
 static const struct riscv_nonstd_cache_ops ccache_mgmt_ops __initconst = {
-- 
2.47.2

base-commit: 9dd1835ecda5b96ac88c166f4a87386f3e727bd9
branch: up/ccache-flush-opt
Re: [PATCH] cache: sifive_ccache: Optimize cache flushes
Posted by Conor Dooley 3 weeks ago
From: Conor Dooley <conor.dooley@microchip.com>

On Tue, 09 Sep 2025 15:41:27 -0700, Samuel Holland wrote:
> Fence instructions are required only at the beginning and the end of
> a flush operation, not separately for each cache line being flushed.
> Speed up cache flushes by about 15% by removing the extra fences.
> 
> 

Applied to riscv-cache-for-next, thanks!

[1/1] cache: sifive_ccache: Optimize cache flushes
      https://git.kernel.org/conor/c/941327ca5ddd

Thanks,
Conor.