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

Commit 42431dc2 authored by Lothar Waßmann's avatar Lothar Waßmann Committed by David S. Miller
Browse files

net/fec: preserve MII/RMII setting in fec_stop()



Additionally to setting the ETHER_EN bit in FEC_ECNTRL the MII/RMII
setting in FEC_R_CNTRL needs to be preserved to keep the MII interface
functional.

Signed-off-by: default avatarLothar Waßmann <LW@KARO-electronics.de>
Tested-by: default avatarShawn Guo <shawn.guo@linaro.org>
Acked-by: default avatarShawn Guo <shawn.guo@linaro.org>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 589efdc7
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -515,6 +515,7 @@ fec_stop(struct net_device *ndev)
	struct fec_enet_private *fep = netdev_priv(ndev);
	const struct platform_device_id *id_entry =
				platform_get_device_id(fep->pdev);
	u32 rmii_mode = readl(fep->hwp + FEC_R_CNTRL) & (1 << 8);

	/* We cannot expect a graceful transmit stop without link !!! */
	if (fep->link) {
@@ -531,8 +532,10 @@ fec_stop(struct net_device *ndev)
	writel(FEC_DEFAULT_IMASK, fep->hwp + FEC_IMASK);

	/* We have to keep ENET enabled to have MII interrupt stay working */
	if (id_entry->driver_data & FEC_QUIRK_ENET_MAC)
	if (id_entry->driver_data & FEC_QUIRK_ENET_MAC) {
		writel(2, fep->hwp + FEC_ECNTRL);
		writel(rmii_mode, fep->hwp + FEC_R_CNTRL);
	}
}