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 --- |