Convert qcom-ethqos to use the dwmac core's generic SerDes support, which will handle SerDes initialisation, powering, and mode setting. Note that generic support requires the SerDes to support phy_validate() in order to probe which PHY interface modes are supported, and phy_set_mode_ext() to configure the appropriate PHY interface mode (and thus the speed.) Signed-off-by: Russell King (Oracle) --- .../stmicro/stmmac/dwmac-qcom-ethqos.c | 50 ++----------------- 1 file changed, 3 insertions(+), 47 deletions(-) diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c index 80ea69fc8ee5..a0b893d3fbd4 100644 --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c @@ -103,8 +103,6 @@ struct qcom_ethqos { int (*configure_func)(struct qcom_ethqos *ethqos, int speed); struct clk *link_clk; - struct phy *serdes_phy; - int serdes_speed; phy_interface_t phy_mode; const struct ethqos_emac_por *por; @@ -584,14 +582,6 @@ static int ethqos_configure_rgmii(struct qcom_ethqos *ethqos, int speed) return 0; } -static void ethqos_set_serdes_speed(struct qcom_ethqos *ethqos, int speed) -{ - if (ethqos->serdes_speed != speed) { - phy_set_speed(ethqos->serdes_phy, speed); - ethqos->serdes_speed = speed; - } -} - static void ethqos_pcs_set_inband(struct stmmac_priv *priv, bool enable) { stmmac_pcs_ctrl_ane(priv, enable, 0); @@ -609,17 +599,14 @@ static int ethqos_configure_sgmii(struct qcom_ethqos *ethqos, int speed) case SPEED_2500: rgmii_setmask(ethqos, RGMII_CONFIG2_RGMII_CLK_SEL_CFG, RGMII_IO_MACRO_CONFIG2); - ethqos_set_serdes_speed(ethqos, SPEED_2500); ethqos_pcs_set_inband(priv, false); break; case SPEED_1000: rgmii_setmask(ethqos, RGMII_CONFIG2_RGMII_CLK_SEL_CFG, RGMII_IO_MACRO_CONFIG2); - ethqos_set_serdes_speed(ethqos, SPEED_1000); ethqos_pcs_set_inband(priv, true); break; case SPEED_100: - ethqos_set_serdes_speed(ethqos, SPEED_1000); ethqos_pcs_set_inband(priv, true); break; case SPEED_10: @@ -627,7 +614,6 @@ static int ethqos_configure_sgmii(struct qcom_ethqos *ethqos, int speed) FIELD_PREP(RGMII_CONFIG_SGMII_CLK_DVDR, SGMII_10M_RX_CLK_DVDR), RGMII_IO_MACRO_CONFIG); - ethqos_set_serdes_speed(ethqos, SPEED_1000); ethqos_pcs_set_inband(priv, true); break; } @@ -648,30 +634,6 @@ static void ethqos_fix_mac_speed(void *priv, int speed, unsigned int mode) ethqos_configure(ethqos, speed); } -static int qcom_ethqos_serdes_powerup(struct net_device *ndev, void *priv) -{ - struct qcom_ethqos *ethqos = priv; - int ret; - - ret = phy_init(ethqos->serdes_phy); - if (ret) - return ret; - - ret = phy_power_on(ethqos->serdes_phy); - if (ret) - return ret; - - return phy_set_speed(ethqos->serdes_phy, ethqos->serdes_speed); -} - -static void qcom_ethqos_serdes_powerdown(struct net_device *ndev, void *priv) -{ - struct qcom_ethqos *ethqos = priv; - - phy_power_off(ethqos->serdes_phy); - phy_exit(ethqos->serdes_phy); -} - static int ethqos_clks_config(void *priv, bool enabled) { struct qcom_ethqos *ethqos = priv; @@ -790,12 +752,11 @@ static int qcom_ethqos_probe(struct platform_device *pdev) if (ret) return ret; - ethqos->serdes_phy = devm_phy_optional_get(dev, "serdes"); - if (IS_ERR(ethqos->serdes_phy)) - return dev_err_probe(dev, PTR_ERR(ethqos->serdes_phy), + plat_dat->serdes = devm_phy_optional_get(dev, "serdes"); + if (IS_ERR(plat_dat->serdes)) + return dev_err_probe(dev, PTR_ERR(plat_dat->serdes), "Failed to get serdes phy\n"); - ethqos->serdes_speed = SPEED_1000; ethqos_set_clk_tx_rate(ethqos, NULL, plat_dat->phy_interface, SPEED_1000); ethqos_set_func_clk_en(ethqos); @@ -816,11 +777,6 @@ static int qcom_ethqos_probe(struct platform_device *pdev) if (data->dma_addr_width) plat_dat->host_dma_width = data->dma_addr_width; - if (ethqos->serdes_phy) { - plat_dat->serdes_powerup = qcom_ethqos_serdes_powerup; - plat_dat->serdes_powerdown = qcom_ethqos_serdes_powerdown; - } - /* Enable TSO on queue0 and enable TBS on rest of the queues */ for (i = 1; i < plat_dat->tx_queues_to_use; i++) plat_dat->tx_queues_cfg[i].tbs_en = 1; -- 2.47.3