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

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

Fixes: 97a89ed101 ("net: phy: mxl-gpy: disable interrupts on GPY215 by default")
Signed-off-by: Xu Liang <lxu@maxlinear.com>
Reviewed-by: Simon Horman <simon.horman@corigine.com>
Link: https://lore.kernel.org/r/20230531074822.39136-1-lxu@maxlinear.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
Xu Liang 2023-05-31 15:48:22 +08:00 committed by Jakub Kicinski
parent a60caf039e
commit 519d648764
1 changed files with 3 additions and 13 deletions

View File

@ -274,13 +274,6 @@ static int gpy_config_init(struct phy_device *phydev)
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)
{
struct device *dev = &phydev->mdio.dev;
@ -300,8 +293,7 @@ static int gpy_probe(struct phy_device *phydev)
phydev->priv = priv;
mutex_init(&priv->mbox_lock);
if (gpy_has_broken_mdint(phydev) &&
!device_property_present(dev, "maxlinear,use-broken-interrupts"))
if (!device_property_present(dev, "maxlinear,use-broken-interrupts"))
phydev->dev_flags |= PHY_F_NO_IRQ;
fw_version = phy_read(phydev, PHY_FWV);
@ -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
* harm.
* It was observed that this bug happens on link state and link speed
* changes on a GPY215B and GYP215C independent of the firmware version
* (which doesn't mean that this list is exhaustive).
* changes independent of the firmware version.
*/
if (gpy_has_broken_mdint(phydev) &&
(reg & (PHY_IMASK_LSTC | PHY_IMASK_LSPC))) {
if (reg & (PHY_IMASK_LSTC | PHY_IMASK_LSPC)) {
reg = gpy_mbox_read(phydev, REG_GPIO0_OUT);
if (reg < 0) {
phy_error(phydev);