diff options
-rw-r--r-- | usr/src/uts/common/io/bge/bge_chip2.c | 16 | ||||
-rw-r--r-- | usr/src/uts/common/io/bge/bge_main2.c | 5 | ||||
-rw-r--r-- | usr/src/uts/common/io/bge/bge_send.c | 5 |
3 files changed, 7 insertions, 19 deletions
diff --git a/usr/src/uts/common/io/bge/bge_chip2.c b/usr/src/uts/common/io/bge/bge_chip2.c index 10cd6a6e43..abd6258e7a 100644 --- a/usr/src/uts/common/io/bge/bge_chip2.c +++ b/usr/src/uts/common/io/bge/bge_chip2.c @@ -2598,6 +2598,7 @@ bge_chip_poll_engine(bge_t *bgep, bge_regno_t regno, drv_usecwait(100); } + bge_problem(bgep, "bge_chip_poll_engine failed: regno = 0x%lx", regno); bge_fm_ereport(bgep, DDI_FM_DEVICE_NO_RESPONSE); return (B_FALSE); } @@ -3168,27 +3169,12 @@ bge_chip_stop(bge_t *bgep, boolean_t fault) bge_regno_t regno; bge_regno_t *rbp; boolean_t ok; - uint_t asf_mode; BGE_TRACE(("bge_chip_stop($%p)", (void *)bgep)); ASSERT(mutex_owned(bgep->genlock)); - /* - * In some case, some chips' internal engines may fail to reset, - * so we call bge_chip_reset as a workaround. - */ - bgep->bge_chip_state = BGE_CHIP_RESET; -#ifdef BGE_IPMI_ASF - asf_mode = bgep->asf_enabled? ASF_MODE_POST_INIT: ASF_MODE_NONE; - if (bge_chip_reset(bgep, B_TRUE, asf_mode) != DDI_SUCCESS) -#else - if (bge_chip_reset(bgep, B_TRUE) != DDI_SUCCESS) -#endif - ddi_fm_service_impact(bgep->devinfo, - DDI_SERVICE_UNAFFECTED); - rbp = shutdown_engine_regs; /* * When driver try to shutdown the BCM5705/5788/5721/5751/ diff --git a/usr/src/uts/common/io/bge/bge_main2.c b/usr/src/uts/common/io/bge/bge_main2.c index a4b19b68c5..f191f313c0 100644 --- a/usr/src/uts/common/io/bge/bge_main2.c +++ b/usr/src/uts/common/io/bge/bge_main2.c @@ -20,8 +20,7 @@ */ /* - * Copyright 2010 Sun Microsystems, Inc. All rights reserved. - * Use is subject to license terms. + * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. */ #include "bge_impl.h" @@ -3504,6 +3503,8 @@ bge_attach(dev_info_t *devinfo, ddi_attach_cmd_t cmd) if (err != 0) goto attach_fail; + mac_link_update(bgep->mh, LINK_STATE_UNKNOWN); + /* * Register a periodical handler. * bge_chip_cyclic() is invoked in kernel context. diff --git a/usr/src/uts/common/io/bge/bge_send.c b/usr/src/uts/common/io/bge/bge_send.c index a2c261bce6..28080d93af 100644 --- a/usr/src/uts/common/io/bge/bge_send.c +++ b/usr/src/uts/common/io/bge/bge_send.c @@ -614,8 +614,9 @@ bge_m_tx(void *arg, mblk_t *mp) ASSERT(bgep->bge_mac_state == BGE_MAC_STARTED); rw_enter(bgep->errlock, RW_READER); - if (bgep->bge_chip_state != BGE_CHIP_RUNNING) { - BGE_DEBUG(("bge_m_tx: chip not running")); + if ((bgep->bge_chip_state != BGE_CHIP_RUNNING) || + !(bgep->param_link_up)) { + BGE_DEBUG(("bge_m_tx: chip not running or link down")); freemsgchain(mp); mp = NULL; } |