From 12067a3b8d6ecb595d222093d640b57c82c6e802 Mon Sep 17 00:00:00 2001 From: Howard Mao Date: Thu, 21 Jul 2016 15:07:25 -0700 Subject: [PATCH] make sure outer probe and finish lines are disconnected --- uncore/src/main/scala/agents/Agents.scala | 7 +++++++ uncore/src/main/scala/agents/Broadcast.scala | 2 ++ uncore/src/main/scala/agents/Bufferless.scala | 2 ++ uncore/src/main/scala/agents/Cache.scala | 2 ++ uncore/src/main/scala/agents/StatelessBridge.scala | 3 ++- 5 files changed, 15 insertions(+), 1 deletion(-) diff --git a/uncore/src/main/scala/agents/Agents.scala b/uncore/src/main/scala/agents/Agents.scala index 15bf0f7b..b7519633 100644 --- a/uncore/src/main/scala/agents/Agents.scala +++ b/uncore/src/main/scala/agents/Agents.scala @@ -151,4 +151,11 @@ abstract class HierarchicalCoherenceAgent(implicit p: Parameters) extends Cohere def innerTL = io.inner def outerTL = io.outer def incoherent = io.incoherent + + // TODO: Remove this function (and all its calls) when we support probing the L2 + def disconnectOuterProbeAndFinish() { + io.outer.probe.ready := Bool(false) + io.outer.finish.valid := Bool(false) + assert(!io.outer.probe.valid, "L2 agent got illegal probe") + } } diff --git a/uncore/src/main/scala/agents/Broadcast.scala b/uncore/src/main/scala/agents/Broadcast.scala index 119570ce..9845342e 100644 --- a/uncore/src/main/scala/agents/Broadcast.scala +++ b/uncore/src/main/scala/agents/Broadcast.scala @@ -54,6 +54,8 @@ class L2BroadcastHub(implicit p: Parameters) extends HierarchicalCoherenceAgent( doOutputArbitration(io.inner.grant, trackerList.map(_.io.inner.grant)) doInputRouting(io.inner.finish, trackerList.map(_.io.inner.finish)) + + disconnectOuterProbeAndFinish() } class BroadcastXactTracker(implicit p: Parameters) extends XactTracker()(p) { diff --git a/uncore/src/main/scala/agents/Bufferless.scala b/uncore/src/main/scala/agents/Bufferless.scala index 39276c2b..5371d74a 100644 --- a/uncore/src/main/scala/agents/Bufferless.scala +++ b/uncore/src/main/scala/agents/Bufferless.scala @@ -67,6 +67,8 @@ class BufferlessBroadcastHub(implicit p: Parameters) extends HierarchicalCoheren io.inner.grant.bits.addr_beat := io.outer.grant.bits.addr_beat doInputRouting(io.inner.finish, trackerList.map(_.io.inner.finish)) + + disconnectOuterProbeAndFinish() } class BufferlessBroadcastVoluntaryReleaseTracker(trackerId: Int)(implicit p: Parameters) diff --git a/uncore/src/main/scala/agents/Cache.scala b/uncore/src/main/scala/agents/Cache.scala index 52bff518..5cfb819f 100644 --- a/uncore/src/main/scala/agents/Cache.scala +++ b/uncore/src/main/scala/agents/Cache.scala @@ -442,6 +442,8 @@ class L2HellaCacheBank(implicit p: Parameters) extends HierarchicalCoherenceAgen tshrfile.io.incoherent <> io.incoherent meta.io <> tshrfile.io.meta data.io <> tshrfile.io.data + + disconnectOuterProbeAndFinish() } class TSHRFileIO(implicit p: Parameters) extends HierarchicalTLIO()(p) diff --git a/uncore/src/main/scala/agents/StatelessBridge.scala b/uncore/src/main/scala/agents/StatelessBridge.scala index 515b60c5..aacc0f59 100644 --- a/uncore/src/main/scala/agents/StatelessBridge.scala +++ b/uncore/src/main/scala/agents/StatelessBridge.scala @@ -66,5 +66,6 @@ class ManagerToClientStatelessBridge(implicit p: Parameters) extends Hierarchica io.inner.probe.valid := Bool(false) io.inner.finish.ready := Bool(true) -} + disconnectOuterProbeAndFinish() +}