diff options
| author | Russell King (Oracle) <rmk+kernel@armlinux.org.uk> | 2026-02-06 17:19:21 +0000 |
|---|---|---|
| committer | Jakub Kicinski <kuba@kernel.org> | 2026-02-10 20:22:05 -0800 |
| commit | 3a4687366148a58017997a750f85631292c22b3e (patch) | |
| tree | cc32ccce9454aa2508636101869589d10efc4f36 /drivers | |
| parent | dc010e1b4bb63d7b24854a3a332c97a78fad15d7 (diff) | |
| download | linux-next-3a4687366148a58017997a750f85631292c22b3e.tar.gz linux-next-3a4687366148a58017997a750f85631292c22b3e.zip | |
net: stmmac: qcom-ethqos: fix qcom_ethqos_serdes_powerup()
Add cleanup for failure paths in qcom_ethqos_serdes_powerup(). This
was missing calling phy_exit() and phy_power_off() at appropriate
failure points.
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
Reviewed-by: Vadim Fedorenko <vadim.fedorenko@linux.dev>
Tested-by: Mohd Ayaan Anwar <mohd.anwar@oss.qualcomm.com>
Reviewed-by: Mohd Ayaan Anwar <mohd.anwar@oss.qualcomm.com>
Link: https://patch.msgid.link/E1voPUH-000000083ji-25FH@rmk-PC.armlinux.org.uk
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/net/ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c index 869f924f3cde..af8204c0e188 100644 --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c @@ -659,10 +659,18 @@ static int qcom_ethqos_serdes_powerup(struct net_device *ndev, void *priv) return ret; ret = phy_power_on(ethqos->serdes_phy); - if (ret) + if (ret) { + phy_exit(ethqos->serdes_phy); return ret; + } - return phy_set_speed(ethqos->serdes_phy, ethqos->serdes_speed); + ret = phy_set_speed(ethqos->serdes_phy, ethqos->serdes_speed); + if (ret) { + phy_power_off(ethqos->serdes_phy); + phy_exit(ethqos->serdes_phy); + } + + return ret; } static void qcom_ethqos_serdes_powerdown(struct net_device *ndev, void *priv) |
