summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFugang Duan <b38611@freescale.com>2015-07-31 12:27:05 +0800
committerNitin Garg <nitin.garg@freescale.com>2015-09-17 09:24:08 -0500
commitafa8354fb036a569c382b2f208eb7c38e9cb74d3 (patch)
tree4b0cf67e779139389f14d160b57043638253a8bf
parentb295408cd481de040d39cdf8929f119e70a757b3 (diff)
MLK-11307 net: fec: disable timer interrupt when link down and suspend
There exists one issue in Android environment when do power key on/off test that cause system hang. Because suspend function disable enet all clocks while timer interrupt comming that introduces registers access. When link down and suspend, the timer interrupt is not necessary to enable, so disable it. Signed-off-by: Fugang Duan <B38611@freescale.com> Tested-by: Fugang Duan <B38611@freescale.com> Tested-by: Chen Guoyin <B07211@freescale.com> Tested-by: Zhu Wenbo <B52619@freescale.com>
-rw-r--r--drivers/net/ethernet/freescale/fec.h1
-rw-r--r--drivers/net/ethernet/freescale/fec_main.c4
2 files changed, 3 insertions, 2 deletions
diff --git a/drivers/net/ethernet/freescale/fec.h b/drivers/net/ethernet/freescale/fec.h
index 36b6b19c05fc..09e5db8945b4 100644
--- a/drivers/net/ethernet/freescale/fec.h
+++ b/drivers/net/ethernet/freescale/fec.h
@@ -365,6 +365,7 @@ struct bufdesc_ex {
#define FEC_DEFAULT_IMASK (FEC_ENET_TXF | FEC_ENET_RXF | FEC_ENET_MII | FEC_ENET_TS_TIMER)
#define FEC_RX_DISABLED_IMASK (FEC_DEFAULT_IMASK & (~FEC_ENET_RXF))
+#define FEC_TIMER_DISABLED_IMASK (FEC_DEFAULT_IMASK & (~FEC_ENET_TS_TIMER))
#define FEC_ENET_ETHEREN ((uint)0x00000002)
diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c
index 8a10ea73db8b..22300f56a65e 100644
--- a/drivers/net/ethernet/freescale/fec_main.c
+++ b/drivers/net/ethernet/freescale/fec_main.c
@@ -1150,9 +1150,9 @@ fec_stop(struct net_device *ndev)
writel(1, fep->hwp + FEC_ECNTRL);
udelay(10);
}
- writel(FEC_DEFAULT_IMASK, fep->hwp + FEC_IMASK);
+ writel(FEC_TIMER_DISABLED_IMASK, fep->hwp + FEC_IMASK);
} else {
- writel(FEC_DEFAULT_IMASK | FEC_ENET_WAKEUP, fep->hwp + FEC_IMASK);
+ writel(FEC_TIMER_DISABLED_IMASK | FEC_ENET_WAKEUP, fep->hwp + FEC_IMASK);
val = readl(fep->hwp + FEC_ECNTRL);
val |= (FEC_ECR_MAGICEN | FEC_ECR_SLEEP);
writel(val, fep->hwp + FEC_ECNTRL);