RAM power configuration is preserved through soft reset, meaning that there is a risk of accessing powered off RAM blocks when booting in different application (i.e. bootloader). Add option to force all RAM blocks to be powered on before triggering soft reset to prevent this from happening. Signed-off-by: Nikodem Kastelik <nikodem.kastelik@nordicsemi.no>
45 lines
944 B
C
45 lines
944 B
C
/*
|
|
* Copyright (c) 2025 Nordic Semiconductor ASA
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
#include <zephyr/kernel.h>
|
|
#include <zephyr/sys/reboot.h>
|
|
#if defined(CONFIG_HAS_NORDIC_RAM_CTRL)
|
|
#include <helpers/nrfx_ram_ctrl.h>
|
|
#endif
|
|
|
|
void sys_arch_reboot(int type)
|
|
{
|
|
ARG_UNUSED(type);
|
|
|
|
#ifdef CONFIG_NRF_FORCE_RAM_ON_REBOOT
|
|
uint8_t *ram_start;
|
|
size_t ram_size;
|
|
|
|
#if defined(NRF_MEMORY_RAM_BASE)
|
|
ram_start = (uint8_t *)NRF_MEMORY_RAM_BASE;
|
|
#else
|
|
ram_start = (uint8_t *)NRF_MEMORY_RAM0_BASE;
|
|
#endif
|
|
|
|
ram_size = 0;
|
|
#if defined(NRF_MEMORY_RAM_SIZE)
|
|
ram_size += NRF_MEMORY_RAM_SIZE;
|
|
#endif
|
|
#if defined(NRF_MEMORY_RAM0_SIZE)
|
|
ram_size += NRF_MEMORY_RAM0_SIZE;
|
|
#endif
|
|
#if defined(NRF_MEMORY_RAM1_SIZE)
|
|
ram_size += NRF_MEMORY_RAM1_SIZE;
|
|
#endif
|
|
#if defined(NRF_MEMORY_RAM2_SIZE)
|
|
ram_size += NRF_MEMORY_RAM2_SIZE;
|
|
#endif
|
|
|
|
/* Power on all RAM blocks */
|
|
nrfx_ram_ctrl_power_enable_set(ram_start, ram_size, true);
|
|
#endif
|
|
|
|
NVIC_SystemReset();
|
|
}
|