em(4): Add support for Comet Lake Mobile Platform, update shared code
This change introduces Comet Lake Mobile Platform support in the e1000 driver along with shared code patches described below. - Cast return value of e1000_ltr2ns() to higher type to avoid overflow - Remove useless statement of assigning act_offset - Add initialization of identification LED - Fix flow control setup after connected standby: After connected standby the driver blocks resets during "AdapterStart" and skips flow control setup. This change adds condition in e1000_setup_link_ich8lan() to always setup flow control and to setup physical interface only when there is no need to block resets. Signed-off-by: Piotr Pietruszewski <piotr.pietruszewski@intel.com> Submitted by: Piotr Pietruszewski <piotr.pietruszewski@intel.com> Reviewed by: erj@ Tested by: Jeffrey Pieper <jeffrey.e.pieper@intel.com> MFC after: 1 week Relnotes: yes Sponsored by: Intel Corporation Differential Revision: https://reviews.freebsd.org/D25035
This commit is contained in:
parent
dcd3781f84
commit
933837ffb5
@ -309,6 +309,8 @@ s32 e1000_set_mac_type(struct e1000_hw *hw)
|
||||
case E1000_DEV_ID_PCH_SPT_I219_V4:
|
||||
case E1000_DEV_ID_PCH_SPT_I219_LM5:
|
||||
case E1000_DEV_ID_PCH_SPT_I219_V5:
|
||||
case E1000_DEV_ID_PCH_CMP_I219_LM12:
|
||||
case E1000_DEV_ID_PCH_CMP_I219_V12:
|
||||
mac->type = e1000_pch_spt;
|
||||
break;
|
||||
case E1000_DEV_ID_PCH_CNP_I219_LM6:
|
||||
@ -319,7 +321,10 @@ s32 e1000_set_mac_type(struct e1000_hw *hw)
|
||||
case E1000_DEV_ID_PCH_ICP_I219_V8:
|
||||
case E1000_DEV_ID_PCH_ICP_I219_LM9:
|
||||
case E1000_DEV_ID_PCH_ICP_I219_V9:
|
||||
case E1000_DEV_ID_PCH_ICP_I219_V10:
|
||||
case E1000_DEV_ID_PCH_CMP_I219_LM10:
|
||||
case E1000_DEV_ID_PCH_CMP_I219_V10:
|
||||
case E1000_DEV_ID_PCH_CMP_I219_LM11:
|
||||
case E1000_DEV_ID_PCH_CMP_I219_V11:
|
||||
mac->type = e1000_pch_cnp;
|
||||
break;
|
||||
case E1000_DEV_ID_82575EB_COPPER:
|
||||
|
@ -155,7 +155,12 @@ struct e1000_hw;
|
||||
#define E1000_DEV_ID_PCH_ICP_I219_V8 0x15E0
|
||||
#define E1000_DEV_ID_PCH_ICP_I219_LM9 0x15E1
|
||||
#define E1000_DEV_ID_PCH_ICP_I219_V9 0x15E2
|
||||
#define E1000_DEV_ID_PCH_ICP_I219_V10 0x0D4F
|
||||
#define E1000_DEV_ID_PCH_CMP_I219_LM10 0x0D4E
|
||||
#define E1000_DEV_ID_PCH_CMP_I219_V10 0x0D4F
|
||||
#define E1000_DEV_ID_PCH_CMP_I219_LM11 0x0D4C
|
||||
#define E1000_DEV_ID_PCH_CMP_I219_V11 0x0D4D
|
||||
#define E1000_DEV_ID_PCH_CMP_I219_LM12 0x0D53
|
||||
#define E1000_DEV_ID_PCH_CMP_I219_V12 0x0D55
|
||||
#define E1000_DEV_ID_82576 0x10C9
|
||||
#define E1000_DEV_ID_82576_FIBER 0x10E6
|
||||
#define E1000_DEV_ID_82576_SERDES 0x10E7
|
||||
|
@ -774,6 +774,7 @@ static s32 e1000_get_cfg_done_i210(struct e1000_hw *hw)
|
||||
**/
|
||||
s32 e1000_init_hw_i210(struct e1000_hw *hw)
|
||||
{
|
||||
struct e1000_mac_info *mac = &hw->mac;
|
||||
s32 ret_val;
|
||||
|
||||
DEBUGFUNC("e1000_init_hw_i210");
|
||||
@ -784,6 +785,10 @@ s32 e1000_init_hw_i210(struct e1000_hw *hw)
|
||||
return ret_val;
|
||||
}
|
||||
hw->phy.ops.get_cfg_done = e1000_get_cfg_done_i210;
|
||||
|
||||
/* Initialize identification LED */
|
||||
mac->ops.id_led_init(hw);
|
||||
|
||||
ret_val = e1000_init_hw_82575(hw);
|
||||
return ret_val;
|
||||
}
|
||||
|
@ -1091,7 +1091,7 @@ static u64 e1000_ltr2ns(u16 ltr)
|
||||
value = ltr & E1000_LTRV_VALUE_MASK;
|
||||
scale = (ltr & E1000_LTRV_SCALE_MASK) >> E1000_LTRV_SCALE_SHIFT;
|
||||
|
||||
return value * (1 << (scale * E1000_LTRV_SCALE_FACTOR));
|
||||
return value * (1ULL << (scale * E1000_LTRV_SCALE_FACTOR));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -4161,13 +4161,6 @@ static s32 e1000_update_nvm_checksum_spt(struct e1000_hw *hw)
|
||||
if (ret_val)
|
||||
goto release;
|
||||
|
||||
/* And invalidate the previously valid segment by setting
|
||||
* its signature word (0x13) high_byte to 0b. This can be
|
||||
* done without an erase because flash erase sets all bits
|
||||
* to 1's. We can write 1's to 0's without an erase
|
||||
*/
|
||||
act_offset = (old_bank_offset + E1000_ICH_NVM_SIG_WORD) * 2 + 1;
|
||||
|
||||
/* offset in words but we read dword*/
|
||||
act_offset = old_bank_offset + E1000_ICH_NVM_SIG_WORD - 1;
|
||||
ret_val = e1000_read_flash_dword_ich8lan(hw, act_offset, &dword);
|
||||
@ -5235,9 +5228,6 @@ static s32 e1000_setup_link_ich8lan(struct e1000_hw *hw)
|
||||
|
||||
DEBUGFUNC("e1000_setup_link_ich8lan");
|
||||
|
||||
if (hw->phy.ops.check_reset_block(hw))
|
||||
return E1000_SUCCESS;
|
||||
|
||||
/* ICH parts do not have a word in the NVM to determine
|
||||
* the default flow control setting, so we explicitly
|
||||
* set it to full.
|
||||
@ -5253,10 +5243,12 @@ static s32 e1000_setup_link_ich8lan(struct e1000_hw *hw)
|
||||
DEBUGOUT1("After fix-ups FlowControl is now = %x\n",
|
||||
hw->fc.current_mode);
|
||||
|
||||
/* Continue to configure the copper link. */
|
||||
ret_val = hw->mac.ops.setup_physical_interface(hw);
|
||||
if (ret_val)
|
||||
return ret_val;
|
||||
if (!hw->phy.ops.check_reset_block(hw)) {
|
||||
/* Continue to configure the copper link. */
|
||||
ret_val = hw->mac.ops.setup_physical_interface(hw);
|
||||
if (ret_val)
|
||||
return ret_val;
|
||||
}
|
||||
|
||||
E1000_WRITE_REG(hw, E1000_FCTTV, hw->fc.pause_time);
|
||||
if ((hw->phy.type == e1000_phy_82578) ||
|
||||
|
@ -174,7 +174,12 @@ static pci_vendor_info_t em_vendor_info_array[] =
|
||||
PVID(0x8086, E1000_DEV_ID_PCH_ICP_I219_V8, "Intel(R) PRO/1000 Network Connection"),
|
||||
PVID(0x8086, E1000_DEV_ID_PCH_ICP_I219_LM9, "Intel(R) PRO/1000 Network Connection"),
|
||||
PVID(0x8086, E1000_DEV_ID_PCH_ICP_I219_V9, "Intel(R) PRO/1000 Network Connection"),
|
||||
PVID(0x8086, E1000_DEV_ID_PCH_ICP_I219_V10, "Intel(R) PRO/1000 Network Connection"),
|
||||
PVID(0x8086, E1000_DEV_ID_PCH_CMP_I219_LM10, "Intel(R) PRO/1000 Network Connection"),
|
||||
PVID(0x8086, E1000_DEV_ID_PCH_CMP_I219_V10, "Intel(R) PRO/1000 Network Connection"),
|
||||
PVID(0x8086, E1000_DEV_ID_PCH_CMP_I219_LM11, "Intel(R) PRO/1000 Network Connection"),
|
||||
PVID(0x8086, E1000_DEV_ID_PCH_CMP_I219_V11, "Intel(R) PRO/1000 Network Connection"),
|
||||
PVID(0x8086, E1000_DEV_ID_PCH_CMP_I219_LM12, "Intel(R) PRO/1000 Network Connection"),
|
||||
PVID(0x8086, E1000_DEV_ID_PCH_CMP_I219_V12, "Intel(R) PRO/1000 Network Connection"),
|
||||
/* required last entry */
|
||||
PVID_END
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user