mirror of
https://github.com/torvalds/linux.git
synced 2026-05-27 00:22:00 +02:00
Merge branch 'intel-wired-lan-driver-updates-2024-02-28-ixgbe-igc-igb-e1000e-e100'
Tony Nguyen says: ==================== Intel Wired LAN Driver Updates 2024-02-28 (ixgbe, igc, igb, e1000e, e100) This series contains updates to ixgbe, igc, igb, e1000e, and e100 drivers. Jon Maxwell makes module parameter values readable in sysfs for ixgbe, igb, and e100. Ernesto Castellotti adds support for 1000BASE-BX on ixgbe. Arnd Bergmann fixes build failure due to dependency issues for igc. Vitaly refactors error check to be more concise and prevent future issues on e1000e. v1: https://lore.kernel.org/netdev/20240229004135.741586-1-anthony.l.nguyen@intel.com/ ==================== Link: https://lore.kernel.org/r/20240301184806.2634508-1-anthony.l.nguyen@intel.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
commit
b307e25d4e
|
|
@ -372,6 +372,7 @@ config IGC
|
|||
config IGC_LEDS
|
||||
def_bool LEDS_TRIGGER_NETDEV
|
||||
depends on IGC && LEDS_CLASS
|
||||
depends on LEDS_CLASS=y || IGC=m
|
||||
help
|
||||
Optional support for controlling the NIC LED's with the netdev
|
||||
LED trigger.
|
||||
|
|
|
|||
|
|
@ -171,8 +171,8 @@ static int debug = 3;
|
|||
static int eeprom_bad_csum_allow = 0;
|
||||
static int use_io = 0;
|
||||
module_param(debug, int, 0);
|
||||
module_param(eeprom_bad_csum_allow, int, 0);
|
||||
module_param(use_io, int, 0);
|
||||
module_param(eeprom_bad_csum_allow, int, 0444);
|
||||
module_param(use_io, int, 0444);
|
||||
MODULE_PARM_DESC(debug, "Debug level (0=none,...,16=all)");
|
||||
MODULE_PARM_DESC(eeprom_bad_csum_allow, "Allow bad eeprom checksums");
|
||||
MODULE_PARM_DESC(use_io, "Force use of i/o access mode");
|
||||
|
|
|
|||
|
|
@ -6688,14 +6688,14 @@ static int __e1000_shutdown(struct pci_dev *pdev, bool runtime)
|
|||
if (adapter->hw.phy.type == e1000_phy_igp_3) {
|
||||
e1000e_igp3_phy_powerdown_workaround_ich8lan(&adapter->hw);
|
||||
} else if (hw->mac.type >= e1000_pch_lpt) {
|
||||
if (wufc && !(wufc & (E1000_WUFC_EX | E1000_WUFC_MC | E1000_WUFC_BC)))
|
||||
if (wufc && !(wufc & (E1000_WUFC_EX | E1000_WUFC_MC | E1000_WUFC_BC))) {
|
||||
/* ULP does not support wake from unicast, multicast
|
||||
* or broadcast.
|
||||
*/
|
||||
retval = e1000_enable_ulp_lpt_lp(hw, !runtime);
|
||||
|
||||
if (retval)
|
||||
return retval;
|
||||
if (retval)
|
||||
return retval;
|
||||
}
|
||||
}
|
||||
|
||||
/* Ensure that the appropriate bits are set in LPI_CTRL
|
||||
|
|
|
|||
|
|
@ -202,7 +202,7 @@ static struct notifier_block dca_notifier = {
|
|||
#endif
|
||||
#ifdef CONFIG_PCI_IOV
|
||||
static unsigned int max_vfs;
|
||||
module_param(max_vfs, uint, 0);
|
||||
module_param(max_vfs, uint, 0444);
|
||||
MODULE_PARM_DESC(max_vfs, "Maximum number of virtual functions to allocate per physical function");
|
||||
#endif /* CONFIG_PCI_IOV */
|
||||
|
||||
|
|
|
|||
|
|
@ -334,7 +334,9 @@ static int ixgbe_get_link_capabilities_82599(struct ixgbe_hw *hw,
|
|||
hw->phy.sfp_type == ixgbe_sfp_type_1g_lx_core0 ||
|
||||
hw->phy.sfp_type == ixgbe_sfp_type_1g_lx_core1 ||
|
||||
hw->phy.sfp_type == ixgbe_sfp_type_1g_sx_core0 ||
|
||||
hw->phy.sfp_type == ixgbe_sfp_type_1g_sx_core1) {
|
||||
hw->phy.sfp_type == ixgbe_sfp_type_1g_sx_core1 ||
|
||||
hw->phy.sfp_type == ixgbe_sfp_type_1g_bx_core0 ||
|
||||
hw->phy.sfp_type == ixgbe_sfp_type_1g_bx_core1) {
|
||||
*speed = IXGBE_LINK_SPEED_1GB_FULL;
|
||||
*autoneg = true;
|
||||
return 0;
|
||||
|
|
|
|||
|
|
@ -349,6 +349,8 @@ static int ixgbe_get_link_ksettings(struct net_device *netdev,
|
|||
case ixgbe_sfp_type_1g_sx_core1:
|
||||
case ixgbe_sfp_type_1g_lx_core0:
|
||||
case ixgbe_sfp_type_1g_lx_core1:
|
||||
case ixgbe_sfp_type_1g_bx_core0:
|
||||
case ixgbe_sfp_type_1g_bx_core1:
|
||||
ethtool_link_ksettings_add_link_mode(cmd, supported,
|
||||
FIBRE);
|
||||
ethtool_link_ksettings_add_link_mode(cmd, advertising,
|
||||
|
|
|
|||
|
|
@ -153,7 +153,7 @@ MODULE_PARM_DESC(max_vfs,
|
|||
#endif /* CONFIG_PCI_IOV */
|
||||
|
||||
static bool allow_unsupported_sfp;
|
||||
module_param(allow_unsupported_sfp, bool, 0);
|
||||
module_param(allow_unsupported_sfp, bool, 0444);
|
||||
MODULE_PARM_DESC(allow_unsupported_sfp,
|
||||
"Allow unsupported and untested SFP+ modules on 82599-based adapters");
|
||||
|
||||
|
|
|
|||
|
|
@ -1532,6 +1532,7 @@ int ixgbe_identify_sfp_module_generic(struct ixgbe_hw *hw)
|
|||
enum ixgbe_sfp_type stored_sfp_type = hw->phy.sfp_type;
|
||||
struct ixgbe_adapter *adapter = hw->back;
|
||||
u8 oui_bytes[3] = {0, 0, 0};
|
||||
u8 bitrate_nominal = 0;
|
||||
u8 comp_codes_10g = 0;
|
||||
u8 comp_codes_1g = 0;
|
||||
u16 enforce_sfp = 0;
|
||||
|
|
@ -1576,7 +1577,12 @@ int ixgbe_identify_sfp_module_generic(struct ixgbe_hw *hw)
|
|||
status = hw->phy.ops.read_i2c_eeprom(hw,
|
||||
IXGBE_SFF_CABLE_TECHNOLOGY,
|
||||
&cable_tech);
|
||||
if (status)
|
||||
goto err_read_i2c_eeprom;
|
||||
|
||||
status = hw->phy.ops.read_i2c_eeprom(hw,
|
||||
IXGBE_SFF_BITRATE_NOMINAL,
|
||||
&bitrate_nominal);
|
||||
if (status)
|
||||
goto err_read_i2c_eeprom;
|
||||
|
||||
|
|
@ -1659,6 +1665,18 @@ int ixgbe_identify_sfp_module_generic(struct ixgbe_hw *hw)
|
|||
else
|
||||
hw->phy.sfp_type =
|
||||
ixgbe_sfp_type_1g_lx_core1;
|
||||
/* Support only Ethernet 1000BASE-BX10, checking the Bit Rate
|
||||
* Nominal Value as per SFF-8472 by convention 1.25 Gb/s should
|
||||
* be rounded up to 0Dh (13 in units of 100 MBd) for 1000BASE-BX
|
||||
*/
|
||||
} else if ((comp_codes_1g & IXGBE_SFF_BASEBX10_CAPABLE) &&
|
||||
(bitrate_nominal == 0xD)) {
|
||||
if (hw->bus.lan_id == 0)
|
||||
hw->phy.sfp_type =
|
||||
ixgbe_sfp_type_1g_bx_core0;
|
||||
else
|
||||
hw->phy.sfp_type =
|
||||
ixgbe_sfp_type_1g_bx_core1;
|
||||
} else {
|
||||
hw->phy.sfp_type = ixgbe_sfp_type_unknown;
|
||||
}
|
||||
|
|
@ -1747,7 +1765,9 @@ int ixgbe_identify_sfp_module_generic(struct ixgbe_hw *hw)
|
|||
hw->phy.sfp_type == ixgbe_sfp_type_1g_lx_core0 ||
|
||||
hw->phy.sfp_type == ixgbe_sfp_type_1g_lx_core1 ||
|
||||
hw->phy.sfp_type == ixgbe_sfp_type_1g_sx_core0 ||
|
||||
hw->phy.sfp_type == ixgbe_sfp_type_1g_sx_core1)) {
|
||||
hw->phy.sfp_type == ixgbe_sfp_type_1g_sx_core1 ||
|
||||
hw->phy.sfp_type == ixgbe_sfp_type_1g_bx_core0 ||
|
||||
hw->phy.sfp_type == ixgbe_sfp_type_1g_bx_core1)) {
|
||||
hw->phy.type = ixgbe_phy_sfp_unsupported;
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
|
@ -1763,7 +1783,9 @@ int ixgbe_identify_sfp_module_generic(struct ixgbe_hw *hw)
|
|||
hw->phy.sfp_type == ixgbe_sfp_type_1g_lx_core0 ||
|
||||
hw->phy.sfp_type == ixgbe_sfp_type_1g_lx_core1 ||
|
||||
hw->phy.sfp_type == ixgbe_sfp_type_1g_sx_core0 ||
|
||||
hw->phy.sfp_type == ixgbe_sfp_type_1g_sx_core1)) {
|
||||
hw->phy.sfp_type == ixgbe_sfp_type_1g_sx_core1 ||
|
||||
hw->phy.sfp_type == ixgbe_sfp_type_1g_bx_core0 ||
|
||||
hw->phy.sfp_type == ixgbe_sfp_type_1g_bx_core1)) {
|
||||
/* Make sure we're a supported PHY type */
|
||||
if (hw->phy.type == ixgbe_phy_sfp_intel)
|
||||
return 0;
|
||||
|
|
@ -1999,12 +2021,14 @@ int ixgbe_get_sfp_init_sequence_offsets(struct ixgbe_hw *hw,
|
|||
if (sfp_type == ixgbe_sfp_type_da_act_lmt_core0 ||
|
||||
sfp_type == ixgbe_sfp_type_1g_lx_core0 ||
|
||||
sfp_type == ixgbe_sfp_type_1g_cu_core0 ||
|
||||
sfp_type == ixgbe_sfp_type_1g_sx_core0)
|
||||
sfp_type == ixgbe_sfp_type_1g_sx_core0 ||
|
||||
sfp_type == ixgbe_sfp_type_1g_bx_core0)
|
||||
sfp_type = ixgbe_sfp_type_srlr_core0;
|
||||
else if (sfp_type == ixgbe_sfp_type_da_act_lmt_core1 ||
|
||||
sfp_type == ixgbe_sfp_type_1g_lx_core1 ||
|
||||
sfp_type == ixgbe_sfp_type_1g_cu_core1 ||
|
||||
sfp_type == ixgbe_sfp_type_1g_sx_core1)
|
||||
sfp_type == ixgbe_sfp_type_1g_sx_core1 ||
|
||||
sfp_type == ixgbe_sfp_type_1g_bx_core1)
|
||||
sfp_type = ixgbe_sfp_type_srlr_core1;
|
||||
|
||||
/* Read offset to PHY init contents */
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@
|
|||
#define IXGBE_SFF_1GBE_COMP_CODES 0x6
|
||||
#define IXGBE_SFF_10GBE_COMP_CODES 0x3
|
||||
#define IXGBE_SFF_CABLE_TECHNOLOGY 0x8
|
||||
#define IXGBE_SFF_BITRATE_NOMINAL 0xC
|
||||
#define IXGBE_SFF_CABLE_SPEC_COMP 0x3C
|
||||
#define IXGBE_SFF_SFF_8472_SWAP 0x5C
|
||||
#define IXGBE_SFF_SFF_8472_COMP 0x5E
|
||||
|
|
@ -39,6 +40,7 @@
|
|||
#define IXGBE_SFF_1GBASESX_CAPABLE 0x1
|
||||
#define IXGBE_SFF_1GBASELX_CAPABLE 0x2
|
||||
#define IXGBE_SFF_1GBASET_CAPABLE 0x8
|
||||
#define IXGBE_SFF_BASEBX10_CAPABLE 0x64
|
||||
#define IXGBE_SFF_10GBASESR_CAPABLE 0x10
|
||||
#define IXGBE_SFF_10GBASELR_CAPABLE 0x20
|
||||
#define IXGBE_SFF_SOFT_RS_SELECT_MASK 0x8
|
||||
|
|
|
|||
|
|
@ -3210,6 +3210,9 @@ enum ixgbe_sfp_type {
|
|||
ixgbe_sfp_type_1g_sx_core1 = 12,
|
||||
ixgbe_sfp_type_1g_lx_core0 = 13,
|
||||
ixgbe_sfp_type_1g_lx_core1 = 14,
|
||||
ixgbe_sfp_type_1g_bx_core0 = 15,
|
||||
ixgbe_sfp_type_1g_bx_core1 = 16,
|
||||
|
||||
ixgbe_sfp_type_not_present = 0xFFFE,
|
||||
ixgbe_sfp_type_unknown = 0xFFFF
|
||||
};
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user