From 604812762e96468a85e2df38e37fa1ea0f09f77a Mon Sep 17 00:00:00 2001 From: lyx Date: Tue, 23 Aug 2011 23:26:42 -0700 Subject: [PATCH] rk29 vmac: add timeout for waiting for mdio complete --- drivers/net/rk29_vmac.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) 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; -- 2.34.1