# Flash simulator config

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

menuconfig FLASH_SIMULATOR
	bool "Flash simulator"
	default y
	depends on DT_HAS_ZEPHYR_SIM_FLASH_ENABLED
	select FLASH_HAS_PAGE_LAYOUT
	select FLASH_HAS_DRIVER_ENABLED
	help
	  Enable the flash simulator.

if FLASH_SIMULATOR

config FLASH_SIMULATOR_UNALIGNED_READ
	bool "Allow read access to be unaligned"
	default y
	help
	 If selected, the reading operation does not check if access is aligned.
	 Disable this option only if you want to simulate
	 a specific FLASH interface that requires aligned read access.

config FLASH_SIMULATOR_EXPLICIT_ERASE
	bool "Program-erase device"
	select FLASH_HAS_EXPLICIT_ERASE
	default y
	help
	  Explicit erase (non-erase-on-write) Flash, which is device that requires erase
	  to erase-value prior to write as it only allows to change bits from erase-value
	  to the opposite.

config FLASH_SIMULATOR_RAMLIKE
	bool
	default y if !FLASH_SIMULATOR_EXPLICIT_ERASE
	select FLASH_HAS_NO_EXPLICIT_ERASE
	select FLASH_SIMULATOR_DOUBLE_WRITES
	help
	  This is used for setting FLASH_HAS_NO_EXPLICIT_ERASE.

config FLASH_SIMULATOR_DOUBLE_WRITES
	bool "Allow program units to be programmed more than once"
	help
	 If selected, writing to a non-erased program unit will succeed, otherwise, it will return an error.
	 Keep in mind that write operations can only change value of a bit from erase-value to the
	 opposite.
	 This option does not impact FLASH_SIMULATOR_RAMLIKE.
	 In case when FLASH_SIMULATOR_EXPLICIT_ERASE is selected multiple writes to the same bit
	 but only change from erase-value to opposite will be registered.

config FLASH_SIMULATOR_SIMULATE_TIMING
	bool "Hardware timing simulation"

if FLASH_SIMULATOR_SIMULATE_TIMING

config FLASH_SIMULATOR_MIN_READ_TIME_US
	int "Minimum read time (µS)"
	default 2
	range 1 1000000

config FLASH_SIMULATOR_MIN_WRITE_TIME_US
	int "Minimum write time (µS)"
	default 100
	range 1 1000000

config FLASH_SIMULATOR_MIN_ERASE_TIME_US
	int "Minimum erase time (µS)"
	default 2000
	range 1 1000000

endif

config FLASH_SIMULATOR_STATS
	bool "flash operations statistic"
	default y
	select STATS
	select STATS_NAMES
	help
	  Gather statistic measurement for flash simulator operations using the
	  statistic subsystem.

config FLASH_SIMULATOR_STAT_PAGE_COUNT
	int "Pages under statistic"
	depends on FLASH_SIMULATOR_STATS
	range 1 256
	default 256
	help
	  Only up to this number of beginning pages will be tracked
	  while catching dedicated flash operations and thresholds.
	  This number is not automatic because implementation uses
	  UNTIL_REPEAT() macro, which is limited to take explicitly
	  number of iterations.
	  This is why it's not possible to calculate the number of pages with
	  preprocessor using DT properties.

endif # FLASH_SIMULATOR
