[PATCH v3 2/3] iopoll: Add dealy to read poll

Jagan Teki jagan at amarulasolutions.com
Sat May 2 09:15:02 CEST 2020


Some drivers and other bsp code not only poll the
register with timeout but also required to delay
on each transaction.

This patch add that requirement by adding sleep_us
variable so-that read_poll_timeout now support
delay as well.

This change is referenced from Linux from below commit:
commit <5f5323a14cad19323060a8cbf9d96f2280a462dd> ("iopoll:
introduce read_poll_timeout macro")

Signed-off-by: Jagan Teki <jagan at amarulasolutions.com>
---
Changes for v3:
- add delay header

 include/linux/iopoll.h | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/include/linux/iopoll.h b/include/linux/iopoll.h
index 51966d83da..76d2f951c1 100644
--- a/include/linux/iopoll.h
+++ b/include/linux/iopoll.h
@@ -6,6 +6,7 @@
 #ifndef _LINUX_IOPOLL_H
 #define _LINUX_IOPOLL_H
 
+#include <linux/delay.h>
 #include <linux/errno.h>
 #include <linux/io.h>
 #include <time.h>
@@ -16,6 +17,7 @@
  * @addr: Address to poll
  * @val: Variable to read the value into
  * @cond: Break condition (usually involving @val)
+ * @sleep_us: Maximum time to sleep in us
  * @timeout_us: Timeout in us, 0 means never timeout
  *
  * Returns 0 on success and -ETIMEDOUT upon a timeout. In either
@@ -24,7 +26,7 @@
  * When available, you'll probably want to use one of the specialized
  * macros defined below rather than this macro directly.
  */
-#define read_poll_timeout(op, addr, val, cond, timeout_us)	\
+#define read_poll_timeout(op, addr, val, cond, sleep_us, timeout_us)	\
 ({ \
 	unsigned long timeout = timer_get_us() + timeout_us; \
 	for (;;) { \
@@ -35,12 +37,14 @@
 			(val) = op(addr); \
 			break; \
 		} \
+		if (sleep_us) \
+			udelay(sleep_us); \
 	} \
 	(cond) ? 0 : -ETIMEDOUT; \
 })
 
 #define readx_poll_timeout(op, addr, val, cond, timeout_us) \
-	read_poll_timeout(op, addr, val, cond, timeout_us)
+	read_poll_timeout(op, addr, val, cond, false, timeout_us)
 
 #define readb_poll_timeout(addr, val, cond, timeout_us) \
 	readx_poll_timeout(readb, addr, val, cond, timeout_us)
-- 
2.17.1



More information about the U-Boot mailing list