# 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_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 pull bits to zero, regardless.

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
