summaryrefslogtreecommitdiff
path: root/src/cpu/minor
diff options
context:
space:
mode:
authorGabor Dozsa <gabor.dozsa@arm.com>2019-01-23 15:15:16 +0000
committerGiacomo Travaglini <giacomo.travaglini@arm.com>2020-01-03 08:17:22 +0000
commitbd32682445150c234f83872e135bc959247a4065 (patch)
tree542c318f9e34abcb8267cca06c57e1c3a8057b4f /src/cpu/minor
parent64e136175ed59d481b30b222d4e936160291c2f3 (diff)
downloadgem5-bd32682445150c234f83872e135bc959247a4065.tar.xz
cpu: Disable MinorCPU value forwarding with write strobes
Change-Id: I7cb50b80b70fcf43ab23eb9e7333d16328993fe1 Signed-off-by: Gabor Dozsa <gabor.dozsa@arm.com> Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/19173 Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Maintainer: Jason Lowe-Power <jason@lowepower.com> Tested-by: kokoro <noreply+kokoro@google.com>
Diffstat (limited to 'src/cpu/minor')
-rw-r--r--src/cpu/minor/lsq.cc10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/cpu/minor/lsq.cc b/src/cpu/minor/lsq.cc
index dea776c9e..8bbda030c 100644
--- a/src/cpu/minor/lsq.cc
+++ b/src/cpu/minor/lsq.cc
@@ -142,10 +142,18 @@ LSQ::LSQRequest::containsAddrRangeOf(
LSQ::AddrRangeCoverage
LSQ::LSQRequest::containsAddrRangeOf(LSQRequestPtr other_request)
{
- return containsAddrRangeOf(request->getPaddr(), request->getSize(),
+ AddrRangeCoverage ret = containsAddrRangeOf(
+ request->getPaddr(), request->getSize(),
other_request->request->getPaddr(), other_request->request->getSize());
+ /* If there is a strobe mask then store data forwarding might not be
+ * correct. Instead of checking enablemant of every byte we just fall back
+ * to PartialAddrRangeCoverage to prohibit store data forwarding */
+ if (ret == FullAddrRangeCoverage && request->isMasked())
+ ret = PartialAddrRangeCoverage;
+ return ret;
}
+
bool
LSQ::LSQRequest::isBarrier()
{