From: lyx <lyx@rock-chips.com>
Date: Wed, 24 Aug 2011 06:26:42 +0000 (-0700)
Subject: rk29 vmac: add timeout for waiting for mdio complete
X-Git-Tag: firefly_0821_release~9767^2~108
X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=604812762e96468a85e2df38e37fa1ea0f09f77a;p=firefly-linux-kernel-4.4.55.git

rk29 vmac: add timeout for waiting for mdio complete
---

diff --git a/drivers/net/rk29_vmac.c b/drivers/net/rk29_vmac.c
index 0f04f92fc076..561b7928179f 100755
--- a/drivers/net/rk29_vmac.c
+++ b/drivers/net/rk29_vmac.c
@@ -95,7 +95,8 @@ static void vmac_mdio_xmit(struct vmac_priv *ap, unsigned val)
 {
 	init_completion(&ap->mdio_complete);
 	vmac_writel(ap, val, MDIO_DATA);
-	wait_for_completion(&ap->mdio_complete);
+	if(!wait_for_completion_timeout(&ap->mdio_complete, msecs_to_jiffies(1000)))
+		printk("Time out for waiting mdio completion\n");
 }
 
 static int vmac_mdio_read(struct mii_bus *bus, int phy_id, int phy_reg)
@@ -1219,6 +1220,7 @@ static void rk29_init_vmac(struct net_device *dev)
 
 	/* enable, after all other bits are set */
 	vmac_writel(ap, temp | EN_MASK, CONTROL);
+
 }
 
 static void rk29_vmac_shutdown(struct net_device *dev)
@@ -1614,6 +1616,9 @@ rk29_vmac_suspend(struct device *dev)
 
 	if (ndev) {
 		if (netif_running(ndev)) {
+			if (ndev->irq)
+				disable_irq(ndev->irq);
+			netif_stop_queue(ndev);
 			netif_device_detach(ndev);
 			rk29_vmac_shutdown(ndev);
 		}
@@ -1631,6 +1636,9 @@ rk29_vmac_resume(struct device *dev)
 		if (netif_running(ndev)) {
 			rk29_init_vmac(ndev);
 			netif_device_attach(ndev);
+			netif_start_queue(ndev);
+			if (ndev->irq)
+				enable_irq(ndev->irq);
 		}
 	}
 	return 0;