summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2014-05-15 23:34:17 -0600
committerKeith Packard <keithp@keithp.com>2014-05-15 23:38:40 -0600
commit211d9af507daf9a8611ed1813415bee27e3839eb (patch)
tree5d0873cea2e3d2a0cf2a41be748ef29a792c64eb
parent0bf1c74e83fe49a11916b52596363f4dd56c522c (diff)
altos: Use explicit boot loader signal in ao_boot_reboot
Instead of just "knowing" that ao_boot_loader will be passed zero when the application wants to get back to the boot loader, explicitly define the values so that both sides always agree. Signed-off-by: Keith Packard <keithp@keithp.com>
-rw-r--r--src/lpc/ao_boot.h4
-rw-r--r--src/lpc/ao_boot_chain.c4
-rw-r--r--src/stm/ao_boot.h4
-rw-r--r--src/stm/ao_boot_chain.c2
4 files changed, 9 insertions, 5 deletions
diff --git a/src/lpc/ao_boot.h b/src/lpc/ao_boot.h
index e0ed4de7..62392d25 100644
--- a/src/lpc/ao_boot.h
+++ b/src/lpc/ao_boot.h
@@ -31,9 +31,11 @@ ao_boot_check_chain(void);
void
ao_boot_reboot(uint32_t *base);
+#define AO_BOOT_FORCE_LOADER ((uint32_t *) 0)
+
static inline void
ao_boot_loader(void) {
- ao_boot_reboot(AO_BOOT_LOADER_BASE);
+ ao_boot_reboot(AO_BOOT_FORCE_LOADER);
}
#endif /* _AO_BOOT_H_ */
diff --git a/src/lpc/ao_boot_chain.c b/src/lpc/ao_boot_chain.c
index a08d1f2c..9e45ba27 100644
--- a/src/lpc/ao_boot_chain.c
+++ b/src/lpc/ao_boot_chain.c
@@ -43,14 +43,14 @@ struct ao_boot {
};
static struct ao_boot __attribute__ ((section(".boot"))) ao_boot;
-
+
int
ao_boot_check_chain(void)
{
if (ao_boot.signal == AO_BOOT_SIGNAL && ao_boot.check == AO_BOOT_CHECK) {
ao_boot.signal = 0;
ao_boot.check = 0;
- if (ao_boot.base == 0)
+ if (ao_boot.base == AO_BOOT_FORCE_LOADER)
return 0;
ao_boot_chain(ao_boot.base);
}
diff --git a/src/stm/ao_boot.h b/src/stm/ao_boot.h
index e0ed4de7..62392d25 100644
--- a/src/stm/ao_boot.h
+++ b/src/stm/ao_boot.h
@@ -31,9 +31,11 @@ ao_boot_check_chain(void);
void
ao_boot_reboot(uint32_t *base);
+#define AO_BOOT_FORCE_LOADER ((uint32_t *) 0)
+
static inline void
ao_boot_loader(void) {
- ao_boot_reboot(AO_BOOT_LOADER_BASE);
+ ao_boot_reboot(AO_BOOT_FORCE_LOADER);
}
#endif /* _AO_BOOT_H_ */
diff --git a/src/stm/ao_boot_chain.c b/src/stm/ao_boot_chain.c
index 6a3864a7..bcebf033 100644
--- a/src/stm/ao_boot_chain.c
+++ b/src/stm/ao_boot_chain.c
@@ -50,7 +50,7 @@ ao_boot_check_chain(void)
if (ao_boot.signal == AO_BOOT_SIGNAL && ao_boot.check == AO_BOOT_CHECK) {
ao_boot.signal = 0;
ao_boot.check = 0;
- if (ao_boot.base == 0)
+ if (ao_boot.base == AO_BOOT_FORCE_LOADER)
return 0;
ao_boot_chain(ao_boot.base);
}