|
5 | 5 |
|
6 | 6 | #include <zephyr/sys/poweroff.h>
|
7 | 7 | #include <zephyr/toolchain.h>
|
| 8 | +#include <zephyr/drivers/retained_mem/nrf_retained_mem.h> |
8 | 9 |
|
9 | 10 | #if defined(CONFIG_SOC_SERIES_NRF51X) || defined(CONFIG_SOC_SERIES_NRF52X)
|
10 | 11 | #include <hal/nrf_power.h>
|
|
17 | 18 | #include <helpers/nrfx_reset_reason.h>
|
18 | 19 | #endif
|
19 | 20 |
|
| 21 | +#if defined(CONFIG_HAS_NORDIC_RAM_CTRL) |
| 22 | +#include <helpers/nrfx_ram_ctrl.h> |
| 23 | +#endif |
| 24 | + |
20 | 25 | void z_sys_poweroff(void)
|
21 | 26 | {
|
| 27 | +#if defined(CONFIG_HAS_NORDIC_RAM_CTRL) |
| 28 | + uint8_t *ram_start; |
| 29 | + size_t ram_size; |
| 30 | + |
| 31 | +#if defined(NRF_MEMORY_RAM_BASE) |
| 32 | + ram_start = (uint8_t *)NRF_MEMORY_RAM_BASE; |
| 33 | +#else |
| 34 | + ram_start = (uint8_t *)NRF_MEMORY_RAM0_BASE; |
| 35 | +#endif |
| 36 | + |
| 37 | + ram_size = 0; |
| 38 | +#if defined(NRF_MEMORY_RAM_SIZE) |
| 39 | + ram_size += NRF_MEMORY_RAM_SIZE; |
| 40 | +#endif |
| 41 | +#if defined(NRF_MEMORY_RAM0_SIZE) |
| 42 | + ram_size += NRF_MEMORY_RAM0_SIZE; |
| 43 | +#endif |
| 44 | +#if defined(NRF_MEMORY_RAM1_SIZE) |
| 45 | + ram_size += NRF_MEMORY_RAM1_SIZE; |
| 46 | +#endif |
| 47 | +#if defined(NRF_MEMORY_RAM2_SIZE) |
| 48 | + ram_size += NRF_MEMORY_RAM2_SIZE; |
| 49 | +#endif |
| 50 | + |
| 51 | + /* Disable retention for all memory blocks */ |
| 52 | + nrfx_ram_ctrl_retention_enable_set(ram_start, ram_size, false); |
| 53 | +#endif |
| 54 | + |
| 55 | +#if defined(CONFIG_RETAINED_MEM_NRF_RAM_CTRL) |
| 56 | + /* Restore retention for retained_mem driver regions defined in devicetree */ |
| 57 | + (void)z_nrf_retained_mem_retention_apply(); |
| 58 | +#endif |
| 59 | + |
22 | 60 | #if defined(CONFIG_SOC_SERIES_NRF54LX)
|
23 | 61 | nrfx_reset_reason_clear(UINT32_MAX);
|
24 | 62 | #endif
|
|
0 commit comments