summaryrefslogtreecommitdiffstats
path: root/sys/dev/bge
diff options
context:
space:
mode:
authoryongari <yongari@FreeBSD.org>2013-08-09 01:15:32 +0000
committeryongari <yongari@FreeBSD.org>2013-08-09 01:15:32 +0000
commit33ac73409e6f46730963bb9e967295872c50c5ff (patch)
treeb9e23e7b38c177dc3732eb42e41f34525dea26dd /sys/dev/bge
parent735f6843c64b09ce16ccac6f7abf947974241d2c (diff)
downloadFreeBSD-src-33ac73409e6f46730963bb9e967295872c50c5ff.zip
FreeBSD-src-33ac73409e6f46730963bb9e967295872c50c5ff.tar.gz
Fix for IPv4 fragment packets treated as RMCP.
bit25 of rxMode MAC register of 5762 needs to be set for rx mgmt filter to work correctly when processing match for UDP header fields. Otherwise false positive can occur which causes IPv4 fragment to be received by APE instead of host. Reported by: Geans Pin <geanspin@broadcom.com>
Diffstat (limited to 'sys/dev/bge')
-rw-r--r--sys/dev/bge/if_bge.c2
-rw-r--r--sys/dev/bge/if_bgereg.h1
2 files changed, 3 insertions, 0 deletions
diff --git a/sys/dev/bge/if_bge.c b/sys/dev/bge/if_bge.c
index 0cfbca7..6b2ceb4 100644
--- a/sys/dev/bge/if_bge.c
+++ b/sys/dev/bge/if_bge.c
@@ -5542,6 +5542,8 @@ bge_init_locked(struct bge_softc *sc)
mode = CSR_READ_4(sc, BGE_RX_MODE);
if (BGE_IS_5755_PLUS(sc))
mode |= BGE_RXMODE_IPV6_ENABLE;
+ if (sc->bge_asicrev == BGE_ASICREV_BCM5762)
+ mode |= BGE_RXMODE_IPV4_FRAG_FIX;
CSR_WRITE_4(sc,BGE_RX_MODE, mode | BGE_RXMODE_ENABLE);
DELAY(10);
diff --git a/sys/dev/bge/if_bgereg.h b/sys/dev/bge/if_bgereg.h
index d6197c0..a1e6df1 100644
--- a/sys/dev/bge/if_bgereg.h
+++ b/sys/dev/bge/if_bgereg.h
@@ -841,6 +841,7 @@
#define BGE_RXMODE_RX_NO_CRC_CHECK 0x00000200
#define BGE_RXMODE_RX_KEEP_VLAN_DIAG 0x00000400
#define BGE_RXMODE_IPV6_ENABLE 0x01000000
+#define BGE_RXMODE_IPV4_FRAG_FIX 0x02000000
/* Receive MAC status register */
#define BGE_RXSTAT_REMOTE_XOFFED 0x00000001
OpenPOWER on IntegriCloud