# Copyright (c) 2023, Nordic Semiconductor ASA
# SPDX-License-Identifier: Apache-2.0

menuconfig RETENTION
	bool "Retention support"
	imply CRC
	depends on RETAINED_MEM
	depends on DT_HAS_ZEPHYR_RETENTION_ENABLED
	help
	  Enables support for the retention system, which uses retained memory
	  drivers.

if RETENTION

config RETENTION_INIT_PRIORITY
	int "Retention devices init priority"
	default 86
	help
	  Retention device initialization priority (must be higher than init
	  priorities for retained memory drivers).

config RETENTION_MUTEXES
	bool
	default y
	depends on MULTITHREADING
	depends on !RETENTION_MUTEX_FORCE_DISABLE

config RETENTION_MUTEX_FORCE_DISABLE
	bool "Disable retention mutex support"
	depends on MULTITHREADING
	help
	  Disable use of mutexes which prevent issues with concurrent retention
	  device access. This option should only be enabled when retention
	  access is required in an ISR or for special use cases.

config RETENTION_BUFFER_SIZE
	int "Retention stack buffer sizes"
	default 16
	range 1 4096
	help
	  Size of buffers (stack based) used when reading and writing data
	  from/to the retention device.

menu "Retention modules"

config RETENTION_BOOT_MODE
	bool "Boot mode"
	help
	  Adds a boot mode system that allows for changing execution flow
	  depending upon the value of a boot mode parameter. Can be used for
	  e.g. button-less bootloader serial recovery mode entering from the
	  application.

	  In order to use this, a retention area with at least 1 usable user
	  byte must be created and set as the "zephyr,boot-mode" chosen node
	  via device tree.

source "subsys/retention/Kconfig.blinfo"

endmenu

module = RETENTION
module-str = retention
source "subsys/logging/Kconfig.template.log_config"

endif # RETENTION
