mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-02-17 23:00:26 -05:00
net: phy: marvell: implement config_inband() method
Implement the config_inband() method for Marvell 88E1112, 88E1111, and Finisar's 88E1111 variant. Reviewed-by: Andrew Lunn <andrew@lunn.ch> Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk> Link: https://patch.msgid.link/E1tIUrz-006IUO-3r@rmk-PC.armlinux.org.uk Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
committed by
Jakub Kicinski
parent
5d58a890c0
commit
a219912e0f
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user