diff options
author | yong tan - Sun Microsystems - Beijing China <Yong.Tan@Sun.COM> | 2009-07-23 10:37:40 +0800 |
---|---|---|
committer | yong tan - Sun Microsystems - Beijing China <Yong.Tan@Sun.COM> | 2009-07-23 10:37:40 +0800 |
commit | 35bff3c25e305b98f6a6e5317efb1f96e76bba0d (patch) | |
tree | ad94e9db077258fc7ef33b5497203fb33ddf1b5f /usr/src/uts/common | |
parent | 464dca6ed5bb17d3d3b4540329449bb2e636c814 (diff) | |
download | illumos-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.c | 5 | ||||
-rw-r--r-- | usr/src/uts/common/io/bge/bge_impl.h | 1 | ||||
-rw-r--r-- | usr/src/uts/common/io/bge/bge_main2.c | 19 | ||||
-rw-r--r-- | usr/src/uts/common/io/bge/bge_mii.c | 16 |
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)); |