noncoherent_xbar.cc (12823:ba630bc7a36d) noncoherent_xbar.cc (13847:c9b92a513019)
1/*
2 * Copyright (c) 2011-2015, 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

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

239{
240 // responses never block on forwarding them, so the retry will
241 // always be coming from a port to which we tried to forward a
242 // request
243 reqLayers[master_port_id]->recvRetry();
244}
245
246Tick
1/*
2 * Copyright (c) 2011-2015, 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

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

239{
240 // responses never block on forwarding them, so the retry will
241 // always be coming from a port to which we tried to forward a
242 // request
243 reqLayers[master_port_id]->recvRetry();
244}
245
246Tick
247NoncoherentXBar::recvAtomic(PacketPtr pkt, PortID slave_port_id)
247NoncoherentXBar::recvAtomicBackdoor(PacketPtr pkt, PortID slave_port_id,
248 MemBackdoorPtr *backdoor)
248{
249 DPRINTF(NoncoherentXBar, "recvAtomic: packet src %s addr 0x%x cmd %s\n",
250 slavePorts[slave_port_id]->name(), pkt->getAddr(),
251 pkt->cmdString());
252
253 unsigned int pkt_size = pkt->hasData() ? pkt->getSize() : 0;
254 unsigned int pkt_cmd = pkt->cmdToIndex();
255
256 // determine the destination port
257 AddrRange addr_range = RangeSize(pkt->getAddr(), pkt->getSize());
258 PortID master_port_id = findPort(addr_range);
259
260 // stats updates for the request
261 pktCount[slave_port_id][master_port_id]++;
262 pktSize[slave_port_id][master_port_id] += pkt_size;
263 transDist[pkt_cmd]++;
264
265 // forward the request to the appropriate destination
249{
250 DPRINTF(NoncoherentXBar, "recvAtomic: packet src %s addr 0x%x cmd %s\n",
251 slavePorts[slave_port_id]->name(), pkt->getAddr(),
252 pkt->cmdString());
253
254 unsigned int pkt_size = pkt->hasData() ? pkt->getSize() : 0;
255 unsigned int pkt_cmd = pkt->cmdToIndex();
256
257 // determine the destination port
258 AddrRange addr_range = RangeSize(pkt->getAddr(), pkt->getSize());
259 PortID master_port_id = findPort(addr_range);
260
261 // stats updates for the request
262 pktCount[slave_port_id][master_port_id]++;
263 pktSize[slave_port_id][master_port_id] += pkt_size;
264 transDist[pkt_cmd]++;
265
266 // forward the request to the appropriate destination
266 Tick response_latency = masterPorts[master_port_id]->sendAtomic(pkt);
267 auto master = masterPorts[master_port_id];
268 Tick response_latency = backdoor ?
269 master->sendAtomicBackdoor(pkt, *backdoor) : master->sendAtomic(pkt);
267
268 // add the response data
269 if (pkt->isResponse()) {
270 pkt_size = pkt->hasData() ? pkt->getSize() : 0;
271 pkt_cmd = pkt->cmdToIndex();
272
273 // stats updates
274 pktCount[slave_port_id][master_port_id]++;

--- 56 unchanged lines hidden ---
270
271 // add the response data
272 if (pkt->isResponse()) {
273 pkt_size = pkt->hasData() ? pkt->getSize() : 0;
274 pkt_cmd = pkt->cmdToIndex();
275
276 // stats updates
277 pktCount[slave_port_id][master_port_id]++;

--- 56 unchanged lines hidden ---