svn commit: r295528 - stable/10/sys/dev/ixgbe

Steven Hartland smh at FreeBSD.org
Thu Feb 11 16:54:25 UTC 2016


Author: smh
Date: Thu Feb 11 16:54:23 2016
New Revision: 295528
URL: https://svnweb.freebsd.org/changeset/base/295528

Log:
  MFC r294734, r295093 & r295094 ixgbe fixes
  
  MFC r294734
  Fix ixgbe compliation with DBG 1
  
  MFC r295093
  Configure ixgbe phy & gbic power
  
  MFC r295094
  Fix ixgbe flow control autoneg reporting
  
  Approved by:	re (marius)
  Sponsored by:	Multiplay

Modified:
  stable/10/sys/dev/ixgbe/if_ix.c
  stable/10/sys/dev/ixgbe/ixgbe_common.c
  stable/10/sys/dev/ixgbe/ixgbe_osdep.h
  stable/10/sys/dev/ixgbe/ixgbe_phy.c
  stable/10/sys/dev/ixgbe/ixgbe_type.h
  stable/10/sys/dev/ixgbe/ixgbe_x540.c
  stable/10/sys/dev/ixgbe/ixgbe_x550.c
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/sys/dev/ixgbe/if_ix.c
==============================================================================
--- stable/10/sys/dev/ixgbe/if_ix.c	Thu Feb 11 16:43:23 2016	(r295527)
+++ stable/10/sys/dev/ixgbe/if_ix.c	Thu Feb 11 16:54:23 2016	(r295528)
@@ -582,6 +582,12 @@ ixgbe_attach(device_t dev)
 	if (error) 
 		goto err_late;
 
+	/* Enable the optics for 82599 SFP+ fiber */
+	ixgbe_enable_tx_laser(hw);
+
+	/* Enable power to the phy. */
+	ixgbe_set_phy_power(hw, TRUE);
+
 	/* Setup OS specific network interface */
 	if (ixgbe_setup_interface(dev, adapter) != 0)
 		goto err_late;
@@ -1250,6 +1256,9 @@ ixgbe_init_locked(struct adapter *adapte
 			device_printf(dev, "Error setting up EEE: %d\n", err);
 	}
 
+	/* Enable power to the phy. */
+	ixgbe_set_phy_power(hw, TRUE);
+
 	/* Config/Enable Link */
 	ixgbe_config_link(adapter);
 
