mem: Snoop into caches on uncacheable accesses

This patch takes a last step in fixing issues related to uncacheable
accesses. We do not separate uncacheable memory from uncacheable
devices, and in cases where it is really memory, there are valid
scenarios where we need to snoop since we do not support cache
maintenance instructions (yet). On snooping an uncacheable access we
thus provide data if possible. In essence this makes uncacheable
accesses IO coherent.

The snoop filter is also queried to steer the snoops, but not updated
since the uncacheable accesses do not allocate a block.
This commit is contained in:
Andreas Hansson
2015-05-05 03:22:29 -04:00
parent 554ddc7c07
commit 36f29496a0
8 changed files with 65 additions and 49 deletions

View File

@@ -104,8 +104,9 @@ DmaPort::handleResp(PacketPtr pkt, Tick delay)
bool
DmaPort::recvTimingResp(PacketPtr pkt)
{
// We shouldn't ever get a block in ownership state
assert(!(pkt->memInhibitAsserted() && !pkt->sharedAsserted()));
// We shouldn't ever get a cacheable block in ownership state
assert(pkt->req->isUncacheable() ||
!(pkt->memInhibitAsserted() && !pkt->sharedAsserted()));
handleResp(pkt);