diff options
author | Keith Packard <keithp@keithp.com> | 2014-05-15 23:34:17 -0600 |
---|---|---|
committer | Keith Packard <keithp@keithp.com> | 2014-05-15 23:38:40 -0600 |
commit | 211d9af507daf9a8611ed1813415bee27e3839eb (patch) | |
tree | 5d0873cea2e3d2a0cf2a41be748ef29a792c64eb | |
parent | 0bf1c74e83fe49a11916b52596363f4dd56c522c (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.h | 4 | ||||
-rw-r--r-- | src/lpc/ao_boot_chain.c | 4 | ||||
-rw-r--r-- | src/stm/ao_boot.h | 4 | ||||
-rw-r--r-- | src/stm/ao_boot_chain.c | 2 |
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); } |