summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/io/bge
diff options
context:
space:
mode:
authoryong tan - Sun Microsystems - Beijing China <Yong.Tan@Sun.COM>2010-06-22 14:06:24 +0800
committeryong tan - Sun Microsystems - Beijing China <Yong.Tan@Sun.COM>2010-06-22 14:06:24 +0800
commit46ffce64a6596f99fe79e2c7ee3f2f9c3a67ca25 (patch)
treec54feadd4bd3cc0e5b9dee107c0af459c825f36c /usr/src/uts/common/io/bge
parent4a7446ccb390fe3ba041227a0c5ea6d5a2f22698 (diff)
downloadillumos-gate-46ffce64a6596f99fe79e2c7ee3f2f9c3a67ca25.tar.gz
6956591 bge driver stops working in nv140
Diffstat (limited to 'usr/src/uts/common/io/bge')
-rw-r--r--usr/src/uts/common/io/bge/bge_chip2.c16
-rw-r--r--usr/src/uts/common/io/bge/bge_main2.c5
-rw-r--r--usr/src/uts/common/io/bge/bge_send.c5
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;
}