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