Skip to content

Commit

Permalink
zephyr: Add CONFIG_MCUBOOT_CLEANUP_RAM
Browse files Browse the repository at this point in the history
Add Kconfig option to cleanup RAM in MCUboot before passing control
to an application.

Signed-off-by: Dominik Ermel <[email protected]>
  • Loading branch information
de-nordic committed Nov 20, 2024
1 parent 8a2e2ed commit 75c44f6
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 0 deletions.
6 changes: 6 additions & 0 deletions boot/zephyr/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -203,6 +203,12 @@ config BOOT_SIGNATURE_KEY_FILE
with the public key information will be written in a format expected by
MCUboot.

config MCUBOOT_CLEANUP_RAM
bool "Perform RAM cleanup"
depends on CPU_CORTEX_M
help
Sets contents of memory to 0 before jumping to application.

config MCUBOOT_CLEANUP_ARM_CORE
bool "Perform core cleanup before chain-load the application"
depends on CPU_CORTEX_M
Expand Down
26 changes: 26 additions & 0 deletions boot/zephyr/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -236,7 +236,33 @@ static void do_boot(struct boot_rsp *rsp)
__set_CONTROL(0x00); /* application will configures core on its own */
__ISB();
#endif
#if CONFIG_MCUBOOT_CLEANUP_RAM
__asm__ volatile (
/* rt->reset -> r0 */
" mov r0, %0\n"
/* base to write -> r1 */
" mov r1, %1\n"
/* size to write -> r2 */
" mov r2, %2\n"
/* value to write -> r3 */
" mov r3, %3\n"
"clear:\n"
" str r3, [r1]\n"
" add r1, r1, %4\n"
" sub r2, r2, %4\n"
" cbz r2, out\n"
" b clear\n"
"out:\n"
/* jump to reset vector of an app */
" bx r0\n"
:
: "r" (vt->reset), "i" (CONFIG_SRAM_BASE_ADDRESS),
"i" (CONFIG_SRAM_SIZE * 1024), "i" (0), "i" (sizeof(uint32_t))
: "r0", "r1", "r2", "r3", "memory"
);
#else
((void (*)(void))vt->reset)();
#endif
}

#elif defined(CONFIG_XTENSA) || defined(CONFIG_RISCV)
Expand Down

0 comments on commit 75c44f6

Please sign in to comment.