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);