Commit 563ecb8a authored by Kurt Kanzenbach's avatar Kurt Kanzenbach Committed by David S. Miller

2/2] net: xilinx_emaclite: use readx_poll_timeout() in mdio wait function

On loaded systems with a preemptible kernel the mdio_wait() function may
report an error while everything is working fine:

xemaclite_mdio_wait():
  xemaclite_readl() -> chip not ready
  --> interrupt here (other work for some time / chip become ready)
  if (time_before_eq(end, jiffies))
    --> false positive error report

Replace the current code with readx_poll_timeout() which takes care
of the situation.
Signed-off-by: Kurt Kanzenbach's avatarKurt Kanzenbach <kurt@linutronix.de>
Signed-off-by: default avatarBenedikt Spranger <b.spranger@linutronix.de>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 882119ff
...@@ -27,6 +27,7 @@ ...@@ -27,6 +27,7 @@
#include <linux/of_net.h> #include <linux/of_net.h>
#include <linux/phy.h> #include <linux/phy.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/iopoll.h>
#define DRIVER_NAME "xilinx_emaclite" #define DRIVER_NAME "xilinx_emaclite"
...@@ -714,20 +715,15 @@ static irqreturn_t xemaclite_interrupt(int irq, void *dev_id) ...@@ -714,20 +715,15 @@ static irqreturn_t xemaclite_interrupt(int irq, void *dev_id)
static int xemaclite_mdio_wait(struct net_local *lp) static int xemaclite_mdio_wait(struct net_local *lp)
{ {
unsigned long end = jiffies + 2; u32 val;
/* wait for the MDIO interface to not be busy or timeout /* wait for the MDIO interface to not be busy or timeout
* after some time. * after some time.
*/ */
while (xemaclite_readl(lp->base_addr + XEL_MDIOCTRL_OFFSET) & return readx_poll_timeout(xemaclite_readl,
XEL_MDIOCTRL_MDIOSTS_MASK) { lp->base_addr + XEL_MDIOCTRL_OFFSET,
if (time_before_eq(end, jiffies)) { val, !(val & XEL_MDIOCTRL_MDIOSTS_MASK),
WARN_ON(1); 1000, 20000);
return -ETIMEDOUT;
}
msleep(1);
}
return 0;
} }
/** /**
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment