Re: [PATCH] ethtool: marvell register update

2007-09-20 Thread Jeff Garzik

Stephen Hemminger wrote:

Update the decode of sky2 registers.

Signed-off-by: Stephen Hemminger [EMAIL PROTECTED]


applied

-
To unsubscribe from this list: send the line unsubscribe netdev in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH] ethtool: marvell register update

2007-09-17 Thread Stephen Hemminger
Update the decode of sky2 registers.

Signed-off-by: Stephen Hemminger [EMAIL PROTECTED]

--- a/marvell.c 2007-09-17 14:03:08.0 -0700
+++ b/marvell.c 2007-09-17 14:05:44.0 -0700
@@ -183,6 +183,7 @@ static void dump_mac(const u8 *r)
case 0xb4:  printf(Yukon-2 EC Ultra); break;
case 0xb6:  printf(Yukon-2 EC);   break;
case 0xb7:  printf(Yukon-2 FE);   break;
+   case 0xb8:  printf(Yukon-2 FE Plus); break;
default:printf((Unknown));break;
}
 
@@ -247,6 +248,12 @@ static void dump_control(u8 *r)
printf(Interrupt Mask   0x%08X\n, *(u32 *) (r + 0xc));
printf(Interrupt Hardware Error Source  0x%08X\n, *(u32 *) (r + 
0x10));
printf(Interrupt Hardware Error Mask0x%08X\n, *(u32 *) (r + 
0x14));
+   printf(Interrupt Control0x%08X\n, *(u32 *) (r + 
0x2c));
+   printf(Interrupt Moderation Mask0x%08X\n, *(u32 *) (r + 
0x14c));
+   printf(Hardware Moderation Mask 0x%08X\n, *(u32 *) (r + 
0x150));
+   dump_timer(Moderation Timer, r + 0x140);
+
+   printf(General Purpose  I/O 0x%08X\n, *(u32 *) (r + 
0x15c));
 }
 
 int skge_dump_regs(struct ethtool_drvinfo *info, struct ethtool_regs *regs)
@@ -273,7 +280,6 @@ int skge_dump_regs(struct ethtool_drvinf
dump_gmac(GMAC 1, regs-data + 0x2800);
 
dump_timer(Timer, regs-data + 0x130);
-   dump_timer(IRQ Moderation, regs-data +0x140);
dump_timer(Blink Source, regs-data +0x170);
 
dump_queue(Receive Queue 1, regs-data +0x400, 1);
@@ -342,7 +348,7 @@ static void dump_queue2(const char *name
printf(Request  0x%08X%08X\n,
   d-req_hi, d-req_lo);
if (rx) {
-   printf(Csum1  Offset %4d Position   %d\n,
+   printf(Csum1  Offset %4d Position  %d\n,
   d-csum1, d-csum1_start);
printf(Csum2  Offset %4d Position  %d\n,
   d-csum2, d-csum2_start);
@@ -351,6 +357,25 @@ static void dump_queue2(const char *name
   d-csum1, d-csum2_start, d-csum1_start);
 }
 
+static void dump_prefetch(const char *name, const void *r)
+{
+   const u32 *reg = r;
+
+   printf(\n%s Prefetch\n, name);
+   printf(Control   0x%08X\n, reg[0]);
+   printf(Last Index%u\n, reg[1]);
+   printf(Start Address 0x%08x%08x\n, reg[3], reg[2]);
+   if (*name == 'S') { /* Status unit */
+   printf(TX1 report%u\n, reg[4]);
+   printf(TX2 report%u\n, reg[5]);
+   printf(TX threshold  %u\n, reg[6]);
+   printf(Put Index %u\n, reg[7]);
+   } else {
+   printf(Get Index %u\n, reg[4]);
+   printf(Put Index %u\n, reg[5]);
+   }
+}
+
 int sky2_dump_regs(struct ethtool_drvinfo *info, struct ethtool_regs *regs)
 {
const u32 *r = (const u32 *) regs-data;
@@ -375,23 +400,14 @@ int sky2_dump_regs(struct ethtool_drvinf
 
dump_mac(regs-data);
 
-   printf(\nStatus BMU:\n---\n);
-   printf(Control0x%08X\n,
-  *(u32 *) (regs-data + 0x0e80));
-   printf(Last Index 0x%04X\n,
-  *(u16 *) (regs-data + 0x0e84));
-   printf(Put Index  0x%04X\n,
-  *(u16 *) (regs-data + 0x0e9c));
-   printf(List Address   0x%08X%08X\n,
-  *(u32 *) (regs-data + 0x0e8c),
-  *(u32 *) (regs-data + 0x0e88));
-   printf(Transmit 1 done index  0x%04X\n,
-  *(u16 *) (regs-data + 0x0e90));
-   if (dual)
-   printf(Transmit 2 done index  0x%04X\n,
-  *(u16 *) (regs-data + 0x0e94));
-   printf(Transmit index threshold   0x%04X\n,
-  *(u16 *) (regs-data + 0x0e98));
+   dump_prefetch(Status, regs-data + 0xe80);
+   dump_prefetch(Receive 1, regs-data + 0x450);
+   dump_prefetch(Transmit 1, regs-data + 0x450 + 0x280);
+
+   if (dual) {
+   dump_prefetch(Receive 2, regs-data + 0x450 + 0x80);
+   dump_prefetch(Transmit 2, regs-data + 0x450 + 0x380);
+   }
 
printf(\nStatus FIFO\n);
printf(\tWrite Pointer0x%02X\n, regs-data[0xea0]);
@@ -399,6 +415,7 @@ int sky2_dump_regs(struct ethtool_drvinf
printf(\tLevel0x%02X\n, regs-data[0xea8]);
printf(\tWatermark0x%02X\n, regs-data[0xeac]);
printf(\tISR Watermark0x%02X\n, regs-data[0xead]);
+
dump_timer(Status level, regs-data + 0xeb0);
dump_timer(TX status, regs-data + 0xec0);
dump_timer(ISR, regs-data + 0xed0);
@@ -415,7 +432,6 @@ int sky2_dump_regs(struct