bridge.cc (10922:5ee72f4b2931) | bridge.cc (11192:4c28abcf8249) |
---|---|
1/* | 1/* |
2 * Copyright (c) 2011-2013 ARM Limited | 2 * Copyright (c) 2011-2013, 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 9 * licensed hereunder. You may use the software subject to the license 10 * terms below provided that you ensure that this notice is replicated --- 134 unchanged lines hidden (view full) --- 145} 146 147bool 148Bridge::BridgeSlavePort::recvTimingReq(PacketPtr pkt) 149{ 150 DPRINTF(Bridge, "recvTimingReq: %s addr 0x%x\n", 151 pkt->cmdString(), pkt->getAddr()); 152 | 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 9 * licensed hereunder. You may use the software subject to the license 10 * terms below provided that you ensure that this notice is replicated --- 134 unchanged lines hidden (view full) --- 145} 146 147bool 148Bridge::BridgeSlavePort::recvTimingReq(PacketPtr pkt) 149{ 150 DPRINTF(Bridge, "recvTimingReq: %s addr 0x%x\n", 151 pkt->cmdString(), pkt->getAddr()); 152 |
153 // we should not see a timing request if we are already in a retry 154 assert(!retryReq); | 153 // sink inhibited packets without further action, also discard any 154 // packet that is not a read or a write 155 if (pkt->memInhibitAsserted() || 156 !(pkt->isWrite() || pkt->isRead())) { 157 assert(!pkt->needsResponse()); 158 pendingDelete.reset(pkt); 159 return true; 160 } |
155 | 161 |
162 // we should not get a new request after committing to retry the 163 // current one, but unfortunately the CPU violates this rule, so 164 // simply ignore it for now 165 if (retryReq) 166 return false; 167 |
|
156 DPRINTF(Bridge, "Response queue size: %d outresp: %d\n", 157 transmitList.size(), outstandingResponses); 158 159 // if the request queue is full then there is no hope 160 if (masterPort.reqQueueFull()) { 161 DPRINTF(Bridge, "Request queue full\n"); 162 retryReq = true; 163 } else { 164 // look at the response queue if we expect to see a response | 168 DPRINTF(Bridge, "Response queue size: %d outresp: %d\n", 169 transmitList.size(), outstandingResponses); 170 171 // if the request queue is full then there is no hope 172 if (masterPort.reqQueueFull()) { 173 DPRINTF(Bridge, "Request queue full\n"); 174 retryReq = true; 175 } else { 176 // look at the response queue if we expect to see a response |
165 bool expects_response = pkt->needsResponse() && 166 !pkt->memInhibitAsserted(); | 177 bool expects_response = pkt->needsResponse(); |
167 if (expects_response) { 168 if (respQueueFull()) { 169 DPRINTF(Bridge, "Response queue full\n"); 170 retryReq = true; 171 } else { 172 // ok to send the request with space for the response 173 DPRINTF(Bridge, "Reserving space for response\n"); 174 assert(outstandingResponses != respQueueLimit); --- 215 unchanged lines hidden --- | 178 if (expects_response) { 179 if (respQueueFull()) { 180 DPRINTF(Bridge, "Response queue full\n"); 181 retryReq = true; 182 } else { 183 // ok to send the request with space for the response 184 DPRINTF(Bridge, "Reserving space for response\n"); 185 assert(outstandingResponses != respQueueLimit); --- 215 unchanged lines hidden --- |