From: Tan Tee Min <tee.min....@intel.com> Add support for PHY loopback for the Marvell 88E2110 PHY.
This allow user to perform selftest using ethtool. Signed-off-by: Tan Tee Min <tee.min....@intel.com> Signed-off-by: Wong Vee Khee <vee.khee.w...@linux.intel.com> --- drivers/net/phy/marvell10g.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/drivers/net/phy/marvell10g.c b/drivers/net/phy/marvell10g.c index b1bb9b8e1e4e..c45a8f11bdcf 100644 --- a/drivers/net/phy/marvell10g.c +++ b/drivers/net/phy/marvell10g.c @@ -89,6 +89,8 @@ enum { MV_V2_TEMP_CTRL_DISABLE = 0xc000, MV_V2_TEMP = 0xf08c, MV_V2_TEMP_UNKNOWN = 0x9600, /* unknown function */ + + MV_LOOPBACK = BIT(14), /* Loopback (88E2110 only) */ }; struct mv3310_priv { @@ -765,6 +767,15 @@ static int mv3310_set_tunable(struct phy_device *phydev, } } +static int mv3310_loopback(struct phy_device *phydev, bool enable) +{ + if (phydev->drv->phy_id != MARVELL_PHY_ID_88E2110) + return -EOPNOTSUPP; + + return phy_modify_mmd(phydev, MDIO_MMD_PCS, MV_PCS_BASE_T, + MV_LOOPBACK, enable ? MV_LOOPBACK : 0); +} + static struct phy_driver mv3310_drivers[] = { { .phy_id = MARVELL_PHY_ID_88X3310, @@ -796,6 +807,7 @@ static struct phy_driver mv3310_drivers[] = { .get_tunable = mv3310_get_tunable, .set_tunable = mv3310_set_tunable, .remove = mv3310_remove, + .set_loopback = mv3310_loopback, }, }; -- 2.25.1