summaryrefslogtreecommitdiff
path: root/usr/src/uts/common
diff options
context:
space:
mode:
authoryong tan - Sun Microsystems - Beijing China <Yong.Tan@Sun.COM>2009-07-23 10:37:40 +0800
committeryong tan - Sun Microsystems - Beijing China <Yong.Tan@Sun.COM>2009-07-23 10:37:40 +0800
commit35bff3c25e305b98f6a6e5317efb1f96e76bba0d (patch)
treead94e9db077258fc7ef33b5497203fb33ddf1b5f /usr/src/uts/common
parent464dca6ed5bb17d3d3b4540329449bb2e636c814 (diff)
downloadillumos-gate-35bff3c25e305b98f6a6e5317efb1f96e76bba0d.tar.gz
6772728 ping with big size packets failed on bge interface after enable the jumbo
Diffstat (limited to 'usr/src/uts/common')
-rw-r--r--usr/src/uts/common/io/bge/bge_chip2.c5
-rw-r--r--usr/src/uts/common/io/bge/bge_impl.h1
-rw-r--r--usr/src/uts/common/io/bge/bge_main2.c19
-rw-r--r--usr/src/uts/common/io/bge/bge_mii.c16
4 files changed, 25 insertions, 16 deletions
diff --git a/usr/src/uts/common/io/bge/bge_chip2.c b/usr/src/uts/common/io/bge/bge_chip2.c
index b8ca9970a1..4553690258 100644
--- a/usr/src/uts/common/io/bge/bge_chip2.c
+++ b/usr/src/uts/common/io/bge/bge_chip2.c
@@ -149,8 +149,6 @@ static uint16_t bge_dma_miss_limit = 20;
static uint32_t bge_stop_start_on_sync = 0;
-boolean_t bge_jumbo_enable = B_TRUE;
-
/*
* bge_intr_max_loop controls the maximum loop number within bge_intr.
* When loading NIC with heavy network traffic, it is useful.
@@ -2356,8 +2354,7 @@ bge_chip_id_init(bge_t *bgep)
* std buffer size should be set to BGE_JUMBO_BUFF_SIZE when jumbo
* feature is enabled.
*/
- if (bge_jumbo_enable &&
- !(cidp->flags & CHIP_FLAG_NO_JUMBO) &&
+ if (!(cidp->flags & CHIP_FLAG_NO_JUMBO) &&
(cidp->default_mtu > BGE_DEFAULT_MTU) &&
(cidp->default_mtu <= BGE_MAXIMUM_MTU)) {
if (DEVICE_5714_SERIES_CHIPSETS(bgep)) {
diff --git a/usr/src/uts/common/io/bge/bge_impl.h b/usr/src/uts/common/io/bge/bge_impl.h
index 34465733b6..86b8d3093a 100644
--- a/usr/src/uts/common/io/bge/bge_impl.h
+++ b/usr/src/uts/common/io/bge/bge_impl.h
@@ -1188,7 +1188,6 @@ extern uint32_t bge_rx_ticks_norm;
extern uint32_t bge_tx_ticks_norm;
extern uint32_t bge_rx_count_norm;
extern uint32_t bge_tx_count_norm;
-extern boolean_t bge_jumbo_enable;
extern boolean_t bge_relaxed_ordering;
void bge_chip_msi_trig(bge_t *bgep);
diff --git a/usr/src/uts/common/io/bge/bge_main2.c b/usr/src/uts/common/io/bge/bge_main2.c
index 19dd51d4ca..7155bfe66d 100644
--- a/usr/src/uts/common/io/bge/bge_main2.c
+++ b/usr/src/uts/common/io/bge/bge_main2.c
@@ -37,7 +37,7 @@ static char bge_ident[] = "Broadcom Gb Ethernet";
/*
* Make sure you keep the version ID up to date!
*/
-static char bge_version[] = "Broadcom Gb Ethernet v1.08";
+static char bge_version[] = "Broadcom Gb Ethernet v1.09";
/*
* Property names
@@ -1101,7 +1101,7 @@ bge_m_getprop(void *barg, const char *pr_name, mac_prop_id_t pr_num,
range.mpr_type = MAC_PROPVAL_UINT32;
range.range_uint32[0].mpur_min =
range.range_uint32[0].mpur_max = BGE_DEFAULT_MTU;
- if (bge_jumbo_enable && !(flags & CHIP_FLAG_NO_JUMBO))
+ if (!(flags & CHIP_FLAG_NO_JUMBO))
range.range_uint32[0].mpur_max =
BGE_MAXIMUM_MTU;
bcopy(&range, pr_val, sizeof (range));
@@ -3293,14 +3293,6 @@ bge_attach(dev_info_t *devinfo, ddi_attach_cmd_t cmd)
cidp->tx_rings = ddi_prop_get_int(DDI_DEV_T_ANY, devinfo,
DDI_PROP_DONTPASS, txrings_propname, cidp->tx_rings);
- if (bge_jumbo_enable == B_TRUE) {
- cidp->default_mtu = ddi_prop_get_int(DDI_DEV_T_ANY, devinfo,
- DDI_PROP_DONTPASS, default_mtu, BGE_DEFAULT_MTU);
- if ((cidp->default_mtu < BGE_DEFAULT_MTU)||
- (cidp->default_mtu > BGE_MAXIMUM_MTU)) {
- cidp->default_mtu = BGE_DEFAULT_MTU;
- }
- }
/*
* Map operating registers
*/
@@ -3322,6 +3314,13 @@ bge_attach(dev_info_t *devinfo, ddi_attach_cmd_t cmd)
goto attach_fail;
}
+ cidp->default_mtu = ddi_prop_get_int(DDI_DEV_T_ANY, devinfo,
+ DDI_PROP_DONTPASS, default_mtu, BGE_DEFAULT_MTU);
+ if ((cidp->flags & CHIP_FLAG_NO_JUMBO) ||
+ (cidp->default_mtu < BGE_DEFAULT_MTU) ||
+ (cidp->default_mtu > BGE_MAXIMUM_MTU)) {
+ cidp->default_mtu = BGE_DEFAULT_MTU;
+ }
err = bge_alloc_bufs(bgep);
if (err != DDI_SUCCESS) {
diff --git a/usr/src/uts/common/io/bge/bge_mii.c b/usr/src/uts/common/io/bge/bge_mii.c
index fa4ba583fa..2e154ee7bf 100644
--- a/usr/src/uts/common/io/bge/bge_mii.c
+++ b/usr/src/uts/common/io/bge/bge_mii.c
@@ -531,6 +531,7 @@ bge_restart_copper(bge_t *bgep, boolean_t powerdown)
{
uint16_t phy_status;
boolean_t reset_ok;
+ uint16_t extctrl, auxctrl;
BGE_TRACE(("bge_restart_copper($%p, %d)", (void *)bgep, powerdown));
@@ -590,6 +591,18 @@ bge_restart_copper(bge_t *bgep, boolean_t powerdown)
break;
}
+ if (bgep->chipid.default_mtu > BGE_DEFAULT_MTU) {
+ /* Set the GMII Fifo Elasticity to high latency */
+ extctrl = bge_mii_get16(bgep, 0x10);
+ bge_mii_put16(bgep, 0x10, extctrl | 0x1);
+
+ /* Allow reception of extended length packets */
+ bge_mii_put16(bgep, MII_AUX_CONTROL, 0x0007);
+ auxctrl = bge_mii_get16(bgep, MII_AUX_CONTROL);
+ auxctrl |= 0x4000;
+ bge_mii_put16(bgep, MII_AUX_CONTROL, auxctrl);
+ }
+
/*
* Step 7: read the MII_INTR_STATUS register twice,
* in order to clear any sticky bits (but they should
@@ -812,7 +825,8 @@ bge_update_copper(bge_t *bgep)
return (DDI_FAILURE);
bge_mii_put16(bgep, MII_AN_ADVERT, anar);
bge_mii_put16(bgep, MII_CONTROL, control);
- bge_mii_put16(bgep, MII_AUX_CONTROL, auxctrl);
+ if (auxctrl & MII_AUX_CTRL_NORM_EXT_LOOPBACK)
+ bge_mii_put16(bgep, MII_AUX_CONTROL, auxctrl);
bge_mii_put16(bgep, MII_MSCONTROL, gigctrl);
BGE_DEBUG(("bge_update_copper: anar <- 0x%x", anar));