The x550 MDIO clock speed must be configured prior to first MDIO read or
write. The default MDIO clock speed is not valid, therefore the driver
is configuring a valid speed prior to reading the copper PHY device id.

Signed-off-by: Wenzhuo Lu <wenzhuo.lu at intel.com>
---
 drivers/net/ixgbe/base/ixgbe_x550.c | 16 +++++++---------
 1 file changed, 7 insertions(+), 9 deletions(-)

diff --git a/drivers/net/ixgbe/base/ixgbe_x550.c 
b/drivers/net/ixgbe/base/ixgbe_x550.c
index d3387b6..6061b37 100644
--- a/drivers/net/ixgbe/base/ixgbe_x550.c
+++ b/drivers/net/ixgbe/base/ixgbe_x550.c
@@ -1539,9 +1539,14 @@ s32 ixgbe_reset_hw_X550em(struct ixgbe_hw *hw)
        /* flush pending Tx transactions */
        ixgbe_clear_tx_pending(hw);

-       /* PHY ops must be identified and initialized prior to reset */
+       if (hw->device_id == IXGBE_DEV_ID_X550EM_X_10G_T) {
+               /* Config MDIO clock speed before the first MDIO PHY access */
+               hlreg0 = IXGBE_READ_REG(hw, IXGBE_HLREG0);
+               hlreg0 &= ~IXGBE_HLREG0_MDCSPD;
+               IXGBE_WRITE_REG(hw, IXGBE_HLREG0, hlreg0);
+       }

-       /* Identify PHY and related function pointers */
+       /* PHY ops must be identified and initialized prior to reset */
        status = hw->phy.ops.init(hw);

        if (status == IXGBE_ERR_SFP_NOT_SUPPORTED)
@@ -1618,13 +1623,6 @@ mac_reset_top:
        hw->mac.num_rar_entries = 128;
        hw->mac.ops.init_rx_addrs(hw);

-       if (hw->device_id == IXGBE_DEV_ID_X550EM_X_10G_T) {
-               /* Config MDIO clock speed. */
-               hlreg0 = IXGBE_READ_REG(hw, IXGBE_HLREG0);
-               hlreg0 &= ~IXGBE_HLREG0_MDCSPD;
-               IXGBE_WRITE_REG(hw, IXGBE_HLREG0, hlreg0);
-       }
-
        if (hw->device_id == IXGBE_DEV_ID_X550EM_X_SFP)
                ixgbe_setup_mux_ctl(hw);

-- 
1.9.3

Reply via email to