@@ -3970,6 +3979,9 @@ ixgbe_setup_low_power_mode(struct adapte
 
 	mtx_assert(&adapter->core_mtx, MA_OWNED);
 
+	if (!hw->wol_enabled)
+		ixgbe_set_phy_power(hw, FALSE);
+
 	/* Limit power management flow to X550EM baseT */
 	if (hw->device_id == IXGBE_DEV_ID_X550EM_X_10G_T
 	    && hw->phy.ops.enter_lplu) {

Modified: stable/10/sys/dev/ixgbe/ixgbe_common.c
==============================================================================
--- stable/10/sys/dev/ixgbe/ixgbe_common.c	Thu Feb 11 16:43:23 2016	(r295527)
+++ stable/10/sys/dev/ixgbe/ixgbe_common.c	Thu Feb 11 16:54:23 2016	(r295528)
@@ -199,9 +199,12 @@ bool ixgbe_device_supports_autoneg_fc(st
 		break;
 	}
 
-	ERROR_REPORT2(IXGBE_ERROR_UNSUPPORTED,
+	if (!supported) {
+		ERROR_REPORT2(IXGBE_ERROR_UNSUPPORTED,
 		      "Device %x does not support flow control autoneg",
 		      hw->device_id);
+	}
+
 	return supported;
 }
 

Modified: stable/10/sys/dev/ixgbe/ixgbe_osdep.h
==============================================================================
--- stable/10/sys/dev/ixgbe/ixgbe_osdep.h	Thu Feb 11 16:43:23 2016	(r295527)
+++ stable/10/sys/dev/ixgbe/ixgbe_osdep.h	Thu Feb 11 16:54:23 2016	(r295528)
@@ -57,6 +57,15 @@
 #define ASSERT(x) if(!(x)) panic("IXGBE: x")
 #define EWARN(H, W, S) printf(W)
 
+enum {
+	IXGBE_ERROR_SOFTWARE,
+	IXGBE_ERROR_POLLING,
+	IXGBE_ERROR_INVALID_STATE,
+	IXGBE_ERROR_UNSUPPORTED,
+	IXGBE_ERROR_ARGUMENT,
+	IXGBE_ERROR_CAUTION,
+};
+
 /* The happy-fun DELAY macro is defined in /usr/src/sys/i386/include/clock.h */
 #define usec_delay(x) DELAY(x)
 #define msec_delay(x) DELAY(1000*(x))
@@ -73,9 +82,23 @@
 	#define DEBUGOUT5(S,A,B,C,D,E)  printf(S "\n",A,B,C,D,E)
 	#define DEBUGOUT6(S,A,B,C,D,E,F)  printf(S "\n",A,B,C,D,E,F)
 	#define DEBUGOUT7(S,A,B,C,D,E,F,G)  printf(S "\n",A,B,C,D,E,F,G)
-	#define ERROR_REPORT1(S,A)      printf(S "\n",A)
-	#define ERROR_REPORT2(S,A,B)    printf(S "\n",A,B)
-	#define ERROR_REPORT3(S,A,B,C)  printf(S "\n",A,B,C)
+	#define ERROR_REPORT1 ERROR_REPORT
+	#define ERROR_REPORT2 ERROR_REPORT
+	#define ERROR_REPORT3 ERROR_REPORT
+	#define ERROR_REPORT(level, format, arg...) do { \
+		switch (level) { \
+		case IXGBE_ERROR_SOFTWARE: \
+		case IXGBE_ERROR_CAUTION: \
+		case IXGBE_ERROR_POLLING: \
+		case IXGBE_ERROR_INVALID_STATE: \
+		case IXGBE_ERROR_UNSUPPORTED: \
+		case IXGBE_ERROR_ARGUMENT: \
+			device_printf(ixgbe_dev_from_hw(hw), format, ## arg); \
+			break; \
+		default: \
+			break; \
+		} \
+	} while (0)
 #else
 	#define DEBUGOUT(S)
 	#define DEBUGOUT1(S,A)

Modified: stable/10/sys/dev/ixgbe/ixgbe_phy.c
==============================================================================
--- stable/10/sys/dev/ixgbe/ixgbe_phy.c	Thu Feb 11 16:43:23 2016	(r295527)
+++ stable/10/sys/dev/ixgbe/ixgbe_phy.c	Thu Feb 11 16:54:23 2016	(r295528)
@@ -2734,6 +2734,9 @@ s32 ixgbe_set_copper_phy_power(struct ix
 	u32 status;
 	u16 reg;
 
+	if (!on && ixgbe_mng_present(hw))
+		return 0;
+
 	status = hw->phy.ops.read_reg(hw, IXGBE_MDIO_VENDOR_SPECIFIC_1_CONTROL,
 				      IXGBE_MDIO_VENDOR_SPECIFIC_1_DEV_TYPE,
 				      &reg);

Modified: stable/10/sys/dev/ixgbe/ixgbe_type.h
==============================================================================
--- stable/10/sys/dev/ixgbe/ixgbe_type.h	Thu Feb 11 16:43:23 2016	(r295527)
+++ stable/10/sys/dev/ixgbe/ixgbe_type.h	Thu Feb 11 16:54:23 2016	(r295528)
@@ -1479,7 +1479,10 @@ struct ixgbe_dmac_config {
 #define IXGBE_MDIO_GLOBAL_INT_CHIP_VEN_MASK	0xFF01 /* int chip-wide mask */
 #define IXGBE_MDIO_GLOBAL_INT_CHIP_VEN_FLAG	0xFC01 /* int chip-wide mask */
 #define IXGBE_MDIO_GLOBAL_ALARM_1		0xCC00 /* Global alarm 1 */
+#define IXGBE_MDIO_GLOBAL_ALM_1_DEV_FAULT	0x0010 /* device fault */
 #define IXGBE_MDIO_GLOBAL_ALM_1_HI_TMP_FAIL	0x4000 /* high temp failure */
+#define IXGBE_MDIO_GLOBAL_FAULT_MSG		0xC850 /* Global Fault Message */
+#define IXGBE_MDIO_GLOBAL_FAULT_MSG_HI_TMP	0x8007 /* high temp failure */
 #define IXGBE_MDIO_GLOBAL_INT_MASK		0xD400 /* Global int mask */
 #define IXGBE_MDIO_GLOBAL_AN_VEN_ALM_INT_EN	0x1000 /* autoneg vendor alarm int enable */
 #define IXGBE_MDIO_GLOBAL_ALARM_1_INT		0x4 /* int in Global alarm 1 */

Modified: stable/10/sys/dev/ixgbe/ixgbe_x540.c
==============================================================================
--- stable/10/sys/dev/ixgbe/ixgbe_x540.c	Thu Feb 11 16:43:23 2016	(r295527)
+++ stable/10/sys/dev/ixgbe/ixgbe_x540.c	Thu Feb 11 16:54:23 2016	(r295528)
@@ -82,8 +82,7 @@ s32 ixgbe_init_ops_X540(struct ixgbe_hw 
 	/* PHY */
 	phy->ops.init = ixgbe_init_phy_ops_generic;
 	phy->ops.reset = NULL;
-	if (!ixgbe_mng_present(hw))
-		phy->ops.set_phy_power = ixgbe_set_copper_phy_power;
+	phy->ops.set_phy_power = ixgbe_set_copper_phy_power;
 
 	/* MAC */
 	mac->ops.reset_hw = ixgbe_reset_hw_X540;

Modified: stable/10/sys/dev/ixgbe/ixgbe_x550.c
==============================================================================
--- stable/10/sys/dev/ixgbe/ixgbe_x550.c	Thu Feb 11 16:43:23 2016	(r295527)
+++ stable/10/sys/dev/ixgbe/ixgbe_x550.c	Thu Feb 11 16:54:23 2016	(r295528)
@@ -965,7 +965,7 @@ void ixgbe_restore_mdd_vf_X550(struct ix
 		num_qs = 4;  /* 32 VFs / pools */
 		bitmask = 0x0000000F;
 		break;
-	default:            /* 64 VFs / pools */
+	default:	    /* 64 VFs / pools */
 		num_qs = 2;
 		bitmask = 0x00000003;
 		break;
@@ -1264,7 +1264,7 @@ static s32 ixgbe_get_lasi_ext_t_x550em(s
 	    IXGBE_MDIO_GLOBAL_ALARM_1_INT)))
 		return status;
 
-	/* High temperature failure alarm triggered */
+	/* Global alarm triggered */
 	status = hw->phy.ops.read_reg(hw, IXGBE_MDIO_GLOBAL_ALARM_1,
 				      IXGBE_MDIO_VENDOR_SPECIFIC_1_DEV_TYPE,
 				      &reg);
@@ -1277,6 +1277,21 @@ static s32 ixgbe_get_lasi_ext_t_x550em(s
 		/* power down the PHY in case the PHY FW didn't already */
 		ixgbe_set_copper_phy_power(hw, FALSE);
 		return IXGBE_ERR_OVERTEMP;
+	} else if (reg & IXGBE_MDIO_GLOBAL_ALM_1_DEV_FAULT) {
+		/*  device fault alarm triggered */
+		status = hw->phy.ops.read_reg(hw, IXGBE_MDIO_GLOBAL_FAULT_MSG,
+					  IXGBE_MDIO_VENDOR_SPECIFIC_1_DEV_TYPE,
+					  &reg);
+
+		if (status != IXGBE_SUCCESS)
+			return status;
+
+		/* if device fault was due to high temp alarm handle and exit */
+		if (reg == IXGBE_MDIO_GLOBAL_FAULT_MSG_HI_TMP) {
+			/* power down the PHY in case the PHY FW didn't */
+			ixgbe_set_copper_phy_power(hw, FALSE);
+			return IXGBE_ERR_OVERTEMP;
+		}
 	}
 
 	/* Vendor alarm 2 triggered */


More information about the svn-src-all mailing list