ixgbe: fix media type detection for E610 device
authorPiotr Kwapulinski <piotr.kwapulinski@intel.com>
Fri, 21 Feb 2025 15:49:17 +0000 (16:49 +0100)
committerTony Nguyen <anthony.l.nguyen@intel.com>
Wed, 2 Apr 2025 15:51:41 +0000 (08:51 -0700)
The commit 23c0e5a16bcc ("ixgbe: Add link management support for E610
device") introduced incorrect media type detection for E610 device. It
reproduces when advertised speed is modified after driver reload. Clear
the previous outdated PHY type high value.

Reproduction steps:
modprobe ixgbe
ethtool -s eth0 advertise 0x1000000000000
modprobe -r ixgbe
modprobe ixgbe
ethtool -s eth0 advertise 0x1000000000000
Result before the fix:
netlink error: link settings update failed
netlink error: Invalid argument
Result after the fix:
No output error

Fixes: 23c0e5a16bcc ("ixgbe: Add link management support for E610 device")
Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com>
Reviewed-by: Paul Menzel <pmenzel@molgen.mpg.de>
Signed-off-by: Piotr Kwapulinski <piotr.kwapulinski@intel.com>
Reviewed-by: Simon Horman <horms@kernel.org>
Tested-by: Bharath R <bharath.r@intel.com>
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
drivers/net/ethernet/intel/ixgbe/ixgbe_e610.c

index cb07ecd8937d34840acc2dfd3e517f6f2c2ba5eb..00935747c8c5516c75e2828b6498c3eed7e7c7c8 100644 (file)
@@ -1453,9 +1453,11 @@ enum ixgbe_media_type ixgbe_get_media_type_e610(struct ixgbe_hw *hw)
                        hw->link.link_info.phy_type_low = 0;
                } else {
                        highest_bit = fls64(le64_to_cpu(pcaps.phy_type_low));
-                       if (highest_bit)
+                       if (highest_bit) {
                                hw->link.link_info.phy_type_low =
                                        BIT_ULL(highest_bit - 1);
+                               hw->link.link_info.phy_type_high = 0;
+                       }
                }
        }