coherent_xbar.cc (10821:581fb2484bd6) coherent_xbar.cc (10883:9294c4a60251)
1/*
2 * Copyright (c) 2011-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

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

133
134 if (snoopPorts.empty())
135 warn("CoherentXBar %s has no snooping ports attached!\n", name());
136}
137
138bool
139CoherentXBar::recvTimingReq(PacketPtr pkt, PortID slave_port_id)
140{
1/*
2 * Copyright (c) 2011-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

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

133
134 if (snoopPorts.empty())
135 warn("CoherentXBar %s has no snooping ports attached!\n", name());
136}
137
138bool
139CoherentXBar::recvTimingReq(PacketPtr pkt, PortID slave_port_id)
140{
141 // @todo temporary hack to deal with memory corruption issue until
142 // 4-phase transactions are complete
143 for (int x = 0; x < pendingDelete.size(); x++)
144 delete pendingDelete[x];
145 pendingDelete.clear();
146
141 // determine the source port based on the id
142 SlavePort *src_port = slavePorts[slave_port_id];
143
144 // remember if the packet is an express snoop
145 bool is_express_snoop = pkt->isExpressSnoop();
146 bool is_inhibited = pkt->memInhibitAsserted();
147 // for normal requests, going downstream, the express snoop flag
148 // and the inhibited flag should always be the same

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

196 pkt->cmdString(), pkt->getAddr(), sf_res.first.size(),
197 sf_res.second);
198 forwardTiming(pkt, slave_port_id, sf_res.first);
199 } else {
200 forwardTiming(pkt, slave_port_id);
201 }
202 }
203
147 // determine the source port based on the id
148 SlavePort *src_port = slavePorts[slave_port_id];
149
150 // remember if the packet is an express snoop
151 bool is_express_snoop = pkt->isExpressSnoop();
152 bool is_inhibited = pkt->memInhibitAsserted();
153 // for normal requests, going downstream, the express snoop flag
154 // and the inhibited flag should always be the same

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

202 pkt->cmdString(), pkt->getAddr(), sf_res.first.size(),
203 sf_res.second);
204 forwardTiming(pkt, slave_port_id, sf_res.first);
205 } else {
206 forwardTiming(pkt, slave_port_id);
207 }
208 }
209
210 // forwardTiming snooped into peer caches of the sender, and if
211 // this is a clean evict, but the packet is found in a cache, do
212 // not forward it
213 if (pkt->cmd == MemCmd::CleanEvict && pkt->isBlockCached()) {
214 DPRINTF(CoherentXBar, "recvTimingReq: Clean evict 0x%x still cached, "
215 "not forwarding\n", pkt->getAddr());
216
217 // update the layer state and schedule an idle event
218 reqLayers[master_port_id]->succeededTiming(packetFinishTime);
219 pendingDelete.push_back(pkt);
220 return true;
221 }
222
204 // remember if the packet will generate a snoop response
205 const bool expect_snoop_resp = !is_inhibited && pkt->memInhibitAsserted();
206 const bool expect_response = pkt->needsResponse() &&
207 !pkt->memInhibitAsserted();
208
209 // Note: Cannot create a copy of the full packet, here.
210 MemCmd orig_cmd(pkt->cmd);
211

--- 645 unchanged lines hidden ---
223 // remember if the packet will generate a snoop response
224 const bool expect_snoop_resp = !is_inhibited && pkt->memInhibitAsserted();
225 const bool expect_response = pkt->needsResponse() &&
226 !pkt->memInhibitAsserted();
227
228 // Note: Cannot create a copy of the full packet, here.
229 MemCmd orig_cmd(pkt->cmd);
230

--- 645 unchanged lines hidden ---