realtek: Use built-in functionality for timeout loop
authorOlliver Schinagl <oliver@schinagl.nl>
Wed, 31 Aug 2022 15:20:52 +0000 (17:20 +0200)
committerChristian Marangi <ansuelsmth@gmail.com>
Wed, 14 Sep 2022 10:03:57 +0000 (12:03 +0200)
In commit 81e3017609be ("realtek: clean up rtl838x MDIO busy wait loop")
a hand-crafted loop was created, that nearly exactly replicate the
iopoll's `read_poll_timeout` functionality.

Use that instead.

Signed-off-by: Olliver Schinagl <oliver@schinagl.nl>
target/linux/realtek/files-5.10/drivers/net/dsa/rtl83xx/rtl838x.c

index 524594d725fce7cb1a5f0c81cf1bf17bc718e29a..f56901d707f2883830de2529b4f4e4da40a77f89 100644 (file)
@@ -1,6 +1,7 @@
 // SPDX-License-Identifier: GPL-2.0-only
 
 #include <asm/mach-rtl838x/mach-rtl83xx.h>
+#include <linux/iopoll.h>
 #include <net/nexthop.h>
 
 #include "rtl83xx.h"
@@ -1805,20 +1806,14 @@ irqreturn_t rtl838x_switch_irq(int irq, void *dev_id)
 
 int rtl838x_smi_wait_op(int timeout)
 {
-       unsigned long end = jiffies + usecs_to_jiffies(timeout);
+       int ret = 0;
+       u32 val;
 
-       while (1) {
-               if (!(sw_r32(RTL838X_SMI_ACCESS_PHY_CTRL_1) & 0x1))
-                       return 0;
+       ret = readx_poll_timeout(sw_r32, RTL838X_SMI_ACCESS_PHY_CTRL_1, val, val & 0x1, 20, timeout);
+       if (ret)
+               pr_err("%s: timeout\n", __func__);
 
-               if (time_after(jiffies, end))
-                       break;
-
-               usleep_range(10, 20);
-       }
-
-       pr_err("rtl838x_smi_wait_op: timeout\n");
-       return -1;
+       return ret;
 }
 
 /*