icE1usb fw: Add access functions for the 'time' hardware

The hardware has a tick counter (constantly incremented every
cycle) and a pps counter (which is the tick counter captured
at the pps edge).

Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
Change-Id: I2122ea3d636c8a430c6eb945b0c11e26e02fee43
diff --git a/firmware/ice40-riscv/icE1usb/misc.c b/firmware/ice40-riscv/icE1usb/misc.c
index 50aec43..b8419aa 100644
--- a/firmware/ice40-riscv/icE1usb/misc.c
+++ b/firmware/ice40-riscv/icE1usb/misc.c
@@ -122,6 +122,34 @@
 	return misc_regs->e1_tick[port].tx;
 }
 
+
+bool
+time_elapsed(uint32_t ref, unsigned int tick)
+{
+	return ((misc_regs->time.now - ref) & 0x7fffffff) >= tick;
+}
+
+void
+delay(unsigned int ms)
+{
+	uint32_t ref = misc_regs->time.now;
+	ms *= SYS_CLK_FREQ / 1000;
+	while (!time_elapsed(ref, ms));
+}
+
+uint32_t
+time_pps_read(void)
+{
+	return misc_regs->time.pps;
+}
+
+uint32_t
+time_now_read(void)
+{
+	return misc_regs->time.now;
+}
+
+
 void
 reboot(int fw)
 {