rk29 vmac: add timeout for waiting for mdio complete
authorlyx <lyx@rock-chips.com>
Wed, 24 Aug 2011 06:26:42 +0000 (23:26 -0700)
committerlyx <lyx@rock-chips.com>
Wed, 24 Aug 2011 06:29:00 +0000 (23:29 -0700)
drivers/net/rk29_vmac.c

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