summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@ppc970.osdl.org>2004-08-01 05:14:25 -0700
committerLinus Torvalds <torvalds@ppc970.osdl.org>2004-08-01 05:14:25 -0700
commitbe55649e00e02405019f9bc3bb15f5a57255272b (patch)
treee8a92688a1069d3ab83d12c98d9fe038996881c9
parent171755ff12750d94f2079137a421ffdbb8b6fd47 (diff)
parentcb6298ed222a0ee75505cf3761f2dc7465d0e5ce (diff)
Merge bk://kernel.bkbits.net/davem/tg3-2.6
into ppc970.osdl.org:/home/torvalds/v2.6/linux
-rw-r--r--drivers/net/tg3.c18
1 files changed, 17 insertions, 1 deletions
diff --git a/drivers/net/tg3.c b/drivers/net/tg3.c
index e5b49ebf6a3e..0e46154729d4 100644
--- a/drivers/net/tg3.c
+++ b/drivers/net/tg3.c
@@ -3635,9 +3635,25 @@ static int tg3_chip_reset(struct tg3 *tp)
/* restore 5701 hardware bug workaround flag */
tp->tg3_flags = flags_save;
+ /* Unfortunately, we have to delay before the PCI read back.
+ * Some 575X chips even will not respond to a PCI cfg access
+ * when the reset command is given to the chip.
+ *
+ * How do these hardware designers expect things to work
+ * properly if the PCI write is posted for a long period
+ * of time? It is always necessary to have some method by
+ * which a register read back can occur to push the write
+ * out which does the reset.
+ *
+ * For most tg3 variants the trick below was working.
+ * Ho hum...
+ */
+ udelay(120);
+
/* Flush PCI posted writes. The normal MMIO registers
* are inaccessible at this time so this is the only
- * way to make this reliably. I tried to use indirect
+ * way to make this reliably (actually, this is no longer
+ * the case, see above). I tried to use indirect
* register read/write but this upset some 5701 variants.
*/
pci_read_config_dword(tp->pdev, PCI_COMMAND, &val);