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

net: mtk_eth_soc: add out of band forcing of speed and duplex in pcs_link_up



Add support for forcing the link speed and duplex setting in the
pcs_link_up() method for out of band modes, which will be useful when
we finish converting the pcs_config() method. Until then, we still have
to force duplex for 802.3z modes to work correctly.

Signed-off-by: default avatarRussell King (Oracle) <rmk+kernel@armlinux.org.uk>
Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 0d2351dc
Loading
Loading
Loading
Loading
+17 −11
Original line number Diff line number Diff line
@@ -108,17 +108,23 @@ static void mtk_pcs_link_up(struct phylink_pcs *pcs, unsigned int mode,
	struct mtk_pcs *mpcs = pcs_to_mtk_pcs(pcs);
	unsigned int sgm_mode;

	if (!phy_interface_mode_is_8023z(interface))
		return;
	if (!phylink_autoneg_inband(mode) ||
	    phy_interface_mode_is_8023z(interface)) {
		/* Force the speed and duplex setting */
		if (speed == SPEED_10)
			sgm_mode = SGMII_SPEED_10;
		else if (speed == SPEED_100)
			sgm_mode = SGMII_SPEED_100;
		else
			sgm_mode = SGMII_SPEED_1000;

	/* SGMII force duplex setting */
		if (duplex == DUPLEX_FULL)
		sgm_mode = SGMII_DUPLEX_FULL;
	else
		sgm_mode = 0;
			sgm_mode |= SGMII_DUPLEX_FULL;

		regmap_update_bits(mpcs->regmap, SGMSYS_SGMII_MODE,
			   SGMII_DUPLEX_FULL, sgm_mode);
				   SGMII_DUPLEX_FULL | SGMII_SPEED_MASK,
				   sgm_mode);
	}
}

static const struct phylink_pcs_ops mtk_pcs_ops = {