summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoryongari <yongari@FreeBSD.org>2010-04-30 18:04:46 +0000
committeryongari <yongari@FreeBSD.org>2010-04-30 18:04:46 +0000
commit90bf77c71267bf38221fa717f6fac628910d2a8e (patch)
treecc0faf470b06f2e93de45c30af0f4a36f3cf4a17
parentc5fa73f93d7d28784831dd890d6c32a9a2ba9c32 (diff)
downloadFreeBSD-src-90bf77c71267bf38221fa717f6fac628910d2a8e.zip
FreeBSD-src-90bf77c71267bf38221fa717f6fac628910d2a8e.tar.gz
Disable non-ASF packet flushing on Yukon Extreme as vendor's driver
does. Without this change, Yukon Extreme seems to generate lots of RX FIFO overruns even though controller has available RX buffers. These excessive RX FIFO overruns generated lots of pause frames which in turn killed devices plugged into switch. It seems there is still occasional RX frame corruption on Yukon Extreme but this change seems to fix the pause frame storm. Reported by: jhb Tested by: jhb MFC after: 5 days
-rw-r--r--sys/dev/msk/if_msk.c5
-rw-r--r--sys/dev/msk/if_mskreg.h2
2 files changed, 7 insertions, 0 deletions
diff --git a/sys/dev/msk/if_msk.c b/sys/dev/msk/if_msk.c
index 9b92435..fbae30b 100644
--- a/sys/dev/msk/if_msk.c
+++ b/sys/dev/msk/if_msk.c
@@ -3917,6 +3917,11 @@ msk_init_locked(struct msk_if_softc *sc_if)
msk_stop(sc_if);
return;
}
+ if (sc->msk_hw_id == CHIP_ID_YUKON_EX) {
+ /* Disable flushing of non-ASF packets. */
+ CSR_WRITE_4(sc, MR_ADDR(sc_if->msk_port, RX_GMF_CTRL_T),
+ GMF_RX_MACSEC_FLUSH_OFF);
+ }
/* Configure interrupt handling. */
if (sc_if->msk_port == MSK_PORT_A) {
diff --git a/sys/dev/msk/if_mskreg.h b/sys/dev/msk/if_mskreg.h
index 293ca29..3e8ae47 100644
--- a/sys/dev/msk/if_mskreg.h
+++ b/sys/dev/msk/if_mskreg.h
@@ -1941,6 +1941,8 @@
#define RX_TRUNC_OFF BIT_26 /* disable packet truncation */
#define RX_VLAN_STRIP_ON BIT_25 /* enable VLAN stripping */
#define RX_VLAN_STRIP_OFF BIT_24 /* disable VLAN stripping */
+#define GMF_RX_MACSEC_FLUSH_ON BIT_23
+#define GMF_RX_MACSEC_FLUSH_OFF BIT_22
#define GMF_RX_OVER_ON BIT_19 /* enable flushing on receive overrun */
#define GMF_RX_OVER_OFF BIT_18 /* disable flushing on receive overrun */
#define GMF_ASF_RX_OVER_ON BIT_17 /* enable flushing of ASF when overrun */
OpenPOWER on IntegriCloud