From 01bc2ea80d514abb5009869fc6b765208192906f Mon Sep 17 00:00:00 2001 From: Javier Cano-Cano Date: Mon, 13 Mar 2017 16:38:18 +0100 Subject: ruby: Fix MOESI_CMP_directory for new DMA status changes. Multiple outstanding DMA requests introduced new DMA states that didn't be considered into slicc code. This patch implements the missed DMA state changes on MOESI_CMP_directory protocol. Change-Id: I700d441d76556b7e77e0d507904af6ec6ba59cc2 Signed-off-by: Michael LeBeane Reviewed-on: https://gem5-review.googlesource.com/2380 Reviewed-by: Jason Lowe-Power Reviewed-by: Michael LeBeane Maintainer: Jason Lowe-Power --- src/mem/protocol/MOESI_CMP_directory-dma.sm | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'src/mem/protocol') diff --git a/src/mem/protocol/MOESI_CMP_directory-dma.sm b/src/mem/protocol/MOESI_CMP_directory-dma.sm index ccc7f8790..b9da0d0dc 100644 --- a/src/mem/protocol/MOESI_CMP_directory-dma.sm +++ b/src/mem/protocol/MOESI_CMP_directory-dma.sm @@ -77,6 +77,7 @@ machine(MachineType:DMA, "DMA Controller") Tick clockEdge(); void set_tbe(TBE b); void unset_tbe(); + void wakeUpAllBuffers(); State getState(TBE tbe, Addr addr) { return cur_state; @@ -249,6 +250,13 @@ machine(MachineType:DMA, "DMA Controller") unset_tbe(); } + action(zz_stallAndWaitRequestQueue, "zz", desc="...") { + stall_and_wait(dmaRequestQueue_in, address); + } + + action(wkad_wakeUpAllDependents, "wkad", desc="wake-up all dependents") { + wakeUpAllBuffers(); + } transition(READY, ReadRequest, BUSY_RD) { s_sendReadRequest; @@ -269,6 +277,7 @@ machine(MachineType:DMA, "DMA Controller") //u_updateAckCount; //o_checkForCompletion; p_popResponseQueue; + wkad_wakeUpAllDependents; } transition(BUSY_RD, All_Acks, READY) { @@ -276,6 +285,7 @@ machine(MachineType:DMA, "DMA Controller") //u_sendExclusiveUnblockToDir; w_deallocateTBE; p_popTriggerQueue; + wkad_wakeUpAllDependents; } transition(READY, WriteRequest, BUSY_WR) { @@ -301,5 +311,10 @@ machine(MachineType:DMA, "DMA Controller") u_sendExclusiveUnblockToDir; w_deallocateTBE; p_popTriggerQueue; + wkad_wakeUpAllDependents; + } + + transition({BUSY_RD,BUSY_WR}, {ReadRequest,WriteRequest}) { + zz_stallAndWaitRequestQueue; } } -- cgit v1.2.3