123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- From: Timur Tabi <timur@codeaurora.org>
- Date: Tue, 26 Apr 2016 12:44:18 -0500
- Subject: [PATCH] net: phy: at803x: only the AT8030 needs a hardware reset on
- link change
- Commit 13a56b44 ("at803x: Add support for hardware reset") added a
- work-around for a hardware bug on the AT8030. However, the work-around
- was being called for all 803x PHYs, even those that don't need it.
- Function at803x_link_change_notify() checks to make sure that it only
- resets the PHY on the 8030, but it makes more sense to not call that
- function at all if it isn't needed.
- Signed-off-by: Timur Tabi <timur@codeaurora.org>
- Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
- Signed-off-by: David S. Miller <davem@davemloft.net>
- ---
- --- a/drivers/net/phy/at803x.c
- +++ b/drivers/net/phy/at803x.c
- @@ -374,27 +374,25 @@ static void at803x_link_change_notify(st
- * in the FIFO. In such cases, the FIFO enters an error mode it
- * cannot recover from by software.
- */
- - if (phydev->drv->phy_id == ATH8030_PHY_ID) {
- - if (phydev->state == PHY_NOLINK) {
- - if (priv->gpiod_reset && !priv->phy_reset) {
- - struct at803x_context context;
- -
- - at803x_context_save(phydev, &context);
- -
- - gpiod_set_value(priv->gpiod_reset, 1);
- - msleep(1);
- - gpiod_set_value(priv->gpiod_reset, 0);
- - msleep(1);
- -
- - at803x_context_restore(phydev, &context);
- -
- - dev_dbg(&phydev->dev, "%s(): phy was reset\n",
- - __func__);
- - priv->phy_reset = true;
- - }
- - } else {
- - priv->phy_reset = false;
- + if (phydev->state == PHY_NOLINK) {
- + if (priv->gpiod_reset && !priv->phy_reset) {
- + struct at803x_context context;
- +
- + at803x_context_save(phydev, &context);
- +
- + gpiod_set_value(priv->gpiod_reset, 1);
- + msleep(1);
- + gpiod_set_value(priv->gpiod_reset, 0);
- + msleep(1);
- +
- + at803x_context_restore(phydev, &context);
- +
- + dev_dbg(&phydev->dev, "%s(): phy was reset\n",
- + __func__);
- + priv->phy_reset = true;
- }
- + } else {
- + priv->phy_reset = false;
- }
- if (pdata && pdata->fixup_rgmii_tx_delay &&
- phydev->speed != priv->prev_speed) {
- @@ -426,7 +424,6 @@ static struct phy_driver at803x_driver[]
- .phy_id_mask = AT803X_PHY_ID_MASK,
- .probe = at803x_probe,
- .config_init = at803x_config_init,
- - .link_change_notify = at803x_link_change_notify,
- .set_wol = at803x_set_wol,
- .get_wol = at803x_get_wol,
- .suspend = at803x_suspend,
- @@ -468,7 +465,6 @@ static struct phy_driver at803x_driver[]
- .phy_id_mask = AT803X_PHY_ID_MASK,
- .probe = at803x_probe,
- .config_init = at803x_config_init,
- - .link_change_notify = at803x_link_change_notify,
- .set_wol = at803x_set_wol,
- .get_wol = at803x_get_wol,
- .suspend = at803x_suspend,
|