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

Commit eb7700dc authored by Bruce Allan's avatar Bruce Allan Committed by David S. Miller
Browse files

e1000e: fix check for manageability on ICHx/PCH



Do not check for all the bits in E1000_FWSM_MODE_MASK when checking for
manageability on 82577/82578; only check if iAMT is enabled.  Both of the
manageability checks (for 82577/82578 and ICHx) must check the firmware
valid bit too since the other bits are only valid when the latter is set.

Signed-off-by: default avatarBruce Allan <bruce.w.allan@intel.com>
Tested-by: default avatarJeff Pieper <jeffrey.e.pieper@intel.com>
Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 8c7bbb92
Loading
Loading
Loading
Loading
+27 −4
Original line number Original line Diff line number Diff line
@@ -226,6 +226,8 @@ static void e1000_power_down_phy_copper_ich8lan(struct e1000_hw *hw);
static void e1000_lan_init_done_ich8lan(struct e1000_hw *hw);
static void e1000_lan_init_done_ich8lan(struct e1000_hw *hw);
static s32  e1000_k1_gig_workaround_hv(struct e1000_hw *hw, bool link);
static s32  e1000_k1_gig_workaround_hv(struct e1000_hw *hw, bool link);
static s32 e1000_set_mdio_slow_mode_hv(struct e1000_hw *hw);
static s32 e1000_set_mdio_slow_mode_hv(struct e1000_hw *hw);
static bool e1000_check_mng_mode_ich8lan(struct e1000_hw *hw);
static bool e1000_check_mng_mode_pchlan(struct e1000_hw *hw);


static inline u16 __er16flash(struct e1000_hw *hw, unsigned long reg)
static inline u16 __er16flash(struct e1000_hw *hw, unsigned long reg)
{
{
@@ -515,6 +517,8 @@ static s32 e1000_init_mac_params_ich8lan(struct e1000_adapter *adapter)
	case e1000_ich8lan:
	case e1000_ich8lan:
	case e1000_ich9lan:
	case e1000_ich9lan:
	case e1000_ich10lan:
	case e1000_ich10lan:
		/* check management mode */
		mac->ops.check_mng_mode = e1000_check_mng_mode_ich8lan;
		/* ID LED init */
		/* ID LED init */
		mac->ops.id_led_init = e1000e_id_led_init;
		mac->ops.id_led_init = e1000e_id_led_init;
		/* setup LED */
		/* setup LED */
@@ -526,6 +530,8 @@ static s32 e1000_init_mac_params_ich8lan(struct e1000_adapter *adapter)
		mac->ops.led_off = e1000_led_off_ich8lan;
		mac->ops.led_off = e1000_led_off_ich8lan;
		break;
		break;
	case e1000_pchlan:
	case e1000_pchlan:
		/* check management mode */
		mac->ops.check_mng_mode = e1000_check_mng_mode_pchlan;
		/* ID LED init */
		/* ID LED init */
		mac->ops.id_led_init = e1000_id_led_init_pchlan;
		mac->ops.id_led_init = e1000_id_led_init_pchlan;
		/* setup LED */
		/* setup LED */
@@ -774,7 +780,7 @@ static void e1000_release_swflag_ich8lan(struct e1000_hw *hw)
 *  e1000_check_mng_mode_ich8lan - Checks management mode
 *  e1000_check_mng_mode_ich8lan - Checks management mode
 *  @hw: pointer to the HW structure
 *  @hw: pointer to the HW structure
 *
 *
 *  This checks if the adapter has manageability enabled.
 *  This checks if the adapter has any manageability enabled.
 *  This is a function pointer entry point only called by read/write
 *  This is a function pointer entry point only called by read/write
 *  routines for the PHY and NVM parts.
 *  routines for the PHY and NVM parts.
 **/
 **/
@@ -783,9 +789,26 @@ static bool e1000_check_mng_mode_ich8lan(struct e1000_hw *hw)
	u32 fwsm;
	u32 fwsm;


	fwsm = er32(FWSM);
	fwsm = er32(FWSM);
	return (fwsm & E1000_ICH_FWSM_FW_VALID) &&
	       ((fwsm & E1000_FWSM_MODE_MASK) ==
		(E1000_ICH_MNG_IAMT_MODE << E1000_FWSM_MODE_SHIFT));
}


	return (fwsm & E1000_FWSM_MODE_MASK) ==
/**
		(E1000_ICH_MNG_IAMT_MODE << E1000_FWSM_MODE_SHIFT);
 *  e1000_check_mng_mode_pchlan - Checks management mode
 *  @hw: pointer to the HW structure
 *
 *  This checks if the adapter has iAMT enabled.
 *  This is a function pointer entry point only called by read/write
 *  routines for the PHY and NVM parts.
 **/
static bool e1000_check_mng_mode_pchlan(struct e1000_hw *hw)
{
	u32 fwsm;

	fwsm = er32(FWSM);
	return (fwsm & E1000_ICH_FWSM_FW_VALID) &&
	       (fwsm & (E1000_ICH_MNG_IAMT_MODE << E1000_FWSM_MODE_SHIFT));
}
}


/**
/**
@@ -3396,7 +3419,7 @@ static void e1000_clear_hw_cntrs_ich8lan(struct e1000_hw *hw)


static struct e1000_mac_operations ich8_mac_ops = {
static struct e1000_mac_operations ich8_mac_ops = {
	.id_led_init		= e1000e_id_led_init,
	.id_led_init		= e1000e_id_led_init,
	.check_mng_mode		= e1000_check_mng_mode_ich8lan,
	/* check_mng_mode dependent on mac type */
	.check_for_link		= e1000_check_for_copper_link_ich8lan,
	.check_for_link		= e1000_check_for_copper_link_ich8lan,
	/* cleanup_led dependent on mac type */
	/* cleanup_led dependent on mac type */
	.clear_hw_cntrs		= e1000_clear_hw_cntrs_ich8lan,
	.clear_hw_cntrs		= e1000_clear_hw_cntrs_ich8lan,