cache.cc (12556:522b57ee9abf) cache.cc (12574:22936e2eb2da)
1/*
2 * Copyright (c) 2010-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

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

1654Cache::writebackBlk(CacheBlk *blk)
1655{
1656 chatty_assert(!isReadOnly || writebackClean,
1657 "Writeback from read-only cache");
1658 assert(blk && blk->isValid() && (blk->isDirty() || writebackClean));
1659
1660 writebacks[Request::wbMasterId]++;
1661
1/*
2 * Copyright (c) 2010-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

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

1654Cache::writebackBlk(CacheBlk *blk)
1655{
1656 chatty_assert(!isReadOnly || writebackClean,
1657 "Writeback from read-only cache");
1658 assert(blk && blk->isValid() && (blk->isDirty() || writebackClean));
1659
1660 writebacks[Request::wbMasterId]++;
1661
1662 Request *req = new Request(tags->regenerateBlkAddr(blk->tag, blk->set),
1663 blkSize, 0, Request::wbMasterId);
1662 Request *req = new Request(tags->regenerateBlkAddr(blk), blkSize, 0,
1663 Request::wbMasterId);
1664 if (blk->isSecure())
1665 req->setFlags(Request::SECURE);
1666
1667 req->taskId(blk->task_id);
1668
1669 PacketPtr pkt =
1670 new Packet(req, blk->isDirty() ?
1671 MemCmd::WritebackDirty : MemCmd::WritebackClean);

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

1689 std::memcpy(pkt->getPtr<uint8_t>(), blk->data, blkSize);
1690
1691 return pkt;
1692}
1693
1694PacketPtr
1695Cache::writecleanBlk(CacheBlk *blk, Request::Flags dest, PacketId id)
1696{
1664 if (blk->isSecure())
1665 req->setFlags(Request::SECURE);
1666
1667 req->taskId(blk->task_id);
1668
1669 PacketPtr pkt =
1670 new Packet(req, blk->isDirty() ?
1671 MemCmd::WritebackDirty : MemCmd::WritebackClean);

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

1689 std::memcpy(pkt->getPtr<uint8_t>(), blk->data, blkSize);
1690
1691 return pkt;
1692}
1693
1694PacketPtr
1695Cache::writecleanBlk(CacheBlk *blk, Request::Flags dest, PacketId id)
1696{
1697 Request *req = new Request(tags->regenerateBlkAddr(blk->tag, blk->set),
1698 blkSize, 0, Request::wbMasterId);
1697 Request *req = new Request(tags->regenerateBlkAddr(blk), blkSize, 0,
1698 Request::wbMasterId);
1699 if (blk->isSecure()) {
1700 req->setFlags(Request::SECURE);
1701 }
1702 req->taskId(blk->task_id);
1703
1704 PacketPtr pkt = new Packet(req, MemCmd::WriteClean, blkSize, id);
1705
1706 if (dest) {

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

1732
1733PacketPtr
1734Cache::cleanEvictBlk(CacheBlk *blk)
1735{
1736 assert(!writebackClean);
1737 assert(blk && blk->isValid() && !blk->isDirty());
1738 // Creating a zero sized write, a message to the snoop filter
1739 Request *req =
1699 if (blk->isSecure()) {
1700 req->setFlags(Request::SECURE);
1701 }
1702 req->taskId(blk->task_id);
1703
1704 PacketPtr pkt = new Packet(req, MemCmd::WriteClean, blkSize, id);
1705
1706 if (dest) {

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

1732
1733PacketPtr
1734Cache::cleanEvictBlk(CacheBlk *blk)
1735{
1736 assert(!writebackClean);
1737 assert(blk && blk->isValid() && !blk->isDirty());
1738 // Creating a zero sized write, a message to the snoop filter
1739 Request *req =
1740 new Request(tags->regenerateBlkAddr(blk->tag, blk->set), blkSize, 0,
1740 new Request(tags->regenerateBlkAddr(blk), blkSize, 0,
1741 Request::wbMasterId);
1742 if (blk->isSecure())
1743 req->setFlags(Request::SECURE);
1744
1745 req->taskId(blk->task_id);
1746
1747 PacketPtr pkt = new Packet(req, MemCmd::CleanEvict);
1748 pkt->allocate();

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

1775}
1776
1777bool
1778Cache::writebackVisitor(CacheBlk &blk)
1779{
1780 if (blk.isDirty()) {
1781 assert(blk.isValid());
1782
1741 Request::wbMasterId);
1742 if (blk->isSecure())
1743 req->setFlags(Request::SECURE);
1744
1745 req->taskId(blk->task_id);
1746
1747 PacketPtr pkt = new Packet(req, MemCmd::CleanEvict);
1748 pkt->allocate();

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

1775}
1776
1777bool
1778Cache::writebackVisitor(CacheBlk &blk)
1779{
1780 if (blk.isDirty()) {
1781 assert(blk.isValid());
1782
1783 Request request(tags->regenerateBlkAddr(blk.tag, blk.set),
1784 blkSize, 0, Request::funcMasterId);
1783 Request request(tags->regenerateBlkAddr(&blk), blkSize, 0,
1784 Request::funcMasterId);
1785 request.taskId(blk.task_id);
1786 if (blk.isSecure()) {
1787 request.setFlags(Request::SECURE);
1788 }
1789
1790 Packet packet(&request, MemCmd::WriteReq);
1791 packet.dataStatic(blk.data);
1792

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

1818{
1819 CacheBlk *blk = tags->findVictim(addr);
1820
1821 // It is valid to return nullptr if there is no victim
1822 if (!blk)
1823 return nullptr;
1824
1825 if (blk->isValid()) {
1785 request.taskId(blk.task_id);
1786 if (blk.isSecure()) {
1787 request.setFlags(Request::SECURE);
1788 }
1789
1790 Packet packet(&request, MemCmd::WriteReq);
1791 packet.dataStatic(blk.data);
1792

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

1818{
1819 CacheBlk *blk = tags->findVictim(addr);
1820
1821 // It is valid to return nullptr if there is no victim
1822 if (!blk)
1823 return nullptr;
1824
1825 if (blk->isValid()) {
1826 Addr repl_addr = tags->regenerateBlkAddr(blk->tag, blk->set);
1826 Addr repl_addr = tags->regenerateBlkAddr(blk);
1827 MSHR *repl_mshr = mshrQueue.findMatch(repl_addr, blk->isSecure());
1828 if (repl_mshr) {
1829 // must be an outstanding upgrade request
1830 // on a block we're about to replace...
1831 assert(!blk->isWritable() || blk->isDirty());
1832 assert(repl_mshr->needsWritable());
1833 // too hard to replace block with transient state
1834 // allocation failed, block not inserted

--- 1053 unchanged lines hidden ---
1827 MSHR *repl_mshr = mshrQueue.findMatch(repl_addr, blk->isSecure());
1828 if (repl_mshr) {
1829 // must be an outstanding upgrade request
1830 // on a block we're about to replace...
1831 assert(!blk->isWritable() || blk->isDirty());
1832 assert(repl_mshr->needsWritable());
1833 // too hard to replace block with transient state
1834 // allocation failed, block not inserted

--- 1053 unchanged lines hidden ---