firmware/ice40-riscv: Create a reboot() function

instead of direct access to registers.

Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
Change-Id: Iaee092c5ef651f0350b3f46386ed79fdbe06afcb
diff --git a/firmware/ice40-riscv/e1-tracer/fw_app.c b/firmware/ice40-riscv/e1-tracer/fw_app.c
index b207ad2..c764b2e 100644
--- a/firmware/ice40-riscv/e1-tracer/fw_app.c
+++ b/firmware/ice40-riscv/e1-tracer/fw_app.c
@@ -55,8 +55,7 @@
 	usb_disconnect();
 
 	/* Boot firmware */
-	volatile uint32_t *boot = (void*)MISC_BASE;
-	*boot = (1 << 2) | (1 << 0);
+	reboot(1);
 }
 
 void
diff --git a/firmware/ice40-riscv/e1-tracer/misc.c b/firmware/ice40-riscv/e1-tracer/misc.c
index c628cda..a7d8bc5 100644
--- a/firmware/ice40-riscv/e1-tracer/misc.c
+++ b/firmware/ice40-riscv/e1-tracer/misc.c
@@ -35,3 +35,10 @@
 	ticks[0] = (v      ) & 0xffff;
 	ticks[1] = (v >> 16) & 0xffff;
 }
+
+
+void
+reboot(int fw)
+{
+	misc_regs->warmboot = (1 << 2) | (fw << 0);
+}
diff --git a/firmware/ice40-riscv/e1-tracer/misc.h b/firmware/ice40-riscv/e1-tracer/misc.h
index 31e8f80..ac942ec 100644
--- a/firmware/ice40-riscv/e1-tracer/misc.h
+++ b/firmware/ice40-riscv/e1-tracer/misc.h
@@ -13,3 +13,5 @@
 void vio_set(unsigned value);
 
 void e1_tick_read(uint16_t *ticks);
+
+void reboot(int fw);
diff --git a/firmware/ice40-riscv/icE1usb/fw_app.c b/firmware/ice40-riscv/icE1usb/fw_app.c
index 17379b3..cb4dbb8 100644
--- a/firmware/ice40-riscv/icE1usb/fw_app.c
+++ b/firmware/ice40-riscv/icE1usb/fw_app.c
@@ -53,8 +53,7 @@
 	usb_disconnect();
 
 	/* Boot firmware */
-	volatile uint32_t *boot = (void*)(MISC_BASE);
-	*boot = (1 << 2) | (1 << 0);
+	reboot(1);
 }
 
 void
diff --git a/firmware/ice40-riscv/icE1usb/misc.c b/firmware/ice40-riscv/icE1usb/misc.c
index 4fdd2f5..dca126a 100644
--- a/firmware/ice40-riscv/icE1usb/misc.c
+++ b/firmware/ice40-riscv/icE1usb/misc.c
@@ -56,3 +56,9 @@
 {
 	return misc_regs->e1_tick[0].tx;
 }
+
+void
+reboot(int fw)
+{
+	misc_regs->warmboot = (1 << 2) | (fw << 0);
+}
diff --git a/firmware/ice40-riscv/icE1usb/misc.h b/firmware/ice40-riscv/icE1usb/misc.h
index 6d90364..69c0da7 100644
--- a/firmware/ice40-riscv/icE1usb/misc.h
+++ b/firmware/ice40-riscv/icE1usb/misc.h
@@ -28,3 +28,5 @@
 
 void e1_led_set(bool enable, uint8_t cfg);
 uint16_t e1_tick_read(void);
+
+void reboot(int fw);