mem-ruby: Fix Ruby handling of functional requests
authorTiago Muck <tiago.muck@arm.com>
Thu, 2 May 2019 23:40:08 +0000 (18:40 -0500)
committerTiago Mück <tiago.muck@arm.com>
Thu, 23 Apr 2020 00:23:30 +0000 (00:23 +0000)
commitca11bfb20ed84bffae9a8bbbc01b0b9197e1362e
treef28bc75c3ae9905a65c001d2f21dc0cd5752a818
parent00eba28068c50eebd3346fa5fe64c6b0e213742c
mem-ruby: Fix Ruby handling of functional requests

This patch addresses multiple cases:

- When a controller has read/write permissions while others have read
  only permissions, the one with r/w permissions performs the read as
  the others may have stale data
- When controllers only have lines with stale or busy access permissions,
  a valid copy of the line may be in a message in transit in the network
  or in a message buffer (not seen by the controller yet). In this case,
  we forward the functional request accordingly.
- Sequencer messages should not accept functional reads
- Functional writes also update the packet data on the sequencer
  outstanding request lists and the cpu-side response queue.

Change-Id: I6b0656f1a2b81d41bdcf6c783dfa522a77393981
Signed-off-by: Tiago Mück <tiago.muck@arm.com>
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/22022
Tested-by: Gem5 Cloud Project GCB service account <345032938727@cloudbuild.gserviceaccount.com>
Tested-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: John Alsop <johnathan.alsop@amd.com>
Reviewed-by: Jason Lowe-Power <power.jg@gmail.com>
Maintainer: Jason Lowe-Power <power.jg@gmail.com>
src/mem/ruby/protocol/RubySlicc_Exports.sm
src/mem/ruby/slicc_interface/AbstractController.hh
src/mem/ruby/slicc_interface/RubyRequest.cc
src/mem/ruby/system/RubyPort.cc
src/mem/ruby/system/RubyPort.hh
src/mem/ruby/system/RubySystem.cc
src/mem/ruby/system/Sequencer.cc
src/mem/ruby/system/Sequencer.hh
src/mem/slicc/symbols/StateMachine.py