Commit a219912e authored by Russell King (Oracle)'s avatar Russell King (Oracle) Committed by Jakub Kicinski
Browse files

net: phy: marvell: implement config_inband() method



Implement the config_inband() method for Marvell 88E1112, 88E1111,
and Finisar's 88E1111 variant.

Reviewed-by: default avatarAndrew Lunn <andrew@lunn.ch>
Signed-off-by: default avatarRussell King (Oracle) <rmk+kernel@armlinux.org.uk>
Link: https://patch.msgid.link/E1tIUrz-006IUO-3r@rmk-PC.armlinux.org.uk


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 5d58a890
Loading
Loading
Loading
Loading
+31 −0
Original line number Diff line number Diff line
@@ -731,6 +731,34 @@ static unsigned int m88e1111_inband_caps(struct phy_device *phydev,
	return 0;
}

static int m88e1111_config_inband(struct phy_device *phydev, unsigned int modes)
{
	u16 extsr, bmcr;
	int err;

	if (phydev->interface != PHY_INTERFACE_MODE_1000BASEX &&
	    phydev->interface != PHY_INTERFACE_MODE_SGMII)
		return -EINVAL;

	if (modes == LINK_INBAND_BYPASS)
		extsr = MII_M1111_HWCFG_SERIAL_AN_BYPASS;
	else
		extsr = 0;

	if (modes == LINK_INBAND_DISABLE)
		bmcr = 0;
	else
		bmcr = BMCR_ANENABLE;

	err = phy_modify(phydev, MII_M1111_PHY_EXT_SR,
			 MII_M1111_HWCFG_SERIAL_AN_BYPASS, extsr);
	if (err < 0)
		return extsr;

	return phy_modify_paged(phydev, MII_MARVELL_FIBER_PAGE, MII_BMCR,
				BMCR_ANENABLE, bmcr);
}

static int m88e1111_config_aneg(struct phy_device *phydev)
{
	int extsr = phy_read(phydev, MII_M1111_PHY_EXT_SR);
@@ -3692,6 +3720,7 @@ static struct phy_driver marvell_drivers[] = {
		/* PHY_GBIT_FEATURES */
		.probe = marvell_probe,
		.inband_caps = m88e1111_inband_caps,
		.config_inband = m88e1111_config_inband,
		.config_init = m88e1112_config_init,
		.config_aneg = marvell_config_aneg,
		.config_intr = marvell_config_intr,
@@ -3714,6 +3743,7 @@ static struct phy_driver marvell_drivers[] = {
		.flags = PHY_POLL_CABLE_TEST,
		.probe = marvell_probe,
		.inband_caps = m88e1111_inband_caps,
		.config_inband = m88e1111_config_inband,
		.config_init = m88e1111gbe_config_init,
		.config_aneg = m88e1111_config_aneg,
		.read_status = marvell_read_status,
@@ -3738,6 +3768,7 @@ static struct phy_driver marvell_drivers[] = {
		/* PHY_GBIT_FEATURES */
		.probe = marvell_probe,
		.inband_caps = m88e1111_inband_caps,
		.config_inband = m88e1111_config_inband,
		.config_init = m88e1111gbe_config_init,
		.config_aneg = m88e1111_config_aneg,
		.read_status = marvell_read_status,