Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge branch '10GbE' of git://git.kernel.org/pub/scm/linux/kernel/git/tnguy/next-queue

Tony Nguyen says:

====================
Intel Wired LAN Driver Updates 2025-09-03 (ixgbe, igbvf, e1000, e1000e, igb, igbvf, igc)

Piotr allows for 2.5Gb and 5Gb autoneg for ixgbe E610 devices.

Jedrzej refactors reading of OROM data to be more efficient on ixgbe.

Kohei Enju adds reporting of loopback Tx packets and bytes on igbvf. He
also removes redundant reporting of Rx bytes.

Jacek Kowalski remove unnecessary u16 casts in e1000, e1000e, igb, igc,
and ixgbe drivers.

* '10GbE' of git://git.kernel.org/pub/scm/linux/kernel/git/tnguy/next-queue:
ixgbe: drop unnecessary casts to u16 / int
igc: drop unnecessary constant casts to u16
igb: drop unnecessary constant casts to u16
e1000e: drop unnecessary constant casts to u16
e1000: drop unnecessary constant casts to u16
igbvf: remove redundant counter rx_long_byte_count from ethtool statistics
igbvf: add lbtx_packets and lbtx_bytes to ethtool statistics
ixgbe: reduce number of reads when getting OROM data
ixgbe: add the 2.5G and 5G speeds in auto-negotiation for E610
====================

Link: https://patch.msgid.link/20250903202536.3696620-1-anthony.l.nguyen@intel.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>

