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: Bruce Allan <bruce.w.allan@intel.com> Tested-by: Jeff Pieper <jeffrey.e.pieper@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
8c7bbb9253
commit
eb7700dc03
|
@ -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,
|
||||||
|
|
Loading…
Reference in New Issue