snoop_filter.cc (10403:b3231fc8ae9d) snoop_filter.cc (10821:581fb2484bd6)
1/*
2 * Copyright (c) 2013 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

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

69 hitSingleRequests++;
70 else
71 hitMultiRequests++;
72 }
73
74 DPRINTF(SnoopFilter, "%s: SF value %x.%x\n",
75 __func__, sf_item.requested, sf_item.holder);
76
1/*
2 * Copyright (c) 2013 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

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

69 hitSingleRequests++;
70 else
71 hitMultiRequests++;
72 }
73
74 DPRINTF(SnoopFilter, "%s: SF value %x.%x\n",
75 __func__, sf_item.requested, sf_item.holder);
76
77 if (cpkt->needsResponse()) {
77 if (!cpkt->req->isUncacheable() && cpkt->needsResponse()) {
78 if (!cpkt->memInhibitAsserted()) {
79 // Max one request per address per port
80 panic_if(sf_item.requested & req_port, "double request :( "\
81 "SF value %x.%x\n", sf_item.requested, sf_item.holder);
82
83 // Mark in-flight requests to distinguish later on
84 sf_item.requested |= req_port;
85 } else {

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

99
100void
101SnoopFilter::updateRequest(const Packet* cpkt, const SlavePort& slave_port,
102 bool will_retry)
103{
104 DPRINTF(SnoopFilter, "%s: packet src %s addr 0x%x cmd %s\n",
105 __func__, slave_port.name(), cpkt->getAddr(), cpkt->cmdString());
106
78 if (!cpkt->memInhibitAsserted()) {
79 // Max one request per address per port
80 panic_if(sf_item.requested & req_port, "double request :( "\
81 "SF value %x.%x\n", sf_item.requested, sf_item.holder);
82
83 // Mark in-flight requests to distinguish later on
84 sf_item.requested |= req_port;
85 } else {

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

99
100void
101SnoopFilter::updateRequest(const Packet* cpkt, const SlavePort& slave_port,
102 bool will_retry)
103{
104 DPRINTF(SnoopFilter, "%s: packet src %s addr 0x%x cmd %s\n",
105 __func__, slave_port.name(), cpkt->getAddr(), cpkt->cmdString());
106
107 if (cpkt->req->isUncacheable())
108 return;
109
107 Addr line_addr = cpkt->getAddr() & ~(linesize - 1);
108 SnoopMask req_port = portToMask(slave_port);
109 SnoopItem& sf_item = cachedLocations[line_addr];
110
111 DPRINTF(SnoopFilter, "%s: old SF value %x.%x retry: %i\n",
112 __func__, sf_item.requested, sf_item.holder, will_retry);
113
114 if (will_retry) {

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

190SnoopFilter::updateSnoopResponse(const Packet* cpkt,
191 const SlavePort& rsp_port,
192 const SlavePort& req_port)
193{
194 DPRINTF(SnoopFilter, "%s: packet rsp %s req %s addr 0x%x cmd %s\n",
195 __func__, rsp_port.name(), req_port.name(), cpkt->getAddr(),
196 cpkt->cmdString());
197
110 Addr line_addr = cpkt->getAddr() & ~(linesize - 1);
111 SnoopMask req_port = portToMask(slave_port);
112 SnoopItem& sf_item = cachedLocations[line_addr];
113
114 DPRINTF(SnoopFilter, "%s: old SF value %x.%x retry: %i\n",
115 __func__, sf_item.requested, sf_item.holder, will_retry);
116
117 if (will_retry) {

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

193SnoopFilter::updateSnoopResponse(const Packet* cpkt,
194 const SlavePort& rsp_port,
195 const SlavePort& req_port)
196{
197 DPRINTF(SnoopFilter, "%s: packet rsp %s req %s addr 0x%x cmd %s\n",
198 __func__, rsp_port.name(), req_port.name(), cpkt->getAddr(),
199 cpkt->cmdString());
200
201 assert(cpkt->isResponse());
202 assert(cpkt->memInhibitAsserted());
203
204 if (cpkt->req->isUncacheable())
205 return;
206
198 Addr line_addr = cpkt->getAddr() & ~(linesize - 1);
199 SnoopMask rsp_mask = portToMask(rsp_port);
200 SnoopMask req_mask = portToMask(req_port);
201 SnoopItem& sf_item = cachedLocations[line_addr];
202
207 Addr line_addr = cpkt->getAddr() & ~(linesize - 1);
208 SnoopMask rsp_mask = portToMask(rsp_port);
209 SnoopMask req_mask = portToMask(req_port);
210 SnoopItem& sf_item = cachedLocations[line_addr];
211
203 assert(cpkt->isResponse());
204 assert(cpkt->memInhibitAsserted());
205
206 DPRINTF(SnoopFilter, "%s: old SF value %x.%x\n",
207 __func__, sf_item.requested, sf_item.holder);
208
209 // The source should have the line
210 panic_if(!(sf_item.holder & rsp_mask), "SF value %x.%x does not have "\
211 "the line\n", sf_item.requested, sf_item.holder);
212
213 // The destination should have had a request in

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

265}
266
267void
268SnoopFilter::updateResponse(const Packet* cpkt, const SlavePort& slave_port)
269{
270 DPRINTF(SnoopFilter, "%s: packet src %s addr 0x%x cmd %s\n",
271 __func__, slave_port.name(), cpkt->getAddr(), cpkt->cmdString());
272
212 DPRINTF(SnoopFilter, "%s: old SF value %x.%x\n",
213 __func__, sf_item.requested, sf_item.holder);
214
215 // The source should have the line
216 panic_if(!(sf_item.holder & rsp_mask), "SF value %x.%x does not have "\
217 "the line\n", sf_item.requested, sf_item.holder);
218
219 // The destination should have had a request in

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

271}
272
273void
274SnoopFilter::updateResponse(const Packet* cpkt, const SlavePort& slave_port)
275{
276 DPRINTF(SnoopFilter, "%s: packet src %s addr 0x%x cmd %s\n",
277 __func__, slave_port.name(), cpkt->getAddr(), cpkt->cmdString());
278
279 assert(cpkt->isResponse());
280
281 if (cpkt->req->isUncacheable())
282 return;
283
273 Addr line_addr = cpkt->getAddr() & ~(linesize - 1);
274 SnoopMask slave_mask = portToMask(slave_port);
275 SnoopItem& sf_item = cachedLocations[line_addr];
276
284 Addr line_addr = cpkt->getAddr() & ~(linesize - 1);
285 SnoopMask slave_mask = portToMask(slave_port);
286 SnoopItem& sf_item = cachedLocations[line_addr];
287
277 assert(cpkt->isResponse());
278
279 DPRINTF(SnoopFilter, "%s: old SF value %x.%x\n",
280 __func__, sf_item.requested, sf_item.holder);
281
282 // Make sure we have seen the actual request, too
283 panic_if(!(sf_item.requested & slave_mask), "SF value %x.%x missing "\
284 "request bit\n", sf_item.requested, sf_item.holder);
285
286 // Update the residency of the cache line.

--- 45 unchanged lines hidden ---
288 DPRINTF(SnoopFilter, "%s: old SF value %x.%x\n",
289 __func__, sf_item.requested, sf_item.holder);
290
291 // Make sure we have seen the actual request, too
292 panic_if(!(sf_item.requested & slave_mask), "SF value %x.%x missing "\
293 "request bit\n", sf_item.requested, sf_item.holder);
294
295 // Update the residency of the cache line.

--- 45 unchanged lines hidden ---