From 211d9af507daf9a8611ed1813415bee27e3839eb Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Thu, 15 May 2014 23:34:17 -0600 Subject: [PATCH] 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 --- src/lpc/ao_boot.h | 4 +++- src/lpc/ao_boot_chain.c | 4 ++-- src/stm/ao_boot.h | 4 +++- 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); } -- 2.30.2