X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=drivers%2Fnet%2Fbnx2.c;h=854d80c330ec8ab4449bddb23a1af1bf43927f0c;hb=5f08e46b621a769e52a9545a23ab1d5fb2aec1d4;hp=24e7f9ab3f5a72c76eeefd54b332152531c2b98b;hpb=53fdc5185c994ad6def3729a905ac4a47c477c9d;p=linux-2.6 diff --git a/drivers/net/bnx2.c b/drivers/net/bnx2.c index 24e7f9ab3f..854d80c330 100644 --- a/drivers/net/bnx2.c +++ b/drivers/net/bnx2.c @@ -3934,11 +3934,13 @@ bnx2_reset_chip(struct bnx2 *bp, u32 reset_code) /* Chip reset. */ REG_WR(bp, BNX2_PCICFG_MISC_CONFIG, val); + /* Reading back any register after chip reset will hang the + * bus on 5706 A0 and A1. The msleep below provides plenty + * of margin for write posting. + */ if ((CHIP_ID(bp) == CHIP_ID_5706_A0) || - (CHIP_ID(bp) == CHIP_ID_5706_A1)) { - current->state = TASK_UNINTERRUPTIBLE; - schedule_timeout(HZ / 50); - } + (CHIP_ID(bp) == CHIP_ID_5706_A1)) + msleep(20); /* Reset takes approximate 30 usec */ for (i = 0; i < 10; i++) {