net/ixgbe/base: fix PHY identification for x550a
authorWei Dai <wei.dai@intel.com>
Wed, 21 Dec 2016 09:47:48 +0000 (17:47 +0800)
committerFerruh Yigit <ferruh.yigit@intel.com>
Tue, 17 Jan 2017 18:40:51 +0000 (19:40 +0100)
Method to identify the CS4223/CS4227 is incorrect and unreliable.
Provide a new register to differentiate between these PHY SKUs.

Fixes: fc0559bdb5e3 ("net/ixgbe/base: add link MAC setup for X550a SFP+")

Signed-off-by: Wei Dai <wei.dai@intel.com>
drivers/net/ixgbe/base/ixgbe_phy.h
drivers/net/ixgbe/base/ixgbe_x550.c

index da14abc..816de36 100644 (file)
@@ -92,8 +92,9 @@ POSSIBILITY OF SUCH DAMAGE.
 #define IXGBE_CS4227_GLOBAL_ID_MSB     1
 #define IXGBE_CS4227_SCRATCH           2
 #define IXGBE_CS4227_GLOBAL_ID_VALUE   0x03E5
-#define IXGBE_CS4223_PHY_ID            0x7003  /* Quad port */
-#define IXGBE_CS4227_PHY_ID            0x3003  /* Dual port */
+#define IXGBE_CS4227_EFUSE_PDF_SKU     0x19F
+#define IXGBE_CS4223_SKU_ID            0x0010  /* Quad port */
+#define IXGBE_CS4227_SKU_ID            0x0014  /* Dual port */
 #define IXGBE_CS4227_RESET_PENDING     0x1357
 #define IXGBE_CS4227_RESET_COMPLETE    0x5AA5
 #define IXGBE_CS4227_RETRIES           15
index c1fac1a..f5143f9 100644 (file)
@@ -2927,8 +2927,8 @@ s32 ixgbe_setup_mac_link_sfp_x550a(struct ixgbe_hw *hw,
                        return IXGBE_ERR_PHY_ADDR_INVALID;
                }
 
-               /* Get external PHY device id */
-               ret_val = hw->phy.ops.read_reg(hw, IXGBE_CS4227_GLOBAL_ID_MSB,
+               /* Get external PHY SKU id */
+               ret_val = hw->phy.ops.read_reg(hw, IXGBE_CS4227_EFUSE_PDF_SKU,
                                        IXGBE_MDIO_ZERO_DEV_TYPE, &reg_phy_ext);
 
                if (ret_val != IXGBE_SUCCESS)
@@ -2937,7 +2937,7 @@ s32 ixgbe_setup_mac_link_sfp_x550a(struct ixgbe_hw *hw,
                /* When configuring quad port CS4223, the MAC instance is part
                 * of the slice offset.
                 */
-               if (reg_phy_ext == IXGBE_CS4223_PHY_ID)
+               if (reg_phy_ext == IXGBE_CS4223_SKU_ID)
                        slice_offset = (hw->bus.lan_id +
                                        (hw->bus.instance_id << 1)) << 12;
                else