blob: 9e5440d73c1250b69ac0ce3945ba74ebf40a2a5d [file] [log] [blame]
Stephen Hemminger8f3b48b2006-08-23 14:16:09 -07001/*
Stephen Hemmingerad702592006-09-26 13:09:14 -07002 * Code to dump Marvell SysKonnect registers for skge and sky2 drivers.
3 *
4 * Copyright (C) 2004, 2006
Stephen Hemminger8f3b48b2006-08-23 14:16:09 -07005 * Stephen Hemminger <shemminger@osdl.org>
6 */
7
8#include <stdio.h>
9
Ben Hutchings5ba70c02011-11-01 16:48:31 +000010#include "internal.h"
Stephen Hemminger8f3b48b2006-08-23 14:16:09 -070011
12static void dump_addr(int n, const u8 *a)
13{
14 int i;
15
16 printf("Addr %d ", n);
17 for (i = 0; i < 6; i++)
18 printf("%02X%c", a[i], i == 5 ? '\n' : ' ');
19}
20
21static void dump_timer(const char *name, const void *p)
22{
23 const u8 *a = p;
24 const u32 *r = p;
Jeff Garzik5312dbe2006-08-24 02:53:26 -040025
Stephen Hemminger8f3b48b2006-08-23 14:16:09 -070026 printf("%s\n", name);
27 printf("\tInit 0x%08X Value 0x%08X\n", r[0], r[1]);
28 printf("\tTest 0x%02X Control 0x%02X\n", a[8], a[9]);
29}
30
31static void dump_queue(const char *name, const void *a, int rx)
32{
33 struct desc {
34 u_int32_t ctl;
35 u_int32_t next;
36 u_int32_t data_lo;
37 u_int32_t data_hi;
38 u_int32_t status;
39 u_int32_t timestamp;
40 u_int16_t csum2;
41 u_int16_t csum1;
42 u_int16_t csum2_start;
43 u_int16_t csum1_start;
44 u_int32_t addr_lo;
45 u_int32_t addr_hi;
46 u_int32_t count_lo;
47 u_int32_t count_hi;
48 u_int32_t byte_count;
49 u_int32_t csr;
50 u_int32_t flag;
51 };
52 const struct desc *d = a;
53
Stephen Hemminger0be59452007-01-31 16:23:46 -080054 /* is reset bit set? */
55 if (!(d->ctl & 2)) {
56 printf("\n%s (disabled)\n", name);
57 return;
58 }
59
Stephen Hemminger8f3b48b2006-08-23 14:16:09 -070060 printf("\n%s\n", name);
61 printf("---------------\n");
Jeff Garzik5312dbe2006-08-24 02:53:26 -040062 printf("Descriptor Address 0x%08X%08X\n",
Stephen Hemminger8f3b48b2006-08-23 14:16:09 -070063 d->addr_hi, d->addr_lo);
Jeff Garzik5312dbe2006-08-24 02:53:26 -040064 printf("Address Counter 0x%08X%08X\n",
Stephen Hemminger8f3b48b2006-08-23 14:16:09 -070065 d->count_hi, d->count_lo);
66 printf("Current Byte Counter %d\n", d->byte_count);
67 printf("BMU Control/Status 0x%08X\n", d->csr);
68 printf("Flag & FIFO Address 0x%08X\n", d->flag);
69 printf("\n");
70 printf("Control 0x%08X\n", d->ctl);
71 printf("Next 0x%08X\n", d->next);
Jeff Garzik5312dbe2006-08-24 02:53:26 -040072 printf("Data 0x%08X%08X\n",
Stephen Hemminger8f3b48b2006-08-23 14:16:09 -070073 d->data_hi, d->data_lo);
74 printf("Status 0x%08X\n", d->status);
75 printf("Timestamp 0x%08X\n", d->timestamp);
76 if (rx) {
Stephen Hemmingeraa60a292006-09-26 13:10:52 -070077 printf("Csum1 Offset %4d Position %d\n",
Stephen Hemminger8f3b48b2006-08-23 14:16:09 -070078 d->csum1, d->csum1_start);
Stephen Hemmingeraa60a292006-09-26 13:10:52 -070079 printf("Csum2 Offset %4d Position %d\n",
Stephen Hemminger8f3b48b2006-08-23 14:16:09 -070080 d->csum2, d->csum2_start);
Jeff Garzik5312dbe2006-08-24 02:53:26 -040081 } else
82 printf("Csum Start 0x%04X Pos %4d Write %d\n",
Stephen Hemminger8f3b48b2006-08-23 14:16:09 -070083 d->csum1, d->csum2_start, d->csum1_start);
84
85}
86
87static void dump_ram(const char *name, const void *p)
88{
89 const u32 *r = p;
90
Stephen Hemminger0be59452007-01-31 16:23:46 -080091 if (!(r[10] & 2)) {
92 printf("\n%s (disabled)\n", name);
93 return;
94 }
95
Stephen Hemminger8f3b48b2006-08-23 14:16:09 -070096 printf("\n%s\n", name);
97 printf("---------------\n");
98 printf("Start Address 0x%08X\n", r[0]);
99 printf("End Address 0x%08X\n", r[1]);
100 printf("Write Pointer 0x%08X\n", r[2]);
101 printf("Read Pointer 0x%08X\n", r[3]);
Stephen Hemminger0be59452007-01-31 16:23:46 -0800102
103 if (*name == 'R') { /* Receive only */
Stephen Hemmingerb9caefa2006-10-23 10:51:42 -0700104 printf("Upper Threshold/Pause Packets 0x%08X\n", r[4]);
105 printf("Lower Threshold/Pause Packets 0x%08X\n", r[5]);
106 printf("Upper Threshold/High Priority 0x%08X\n", r[6]);
107 printf("Lower Threshold/High Priority 0x%08X\n", r[7]);
108 }
Stephen Hemminger8f3b48b2006-08-23 14:16:09 -0700109 printf("Packet Counter 0x%08X\n", r[8]);
110 printf("Level 0x%08X\n", r[9]);
Stephen Hemminger0be59452007-01-31 16:23:46 -0800111 printf("Control 0x%08X\n", r[10]);
Stephen Hemminger8f3b48b2006-08-23 14:16:09 -0700112}
113
114static void dump_fifo(const char *name, const void *p)
115{
116 const u32 *r = p;
117
118 printf("\n%s\n", name);
119 printf("---------------\n");
120 printf("End Address 0x%08X\n", r[0]);
Maciej Żenczykowskic430e752019-10-17 11:20:49 -0700121 printf("Write Pointer 0x%08X\n", r[1]);
122 printf("Read Pointer 0x%08X\n", r[2]);
123 printf("Packet Counter 0x%08X\n", r[3]);
124 printf("Level 0x%08X\n", r[4]);
125 printf("Control 0x%08X\n", r[5]);
126 printf("Control/Test 0x%08X\n", r[6]);
127 dump_timer("LED", r + 8);
Stephen Hemminger8f3b48b2006-08-23 14:16:09 -0700128}
129
Stephen Hemmingerb9caefa2006-10-23 10:51:42 -0700130static void dump_gmac_fifo(const char *name, const void *p)
Stephen Hemmingeree350832006-10-06 15:45:41 -0700131{
132 const u32 *r = p;
133 int i;
134 static const char *regs[] = {
135 "End Address",
136 "Almost Full Thresh",
137 "Control/Test",
138 "FIFO Flush Mask",
139 "FIFO Flush Threshold",
140 "Truncation Threshold",
141 "Upper Pause Threshold",
142 "Lower Pause Threshold",
143 "VLAN Tag",
144 "FIFO Write Pointer",
145 "FIFO Write Level",
146 "FIFO Read Pointer",
147 "FIFO Read Level",
148 };
149
Stephen Hemmingerb9caefa2006-10-23 10:51:42 -0700150 printf("\n%s\n", name);
Stephen Hemmingeree350832006-10-06 15:45:41 -0700151 for (i = 0; i < sizeof(regs)/sizeof(regs[0]); ++i)
152 printf("%-32s 0x%08X\n", regs[i], r[i]);
153
154}
155
Stephen Hemmingerad702592006-09-26 13:09:14 -0700156static void dump_mac(const u8 *r)
157{
Stephen Hemmingerb9caefa2006-10-23 10:51:42 -0700158 u8 id;
159
Stephen Hemmingerad702592006-09-26 13:09:14 -0700160 printf("\nMAC Addresses\n");
161 printf("---------------\n");
162 dump_addr(1, r + 0x100);
163 dump_addr(2, r + 0x108);
164 dump_addr(3, r + 0x110);
165 printf("\n");
166
Jeff Garzikba2f54b2007-07-26 13:24:59 -0400167 printf("Connector type 0x%02X (%c)\n",
Stephen Hemmingerb9caefa2006-10-23 10:51:42 -0700168 r[0x118], (char)r[0x118]);
169 printf("PMD type 0x%02X (%c)\n",
170 r[0x119], (char)r[0x119]);
171 printf("PHY type 0x%02X\n", r[0x11d]);
172
173 id = r[0x11b];
174 printf("Chip Id 0x%02X ", id);
Stephen Hemminger06759c22007-04-04 13:41:16 -0700175
Stephen Hemmingerb9caefa2006-10-23 10:51:42 -0700176 switch (id) {
Stephen Hemminger0be59452007-01-31 16:23:46 -0800177 case 0x0a: printf("Genesis"); break;
178 case 0xb0: printf("Yukon"); break;
179 case 0xb1: printf("Yukon-Lite"); break;
180 case 0xb2: printf("Yukon-LP"); break;
181 case 0xb3: printf("Yukon-2 XL"); break;
Stephen Hemminger06759c22007-04-04 13:41:16 -0700182 case 0xb5: printf("Yukon Extreme"); break;
Stephen Hemminger0be59452007-01-31 16:23:46 -0800183 case 0xb4: printf("Yukon-2 EC Ultra"); break;
184 case 0xb6: printf("Yukon-2 EC"); break;
185 case 0xb7: printf("Yukon-2 FE"); break;
Stephen Hemmingerbdaae5b2007-09-17 14:08:09 -0700186 case 0xb8: printf("Yukon-2 FE Plus"); break;
Stephen Hemminger5ecd94a2010-04-02 08:16:32 -0700187 case 0xb9: printf("Yukon Supreme"); break;
188 case 0xba: printf("Yukon Ultra 2"); break;
189 case 0xbc: printf("Yukon Optima"); break;
Stephen Hemminger06759c22007-04-04 13:41:16 -0700190 default: printf("(Unknown)"); break;
Stephen Hemmingerb9caefa2006-10-23 10:51:42 -0700191 }
192
Stephen Hemminger9896cd52007-04-04 13:40:15 -0700193 printf(" (rev %d)\n", (r[0x11a] & 0xf0) >> 4);
Stephen Hemmingerb9caefa2006-10-23 10:51:42 -0700194
195 printf("Ram Buffer 0x%02X\n", r[0x11c]);
Jeff Garzikba2f54b2007-07-26 13:24:59 -0400196
Stephen Hemmingerad702592006-09-26 13:09:14 -0700197}
Jeff Garzikba2f54b2007-07-26 13:24:59 -0400198
Stephen Hemmingerad702592006-09-26 13:09:14 -0700199static void dump_gma(const char *name, const u8 *r)
200{
201 int i;
202
203 printf("%12s address: ", name);
204 for (i = 0; i < 3; i++) {
205 u16 a = *(u16 *)(r + i * 4);
206 printf(" %02X %02X", a & 0xff, (a >> 8) & 0xff);
207 }
208 printf("\n");
209}
210
211static void dump_gmac(const char *name, const u8 *data)
212{
213 printf("\n%s\n", name);
Stephen Hemmingeree350832006-10-06 15:45:41 -0700214
Stephen Hemmingerad702592006-09-26 13:09:14 -0700215 printf("Status 0x%04X\n", *(u16 *) data);
216 printf("Control 0x%04X\n", *(u16 *) (data + 4));
217 printf("Transmit 0x%04X\n", *(u16 *) (data + 8));
218 printf("Receive 0x%04X\n", *(u16 *) (data + 0xc));
219 printf("Transmit flow control 0x%04X\n", *(u16 *) (data + 0x10));
220 printf("Transmit parameter 0x%04X\n", *(u16 *) (data + 0x14));
221 printf("Serial mode 0x%04X\n", *(u16 *) (data + 0x18));
222
223 dump_gma("Source", data + 0x1c);
224 dump_gma("Physical", data + 0x28);
225}
226
Stephen Hemmingerb9caefa2006-10-23 10:51:42 -0700227static void dump_pci(const u8 *cfg)
228{
229 int i;
230
231 printf("\nPCI config\n----------\n");
232 for(i = 0; i < 0x80; i++) {
233 if (!(i & 15))
234 printf("%02x:", i);
235 printf(" %02x", cfg[i]);
236 if ((i & 15) == 15)
237 putchar('\n');
238 }
239 putchar('\n');
240}
241
242static void dump_control(u8 *r)
243{
244 printf("Control Registers\n");
245 printf("-----------------\n");
246
247 printf("Register Access Port 0x%02X\n", *r);
248 printf("LED Control/Status 0x%08X\n", *(u32 *) (r + 4));
249
250 printf("Interrupt Source 0x%08X\n", *(u32 *) (r + 8));
251 printf("Interrupt Mask 0x%08X\n", *(u32 *) (r + 0xc));
252 printf("Interrupt Hardware Error Source 0x%08X\n", *(u32 *) (r + 0x10));
253 printf("Interrupt Hardware Error Mask 0x%08X\n", *(u32 *) (r + 0x14));
Stephen Hemmingerbdaae5b2007-09-17 14:08:09 -0700254 printf("Interrupt Control 0x%08X\n", *(u32 *) (r + 0x2c));
255 printf("Interrupt Moderation Mask 0x%08X\n", *(u32 *) (r + 0x14c));
256 printf("Hardware Moderation Mask 0x%08X\n", *(u32 *) (r + 0x150));
257 dump_timer("Moderation Timer", r + 0x140);
258
259 printf("General Purpose I/O 0x%08X\n", *(u32 *) (r + 0x15c));
Stephen Hemmingerb9caefa2006-10-23 10:51:42 -0700260}
261
Maciej Żenczykowski183e8a22019-10-17 11:21:01 -0700262int skge_dump_regs(struct ethtool_drvinfo *info maybe_unused,
263 struct ethtool_regs *regs)
Stephen Hemminger8f3b48b2006-08-23 14:16:09 -0700264{
265 const u32 *r = (const u32 *) regs->data;
266 int dual = !(regs->data[0x11a] & 1);
267
Stephen Hemmingerb9caefa2006-10-23 10:51:42 -0700268 dump_pci(regs->data + 0x380);
Jeff Garzik5312dbe2006-08-24 02:53:26 -0400269
Stephen Hemmingerb9caefa2006-10-23 10:51:42 -0700270 dump_control(regs->data);
Stephen Hemminger8f3b48b2006-08-23 14:16:09 -0700271
272 printf("\nBus Management Unit\n");
273 printf("-------------------\n");
274 printf("CSR Receive Queue 1 0x%08X\n", r[24]);
275 printf("CSR Sync Queue 1 0x%08X\n", r[26]);
276 printf("CSR Async Queue 1 0x%08X\n", r[27]);
277 if (dual) {
278 printf("CSR Receive Queue 2 0x%08X\n", r[25]);
279 printf("CSR Async Queue 2 0x%08X\n", r[29]);
280 printf("CSR Sync Queue 2 0x%08X\n", r[28]);
281 }
282
Stephen Hemmingerad702592006-09-26 13:09:14 -0700283 dump_mac(regs->data);
284 dump_gmac("GMAC 1", regs->data + 0x2800);
Stephen Hemminger8f3b48b2006-08-23 14:16:09 -0700285
286 dump_timer("Timer", regs->data + 0x130);
Stephen Hemminger8f3b48b2006-08-23 14:16:09 -0700287 dump_timer("Blink Source", regs->data +0x170);
288
289 dump_queue("Receive Queue 1", regs->data +0x400, 1);
290 dump_queue("Sync Transmit Queue 1", regs->data +0x600, 0);
291 dump_queue("Async Transmit Queue 1", regs->data +0x680, 0);
Stephen Hemminger8f3b48b2006-08-23 14:16:09 -0700292
293 dump_ram("Receive RAMbuffer 1", regs->data+0x800);
294 dump_ram("Sync Transmit RAMbuffer 1", regs->data+0xa00);
295 dump_ram("Async Transmit RAMbuffer 1", regs->data+0xa80);
Stephen Hemminger8f3b48b2006-08-23 14:16:09 -0700296
297 dump_fifo("Receive MAC FIFO 1", regs->data+0xc00);
298 dump_fifo("Transmit MAC FIFO 1", regs->data+0xd00);
299 if (dual) {
Stephen Hemmingerad702592006-09-26 13:09:14 -0700300 dump_gmac("GMAC 1", regs->data + 0x2800);
301
302 dump_queue("Receive Queue 2", regs->data +0x480, 1);
303 dump_queue("Async Transmit Queue 2", regs->data +0x780, 0);
304 dump_queue("Sync Transmit Queue 2", regs->data +0x700, 0);
305
306 dump_ram("Receive RAMbuffer 2", regs->data+0x880);
307 dump_ram("Sync Transmit RAMbuffer 2", regs->data+0xb00);
308 dump_ram("Async Transmit RAMbuffer 21", regs->data+0xb80);
309
Stephen Hemminger8f3b48b2006-08-23 14:16:09 -0700310 dump_fifo("Receive MAC FIFO 2", regs->data+0xc80);
311 dump_fifo("Transmit MAC FIFO 2", regs->data+0xd80);
312 }
313
314 dump_timer("Descriptor Poll", regs->data+0xe00);
315 return 0;
316
317}
Stephen Hemmingerad702592006-09-26 13:09:14 -0700318
319static void dump_queue2(const char *name, void *a, int rx)
320{
321 struct sky2_queue {
322 u16 buf_control;
323 u16 byte_count;
324 u32 rss;
325 u32 addr_lo, addr_hi;
326 u32 status;
327 u32 timestamp;
328 u16 csum1, csum2;
329 u16 csum1_start, csum2_start;
330 u16 length;
331 u16 vlan;
332 u16 rsvd1;
333 u16 done;
334 u32 req_lo, req_hi;
335 u16 rsvd2;
336 u16 req_count;
337 u32 csr;
338 } *d = a;
339
340 printf("\n%s\n", name);
341 printf("---------------\n");
342
343 printf("Buffer control 0x%04X\n", d->buf_control);
344
345 printf("Byte Counter %d\n", d->byte_count);
346 printf("Descriptor Address 0x%08X%08X\n",
347 d->addr_hi, d->addr_lo);
348 printf("Status 0x%08X\n", d->status);
349 printf("Timestamp 0x%08X\n", d->timestamp);
350 printf("BMU Control/Status 0x%08X\n", d->csr);
351 printf("Done 0x%04X\n", d->done);
352 printf("Request 0x%08X%08X\n",
353 d->req_hi, d->req_lo);
354 if (rx) {
Stephen Hemmingerbdaae5b2007-09-17 14:08:09 -0700355 printf("Csum1 Offset %4d Position %d\n",
Stephen Hemmingerad702592006-09-26 13:09:14 -0700356 d->csum1, d->csum1_start);
Stephen Hemminger0be59452007-01-31 16:23:46 -0800357 printf("Csum2 Offset %4d Position %d\n",
Stephen Hemmingerad702592006-09-26 13:09:14 -0700358 d->csum2, d->csum2_start);
359 } else
360 printf("Csum Start 0x%04X Pos %4d Write %d\n",
361 d->csum1, d->csum2_start, d->csum1_start);
362}
363
Stephen Hemmingerbdaae5b2007-09-17 14:08:09 -0700364static void dump_prefetch(const char *name, const void *r)
365{
366 const u32 *reg = r;
367
368 printf("\n%s Prefetch\n", name);
369 printf("Control 0x%08X\n", reg[0]);
370 printf("Last Index %u\n", reg[1]);
371 printf("Start Address 0x%08x%08x\n", reg[3], reg[2]);
372 if (*name == 'S') { /* Status unit */
373 printf("TX1 report %u\n", reg[4]);
374 printf("TX2 report %u\n", reg[5]);
375 printf("TX threshold %u\n", reg[6]);
376 printf("Put Index %u\n", reg[7]);
377 } else {
378 printf("Get Index %u\n", reg[4]);
379 printf("Put Index %u\n", reg[5]);
380 }
381}
382
Maciej Żenczykowski183e8a22019-10-17 11:21:01 -0700383int sky2_dump_regs(struct ethtool_drvinfo *info maybe_unused,
384 struct ethtool_regs *regs)
Stephen Hemmingerad702592006-09-26 13:09:14 -0700385{
Maciej Żenczykowski7208d972016-03-11 09:58:18 -0800386 const u16 *r16 = (const u16 *) regs->data;
387 const u32 *r32 = (const u32 *) regs->data;
Stephen Hemmingerad702592006-09-26 13:09:14 -0700388 int dual;
389
Stephen Hemmingerb9caefa2006-10-23 10:51:42 -0700390 dump_pci(regs->data + 0x1c00);
Stephen Hemmingerad702592006-09-26 13:09:14 -0700391
Stephen Hemmingerb9caefa2006-10-23 10:51:42 -0700392 dump_control(regs->data);
Stephen Hemmingerad702592006-09-26 13:09:14 -0700393
394 printf("\nBus Management Unit\n");
395 printf("-------------------\n");
Maciej Żenczykowski7208d972016-03-11 09:58:18 -0800396 printf("CSR Receive Queue 1 0x%08X\n", r32[24]);
397 printf("CSR Sync Queue 1 0x%08X\n", r32[26]);
398 printf("CSR Async Queue 1 0x%08X\n", r32[27]);
Stephen Hemmingerad702592006-09-26 13:09:14 -0700399
400 dual = (regs->data[0x11e] & 2) != 0;
401 if (dual) {
Maciej Żenczykowski7208d972016-03-11 09:58:18 -0800402 printf("CSR Receive Queue 2 0x%08X\n", r32[25]);
403 printf("CSR Async Queue 2 0x%08X\n", r32[29]);
404 printf("CSR Sync Queue 2 0x%08X\n", r32[28]);
Stephen Hemmingerad702592006-09-26 13:09:14 -0700405 }
406
407 dump_mac(regs->data);
Stephen Hemmingerad702592006-09-26 13:09:14 -0700408
Stephen Hemmingerbdaae5b2007-09-17 14:08:09 -0700409 dump_prefetch("Status", regs->data + 0xe80);
410 dump_prefetch("Receive 1", regs->data + 0x450);
411 dump_prefetch("Transmit 1", regs->data + 0x450 + 0x280);
412
413 if (dual) {
414 dump_prefetch("Receive 2", regs->data + 0x450 + 0x80);
415 dump_prefetch("Transmit 2", regs->data + 0x450 + 0x380);
416 }
Stephen Hemmingerad702592006-09-26 13:09:14 -0700417
418 printf("\nStatus FIFO\n");
419 printf("\tWrite Pointer 0x%02X\n", regs->data[0xea0]);
420 printf("\tRead Pointer 0x%02X\n", regs->data[0xea4]);
421 printf("\tLevel 0x%02X\n", regs->data[0xea8]);
422 printf("\tWatermark 0x%02X\n", regs->data[0xeac]);
423 printf("\tISR Watermark 0x%02X\n", regs->data[0xead]);
Stephen Hemmingerbdaae5b2007-09-17 14:08:09 -0700424
Stephen Hemmingerad702592006-09-26 13:09:14 -0700425 dump_timer("Status level", regs->data + 0xeb0);
426 dump_timer("TX status", regs->data + 0xec0);
427 dump_timer("ISR", regs->data + 0xed0);
428
Maciej Żenczykowski7208d972016-03-11 09:58:18 -0800429 printf("\nGMAC control 0x%04X\n", r32[0xf00 >> 2]);
430 printf("GPHY control 0x%04X\n", r32[0xf04 >> 2]);
431 printf("LINK control 0x%02hX\n", r16[0xf10 >> 1]);
Stephen Hemmingerb9caefa2006-10-23 10:51:42 -0700432
433 dump_gmac("GMAC 1", regs->data + 0x2800);
434 dump_gmac_fifo("Rx GMAC 1", regs->data + 0xc40);
435 dump_gmac_fifo("Tx GMAC 1", regs->data + 0xd40);
436
Stephen Hemmingerad702592006-09-26 13:09:14 -0700437 dump_queue2("Receive Queue 1", regs->data +0x400, 1);
438 dump_queue("Sync Transmit Queue 1", regs->data +0x600, 0);
439 dump_queue2("Async Transmit Queue 1", regs->data +0x680, 0);
440
Stephen Hemmingerad702592006-09-26 13:09:14 -0700441 dump_ram("Receive RAMbuffer 1", regs->data+0x800);
442 dump_ram("Sync Transmit RAMbuffer 1", regs->data+0xa00);
443 dump_ram("Async Transmit RAMbuffer 1", regs->data+0xa80);
444
445 if (dual) {
446 dump_ram("Receive RAMbuffer 2", regs->data+0x880);
447 dump_ram("Sync Transmit RAMbuffer 2", regs->data+0xb00);
448 dump_ram("Async Transmit RAMbuffer 21", regs->data+0xb80);
449 dump_gmac("GMAC 2", regs->data + 0x3800);
Stephen Hemmingerb9caefa2006-10-23 10:51:42 -0700450 dump_gmac_fifo("Rx GMAC 2", regs->data + 0xc40 + 128);
451 dump_gmac_fifo("Tx GMAC 2", regs->data + 0xd40 + 128);
Stephen Hemmingerad702592006-09-26 13:09:14 -0700452 }
453
454 return 0;
455}