Commit 519d6487 authored by Xu Liang's avatar Xu Liang Committed by Jakub Kicinski

net: phy: mxl-gpy: extend interrupt fix to all impacted variants

The interrupt fix in commit 97a89ed1 should be applied on all variants
of GPY2xx PHY and GPY115C.

Fixes: 97a89ed1 ("net: phy: mxl-gpy: disable interrupts on GPY215 by default")
Signed-off-by: default avatarXu Liang <lxu@maxlinear.com>
Reviewed-by: default avatarSimon Horman <simon.horman@corigine.com>
Link: https://lore.kernel.org/r/20230531074822.39136-1-lxu@maxlinear.comSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent a60caf03
...@@ -274,13 +274,6 @@ static int gpy_config_init(struct phy_device *phydev) ...@@ -274,13 +274,6 @@ static int gpy_config_init(struct phy_device *phydev)
return ret < 0 ? ret : 0; return ret < 0 ? ret : 0;
} }
static bool gpy_has_broken_mdint(struct phy_device *phydev)
{
/* At least these PHYs are known to have broken interrupt handling */
return phydev->drv->phy_id == PHY_ID_GPY215B ||
phydev->drv->phy_id == PHY_ID_GPY215C;
}
static int gpy_probe(struct phy_device *phydev) static int gpy_probe(struct phy_device *phydev)
{ {
struct device *dev = &phydev->mdio.dev; struct device *dev = &phydev->mdio.dev;
...@@ -300,8 +293,7 @@ static int gpy_probe(struct phy_device *phydev) ...@@ -300,8 +293,7 @@ static int gpy_probe(struct phy_device *phydev)
phydev->priv = priv; phydev->priv = priv;
mutex_init(&priv->mbox_lock); mutex_init(&priv->mbox_lock);
if (gpy_has_broken_mdint(phydev) && if (!device_property_present(dev, "maxlinear,use-broken-interrupts"))
!device_property_present(dev, "maxlinear,use-broken-interrupts"))
phydev->dev_flags |= PHY_F_NO_IRQ; phydev->dev_flags |= PHY_F_NO_IRQ;
fw_version = phy_read(phydev, PHY_FWV); fw_version = phy_read(phydev, PHY_FWV);
...@@ -659,11 +651,9 @@ static irqreturn_t gpy_handle_interrupt(struct phy_device *phydev) ...@@ -659,11 +651,9 @@ static irqreturn_t gpy_handle_interrupt(struct phy_device *phydev)
* frame. Therefore, polling is the best we can do and won't do any more * frame. Therefore, polling is the best we can do and won't do any more
* harm. * harm.
* It was observed that this bug happens on link state and link speed * It was observed that this bug happens on link state and link speed
* changes on a GPY215B and GYP215C independent of the firmware version * changes independent of the firmware version.
* (which doesn't mean that this list is exhaustive).
*/ */
if (gpy_has_broken_mdint(phydev) && if (reg & (PHY_IMASK_LSTC | PHY_IMASK_LSPC)) {
(reg & (PHY_IMASK_LSTC | PHY_IMASK_LSPC))) {
reg = gpy_mbox_read(phydev, REG_GPIO0_OUT); reg = gpy_mbox_read(phydev, REG_GPIO0_OUT);
if (reg < 0) { if (reg < 0) {
phy_error(phydev); phy_error(phydev);
......
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