Skip to content

Commit

Permalink
net: marvell: Add separate config ANEG function for Marvell 88E1111
Browse files Browse the repository at this point in the history
Marvell 88E1111 currently uses the generic marvell config ANEG function.
This function has a sequence accessing Page 5 and Register 31,
both of which are not defined or reserved for this PHY.
Hence this patch adds a new config ANEG function for Marvell 88E1111
without these erroneous accesses.

Signed-off-by: Harini Katakam <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
  • Loading branch information
harini-katakam authored and davem330 committed Jun 29, 2016
1 parent d10f0b3 commit 3ec0a0f
Showing 1 changed file with 43 additions and 1 deletion.
44 changes: 43 additions & 1 deletion drivers/net/phy/marvell.c
Original file line number Diff line number Diff line change
Expand Up @@ -285,6 +285,48 @@ static int marvell_config_aneg(struct phy_device *phydev)
return 0;
}

static int m88e1111_config_aneg(struct phy_device *phydev)
{
int err;

/* The Marvell PHY has an errata which requires
* that certain registers get written in order
* to restart autonegotiation
*/
err = phy_write(phydev, MII_BMCR, BMCR_RESET);

err = marvell_set_polarity(phydev, phydev->mdix);
if (err < 0)
return err;

err = phy_write(phydev, MII_M1111_PHY_LED_CONTROL,
MII_M1111_PHY_LED_DIRECT);
if (err < 0)
return err;

err = genphy_config_aneg(phydev);
if (err < 0)
return err;

if (phydev->autoneg != AUTONEG_ENABLE) {
int bmcr;

/* A write to speed/duplex bits (that is performed by
* genphy_config_aneg() call above) must be followed by
* a software reset. Otherwise, the write has no effect.
*/
bmcr = phy_read(phydev, MII_BMCR);
if (bmcr < 0)
return bmcr;

err = phy_write(phydev, MII_BMCR, bmcr | BMCR_RESET);
if (err < 0)
return err;
}

return 0;
}

#ifdef CONFIG_OF_MDIO
/*
* Set and/or override some configuration registers based on the
Expand Down Expand Up @@ -1175,7 +1217,7 @@ static struct phy_driver marvell_drivers[] = {
.flags = PHY_HAS_INTERRUPT,
.probe = marvell_probe,
.config_init = &m88e1111_config_init,
.config_aneg = &marvell_config_aneg,
.config_aneg = &m88e1111_config_aneg,
.read_status = &marvell_read_status,
.ack_interrupt = &marvell_ack_interrupt,
.config_intr = &marvell_config_intr,
Expand Down

0 comments on commit 3ec0a0f

Please sign in to comment.