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: Lothar Waßmann <LW@KARO-electronics.de> Tested-by: Shawn Guo <shawn.guo@linaro.org> Acked-by: Shawn Guo <shawn.guo@linaro.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
589efdc7f7
commit
42431dc24d
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user