1/* 2 * Copyright (c) 2010-2015 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 --- 171 unchanged lines hidden (view full) --- 180 // this cache before knowing the store will fail. 181 blk->status |= BlkDirty; 182 DPRINTF(Cache, "%s for %s addr %#llx size %d (write)\n", __func__, 183 pkt->cmdString(), pkt->getAddr(), pkt->getSize()); 184 } else if (pkt->isRead()) { 185 if (pkt->isLLSC()) { 186 blk->trackLoadLocked(pkt); 187 } |
188 189 // all read responses have a data payload 190 assert(pkt->hasRespData()); |
191 pkt->setDataFromBlock(blk->data, blkSize); |
192 |
193 // determine if this read is from a (coherent) cache, or not 194 // by looking at the command type; we could potentially add a 195 // packet attribute such as 'FromCache' to make this check a 196 // bit cleaner 197 if (pkt->cmd == MemCmd::ReadExReq || 198 pkt->cmd == MemCmd::ReadSharedReq || 199 pkt->cmd == MemCmd::ReadCleanReq || 200 pkt->cmd == MemCmd::SCUpgradeFailReq) { --- 594 unchanged lines hidden (view full) --- 795 pkt->req->masterId()); 796 pf = new Packet(req, pkt->cmd); 797 pf->allocate(); 798 assert(pf->getAddr() == pkt->getAddr()); 799 assert(pf->getSize() == pkt->getSize()); 800 } 801 802 pkt->makeTimingResponse(); |
803 |
804 // request_time is used here, taking into account lat and the delay 805 // charged if the packet comes from the xbar. 806 cpuSidePort->schedTimingResp(pkt, request_time, true); 807 808 // If an outstanding request is in progress (we found an 809 // MSHR) this is set to null 810 pkt = pf; 811 } --- 1225 unchanged lines hidden (view full) --- 2037 "%s is passing a Modified line through %s to %#llx, " 2038 "but keeping the block", 2039 name(), pkt->cmdString(), pkt->getAddr()); 2040 2041 if (is_timing) { 2042 doTimingSupplyResponse(pkt, blk->data, is_deferred, pending_inval); 2043 } else { 2044 pkt->makeAtomicResponse(); |
2045 // packets such as upgrades do not actually have any data 2046 // payload 2047 if (pkt->hasData()) 2048 pkt->setDataFromBlock(blk->data, blkSize); |
2049 } 2050 } 2051 2052 if (!respond && is_timing && is_deferred) { 2053 // if it's a deferred timing snoop to which we are not 2054 // responding, then we've made a copy of both the request and 2055 // the packet, delete them here 2056 assert(pkt->needsResponse()); --- 639 unchanged lines hidden --- |