[sw] Add function `ibex_timeout_check`
Signed-off-by: Douglas Reis <doreis@lowrisc.org>
diff --git a/sw/device/lib/runtime/ibex.c b/sw/device/lib/runtime/ibex.c
index e8174ad..d746ca0 100644
--- a/sw/device/lib/runtime/ibex.c
+++ b/sw/device/lib/runtime/ibex.c
@@ -32,3 +32,4 @@
extern uint64_t ibex_mcycle_read(void);
extern ibex_timeout_t ibex_timeout_init(uint32_t timeout_usec);
extern bool ibex_timeout_check(const ibex_timeout_t *timeout);
+extern uint64_t ibex_timeout_elapsed(const ibex_timeout_t *timeout);
diff --git a/sw/device/lib/runtime/ibex.h b/sw/device/lib/runtime/ibex.h
index 3eb8266..789dbda 100644
--- a/sw/device/lib/runtime/ibex.h
+++ b/sw/device/lib/runtime/ibex.h
@@ -145,7 +145,7 @@
* Returns boolean indicating the timeout expired waiting for an expression to
* be true.
*
- * @param timeout The `ibex_timeout_t` value.
+ * @param timeout Holds the counter start value.
* @return Boolean indicating the timeout expired.
*/
inline bool ibex_timeout_check(const ibex_timeout_t *timeout) {
@@ -153,6 +153,17 @@
}
/**
+ * Returns the time elapsed in microseconds since `ibex_timeout_init` was
+ * called.
+ *
+ * @param timeout Holds the counter start value..
+ * @return Time elapsed in microseconds.
+ */
+inline uint64_t ibex_timeout_elapsed(const ibex_timeout_t *timeout) {
+ return ((ibex_mcycle_read() - timeout->start) * 1000000 / kClockFreqCpuHz);
+}
+
+/**
* Convenience macro to spin with timeout in microseconds.
*
* @param expr An expression that is evaluated multiple times until true.