[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.