Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fc548b99 authored by Russell King's avatar Russell King Committed by David S. Miller
Browse files

net: mvneta: prepare to convert to phylink



Prepare to convert mvneta to phylink by splitting the adjust_link
function into its consituent parts.

Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 3b8bc674
Loading
Loading
Loading
Loading
+60 −41
Original line number Diff line number Diff line
@@ -3251,17 +3251,14 @@ static int mvneta_set_mac_addr(struct net_device *dev, void *addr)
	return 0;
}

static void mvneta_adjust_link(struct net_device *ndev)
static void mvneta_mac_config(struct net_device *ndev)
{
	struct mvneta_port *pp = netdev_priv(ndev);
	struct phy_device *phydev = ndev->phydev;
	int status_change = 0;
	u32 val;

	if (phydev->link) {
	if ((pp->speed != phydev->speed) ||
	    (pp->duplex != phydev->duplex)) {
			u32 val;

		val = mvreg_read(pp, MVNETA_GMAC_AUTONEG_CONFIG);
		val &= ~(MVNETA_GMAC_CONFIG_MII_SPEED |
			 MVNETA_GMAC_CONFIG_GMII_SPEED |
@@ -3282,6 +3279,45 @@ static void mvneta_adjust_link(struct net_device *ndev)
	}
}

static void mvneta_mac_link_down(struct net_device *ndev, bool autoneg)
{
	struct mvneta_port *pp = netdev_priv(ndev);
	u32 val;

	if (!autoneg) {
		val = mvreg_read(pp, MVNETA_GMAC_AUTONEG_CONFIG);
		val &= ~MVNETA_GMAC_FORCE_LINK_PASS;
		val |= MVNETA_GMAC_FORCE_LINK_DOWN;
		mvreg_write(pp, MVNETA_GMAC_AUTONEG_CONFIG, val);
	}

	mvneta_port_down(pp);
}

static void mvneta_mac_link_up(struct net_device *ndev, bool autoneg)
{
	struct mvneta_port *pp = netdev_priv(ndev);
	u32 val;

	if (!autoneg) {
		val = mvreg_read(pp, MVNETA_GMAC_AUTONEG_CONFIG);
		val &= ~MVNETA_GMAC_FORCE_LINK_DOWN;
		val |= MVNETA_GMAC_FORCE_LINK_PASS;
		mvreg_write(pp, MVNETA_GMAC_AUTONEG_CONFIG, val);
	}

	mvneta_port_up(pp);
}

static void mvneta_adjust_link(struct net_device *ndev)
{
	struct mvneta_port *pp = netdev_priv(ndev);
	struct phy_device *phydev = ndev->phydev;
	int status_change = 0;

	if (phydev->link)
		mvneta_mac_config(ndev);

	if (phydev->link != pp->link) {
		if (!phydev->link) {
			pp->duplex = -1;
@@ -3293,27 +3329,10 @@ static void mvneta_adjust_link(struct net_device *ndev)
	}

	if (status_change) {
		if (phydev->link) {
			if (!pp->use_inband_status) {
				u32 val = mvreg_read(pp,
						  MVNETA_GMAC_AUTONEG_CONFIG);
				val &= ~MVNETA_GMAC_FORCE_LINK_DOWN;
				val |= MVNETA_GMAC_FORCE_LINK_PASS;
				mvreg_write(pp, MVNETA_GMAC_AUTONEG_CONFIG,
					    val);
			}
			mvneta_port_up(pp);
		} else {
			if (!pp->use_inband_status) {
				u32 val = mvreg_read(pp,
						  MVNETA_GMAC_AUTONEG_CONFIG);
				val &= ~MVNETA_GMAC_FORCE_LINK_PASS;
				val |= MVNETA_GMAC_FORCE_LINK_DOWN;
				mvreg_write(pp, MVNETA_GMAC_AUTONEG_CONFIG,
					    val);
			}
			mvneta_port_down(pp);
		}
		if (phydev->link)
			mvneta_mac_link_down(ndev, pp->use_inband_status);
		else
			mvneta_mac_link_up(ndev, pp->use_inband_status);
		phy_print_status(phydev);
	}
}