OSDN Git Service

usb: early: ehci-dbgp: convert to readl_poll_timeout_atomic()
authorChunfeng Yun <chunfeng.yun@mediatek.com>
Mon, 21 Sep 2020 06:13:26 +0000 (14:13 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 25 Sep 2020 14:29:09 +0000 (16:29 +0200)
Use readl_poll_timeout_atomic() to simplify code

Cc: "Eric W. Biederman" <ebiederm@xmission.com>
Cc: Petr Mladek <pmladek@suse.com>
Signed-off-by: Chunfeng Yun <chunfeng.yun@mediatek.com>
Link: https://lore.kernel.org/r/1600668815-12135-2-git-send-email-chunfeng.yun@mediatek.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/early/ehci-dbgp.c

index b075dbf..45b42d8 100644 (file)
@@ -15,6 +15,7 @@
 #include <linux/console.h>
 #include <linux/errno.h>
 #include <linux/init.h>
+#include <linux/iopoll.h>
 #include <linux/pci_regs.h>
 #include <linux/pci_ids.h>
 #include <linux/usb/ch9.h>
@@ -161,17 +162,11 @@ static inline u32 dbgp_pid_read_update(u32 x, u32 tok)
 static int dbgp_wait_until_complete(void)
 {
        u32 ctrl;
-       int loop = DBGP_TIMEOUT;
-
-       do {
-               ctrl = readl(&ehci_debug->control);
-               /* Stop when the transaction is finished */
-               if (ctrl & DBGP_DONE)
-                       break;
-               udelay(1);
-       } while (--loop > 0);
+       int ret;
 
-       if (!loop)
+       ret = readl_poll_timeout_atomic(&ehci_debug->control, ctrl,
+                               (ctrl & DBGP_DONE), 1, DBGP_TIMEOUT);
+       if (ret)
                return -DBGP_TIMEOUT;
 
        /*