mirror of
https://github.com/torvalds/linux.git
synced 2026-05-31 02:24:24 +02:00
net: stmmac: qcom-ethqos: convert to use phy_set_mode_ext()
qcom-sgmii-eth now accepts the phy_set_mode*() calls to configure the SerDes, taking a PHY interface mode rather than a speed. This allows the elimination of the interface mode to speed conversion in ethqos_mac_finish_serdes(). Tested-by: Mohd Ayaan Anwar <mohd.anwar@oss.qualcomm.com> Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk> Reviewed-by: Mohd Ayaan Anwar <mohd.anwar@oss.qualcomm.com> Link: https://patch.msgid.link/E1vxS44-0000000BQXU-38lG@rmk-PC.armlinux.org.uk Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
fc8ca5da89
commit
4999e0a2ab
|
|
@ -105,7 +105,7 @@ struct qcom_ethqos {
|
|||
|
||||
struct clk *link_clk;
|
||||
struct phy *serdes_phy;
|
||||
int serdes_speed;
|
||||
phy_interface_t serdes_mode;
|
||||
phy_interface_t phy_mode;
|
||||
|
||||
const struct ethqos_emac_por *rgmii_por;
|
||||
|
|
@ -653,7 +653,8 @@ static int qcom_ethqos_serdes_powerup(struct net_device *ndev, void *priv)
|
|||
return ret;
|
||||
}
|
||||
|
||||
ret = phy_set_speed(ethqos->serdes_phy, ethqos->serdes_speed);
|
||||
ret = phy_set_mode_ext(ethqos->serdes_phy, PHY_MODE_ETHERNET,
|
||||
ethqos->serdes_mode);
|
||||
if (ret) {
|
||||
phy_power_off(ethqos->serdes_phy);
|
||||
phy_exit(ethqos->serdes_phy);
|
||||
|
|
@ -675,20 +676,16 @@ static int ethqos_mac_finish_serdes(struct net_device *ndev, void *priv,
|
|||
phy_interface_t interface)
|
||||
{
|
||||
struct qcom_ethqos *ethqos = priv;
|
||||
int speed, ret = 0;
|
||||
int ret = 0;
|
||||
|
||||
qcom_ethqos_set_sgmii_loopback(ethqos, false);
|
||||
|
||||
speed = SPEED_UNKNOWN;
|
||||
if (interface == PHY_INTERFACE_MODE_SGMII)
|
||||
speed = SPEED_1000;
|
||||
else if (interface == PHY_INTERFACE_MODE_2500BASEX)
|
||||
speed = SPEED_2500;
|
||||
|
||||
if (speed != SPEED_UNKNOWN && speed != ethqos->serdes_speed) {
|
||||
ret = phy_set_speed(ethqos->serdes_phy, speed);
|
||||
if (interface == PHY_INTERFACE_MODE_SGMII ||
|
||||
interface == PHY_INTERFACE_MODE_2500BASEX) {
|
||||
ret = phy_set_mode_ext(ethqos->serdes_phy, PHY_MODE_ETHERNET,
|
||||
interface);
|
||||
if (ret == 0)
|
||||
ethqos->serdes_speed = speed;
|
||||
ethqos->serdes_mode = interface;
|
||||
}
|
||||
|
||||
return ret;
|
||||
|
|
@ -819,7 +816,6 @@ static int qcom_ethqos_probe(struct platform_device *pdev)
|
|||
return dev_err_probe(dev, PTR_ERR(ethqos->serdes_phy),
|
||||
"Failed to get serdes phy\n");
|
||||
|
||||
ethqos->serdes_speed = SPEED_1000;
|
||||
ethqos_set_clk_tx_rate(ethqos, NULL, plat_dat->phy_interface,
|
||||
SPEED_1000);
|
||||
|
||||
|
|
@ -843,6 +839,7 @@ static int qcom_ethqos_probe(struct platform_device *pdev)
|
|||
plat_dat->host_dma_width = data->dma_addr_width;
|
||||
|
||||
if (ethqos->serdes_phy) {
|
||||
ethqos->serdes_mode = PHY_INTERFACE_MODE_SGMII;
|
||||
plat_dat->serdes_powerup = qcom_ethqos_serdes_powerup;
|
||||
plat_dat->serdes_powerdown = qcom_ethqos_serdes_powerdown;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user