aboutsummaryrefslogtreecommitdiffstats
path: root/src/generic
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2022-12-16 12:30:22 -0500
committerKevin O'Connor <kevin@koconnor.net>2022-12-16 17:26:41 -0500
commit02b45c91fb1e6c02265692555097f34f41f15604 (patch)
treeafe59cdfed3df64494230cf6aedc29f1e76c3cd4 /src/generic
parentb0d9cbfb4bf91674cf460aac531c8d79f3bd4303 (diff)
downloadkutter-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>
Diffstat (limited to 'src/generic')
-rw-r--r--src/generic/armcm_reset.c18
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