aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/xilinx/xilinx_emaclite.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/ethernet/xilinx/xilinx_emaclite.c')
-rw-r--r--drivers/net/ethernet/xilinx/xilinx_emaclite.c16
1 files changed, 6 insertions, 10 deletions
diff --git a/drivers/net/ethernet/xilinx/xilinx_emaclite.c b/drivers/net/ethernet/xilinx/xilinx_emaclite.c
index 6886270da695..c409bab63bd3 100644
--- a/drivers/net/ethernet/xilinx/xilinx_emaclite.c
+++ b/drivers/net/ethernet/xilinx/xilinx_emaclite.c
@@ -27,6 +27,7 @@
27#include <linux/of_net.h> 27#include <linux/of_net.h>
28#include <linux/phy.h> 28#include <linux/phy.h>
29#include <linux/interrupt.h> 29#include <linux/interrupt.h>
30#include <linux/iopoll.h>
30 31
31#define DRIVER_NAME "xilinx_emaclite" 32#define DRIVER_NAME "xilinx_emaclite"
32 33
@@ -714,20 +715,15 @@ static irqreturn_t xemaclite_interrupt(int irq, void *dev_id)
714 715
715static int xemaclite_mdio_wait(struct net_local *lp) 716static int xemaclite_mdio_wait(struct net_local *lp)
716{ 717{
717 unsigned long end = jiffies + 2; 718 u32 val;
718 719
719 /* wait for the MDIO interface to not be busy or timeout 720 /* wait for the MDIO interface to not be busy or timeout
720 * after some time. 721 * after some time.
721 */ 722 */
722 while (xemaclite_readl(lp->base_addr + XEL_MDIOCTRL_OFFSET) & 723 return readx_poll_timeout(xemaclite_readl,
723 XEL_MDIOCTRL_MDIOSTS_MASK) { 724 lp->base_addr + XEL_MDIOCTRL_OFFSET,
724 if (time_before_eq(end, jiffies)) { 725 val, !(val & XEL_MDIOCTRL_MDIOSTS_MASK),
725 WARN_ON(1); 726 1000, 20000);
726 return -ETIMEDOUT;
727 }
728 msleep(1);
729 }
730 return 0;
731} 727}
732 728
733/** 729/**