Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8a05ba08 authored by David S. Miller's avatar David S. Miller
Browse files
parents ec47ea82 e1abc1bb
Loading
Loading
Loading
Loading
+11 −1
Original line number Diff line number Diff line
@@ -999,7 +999,7 @@ static s32 e1000_set_d0_lplu_state_82571(struct e1000_hw *hw, bool active)
 **/
static s32 e1000_reset_hw_82571(struct e1000_hw *hw)
{
	u32 ctrl, ctrl_ext;
	u32 ctrl, ctrl_ext, eecd;
	s32 ret_val;

	/*
@@ -1072,6 +1072,16 @@ static s32 e1000_reset_hw_82571(struct e1000_hw *hw)
	 */

	switch (hw->mac.type) {
	case e1000_82571:
	case e1000_82572:
		/*
		 * REQ and GNT bits need to be cleared when using AUTO_RD
		 * to access the EEPROM.
		 */
		eecd = er32(EECD);
		eecd &= ~(E1000_EECD_REQ | E1000_EECD_GNT);
		ew32(EECD, eecd);
		break;
	case e1000_82573:
	case e1000_82574:
	case e1000_82583:
+1 −1
Original line number Diff line number Diff line
@@ -56,7 +56,7 @@

#define DRV_EXTRAVERSION "-k"

#define DRV_VERSION "1.11.3" DRV_EXTRAVERSION
#define DRV_VERSION "2.0.0" DRV_EXTRAVERSION
char e1000e_driver_name[] = "e1000e";
const char e1000e_driver_version[] = DRV_VERSION;

+45 −26
Original line number Diff line number Diff line
@@ -638,6 +638,45 @@ s32 e1000e_write_kmrn_reg_locked(struct e1000_hw *hw, u32 offset, u16 data)
	return __e1000_write_kmrn_reg(hw, offset, data, true);
}

/**
 *  e1000_set_master_slave_mode - Setup PHY for Master/slave mode
 *  @hw: pointer to the HW structure
 *
 *  Sets up Master/slave mode
 **/
static s32 e1000_set_master_slave_mode(struct e1000_hw *hw)
{
	s32 ret_val;
	u16 phy_data;

	/* Resolve Master/Slave mode */
	ret_val = e1e_rphy(hw, PHY_1000T_CTRL, &phy_data);
	if (ret_val)
		return ret_val;

	/* load defaults for future use */
	hw->phy.original_ms_type = (phy_data & CR_1000T_MS_ENABLE) ?
	    ((phy_data & CR_1000T_MS_VALUE) ?
	     e1000_ms_force_master : e1000_ms_force_slave) : e1000_ms_auto;

	switch (hw->phy.ms_type) {
	case e1000_ms_force_master:
		phy_data |= (CR_1000T_MS_ENABLE | CR_1000T_MS_VALUE);
		break;
	case e1000_ms_force_slave:
		phy_data |= CR_1000T_MS_ENABLE;
		phy_data &= ~(CR_1000T_MS_VALUE);
		break;
	case e1000_ms_auto:
		phy_data &= ~CR_1000T_MS_ENABLE;
		/* fall-through */
	default:
		break;
	}

	return e1e_wphy(hw, PHY_1000T_CTRL, phy_data);
}

/**
 *  e1000_copper_link_setup_82577 - Setup 82577 PHY for copper link
 *  @hw: pointer to the HW structure
@@ -659,7 +698,11 @@ s32 e1000_copper_link_setup_82577(struct e1000_hw *hw)
	/* Enable downshift */
	phy_data |= I82577_CFG_ENABLE_DOWNSHIFT;

	return e1e_wphy(hw, I82577_CFG_REG, phy_data);
	ret_val = e1e_wphy(hw, I82577_CFG_REG, phy_data);
	if (ret_val)
		return ret_val;

	return e1000_set_master_slave_mode(hw);
}

/**
@@ -895,31 +938,7 @@ s32 e1000e_copper_link_setup_igp(struct e1000_hw *hw)
				return ret_val;
		}

		ret_val = e1e_rphy(hw, PHY_1000T_CTRL, &data);
		if (ret_val)
			return ret_val;

		/* load defaults for future use */
		phy->original_ms_type = (data & CR_1000T_MS_ENABLE) ?
			((data & CR_1000T_MS_VALUE) ?
			e1000_ms_force_master :
			e1000_ms_force_slave) :
			e1000_ms_auto;

		switch (phy->ms_type) {
		case e1000_ms_force_master:
			data |= (CR_1000T_MS_ENABLE | CR_1000T_MS_VALUE);
			break;
		case e1000_ms_force_slave:
			data |= CR_1000T_MS_ENABLE;
			data &= ~(CR_1000T_MS_VALUE);
			break;
		case e1000_ms_auto:
			data &= ~CR_1000T_MS_ENABLE;
		default:
			break;
		}
		ret_val = e1e_wphy(hw, PHY_1000T_CTRL, data);
		ret_val = e1000_set_master_slave_mode(hw);
	}

	return ret_val;
+7 −0
Original line number Diff line number Diff line
@@ -662,6 +662,13 @@ static int ixgbe_dcbnl_ieee_setpfc(struct net_device *dev,
			return -ENOMEM;
	}

	if (pfc->pfc_en) {
		adapter->last_lfc_mode = adapter->hw.fc.current_mode;
		adapter->hw.fc.current_mode = ixgbe_fc_pfc;
	} else {
		adapter->hw.fc.current_mode = adapter->last_lfc_mode;
	}

	prio_tc = adapter->ixgbe_ieee_ets->prio_tc;
	memcpy(adapter->ixgbe_ieee_pfc, pfc, sizeof(*adapter->ixgbe_ieee_pfc));
	return ixgbe_dcb_hw_pfc_config(&adapter->hw, pfc->pfc_en, prio_tc);
+5 −1
Original line number Diff line number Diff line
@@ -637,7 +637,11 @@ static void ixgbe_update_xoff_received(struct ixgbe_adapter *adapter)
			clear_bit(__IXGBE_HANG_CHECK_ARMED,
				  &adapter->tx_ring[i]->state);
		return;
	} else if (!(adapter->dcb_cfg.pfc_mode_enable))
	} else if (((adapter->dcbx_cap & DCB_CAP_DCBX_VER_CEE) &&
		    !(adapter->dcb_cfg.pfc_mode_enable)) ||
		   ((adapter->dcbx_cap & DCB_CAP_DCBX_VER_IEEE) &&
		    adapter->ixgbe_ieee_pfc &&
		    !(adapter->ixgbe_ieee_pfc->pfc_en)))
		return;

	/* update stats for each tc, only valid with PFC enabled */