Commit a729b8e6 authored by Jakub Kicinski's avatar Jakub Kicinski

Merge branch 'fixes-for-yt8511-phy-driver'

Peter Geis says:

====================
fixes for yt8511 phy driver

The Intel clang bot caught a few uninitialized variables in the new
Motorcomm driver. While investigating the issue, it was found that the
driver would have unintended effects when used in an unsupported mode.

Fixed the uninitialized ret variable and abort loading the driver in
unsupported modes.
====================

Link: https://lore.kernel.org/r/20210529110556.202531-1-pgwipeout@gmail.comSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parents 8b97f36a 0cc8bddb
...@@ -50,18 +50,13 @@ static int yt8511_write_page(struct phy_device *phydev, int page) ...@@ -50,18 +50,13 @@ static int yt8511_write_page(struct phy_device *phydev, int page)
static int yt8511_config_init(struct phy_device *phydev) static int yt8511_config_init(struct phy_device *phydev)
{ {
int oldpage, ret = 0;
unsigned int ge, fe; unsigned int ge, fe;
int ret, oldpage;
/* set clock mode to 125mhz */
oldpage = phy_select_page(phydev, YT8511_EXT_CLK_GATE); oldpage = phy_select_page(phydev, YT8511_EXT_CLK_GATE);
if (oldpage < 0) if (oldpage < 0)
goto err_restore_page; goto err_restore_page;
ret = __phy_modify(phydev, YT8511_PAGE, 0, YT8511_CLK_125M);
if (ret < 0)
goto err_restore_page;
/* set rgmii delay mode */ /* set rgmii delay mode */
switch (phydev->interface) { switch (phydev->interface) {
case PHY_INTERFACE_MODE_RGMII: case PHY_INTERFACE_MODE_RGMII:
...@@ -80,14 +75,20 @@ static int yt8511_config_init(struct phy_device *phydev) ...@@ -80,14 +75,20 @@ static int yt8511_config_init(struct phy_device *phydev)
ge = YT8511_DELAY_RX | YT8511_DELAY_GE_TX_EN; ge = YT8511_DELAY_RX | YT8511_DELAY_GE_TX_EN;
fe = YT8511_DELAY_FE_TX_EN; fe = YT8511_DELAY_FE_TX_EN;
break; break;
default: /* leave everything alone in other modes */ default: /* do not support other modes */
break; ret = -EOPNOTSUPP;
goto err_restore_page;
} }
ret = __phy_modify(phydev, YT8511_PAGE, (YT8511_DELAY_RX | YT8511_DELAY_GE_TX_EN), ge); ret = __phy_modify(phydev, YT8511_PAGE, (YT8511_DELAY_RX | YT8511_DELAY_GE_TX_EN), ge);
if (ret < 0) if (ret < 0)
goto err_restore_page; goto err_restore_page;
/* set clock mode to 125mhz */
ret = __phy_modify(phydev, YT8511_PAGE, 0, YT8511_CLK_125M);
if (ret < 0)
goto err_restore_page;
/* fast ethernet delay is in a separate page */ /* fast ethernet delay is in a separate page */
ret = __phy_write(phydev, YT8511_PAGE_SELECT, YT8511_EXT_DELAY_DRIVE); ret = __phy_write(phydev, YT8511_PAGE_SELECT, YT8511_EXT_DELAY_DRIVE);
if (ret < 0) if (ret < 0)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment