base.cc (12820:5d66b60a2c47) base.cc (12823:ba630bc7a36d)
1/*
2 * Copyright (c) 2012-2013, 2018 ARM Limited
3 * All rights reserved.
4 *
5 * The license below extends only to copyright in the software and shall
6 * not be construed as granting a license to any other intellectual
7 * property including but not limited to intellectual property relating
8 * to a hardware implementation of the functionality of the software

--- 650 unchanged lines hidden (view full) ---

659
660 // Note that just because an L2/L3 has valid data doesn't mean an
661 // L1 doesn't have a more up-to-date modified copy that still
662 // needs to be found. As a result we always update the request if
663 // we have it, but only declare it satisfied if we are the owner.
664
665 // see if we have data at all (owned or otherwise)
666 bool have_data = blk && blk->isValid()
1/*
2 * Copyright (c) 2012-2013, 2018 ARM Limited
3 * All rights reserved.
4 *
5 * The license below extends only to copyright in the software and shall
6 * not be construed as granting a license to any other intellectual
7 * property including but not limited to intellectual property relating
8 * to a hardware implementation of the functionality of the software

--- 650 unchanged lines hidden (view full) ---

659
660 // Note that just because an L2/L3 has valid data doesn't mean an
661 // L1 doesn't have a more up-to-date modified copy that still
662 // needs to be found. As a result we always update the request if
663 // we have it, but only declare it satisfied if we are the owner.
664
665 // see if we have data at all (owned or otherwise)
666 bool have_data = blk && blk->isValid()
667 && pkt->checkFunctional(&cbpw, blk_addr, is_secure, blkSize,
668 blk->data);
667 && pkt->trySatisfyFunctional(&cbpw, blk_addr, is_secure, blkSize,
668 blk->data);
669
670 // data we have is dirty if marked as such or if we have an
671 // in-service MSHR that is pending a modified line
672 bool have_dirty =
673 have_data && (blk->isDirty() ||
674 (mshr && mshr->inService && mshr->isPendingModified()));
675
676 bool done = have_dirty ||
669
670 // data we have is dirty if marked as such or if we have an
671 // in-service MSHR that is pending a modified line
672 bool have_dirty =
673 have_data && (blk->isDirty() ||
674 (mshr && mshr->inService && mshr->isPendingModified()));
675
676 bool done = have_dirty ||
677 cpuSidePort.checkFunctional(pkt) ||
678 mshrQueue.checkFunctional(pkt, blk_addr) ||
679 writeBuffer.checkFunctional(pkt, blk_addr) ||
680 memSidePort.checkFunctional(pkt);
677 cpuSidePort.trySatisfyFunctional(pkt) ||
678 mshrQueue.trySatisfyFunctional(pkt, blk_addr) ||
679 writeBuffer.trySatisfyFunctional(pkt, blk_addr) ||
680 memSidePort.trySatisfyFunctional(pkt);
681
682 DPRINTF(CacheVerbose, "%s: %s %s%s%s\n", __func__, pkt->print(),
683 (blk && blk->isValid()) ? "valid " : "",
684 have_data ? "data " : "", done ? "done " : "");
685
686 // We're leaving the cache, so pop cache->name() label
687 pkt->popLabel();
688

--- 1667 unchanged lines hidden ---
681
682 DPRINTF(CacheVerbose, "%s: %s %s%s%s\n", __func__, pkt->print(),
683 (blk && blk->isValid()) ? "valid " : "",
684 have_data ? "data " : "", done ? "done " : "");
685
686 // We're leaving the cache, so pop cache->name() label
687 pkt->popLabel();
688

--- 1667 unchanged lines hidden ---