Patch for Sporadic eepro(10) RX problems after reboot from Till Straumann
authortimlegge <timlegge>
Thu, 21 Apr 2005 23:36:33 +0000 (23:36 +0000)
committertimlegge <timlegge>
Thu, 21 Apr 2005 23:36:33 +0000 (23:36 +0000)
LOG
src/drivers/net/eepro.c

diff --git a/LOG b/LOG
index e94e144..258a2ae 100644 (file)
--- a/LOG
+++ b/LOG
@@ -2857,4 +2857,5 @@ Released as Etherboot 5.4.0 (production)
 + Liu Tao contributed a driver for the AMD8111 based on the Linux 
 driver
 
++ Till Straumann patch for Sporadic eepro(10)  RX problems after reboot
 
index b27c9f7..5bcf67f 100644 (file)
@@ -259,8 +259,8 @@ static unsigned eeprom_reg = EEPROM_REG_PRO;
 #define eeprom_delay() { udelay(40); }
 #define EE_READ_CMD (6 << 6)
 
-/* do a full reset */
-#define eepro_full_reset(ioaddr)       outb(RESET_CMD, ioaddr); udelay(40);
+/* do a full reset; data sheet asks for 250us delay */
+#define eepro_full_reset(ioaddr)       outb(RESET_CMD, ioaddr); udelay(255);
 
 /* do a nice reset */
 #define eepro_sel_reset(ioaddr)        { \
@@ -328,6 +328,9 @@ static void eepro_reset(struct nic *nic)
        rx_start = (unsigned int)bus_to_virt(RCV_LOWER_LIMIT << 8);
        outw(RCV_LOWER_LIMIT << 8, ioaddr + RCV_BAR);
        outw(((RCV_UPPER_LIMIT << 8) | 0xFE), ioaddr + RCV_STOP);
+       /* Make sure 1st poll won't find a valid packet header */
+       outw((RCV_LOWER_LIMIT << 8), ioaddr + HOST_ADDRESS_REG);
+       outw(0,                      ioaddr + IO_PORT);
        /* Intialise XMT */
        outw((XMT_LOWER_LIMIT << 8), ioaddr + xmt_bar);
        eepro_sel_reset(ioaddr);