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>
void
ao_boot_reboot(uint32_t *base);
void
ao_boot_reboot(uint32_t *base);
+#define AO_BOOT_FORCE_LOADER ((uint32_t *) 0)
+
static inline void
ao_boot_loader(void) {
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_ */
}
#endif /* _AO_BOOT_H_ */
};
static struct ao_boot __attribute__ ((section(".boot"))) 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;
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 == AO_BOOT_FORCE_LOADER)
return 0;
ao_boot_chain(ao_boot.base);
}
return 0;
ao_boot_chain(ao_boot.base);
}
void
ao_boot_reboot(uint32_t *base);
void
ao_boot_reboot(uint32_t *base);
+#define AO_BOOT_FORCE_LOADER ((uint32_t *) 0)
+
static inline void
ao_boot_loader(void) {
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_ */
}
#endif /* _AO_BOOT_H_ */
if (ao_boot.signal == AO_BOOT_SIGNAL && ao_boot.check == AO_BOOT_CHECK) {
ao_boot.signal = 0;
ao_boot.check = 0;
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 == AO_BOOT_FORCE_LOADER)
return 0;
ao_boot_chain(ao_boot.base);
}
return 0;
ao_boot_chain(ao_boot.base);
}