summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoryongari <yongari@FreeBSD.org>2008-09-09 10:19:48 +0000
committeryongari <yongari@FreeBSD.org>2008-09-09 10:19:48 +0000
commitf94dfca5261370e958ab0884a4bf8c736ba6752c (patch)
treec95ca0f2d5ef9a8c1249fc27ab1380cc30081421
parent2dd7bef310577b6dacbc9a0203232028ed5562b8 (diff)
downloadFreeBSD-src-f94dfca5261370e958ab0884a4bf8c736ba6752c.zip
FreeBSD-src-f94dfca5261370e958ab0884a4bf8c736ba6752c.tar.gz
Add workaround for CRC errors seen at 100Mbps on JMC250 A2.
While here update chip revision number of JMC250/JMC260 from the latest datasheet.
-rw-r--r--sys/dev/jme/if_jme.c13
-rw-r--r--sys/dev/jme/if_jmereg.h5
2 files changed, 16 insertions, 2 deletions
diff --git a/sys/dev/jme/if_jme.c b/sys/dev/jme/if_jme.c
index 2096d4a..231f65a 100644
--- a/sys/dev/jme/if_jme.c
+++ b/sys/dev/jme/if_jme.c
@@ -1996,6 +1996,19 @@ jme_mac_config(struct jme_softc *sc)
default:
break;
}
+ /* Workaround CRC errors at 100Mbps on JMC250 A2. */
+ if (sc->jme_rev == DEVICEID_JMC250 &&
+ sc->jme_chip_rev == DEVICEREVID_JMC250_A2) {
+ if (IFM_SUBTYPE(mii->mii_media_active) == IFM_100_TX) {
+ /* Extend interface FIFO depth. */
+ jme_miibus_writereg(sc->jme_dev, sc->jme_phyaddr,
+ 0x1B, 0x0000);
+ } else {
+ /* Select default interface FIFO depth. */
+ jme_miibus_writereg(sc->jme_dev, sc->jme_phyaddr,
+ 0x1B, 0x0004);
+ }
+ }
CSR_WRITE_4(sc, JME_GHC, ghc);
CSR_WRITE_4(sc, JME_RXMAC, rxmac);
CSR_WRITE_4(sc, JME_TXMAC, txmac);
diff --git a/sys/dev/jme/if_jmereg.h b/sys/dev/jme/if_jmereg.h
index 78ce94f..a796a8b 100644
--- a/sys/dev/jme/if_jmereg.h
+++ b/sys/dev/jme/if_jmereg.h
@@ -39,13 +39,14 @@
* JMC250 PCI device ID
*/
#define DEVICEID_JMC250 0x0250
-#define DEVICEREVID_JMC250 0x10
+#define DEVICEREVID_JMC250_A0 0x00
+#define DEVICEREVID_JMC250_A2 0x11
/*
* JMC260 PCI device ID
*/
#define DEVICEID_JMC260 0x0260
-#define DEVICEREVID_JMC260 0x20
+#define DEVICEREVID_JMC260_A0 0x00
/* JMC250 PCI configuration register. */
#define JME_PCI_BAR0 0x10 /* 16KB memory window. */
OpenPOWER on IntegriCloud