aboutsummaryrefslogtreecommitdiff
path: root/include/linux
diff options
context:
space:
mode:
authorJagan Teki <jagan@amarulasolutions.com>2020-05-02 12:45:02 +0530
committerJagan Teki <jagan@amarulasolutions.com>2020-05-11 01:30:49 +0530
commitc094e219a8614b3da275ad696cdfefbb9f2c453d (patch)
tree06a1a6a9274a1b0ac9a02c78aad5b59f9bbc7b8d /include/linux
parent54232474d6fe9214942b79fa2608c3ad1d9f07d0 (diff)
downloadu-boot-c094e219a8614b3da275ad696cdfefbb9f2c453d.zip
u-boot-c094e219a8614b3da275ad696cdfefbb9f2c453d.tar.gz
u-boot-c094e219a8614b3da275ad696cdfefbb9f2c453d.tar.bz2
iopoll: Add dealy to read poll
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@amarulasolutions.com>
Diffstat (limited to 'include/linux')
-rw-r--r--include/linux/iopoll.h8
1 files changed, 6 insertions, 2 deletions
diff --git a/include/linux/iopoll.h b/include/linux/iopoll.h
index 51966d8..76d2f95 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)