diff options
author | Kevin O'Connor <kevin@koconnor.net> | 2022-12-16 12:30:22 -0500 |
---|---|---|
committer | Kevin O'Connor <kevin@koconnor.net> | 2022-12-16 17:26:41 -0500 |
commit | 02b45c91fb1e6c02265692555097f34f41f15604 (patch) | |
tree | afe59cdfed3df64494230cf6aedc29f1e76c3cd4 | |
parent | b0d9cbfb4bf91674cf460aac531c8d79f3bd4303 (diff) | |
download | kutter-02b45c91fb1e6c02265692555097f34f41f15604.tar.gz kutter-02b45c91fb1e6c02265692555097f34f41f15604.tar.xz kutter-02b45c91fb1e6c02265692555097f34f41f15604.zip |
armcm_reset: Flush dcache before rebooting into canboot
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
-rw-r--r-- | src/generic/armcm_reset.c | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/src/generic/armcm_reset.c b/src/generic/armcm_reset.c index d747d9fc..fb9bf0b1 100644 --- a/src/generic/armcm_reset.c +++ b/src/generic/armcm_reset.c @@ -23,14 +23,16 @@ canboot_reset(uint64_t req_signature) uint32_t *bl_vectors = (uint32_t *)CONFIG_FLASH_BOOT_ADDRESS; uint64_t *boot_sig = (uint64_t *)(bl_vectors[1] - 9); uint64_t *req_sig = (uint64_t *)bl_vectors[0]; - if (boot_sig == (void *)ALIGN((size_t)boot_sig, 8) && - *boot_sig == CANBOOT_SIGNATURE && - req_sig == (void *)ALIGN((size_t)req_sig, 8)) - { - irq_disable(); - *req_sig = req_signature; - NVIC_SystemReset(); - } + if (boot_sig != (void*)ALIGN((size_t)boot_sig, 8) + || *boot_sig != CANBOOT_SIGNATURE + || req_sig != (void*)ALIGN((size_t)req_sig, 8)) + return; + irq_disable(); + *req_sig = req_signature; +#if __CORTEX_M >= 7 + SCB_CleanDCache_by_Addr((void*)req_sig, sizeof(*req_sig)); +#endif + NVIC_SystemReset(); } void |