diff options
-rw-r--r-- | drivers/net/ethernet/amd/xgbe/xgbe-dev.c | 2 | ||||
-rw-r--r-- | drivers/net/ethernet/amd/xgbe/xgbe-drv.c | 4 | ||||
-rw-r--r-- | drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c | 24 |
3 files changed, 27 insertions, 3 deletions
diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-dev.c b/drivers/net/ethernet/amd/xgbe/xgbe-dev.c index a7d16db5c4b2..937f37a5dcb2 100644 --- a/drivers/net/ethernet/amd/xgbe/xgbe-dev.c +++ b/drivers/net/ethernet/amd/xgbe/xgbe-dev.c | |||
@@ -1323,7 +1323,7 @@ static int xgbe_read_ext_mii_regs(struct xgbe_prv_data *pdata, int addr, | |||
1323 | static int xgbe_set_ext_mii_mode(struct xgbe_prv_data *pdata, unsigned int port, | 1323 | static int xgbe_set_ext_mii_mode(struct xgbe_prv_data *pdata, unsigned int port, |
1324 | enum xgbe_mdio_mode mode) | 1324 | enum xgbe_mdio_mode mode) |
1325 | { | 1325 | { |
1326 | unsigned int reg_val = 0; | 1326 | unsigned int reg_val = XGMAC_IOREAD(pdata, MAC_MDIOCL22R); |
1327 | 1327 | ||
1328 | switch (mode) { | 1328 | switch (mode) { |
1329 | case XGBE_MDIO_MODE_CL22: | 1329 | case XGBE_MDIO_MODE_CL22: |
diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-drv.c b/drivers/net/ethernet/amd/xgbe/xgbe-drv.c index 3aa457c8ca21..248f60d171a5 100644 --- a/drivers/net/ethernet/amd/xgbe/xgbe-drv.c +++ b/drivers/net/ethernet/amd/xgbe/xgbe-drv.c | |||
@@ -1131,12 +1131,12 @@ static void xgbe_stop(struct xgbe_prv_data *pdata) | |||
1131 | hw_if->disable_tx(pdata); | 1131 | hw_if->disable_tx(pdata); |
1132 | hw_if->disable_rx(pdata); | 1132 | hw_if->disable_rx(pdata); |
1133 | 1133 | ||
1134 | phy_if->phy_stop(pdata); | ||
1135 | |||
1134 | xgbe_free_irqs(pdata); | 1136 | xgbe_free_irqs(pdata); |
1135 | 1137 | ||
1136 | xgbe_napi_disable(pdata, 1); | 1138 | xgbe_napi_disable(pdata, 1); |
1137 | 1139 | ||
1138 | phy_if->phy_stop(pdata); | ||
1139 | |||
1140 | hw_if->exit(pdata); | 1140 | hw_if->exit(pdata); |
1141 | 1141 | ||
1142 | channel = pdata->channel; | 1142 | channel = pdata->channel; |
diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c b/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c index 9d8c953083b4..e707c49cc55a 100644 --- a/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c +++ b/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c | |||
@@ -716,6 +716,8 @@ static void xgbe_phy_sfp_phy_settings(struct xgbe_prv_data *pdata) | |||
716 | pdata->phy.duplex = DUPLEX_UNKNOWN; | 716 | pdata->phy.duplex = DUPLEX_UNKNOWN; |
717 | pdata->phy.autoneg = AUTONEG_ENABLE; | 717 | pdata->phy.autoneg = AUTONEG_ENABLE; |
718 | pdata->phy.advertising = pdata->phy.supported; | 718 | pdata->phy.advertising = pdata->phy.supported; |
719 | |||
720 | return; | ||
719 | } | 721 | } |
720 | 722 | ||
721 | pdata->phy.advertising &= ~ADVERTISED_Autoneg; | 723 | pdata->phy.advertising &= ~ADVERTISED_Autoneg; |
@@ -875,6 +877,16 @@ static int xgbe_phy_find_phy_device(struct xgbe_prv_data *pdata) | |||
875 | !phy_data->sfp_phy_avail) | 877 | !phy_data->sfp_phy_avail) |
876 | return 0; | 878 | return 0; |
877 | 879 | ||
880 | /* Set the proper MDIO mode for the PHY */ | ||
881 | ret = pdata->hw_if.set_ext_mii_mode(pdata, phy_data->mdio_addr, | ||
882 | phy_data->phydev_mode); | ||
883 | if (ret) { | ||
884 | netdev_err(pdata->netdev, | ||
885 | "mdio port/clause not compatible (%u/%u)\n", | ||
886 | phy_data->mdio_addr, phy_data->phydev_mode); | ||
887 | return ret; | ||
888 | } | ||
889 | |||
878 | /* Create and connect to the PHY device */ | 890 | /* Create and connect to the PHY device */ |
879 | phydev = get_phy_device(phy_data->mii, phy_data->mdio_addr, | 891 | phydev = get_phy_device(phy_data->mii, phy_data->mdio_addr, |
880 | (phy_data->phydev_mode == XGBE_MDIO_MODE_CL45)); | 892 | (phy_data->phydev_mode == XGBE_MDIO_MODE_CL45)); |
@@ -2722,6 +2734,18 @@ static int xgbe_phy_start(struct xgbe_prv_data *pdata) | |||
2722 | if (ret) | 2734 | if (ret) |
2723 | return ret; | 2735 | return ret; |
2724 | 2736 | ||
2737 | /* Set the proper MDIO mode for the re-driver */ | ||
2738 | if (phy_data->redrv && !phy_data->redrv_if) { | ||
2739 | ret = pdata->hw_if.set_ext_mii_mode(pdata, phy_data->redrv_addr, | ||
2740 | XGBE_MDIO_MODE_CL22); | ||
2741 | if (ret) { | ||
2742 | netdev_err(pdata->netdev, | ||
2743 | "redriver mdio port not compatible (%u)\n", | ||
2744 | phy_data->redrv_addr); | ||
2745 | return ret; | ||
2746 | } | ||
2747 | } | ||
2748 | |||
2725 | /* Start in highest supported mode */ | 2749 | /* Start in highest supported mode */ |
2726 | xgbe_phy_set_mode(pdata, phy_data->start_mode); | 2750 | xgbe_phy_set_mode(pdata, phy_data->start_mode); |
2727 | 2751 | ||