Adds a retention backend for settings Signed-off-by: Jamie McCrae <jamie.mccrae@nordicsemi.no>
274 lines
8.0 KiB
Plaintext
274 lines
8.0 KiB
Plaintext
# Copyright (c) 2018 Nordic Semiconductor ASA
|
|
# Copyright (c) 2025 Analog Devices, Inc.
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
|
|
menuconfig SETTINGS
|
|
bool "Settings"
|
|
help
|
|
The settings subsystem allows its users to serialize and
|
|
deserialize state in memory into and from non-volatile memory.
|
|
It supports several back-ends to store and load serialized data from
|
|
and it can do so atomically for all involved modules.
|
|
|
|
if SETTINGS
|
|
|
|
module = SETTINGS
|
|
module-str = settings
|
|
source "subsys/logging/Kconfig.template.log_config"
|
|
|
|
config SETTINGS_RUNTIME
|
|
bool "runtime storage back-end"
|
|
help
|
|
Enables runtime storage back-end.
|
|
|
|
config SETTINGS_DYNAMIC_HANDLERS
|
|
bool "dynamic settings handlers"
|
|
default y
|
|
help
|
|
Enables the use of dynamic settings handlers
|
|
|
|
# Hidden option to enable encoding length into settings entry
|
|
config SETTINGS_ENCODE_LEN
|
|
bool
|
|
|
|
DT_CHOSEN_ZEPHYR_SETTINGS_PARTITION := zephyr,settings-partition
|
|
DT_ZEPHYR_RETENTION := zephyr,retention
|
|
|
|
config SETTINGS_SUPPORTED_RETENTION
|
|
bool
|
|
default y if RETENTION && $(dt_chosen_has_compat,$(DT_CHOSEN_ZEPHYR_SETTINGS_PARTITION),$(DT_ZEPHYR_RETENTION))
|
|
|
|
choice SETTINGS_BACKEND
|
|
prompt "Storage back-end"
|
|
default SETTINGS_ZMS if ZMS
|
|
default SETTINGS_NVS if NVS
|
|
default SETTINGS_FCB if FCB
|
|
default SETTINGS_FILE if FILE_SYSTEM
|
|
default SETTINGS_TFM_ITS if TFM_PARTITION_INTERNAL_TRUSTED_STORAGE
|
|
default SETTINGS_RETENTION if SETTINGS_SUPPORTED_RETENTION
|
|
default SETTINGS_NONE
|
|
help
|
|
Storage back-end to be used by the settings subsystem.
|
|
|
|
config SETTINGS_ZMS
|
|
bool "ZMS (Zephyr Memory Storage)"
|
|
depends on ZMS
|
|
select SYS_HASH_FUNC32
|
|
help
|
|
Use ZMS as settings storage backend.
|
|
|
|
if SETTINGS_ZMS
|
|
|
|
config SETTINGS_ZMS_LL_CACHE
|
|
bool "ZMS linked list lookup cache"
|
|
help
|
|
Enable ZMS lookup cache for linked list, used to reduce the
|
|
Settings load time by having most linked list elements already
|
|
in cache.
|
|
|
|
config SETTINGS_ZMS_LL_CACHE_SIZE
|
|
int "ZMS linked list lookup cache size"
|
|
default 128
|
|
range 1 $(UINT32_MAX)
|
|
depends on SETTINGS_ZMS_LL_CACHE
|
|
help
|
|
Number of entries in Settings ZMS linked list cache.
|
|
|
|
endif # SETTINGS_ZMS
|
|
|
|
config SETTINGS_FCB
|
|
bool "FCB"
|
|
depends on FCB
|
|
help
|
|
Use FCB as a settings storage back-end.
|
|
|
|
config SETTINGS_FILE
|
|
bool "File"
|
|
depends on FILE_SYSTEM
|
|
select SETTINGS_ENCODE_LEN
|
|
help
|
|
Use a file (on mounted file system) as a settings storage back-end.
|
|
|
|
config SETTINGS_NVS
|
|
bool "NVS non-volatile storage support"
|
|
depends on NVS
|
|
depends on FLASH_MAP
|
|
help
|
|
Enables NVS storage support
|
|
|
|
if SETTINGS_NVS
|
|
|
|
config SETTINGS_NVS_NAME_CACHE
|
|
bool "NVS name lookup cache"
|
|
help
|
|
Enable NVS name lookup cache, used to reduce the Settings name
|
|
lookup time.
|
|
|
|
config SETTINGS_NVS_NAME_CACHE_SIZE
|
|
int "NVS name lookup cache size"
|
|
default 128
|
|
range 1 $(UINT16_MAX)
|
|
depends on SETTINGS_NVS_NAME_CACHE
|
|
help
|
|
Number of entries in Settings NVS name cache.
|
|
|
|
endif # SETTINGS_NVS
|
|
|
|
config SETTINGS_RETENTION
|
|
bool "Retention storage support"
|
|
depends on SETTINGS_SUPPORTED_RETENTION
|
|
help
|
|
Enables retention storage support (bulk load/save supported only).
|
|
|
|
config SETTINGS_CUSTOM
|
|
bool "CUSTOM"
|
|
help
|
|
Use a custom settings storage back-end.
|
|
|
|
config SETTINGS_TFM_ITS
|
|
bool "Internal Trusted Storage (ITS) settings backend"
|
|
depends on TFM_PARTITION_INTERNAL_TRUSTED_STORAGE
|
|
help
|
|
Enables Internal Trusted Storage (ITS) Settings backend. Intended for use with boards
|
|
using TF-M which cannot make use of persistent storage otherwise.
|
|
Note: This settings backend compacts settings data into as few ITS nodes as possible.
|
|
On every save, the entire settings array is written to ITS.
|
|
Note: With this backend, all settings are kept in RAM at all times. The RAM consumption
|
|
is controlled by the SETTINGS_TFM_ITS_NUM_ENTRIES Kconfig option.
|
|
|
|
config SETTINGS_NONE
|
|
bool "NONE"
|
|
help
|
|
No storage back-end.
|
|
endchoice
|
|
|
|
config SETTINGS_FCB_NUM_AREAS
|
|
int "Number of flash areas used by the settings subsystem"
|
|
default 8
|
|
depends on SETTINGS_FCB
|
|
help
|
|
Number of areas to allocate in the settings FCB. A smaller number is
|
|
used if the flash hardware cannot support this value.
|
|
|
|
config SETTINGS_FCB_MAGIC
|
|
hex "FCB magic for the settings subsystem"
|
|
default 0xc0ffeeee
|
|
depends on SETTINGS_FCB
|
|
help
|
|
Magic 32-bit word for to identify valid settings area
|
|
|
|
config SETTINGS_FILE_PATH
|
|
string "Default settings file"
|
|
default "/settings/run"
|
|
depends on SETTINGS_FILE
|
|
help
|
|
Full path to the default settings file.
|
|
|
|
config SETTINGS_FILE_MAX_LINES
|
|
int "Compression threshold"
|
|
default 32
|
|
depends on SETTINGS_FILE
|
|
help
|
|
Limit how many items stored in a file before compressing
|
|
|
|
config SETTINGS_NVS_SECTOR_SIZE_MULT
|
|
int "Sector size of the NVS settings area"
|
|
default 1
|
|
depends on SETTINGS_NVS
|
|
help
|
|
The sector size to use for the NVS settings area as a multiple of
|
|
FLASH_ERASE_BLOCK_SIZE.
|
|
|
|
config SETTINGS_NVS_SECTOR_COUNT
|
|
int "Sector count of the NVS settings area"
|
|
default 8
|
|
depends on SETTINGS_NVS
|
|
help
|
|
Number of sectors used for the NVS settings area
|
|
|
|
config SETTINGS_ZMS_SECTOR_SIZE_MULT
|
|
int "Sector size of the ZMS settings area"
|
|
default 1
|
|
depends on SETTINGS_ZMS
|
|
help
|
|
The sector size to use for the ZMS settings area as a multiple of
|
|
FLASH_ERASE_BLOCK_SIZE.
|
|
|
|
config SETTINGS_ZMS_CUSTOM_SECTOR_COUNT
|
|
bool "Customize the sector count of the ZMS settings partition"
|
|
depends on SETTINGS_ZMS
|
|
help
|
|
The number of sectors used by default is the maximum value that can
|
|
fit in the settings storage partition.
|
|
Enabling this config allows to customize the number of used sectors.
|
|
|
|
config SETTINGS_ZMS_SECTOR_COUNT
|
|
int "Sector count of the ZMS settings area"
|
|
default 8
|
|
depends on SETTINGS_ZMS && SETTINGS_ZMS_CUSTOM_SECTOR_COUNT
|
|
help
|
|
Number of sectors used for the ZMS settings area
|
|
|
|
config SETTINGS_ZMS_MAX_COLLISIONS_BITS
|
|
int "number of bits reserved to handle collisions between hash numbers"
|
|
default 4
|
|
depends on SETTINGS_ZMS
|
|
help
|
|
The maximum number of hash collisions needs to be well sized depending
|
|
on the data that is going to be stored in ZMS and its hash values
|
|
|
|
config SETTINGS_ZMS_NO_LL_DELETE
|
|
bool "Disable deletion of Linked list hashes"
|
|
help
|
|
For some applications, the Settings delete operation is too long for
|
|
ZMS because of the linked list update.
|
|
As a tradeoff for performance the linked list is not updated. As a
|
|
result, some nodes will be unused and will occupy some space in the
|
|
storage.
|
|
These nodes will be used again when the same Settings element that has
|
|
been deleted is created again.
|
|
|
|
config SETTINGS_ZMS_LOAD_SUBTREE_PATH
|
|
bool "Load only subtree path if provided"
|
|
help
|
|
Loads first the key defined by the subtree path.
|
|
If the callback handler returns a zero value it will
|
|
continue to look for all the keys under that subtree path.
|
|
If the callback handler returns a non negative value, it
|
|
returns immeditaley.
|
|
|
|
config SETTINGS_SHELL
|
|
bool "Settings shell"
|
|
depends on SHELL
|
|
help
|
|
Enable shell commands for listing and reading the settings. Note that
|
|
reading the settings requires quite a big stack buffer, so the stack
|
|
size of the shell thread may need to be increased to accommodate this
|
|
feature.
|
|
|
|
if SETTINGS_TFM_ITS
|
|
|
|
config SETTINGS_TFM_ITS_NUM_ENTRIES
|
|
int "Maximum number of settings entries"
|
|
default 10
|
|
help
|
|
Configures the maximum number of settings that can be stored simultaneously.
|
|
Note: This value determines the size of a statically-allocated buffer which holds
|
|
all the settings entries in RAM at all times.
|
|
|
|
config SETTINGS_TFM_ITS_LAZY_PERSIST_DELAY_MS
|
|
int "Milliseconds delay before persisting settings"
|
|
default 500
|
|
help
|
|
ITS may block for a long period of time when writing to flash, which may be
|
|
unacceptable for time-sensitive events.
|
|
Data is always persisted to ITS using k_work_delayable, instead of happening in
|
|
the same context as settings_its_save. This option sets the delay with which the
|
|
work item is scheduled. The delay is useful in cases where a PSA ITS write may
|
|
block a time-sensitive event, Bluetooth pairing for example, which requires a
|
|
sequence of settings writes.
|
|
|
|
endif # SETTINGS_TFM_ITS
|
|
|
|
endif # SETTINGS
|