From 7387f2a93afc49801a4c1294e1a166af6507b186 Mon Sep 17 00:00:00 2001 From: Andrew Waterman Date: Sat, 12 Aug 2017 16:13:24 -0700 Subject: [PATCH] Don't block D-channel when handling a probe This is an acquire-before-release regression. --- src/main/scala/rocket/DCache.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/scala/rocket/DCache.scala b/src/main/scala/rocket/DCache.scala index 39795d3a..c9e1675e 100644 --- a/src/main/scala/rocket/DCache.scala +++ b/src/main/scala/rocket/DCache.scala @@ -411,7 +411,7 @@ class DCacheModule(outer: DCache) extends HellaCacheModule(outer) { val grantInProgress = Reg(init=Bool(false)) val blockProbeAfterGrantCount = Reg(init=UInt(0)) when (blockProbeAfterGrantCount > 0) { blockProbeAfterGrantCount := blockProbeAfterGrantCount - 1 } - val canAcceptCachedGrant = if (cacheParams.acquireBeforeRelease) release_state === s_ready else true.B + val canAcceptCachedGrant = if (cacheParams.acquireBeforeRelease) !release_state.isOneOf(s_voluntary_writeback, s_voluntary_write_meta) else true.B tl_out.d.ready := Mux(grantIsCached, (!d_first || tl_out.e.ready) && canAcceptCachedGrant, true.B) when (tl_out.d.fire()) { when (grantIsCached) {