Commit c797cb9c authored by Paul Davey's avatar Paul Davey Committed by Paolo Abeni
Browse files

net: phy: marvell: Add mdix status reporting



Report MDI-X resolved state after link up.

Tested on Linkstreet 88E6193X internal PHYs.

Signed-off-by: default avatarPaul Davey <paul.davey@alliedtelesis.co.nz>
Reviewed-by: default avatarAndrew Lunn <andrew@lunn.ch>
Link: https://patch.msgid.link/20241017015026.255224-1-paul.davey@alliedtelesis.co.nz


Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
parent d10f1a4e
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -176,6 +176,7 @@
#define MII_M1011_PHY_STATUS_FULLDUPLEX	0x2000
#define MII_M1011_PHY_STATUS_RESOLVED	0x0800
#define MII_M1011_PHY_STATUS_LINK	0x0400
#define MII_M1011_PHY_STATUS_MDIX	BIT(6)

#define MII_88E3016_PHY_SPEC_CTRL	0x10
#define MII_88E3016_DISABLE_SCRAMBLER	0x0200
@@ -1722,6 +1723,19 @@ static int marvell_read_status_page(struct phy_device *phydev, int page)
	phydev->duplex = DUPLEX_UNKNOWN;
	phydev->port = fiber ? PORT_FIBRE : PORT_TP;

	if (fiber) {
		phydev->mdix = ETH_TP_MDI_INVALID;
	} else {
		/* The MDI-X state is set regardless of Autoneg being enabled
		 * and reflects forced MDI-X state as well as auto resolution
		 */
		if (status & MII_M1011_PHY_STATUS_RESOLVED)
			phydev->mdix = status & MII_M1011_PHY_STATUS_MDIX ?
				ETH_TP_MDI_X : ETH_TP_MDI;
		else
			phydev->mdix = ETH_TP_MDI_INVALID;
	}

	if (phydev->autoneg == AUTONEG_ENABLE)
		err = marvell_read_status_page_an(phydev, fiber, status);
	else