changeset 13038:82fbe9c3ad15

6959198 bge driver does not report link status correctly
author yong tan - Sun Microsystems - Beijing China <Yong.Tan@Sun.COM>
date Fri, 06 Aug 2010 11:14:04 +0800
parents e0bc0b6c7c2f
children 41d7b7a02c5d
files usr/src/uts/common/io/bge/bge_mii.c
diffstat 1 files changed, 7 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/usr/src/uts/common/io/bge/bge_mii.c	Thu Aug 05 16:45:55 2010 -0600
+++ b/usr/src/uts/common/io/bge/bge_mii.c	Fri Aug 06 11:14:04 2010 +0800
@@ -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"
@@ -1276,6 +1275,7 @@
 bge_check_serdes(bge_t *bgep, boolean_t recheck)
 {
 	uint32_t emac_status;
+	uint32_t tx_status;
 	uint32_t lpadv;
 	boolean_t linkup;
 	boolean_t linkup_old = bgep->param_link_up;
@@ -1289,8 +1289,11 @@
 		 * BCM5714, and BCM5715 devices.
 		 */
 		if (DEVICE_5714_SERIES_CHIPSETS(bgep)) {
-			emac_status =  bge_reg_get32(bgep, MI_STATUS_REG);
-			linkup = BIS(emac_status, MI_STATUS_LINK);
+			tx_status = bge_reg_get32(bgep,
+			    TRANSMIT_MAC_STATUS_REG);
+			linkup = BIS(tx_status, TRANSMIT_STATUS_LINK_UP);
+			emac_status = bge_reg_get32(bgep,
+			    ETHERNET_MAC_STATUS_REG);
 			bgep->serdes_status = emac_status;
 			if ((linkup && linkup_old) ||
 			    (!linkup && !linkup_old)) {