+82 -73
+1 -1
drivers/net/ethernet/intel/e1000/e1000.h
··· 116 116 #define E1000_MASTER_SLAVE e1000_ms_hw_default 117 117 #endif 118 118 119 - #define E1000_MNG_VLAN_NONE (-1) 119 + #define E1000_MNG_VLAN_NONE 0xFFFF 120 120 121 121 /* wrapper around a pointer to a socket buffer, 122 122 * so a DMA handle can be stored along with the buffer
+1 -1
drivers/net/ethernet/intel/e1000/e1000_ethtool.c
··· 806 806 } 807 807 808 808 /* If Checksum is not Correct return error else test passed */ 809 - if ((checksum != (u16)EEPROM_SUM) && !(*data)) 809 + if (checksum != EEPROM_SUM && !(*data)) 810 810 *data = 2; 811 811 812 812 return *data;
+2 -2
drivers/net/ethernet/intel/e1000/e1000_hw.c
··· 3970 3970 return E1000_SUCCESS; 3971 3971 3972 3972 #endif 3973 - if (checksum == (u16)EEPROM_SUM) 3973 + if (checksum == EEPROM_SUM) 3974 3974 return E1000_SUCCESS; 3975 3975 else { 3976 3976 e_dbg("EEPROM Checksum Invalid\n"); ··· 3997 3997 } 3998 3998 checksum += eeprom_data; 3999 3999 } 4000 - checksum = (u16)EEPROM_SUM - checksum; 4000 + checksum = EEPROM_SUM - checksum; 4001 4001 if (e1000_write_eeprom(hw, EEPROM_CHECKSUM_REG, 1, &checksum) < 0) { 4002 4002 e_dbg("EEPROM Write Error\n"); 4003 4003 return -E1000_ERR_EEPROM;
+1 -2
drivers/net/ethernet/intel/e1000/e1000_main.c
··· 313 313 } else { 314 314 adapter->mng_vlan_id = E1000_MNG_VLAN_NONE; 315 315 } 316 - if ((old_vid != (u16)E1000_MNG_VLAN_NONE) && 317 - (vid != old_vid) && 316 + if (old_vid != E1000_MNG_VLAN_NONE && vid != old_vid && 318 317 !test_bit(old_vid, adapter->active_vlans)) 319 318 e1000_vlan_rx_kill_vid(netdev, htons(ETH_P_8021Q), 320 319 old_vid);
+1 -1
drivers/net/ethernet/intel/e1000e/e1000.h
··· 64 64 #define AUTO_ALL_MODES 0 65 65 #define E1000_EEPROM_APME 0x0400 66 66 67 - #define E1000_MNG_VLAN_NONE (-1) 67 + #define E1000_MNG_VLAN_NONE 0xFFFF 68 68 69 69 #define DEFAULT_JUMBO 9234 70 70
+1 -1
drivers/net/ethernet/intel/e1000e/ethtool.c
··· 963 963 } 964 964 965 965 /* If Checksum is not Correct return error else test passed */ 966 - if ((checksum != (u16)NVM_SUM) && !(*data)) 966 + if (checksum != NVM_SUM && !(*data)) 967 967 *data = 2; 968 968 969 969 return *data;
+2 -2
drivers/net/ethernet/intel/e1000e/netdev.c
··· 2761 2761 rctl &= ~(E1000_RCTL_VFE | E1000_RCTL_CFIEN); 2762 2762 ew32(RCTL, rctl); 2763 2763 2764 - if (adapter->mng_vlan_id != (u16)E1000_MNG_VLAN_NONE) { 2764 + if (adapter->mng_vlan_id != E1000_MNG_VLAN_NONE) { 2765 2765 e1000_vlan_rx_kill_vid(netdev, htons(ETH_P_8021Q), 2766 2766 adapter->mng_vlan_id); 2767 2767 adapter->mng_vlan_id = E1000_MNG_VLAN_NONE; ··· 2828 2828 adapter->mng_vlan_id = vid; 2829 2829 } 2830 2830 2831 - if ((old_vid != (u16)E1000_MNG_VLAN_NONE) && (vid != old_vid)) 2831 + if (old_vid != E1000_MNG_VLAN_NONE && vid != old_vid) 2832 2832 e1000_vlan_rx_kill_vid(netdev, htons(ETH_P_8021Q), old_vid); 2833 2833 } 2834 2834
+2 -2
drivers/net/ethernet/intel/e1000e/nvm.c
··· 564 564 return 0; 565 565 } 566 566 567 - if (checksum != (u16)NVM_SUM) { 567 + if (checksum != NVM_SUM) { 568 568 e_dbg("NVM Checksum Invalid\n"); 569 569 return -E1000_ERR_NVM; 570 570 } ··· 594 594 } 595 595 checksum += nvm_data; 596 596 } 597 - checksum = (u16)NVM_SUM - checksum; 597 + checksum = NVM_SUM - checksum; 598 598 ret_val = e1000_write_nvm(hw, NVM_CHECKSUM_REG, 1, &checksum); 599 599 if (ret_val) 600 600 e_dbg("NVM Write Error while updating checksum.\n");
+2 -2
drivers/net/ethernet/intel/igb/e1000_82575.c
··· 2372 2372 checksum += nvm_data; 2373 2373 } 2374 2374 2375 - if (checksum != (u16) NVM_SUM) { 2375 + if (checksum != NVM_SUM) { 2376 2376 hw_dbg("NVM Checksum Invalid\n"); 2377 2377 ret_val = -E1000_ERR_NVM; 2378 2378 goto out; ··· 2406 2406 } 2407 2407 checksum += nvm_data; 2408 2408 } 2409 - checksum = (u16) NVM_SUM - checksum; 2409 + checksum = NVM_SUM - checksum; 2410 2410 ret_val = hw->nvm.ops.write(hw, (NVM_CHECKSUM_REG + offset), 1, 2411 2411 &checksum); 2412 2412 if (ret_val)
+1 -1
drivers/net/ethernet/intel/igb/e1000_i210.c
··· 602 602 } 603 603 checksum += nvm_data; 604 604 } 605 - checksum = (u16) NVM_SUM - checksum; 605 + checksum = NVM_SUM - checksum; 606 606 ret_val = igb_write_nvm_srwr(hw, NVM_CHECKSUM_REG, 1, 607 607 &checksum); 608 608 if (ret_val) {
+2 -2
drivers/net/ethernet/intel/igb/e1000_nvm.c
··· 636 636 checksum += nvm_data; 637 637 } 638 638 639 - if (checksum != (u16) NVM_SUM) { 639 + if (checksum != NVM_SUM) { 640 640 hw_dbg("NVM Checksum Invalid\n"); 641 641 ret_val = -E1000_ERR_NVM; 642 642 goto out; ··· 668 668 } 669 669 checksum += nvm_data; 670 670 } 671 - checksum = (u16) NVM_SUM - checksum; 671 + checksum = NVM_SUM - checksum; 672 672 ret_val = hw->nvm.ops.write(hw, NVM_CHECKSUM_REG, 1, &checksum); 673 673 if (ret_val) 674 674 hw_dbg("NVM Write Error while updating checksum.\n");
+1 -1
drivers/net/ethernet/intel/igb/igb.h
··· 217 217 #define IGB_MASTER_SLAVE e1000_ms_hw_default 218 218 #endif 219 219 220 - #define IGB_MNG_VLAN_NONE -1 220 + #define IGB_MNG_VLAN_NONE 0xFFFF 221 221 222 222 enum igb_tx_flags { 223 223 /* cmd_type flags */
+1 -2
drivers/net/ethernet/intel/igb/igb_main.c
··· 1531 1531 adapter->mng_vlan_id = IGB_MNG_VLAN_NONE; 1532 1532 } 1533 1533 1534 - if ((old_vid != (u16)IGB_MNG_VLAN_NONE) && 1535 - (vid != old_vid) && 1534 + if (old_vid != IGB_MNG_VLAN_NONE && vid != old_vid && 1536 1535 !test_bit(old_vid, adapter->active_vlans)) { 1537 1536 /* remove VID from filter table */ 1538 1537 igb_vfta_set(hw, vid, pf_id, false, true);
+3 -2
drivers/net/ethernet/intel/igbvf/ethtool.c
··· 30 30 { "rx_bytes", IGBVF_STAT(stats.gorc, stats.base_gorc) }, 31 31 { "tx_bytes", IGBVF_STAT(stats.gotc, stats.base_gotc) }, 32 32 { "multicast", IGBVF_STAT(stats.mprc, stats.base_mprc) }, 33 - { "lbrx_bytes", IGBVF_STAT(stats.gorlbc, stats.base_gorlbc) }, 34 33 { "lbrx_packets", IGBVF_STAT(stats.gprlbc, stats.base_gprlbc) }, 34 + { "lbtx_packets", IGBVF_STAT(stats.gptlbc, stats.base_gptlbc) }, 35 + { "lbrx_bytes", IGBVF_STAT(stats.gorlbc, stats.base_gorlbc) }, 36 + { "lbtx_bytes", IGBVF_STAT(stats.gotlbc, stats.base_gotlbc) }, 35 37 { "tx_restart_queue", IGBVF_STAT(restart_queue, zero_base) }, 36 38 { "tx_timeout_count", IGBVF_STAT(tx_timeout_count, zero_base) }, 37 - { "rx_long_byte_count", IGBVF_STAT(stats.gorc, stats.base_gorc) }, 38 39 { "rx_csum_offload_good", IGBVF_STAT(hw_csum_good, zero_base) }, 39 40 { "rx_csum_offload_errors", IGBVF_STAT(hw_csum_err, zero_base) }, 40 41 { "rx_header_split", IGBVF_STAT(rx_hdr_split, zero_base) },
+1 -1
drivers/net/ethernet/intel/igc/igc_i225.c
··· 435 435 } 436 436 checksum += nvm_data; 437 437 } 438 - checksum = (u16)NVM_SUM - checksum; 438 + checksum = NVM_SUM - checksum; 439 439 ret_val = igc_write_nvm_srwr(hw, NVM_CHECKSUM_REG, 1, 440 440 &checksum); 441 441 if (ret_val) {
+2 -2
drivers/net/ethernet/intel/igc/igc_nvm.c
··· 123 123 checksum += nvm_data; 124 124 } 125 125 126 - if (checksum != (u16)NVM_SUM) { 126 + if (checksum != NVM_SUM) { 127 127 hw_dbg("NVM Checksum Invalid\n"); 128 128 ret_val = -IGC_ERR_NVM; 129 129 goto out; ··· 155 155 } 156 156 checksum += nvm_data; 157 157 } 158 - checksum = (u16)NVM_SUM - checksum; 158 + checksum = NVM_SUM - checksum; 159 159 ret_val = hw->nvm.ops.write(hw, NVM_CHECKSUM_REG, 1, &checksum); 160 160 if (ret_val) 161 161 hw_dbg("NVM Write Error while updating checksum.\n");
+2 -2
drivers/net/ethernet/intel/ixgbe/ixgbe_common.c
··· 1739 1739 } 1740 1740 } 1741 1741 1742 - checksum = (u16)IXGBE_EEPROM_SUM - checksum; 1742 + checksum = IXGBE_EEPROM_SUM - checksum; 1743 1743 1744 - return (int)checksum; 1744 + return checksum; 1745 1745 } 1746 1746 1747 1747 /**
+52 -42
drivers/net/ethernet/intel/ixgbe/ixgbe_e610.c
··· 1953 1953 phy_type_low & IXGBE_PHY_TYPE_LOW_1G_SGMII || 1954 1954 phy_type_high & IXGBE_PHY_TYPE_HIGH_1G_USXGMII) 1955 1955 hw->phy.speeds_supported |= IXGBE_LINK_SPEED_1GB_FULL; 1956 + if (phy_type_low & IXGBE_PHY_TYPE_LOW_2500BASE_T || 1957 + phy_type_low & IXGBE_PHY_TYPE_LOW_2500BASE_X || 1958 + phy_type_low & IXGBE_PHY_TYPE_LOW_2500BASE_KX || 1959 + phy_type_high & IXGBE_PHY_TYPE_HIGH_2500M_SGMII || 1960 + phy_type_high & IXGBE_PHY_TYPE_HIGH_2500M_USXGMII) 1961 + hw->phy.speeds_supported |= IXGBE_LINK_SPEED_2_5GB_FULL; 1962 + if (phy_type_low & IXGBE_PHY_TYPE_LOW_5GBASE_T || 1963 + phy_type_low & IXGBE_PHY_TYPE_LOW_5GBASE_KR || 1964 + phy_type_high & IXGBE_PHY_TYPE_HIGH_5G_USXGMII) 1965 + hw->phy.speeds_supported |= IXGBE_LINK_SPEED_5GB_FULL; 1956 1966 if (phy_type_low & IXGBE_PHY_TYPE_LOW_10GBASE_T || 1957 1967 phy_type_low & IXGBE_PHY_TYPE_LOW_10G_SFI_DA || 1958 1968 phy_type_low & IXGBE_PHY_TYPE_LOW_10GBASE_SR || ··· 1973 1963 phy_type_high & IXGBE_PHY_TYPE_HIGH_10G_USXGMII) 1974 1964 hw->phy.speeds_supported |= IXGBE_LINK_SPEED_10GB_FULL; 1975 1965 1976 - /* 2.5 and 5 Gbps link speeds must be excluded from the 1977 - * auto-negotiation set used during driver initialization due to 1978 - * compatibility issues with certain switches. Those issues do not 1979 - * exist in case of E610 2.5G SKU device (0x57b1). 1980 - */ 1981 - if (!hw->phy.autoneg_advertised && 1982 - hw->device_id != IXGBE_DEV_ID_E610_2_5G_T) 1966 + /* Initialize autoneg speeds */ 1967 + if (!hw->phy.autoneg_advertised) 1983 1968 hw->phy.autoneg_advertised = hw->phy.speeds_supported; 1984 - 1985 - if (phy_type_low & IXGBE_PHY_TYPE_LOW_2500BASE_T || 1986 - phy_type_low & IXGBE_PHY_TYPE_LOW_2500BASE_X || 1987 - phy_type_low & IXGBE_PHY_TYPE_LOW_2500BASE_KX || 1988 - phy_type_high & IXGBE_PHY_TYPE_HIGH_2500M_SGMII || 1989 - phy_type_high & IXGBE_PHY_TYPE_HIGH_2500M_USXGMII) 1990 - hw->phy.speeds_supported |= IXGBE_LINK_SPEED_2_5GB_FULL; 1991 - 1992 - if (!hw->phy.autoneg_advertised && 1993 - hw->device_id == IXGBE_DEV_ID_E610_2_5G_T) 1994 - hw->phy.autoneg_advertised = hw->phy.speeds_supported; 1995 - 1996 - if (phy_type_low & IXGBE_PHY_TYPE_LOW_5GBASE_T || 1997 - phy_type_low & IXGBE_PHY_TYPE_LOW_5GBASE_KR || 1998 - phy_type_high & IXGBE_PHY_TYPE_HIGH_5G_USXGMII) 1999 - hw->phy.speeds_supported |= IXGBE_LINK_SPEED_5GB_FULL; 2000 1969 2001 1970 /* Set PHY ID */ 2002 1971 memcpy(&hw->phy.id, pcaps.phy_id_oui, sizeof(u32)); ··· 2997 3008 * Searches through the Option ROM flash contents to locate the CIVD data for 2998 3009 * the image. 2999 3010 * 3000 - * Return: the exit code of the operation. 3011 + * Return: -ENOMEM when cannot allocate memory, -EDOM for checksum violation, 3012 + * -ENODATA when cannot find proper data, -EIO for faulty read or 3013 + * 0 on success. 3014 + * 3015 + * On success @civd stores collected data. 3001 3016 */ 3002 3017 static int 3003 3018 ixgbe_get_orom_civd_data(struct ixgbe_hw *hw, enum ixgbe_bank_select bank, 3004 3019 struct ixgbe_orom_civd_info *civd) 3005 3020 { 3006 - struct ixgbe_orom_civd_info tmp; 3021 + u32 orom_size = hw->flash.banks.orom_size; 3022 + u8 *orom_data; 3007 3023 u32 offset; 3008 3024 int err; 3025 + 3026 + orom_data = kzalloc(orom_size, GFP_KERNEL); 3027 + if (!orom_data) 3028 + return -ENOMEM; 3029 + 3030 + err = ixgbe_read_flash_module(hw, bank, 3031 + IXGBE_E610_SR_1ST_OROM_BANK_PTR, 0, 3032 + orom_data, orom_size); 3033 + if (err) { 3034 + err = -EIO; 3035 + goto cleanup; 3036 + } 3009 3037 3010 3038 /* The CIVD section is located in the Option ROM aligned to 512 bytes. 3011 3039 * The first 4 bytes must contain the ASCII characters "$CIV". 3012 3040 * A simple modulo 256 sum of all of the bytes of the structure must 3013 3041 * equal 0. 3014 3042 */ 3015 - for (offset = 0; (offset + SZ_512) <= hw->flash.banks.orom_size; 3016 - offset += SZ_512) { 3043 + for (offset = 0; offset + SZ_512 <= orom_size; offset += SZ_512) { 3044 + struct ixgbe_orom_civd_info *tmp; 3017 3045 u8 sum = 0; 3018 3046 u32 i; 3019 3047 3020 - err = ixgbe_read_flash_module(hw, bank, 3021 - IXGBE_E610_SR_1ST_OROM_BANK_PTR, 3022 - offset, 3023 - (u8 *)&tmp, sizeof(tmp)); 3024 - if (err) 3025 - return err; 3048 + BUILD_BUG_ON(sizeof(*tmp) > SZ_512); 3049 + 3050 + tmp = (struct ixgbe_orom_civd_info *)&orom_data[offset]; 3026 3051 3027 3052 /* Skip forward until we find a matching signature */ 3028 - if (memcmp(IXGBE_OROM_CIV_SIGNATURE, tmp.signature, 3029 - sizeof(tmp.signature))) 3053 + if (memcmp(IXGBE_OROM_CIV_SIGNATURE, tmp->signature, 3054 + sizeof(tmp->signature))) 3030 3055 continue; 3031 3056 3032 3057 /* Verify that the simple checksum is zero */ 3033 - for (i = 0; i < sizeof(tmp); i++) 3034 - sum += ((u8 *)&tmp)[i]; 3058 + for (i = 0; i < sizeof(*tmp); i++) 3059 + sum += ((u8 *)tmp)[i]; 3035 3060 3036 - if (sum) 3037 - return -EDOM; 3061 + if (sum) { 3062 + err = -EDOM; 3063 + goto cleanup; 3064 + } 3038 3065 3039 - *civd = tmp; 3040 - return 0; 3066 + *civd = *tmp; 3067 + err = 0; 3068 + 3069 + goto cleanup; 3041 3070 } 3042 3071 3043 - return -ENODATA; 3072 + err = -ENODATA; 3073 + cleanup: 3074 + kfree(orom_data); 3075 + return err; 3044 3076 } 3045 3077 3046 3078 /**
+2 -2
drivers/net/ethernet/intel/ixgbe/ixgbe_x540.c
··· 373 373 } 374 374 } 375 375 376 - checksum = (u16)IXGBE_EEPROM_SUM - checksum; 376 + checksum = IXGBE_EEPROM_SUM - checksum; 377 377 378 - return (int)checksum; 378 + return checksum; 379 379 } 380 380 381 381 /**
+2 -2
drivers/net/ethernet/intel/ixgbe/ixgbe_x550.c
··· 1060 1060 return status; 1061 1061 } 1062 1062 1063 - checksum = (u16)IXGBE_EEPROM_SUM - checksum; 1063 + checksum = IXGBE_EEPROM_SUM - checksum; 1064 1064 1065 - return (int)checksum; 1065 + return checksum; 1066 1066 } 1067 1067 1068 1068 /** ixgbe_calc_eeprom_checksum_X550 - Calculates and returns the checksum