summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2013-03-23 02:18:55 -0700
committerKeith Packard <keithp@keithp.com>2013-05-07 20:16:52 -0700
commit35ef1f17e3efaa6d586ab7bb301f8133d52023b6 (patch)
tree031414fc3f9714a8e9dcdbd97e8db66b7a63ad03
parentdb7f17980c303e442f88c8a4168351dbc2c0b1a0 (diff)
altos: Validate boot chain start address
If the first block of boot memory has been smashed, and the start address is bogus, don't bother trying to jump to the application. This makes the system more resiliant to flash failures, presuming the loader erases the first block, programs the other blocks and then finally comes back to program the first block. Signed-off-by: Keith Packard <keithp@keithp.com>
-rw-r--r--src/stm/ao_boot_chain.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/src/stm/ao_boot_chain.c b/src/stm/ao_boot_chain.c
index 9c63272b..668f6e6d 100644
--- a/src/stm/ao_boot_chain.c
+++ b/src/stm/ao_boot_chain.c
@@ -26,9 +26,11 @@ ao_boot_chain(uint32_t *base)
sp = base[0];
pc = base[1];
- asm ("mov sp, %0" : : "r" (sp));
- asm ("mov lr, %0" : : "r" (pc));
- asm ("bx lr");
+ if (0x08000100 <= pc && pc <= 0x08200000) {
+ asm ("mov sp, %0" : : "r" (sp));
+ asm ("mov lr, %0" : : "r" (pc));
+ asm ("bx lr");
+ }
}
#define AO_BOOT_SIGNAL 0x5a5aa5a5