diff options
author | Giacomo Travaglini <giacomo.travaglini@arm.com> | 2018-07-20 11:23:49 +0100 |
---|---|---|
committer | Giacomo Travaglini <giacomo.travaglini@arm.com> | 2018-08-24 13:47:35 +0000 |
commit | f741bb7cdbdd6c2526be40fe1e03a705364ddf8d (patch) | |
tree | 601725878dea62a50c2769f27d6cd5eb46b1b829 /src/cpu/testers/traffic_gen/base.cc | |
parent | 2b3168021cb0ceed8e90045435181bb82eed0c12 (diff) | |
download | gem5-f741bb7cdbdd6c2526be40fe1e03a705364ddf8d.tar.xz |
cpu: Stream/SubstreamID support in TrafficGen
This patch is adding support for generating memory requests which set
the StreamID/SubstreamID field, so that is possible to emulate devices
attached to an external IOMMU/SMMU with a Traffic generator.
Change-Id: Iea068de581ae7125a9d49314124a08c045c75b49
Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com>
Reviewed-on: https://gem5-review.googlesource.com/12188
Diffstat (limited to 'src/cpu/testers/traffic_gen/base.cc')
-rw-r--r-- | src/cpu/testers/traffic_gen/base.cc | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/src/cpu/testers/traffic_gen/base.cc b/src/cpu/testers/traffic_gen/base.cc index 6778e417b..ad4f67d9d 100644 --- a/src/cpu/testers/traffic_gen/base.cc +++ b/src/cpu/testers/traffic_gen/base.cc @@ -52,6 +52,7 @@ #include "cpu/testers/traffic_gen/idle_gen.hh" #include "cpu/testers/traffic_gen/linear_gen.hh" #include "cpu/testers/traffic_gen/random_gen.hh" +#include "cpu/testers/traffic_gen/stream_gen.hh" #include "debug/Checkpoint.hh" #include "debug/TrafficGen.hh" #include "params/BaseTrafficGen.hh" @@ -78,7 +79,12 @@ BaseTrafficGen::BaseTrafficGen(const BaseTrafficGenParams* p) retryPkt(NULL), retryPktTick(0), updateEvent([this]{ update(); }, name()), - masterID(system->getMasterId(this)) + masterID(system->getMasterId(this)), + streamGenerator(StreamGen::create(p)) +{ +} + +BaseTrafficGen::~BaseTrafficGen() { } @@ -172,6 +178,19 @@ BaseTrafficGen::update() // get the next packet and try to send it PacketPtr pkt = activeGenerator->getNextPacket(); + // If generating stream/substream IDs are enabled, + // try to pick and assign them to the new packet + if (streamGenerator) { + auto sid = streamGenerator->pickStreamID(); + auto ssid = streamGenerator->pickSubStreamID(); + + pkt->req->setStreamId(sid); + + if (streamGenerator->ssidValid()) { + pkt->req->setSubStreamId(ssid); + } + } + // suppress packets that are not destined for a memory, such as // device accesses that could be part of a trace if (pkt && system->isMemAddr(pkt->getAddr())) { |