Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 219c6efe authored by Matt Carlson's avatar Matt Carlson Committed by David S. Miller
Browse files

broadcom: Fix slow link problem



When a 50610 or 50610M is paired against particular remote partners,
link is slow to come up.  This patch works around the problem.

Signed-off-by: default avatarMatt Carlson <mcarlson@broadcom.com>
Reviewed-by: default avatarMichael Chan <mchan@broadcom.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 47b1b53b
Loading
Loading
Loading
Loading
+14 −8
Original line number Original line Diff line number Diff line
@@ -242,12 +242,6 @@ static int bcm50610_a0_workaround(struct phy_device *phydev)
{
{
	int err;
	int err;


	err = bcm54xx_exp_write(phydev, MII_BCM54XX_EXP_EXP08,
				MII_BCM54XX_EXP_EXP08_RJCT_2MHZ	|
				MII_BCM54XX_EXP_EXP08_EARLY_DAC_WAKE);
	if (err < 0)
		return err;

	err = bcm54xx_exp_write(phydev, MII_BCM54XX_EXP_AADJ1CH0,
	err = bcm54xx_exp_write(phydev, MII_BCM54XX_EXP_AADJ1CH0,
				MII_BCM54XX_EXP_AADJ1CH0_SWP_ABCD_OEN |
				MII_BCM54XX_EXP_AADJ1CH0_SWP_ABCD_OEN |
				MII_BCM54XX_EXP_AADJ1CH0_SWSEL_THPF);
				MII_BCM54XX_EXP_AADJ1CH0_SWSEL_THPF);
@@ -287,8 +281,20 @@ static int bcm54xx_phydsp_config(struct phy_device *phydev)
	if (err < 0)
	if (err < 0)
		return err;
		return err;


	if (phydev->drv->phy_id == PHY_ID_BCM50610)
	if (BRCM_PHY_MODEL(phydev) == PHY_ID_BCM50610 ||
	    BRCM_PHY_MODEL(phydev) == PHY_ID_BCM50610M) {
		/* Clear bit 9 to fix a phy interop issue. */
		err = bcm54xx_exp_write(phydev, MII_BCM54XX_EXP_EXP08,
					MII_BCM54XX_EXP_EXP08_RJCT_2MHZ);
		if (err < 0)
			goto error;

		if (phydev->drv->phy_id == PHY_ID_BCM50610) {
			err = bcm50610_a0_workaround(phydev);
			err = bcm50610_a0_workaround(phydev);
			if (err < 0)
				goto error;
		}
	}


	if (BRCM_PHY_MODEL(phydev) == PHY_ID_BCM57780) {
	if (BRCM_PHY_MODEL(phydev) == PHY_ID_BCM57780) {
		int val;
		int val;