drivers: retained_mem: nrf: implement using nrfx_ram_ctrl helper
Now retained_mem driver can utilize nrfx_ram_ctrl helper for nRF devices. It provides abstraction over various RAM retention peripherals like POWER, VMC or MEMCONF. Signed-off-by: Nikodem Kastelik <nikodem.kastelik@nordicsemi.no>
This commit is contained in:
parent
61e5958eff
commit
022e81e8d2
4 changed files with 49 additions and 2 deletions
|
|
@ -5,5 +5,6 @@ zephyr_syscall_header(${ZEPHYR_BASE}/include/zephyr/drivers/retained_mem.h)
|
|||
zephyr_library()
|
||||
zephyr_library_sources_ifdef(CONFIG_USERSPACE retained_mem_handlers.c)
|
||||
zephyr_library_sources_ifdef(CONFIG_RETAINED_MEM_NRF_GPREGRET retained_mem_nrf_gpregret.c)
|
||||
zephyr_library_sources_ifdef(CONFIG_RETAINED_MEM_NRF_RAM_CTRL retained_mem_nrf_ram_ctrl.c)
|
||||
zephyr_library_sources_ifdef(CONFIG_RETAINED_MEM_ZEPHYR_RAM retained_mem_zephyr_ram.c)
|
||||
zephyr_library_sources_ifdef(CONFIG_RETAINED_MEM_ZEPHYR_REG retained_mem_zephyr_reg.c)
|
||||
|
|
|
|||
|
|
@ -8,3 +8,11 @@ config RETAINED_MEM_NRF_GPREGRET
|
|||
help
|
||||
Enable driver for Nordic nRF GPREGRET-based retained memory
|
||||
register support.
|
||||
|
||||
config RETAINED_MEM_NRF_RAM_CTRL
|
||||
bool "nRF RAM retention driver"
|
||||
default y
|
||||
depends on DT_HAS_ZEPHYR_RETAINED_RAM_ENABLED && RETAINED_MEM_ZEPHYR_RAM && POWEROFF
|
||||
depends on SOC_SERIES_NRF52X || SOC_SERIES_NRF53X || SOC_SERIES_NRF54LX || SOC_SERIES_NRF91X
|
||||
help
|
||||
Enable driver for Nordic RAM retention.
|
||||
|
|
|
|||
37
drivers/retained_mem/retained_mem_nrf_ram_ctrl.c
Normal file
37
drivers/retained_mem/retained_mem_nrf_ram_ctrl.c
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
/*
|
||||
* Copyright (c) 2024, Nordic Semiconductor ASA
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
#include <zephyr/devicetree.h>
|
||||
#include <zephyr/kernel.h>
|
||||
|
||||
#include <helpers/nrfx_ram_ctrl.h>
|
||||
|
||||
#define _BUILD_MEM_REGION(node_id) \
|
||||
{.dt_addr = DT_REG_ADDR(DT_PARENT(node_id)),\
|
||||
.dt_size = DT_REG_SIZE(DT_PARENT(node_id))}
|
||||
|
||||
struct ret_mem_region {
|
||||
uintptr_t dt_addr;
|
||||
size_t dt_size;
|
||||
};
|
||||
|
||||
static const struct ret_mem_region ret_mem_regions[] = {
|
||||
DT_FOREACH_STATUS_OKAY(zephyr_retained_ram, _BUILD_MEM_REGION)
|
||||
};
|
||||
|
||||
static int retained_mem_nrf_init(void)
|
||||
{
|
||||
const struct ret_mem_region *rmr;
|
||||
|
||||
for (size_t i = 0; i < ARRAY_SIZE(ret_mem_regions); i++) {
|
||||
rmr = &ret_mem_regions[i];
|
||||
nrfx_ram_ctrl_retention_enable_set((void *)rmr->dt_addr, rmr->dt_size, true);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
SYS_INIT(retained_mem_nrf_init, PRE_KERNEL_1, 0);
|
||||
|
|
@ -88,8 +88,9 @@ zephyr_library_sources_ifdef(CONFIG_SOC_SERIES_NRF91X ${MDK_DIR}/system_nrf91.c
|
|||
|
||||
zephyr_library_sources(nrfx_glue.c)
|
||||
zephyr_library_sources(${HELPERS_DIR}/nrfx_flag32_allocator.c)
|
||||
zephyr_library_sources_ifdef(CONFIG_NRFX_DPPI ${HELPERS_DIR}/nrfx_gppi_dppi.c)
|
||||
zephyr_library_sources_ifdef(CONFIG_NRFX_PPI ${HELPERS_DIR}/nrfx_gppi_ppi.c)
|
||||
zephyr_library_sources_ifdef(CONFIG_RETAINED_MEM_NRF_RAM_CTRL ${HELPERS_DIR}/nrfx_ram_ctrl.c)
|
||||
zephyr_library_sources_ifdef(CONFIG_NRFX_DPPI ${HELPERS_DIR}/nrfx_gppi_dppi.c)
|
||||
zephyr_library_sources_ifdef(CONFIG_NRFX_PPI ${HELPERS_DIR}/nrfx_gppi_ppi.c)
|
||||
|
||||
zephyr_library_sources_ifdef(CONFIG_NRFX_PRS ${SRC_DIR}/prs/nrfx_prs.c)
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue