mem-ruby: fix MOESI_CMP_directory functional reads
authorTiago Muck <tiago.muck@arm.com>
Thu, 2 May 2019 23:41:13 +0000 (18:41 -0500)
committerTiago Mück <tiago.muck@arm.com>
Wed, 6 May 2020 14:42:33 +0000 (14:42 +0000)
commit8ec2abb98a2482e41ec7287832cd2cd4b2009d26
tree5de6b6d58dc7ea0f49ef339f7ea762f6293fe545
parent5abac60ccfb4437e56708de838f0c6025273b07a
mem-ruby: fix MOESI_CMP_directory functional reads

This patch properly sets the access permissions in all controllers.
'Busy' was used for all transient states, which is incorrect in lots of
cases when we still hold a valid copy of the line and are able to handle
a functional read.

In the L2 controller these states were split to differentiate the access
permissions:
IFGXX -> IFGXX, IFGXXD
IGMO -> IGMO, IGMOU
IGMIOF -> IGMIOF, IGMIOFD

Same for the dir. controller:
IS -> IS, IS_M
MM -> MM, MM_M

The dir. controllers also has the states WBI/WBS for lines that have
been queued for a writeback. In these states we hold the data in the TBE
for replying to functional reads until the memory acks the write and we
move to I or S.

Other minor changes includes updated debug messages and asserts.

Change-Id: Ie4f6eac3b4d2641ec91ac6b168a0a017f61c0d6f
Signed-off-by: Tiago Mück <tiago.muck@arm.com>
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/21927
Maintainer: Jason Lowe-Power <power.jg@gmail.com>
Reviewed-by: Pouya Fotouhi <pfotouhi@ucdavis.edu>
Tested-by: kokoro <noreply+kokoro@google.com>
configs/ruby/MOESI_CMP_directory.py
src/mem/ruby/protocol/MOESI_CMP_directory-L1cache.sm
src/mem/ruby/protocol/MOESI_CMP_directory-L2cache.sm
src/mem/ruby/protocol/MOESI_CMP_directory-dir.sm
src/mem/ruby/protocol/MOESI_CMP_directory-dma.sm
src/mem/ruby/protocol/MOESI_CMP_directory-msg.sm