--- a/include/linux/iopoll.h
+++ b/include/linux/iopoll.h
@@ -13,6 +13,51 @@
 #include <linux/errno.h>
 #include <linux/io.h>
 
+#ifndef read_poll_timeout
+	/**
+	 * read_poll_timeout - Periodically poll an address until a condition is
+	 *			met or a timeout occurs
+	 * @op: accessor function (takes @args as its arguments)
+	 * @val: Variable to read the value into
+	 * @cond: Break condition (usually involving @val)
+	 * @sleep_us: Maximum time to sleep between reads in us (0
+	 *            tight-loops).  Should be less than ~20ms since usleep_range
+	 *            is used (see Documentation/timers/timers-howto.rst).
+	 * @timeout_us: Timeout in us, 0 means never timeout
+	 * @sleep_before_read: if it is true, sleep @sleep_us before read.
+	 * @args: arguments for @op poll
+	 *
+	 * Returns 0 on success and -ETIMEDOUT upon a timeout. In either
+	 * case, the last read value at @args is stored in @val. Must not
+	 * be called from atomic context if sleep_us or timeout_us are used.
+	 *
+	 * 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, val, cond, sleep_us, timeout_us, \
+					sleep_before_read, args...) \
+	({ \
+		u64 __timeout_us = (timeout_us); \
+		unsigned long __sleep_us = (sleep_us); \
+		ktime_t __timeout = ktime_add_us(ktime_get(), __timeout_us); \
+		might_sleep_if((__sleep_us) != 0); \
+		if (sleep_before_read && __sleep_us) \
+			usleep_range((__sleep_us >> 2) + 1, __sleep_us); \
+		for (;;) { \
+			(val) = op(args); \
+			if (cond) \
+				break; \
+			if (__timeout_us && \
+				ktime_compare(ktime_get(), __timeout) > 0) { \
+				(val) = op(args); \
+				break; \
+			} \
+			if (__sleep_us) \
+				usleep_range((__sleep_us >> 2) + 1, __sleep_us); \
+		} \
+		(cond) ? 0 : -ETIMEDOUT; \
+	})
+#endif /* read_poll_timeout */
 /**
  * readx_poll_timeout - Periodically poll an address until a condition is met or a timeout occurs
  * @op: accessor function (takes @addr as its only argument)
