# Flash driver configuration options

# Copyright (c) 2016 Intel Corporation
# SPDX-License-Identifier: Apache-2.0

#
# Flash driver
#
config FLASH_HAS_DRIVER_ENABLED
	bool
	help
	  This option is enabled when any flash driver is enabled.

config FLASH_HAS_EX_OP
	bool
	help
	  This option is selected by drivers that support flash extended
	  operations.

config FLASH_HAS_EXPLICIT_ERASE
	bool
	help
	  Device does not do erase-on-write (erase-on-program, auto-erase
	  on write) and requires explicit erase procedure to be programmed
	  with random value, in place where it has already been programmed with
	  some other value, as program can only change bits from erased-value
	  to the opposite.
	  All pure Flash devices are evolution of EEPROM where erase has
	  been separated from write, EEPROM has erase-on-write, giving
	  it advantage of higher write speeds at a cost of larger erase block.
	  Note that explicit-erase capability does not warrants that
	  write without erase is not allowed, taking the above restrictions,
	  it only states that write of a random information will require
	  erase.
	  Erase is usually performed in pages, as we have chosen to name
	  the unit in Zephyr, that may have different naming in device
	  specifications, like pages, sectors or blocks, and may vary
	  in size, depending how they are named by vendor.
	  This option should be selected by drivers that serve devices with
	  such characteristic and is used and may be used by users to provide
	  paths in code that only serve such devices, and could be
	  optimized-out by compiler in case where there is no such device in
	  a system.

config FLASH_HAS_NO_EXPLICIT_ERASE
	bool
	help
	  Device does not require explicit erase before programming
	  a new random value at any location that has been previously
	  programmed with some other value.
	  Note that the device may have erase-on-write (auto-erase),
	  as for example in EEPROM devices, but may also have no erase
	  at all.
	  A device driver may still provide erase callback,
	  especially if it is able to perform erase to accelerate
	  further writes or is able to fill the area requested for
	  erase, with single value, faster than consecutive writes
	  that would be used to emulate erase.
	  This option should be selected by drivers that serve
	  devices with such characteristic and is used and may be
	  used by users to provide paths in code that only serve
	  such devices, and could be optimized-out by compiler in
	  case where there is no such device in a system.
	  This option should be selected for any device that
	  can change storage bits, by write, from any value to opposite
	  value at any time.
	  When your driver sets this option you also need to set
	  no_explicit_erase capability in your drivers flash_parameters.

config FLASH_HAS_PAGE_LAYOUT
	bool
	help
	  This option is enabled when the SoC flash driver supports
	  retrieving the layout of flash memory pages.

config FLASH_JESD216
	bool
	help
	 Selected by drivers that support JESD216-compatible flash
	 devices to enable building a common support module.

menuconfig FLASH
	bool "Flash drivers"
	help
	  Enable support for the flash hardware.

if FLASH

config FLASH_JESD216_API
	bool "Provide API to read JESD216 flash parameters"
	depends on FLASH_JESD216
	help
	  This option extends the Zephyr flash API with the ability
	  to access the Serial Flash Discoverable Parameter section
	  allowing runtime determination of serial flash parameters
	  for flash drivers that expose this capability.

config FLASH_SHELL
	bool "Flash shell"
	depends on SHELL && FLASH_PAGE_LAYOUT
	select MPU_ALLOW_FLASH_WRITE if ARM_MPU
	help
	  Enable the flash shell with flash related commands such as test,
	  write, read and erase.

if FLASH_SHELL

config FLASH_SHELL_TEST_COMMANDS
	bool "Flash read/write/erase test commands"
	select CBPRINTF_FP_SUPPORT
	help
	  Enable additional flash shell commands for performing
	  read/write/erase tests with speed output.

config FLASH_SHELL_BUFFER_SIZE
	hex "Flash shell buffer size"
	default 0x4000 if FLASH_SHELL_TEST_COMMANDS
	default 0x1000
	range 0x400 0x1000000
	help
	  Size of the buffer used for flash commands, will determine the
	  maximum size that can be used with a read/write test.

endif # FLASH_SHELL

config FLASH_FILL_BUFFER_SIZE
	int "Buffer size of flash_fill function"
	default 32
	help
	  Size of a buffer used by flash_fill function to fill a device with
	  specific value; this buffer is allocated on stack.
	  The buffer is needed as most devices have write-block alignment
	  requirements that which imposes minimal size of data, which can
	  be written to a device, and alignment of write offset.
	  Even if device does not have such requirement, filling device by
	  single bytes is not efficient.
	  Value selected here should be a multiple of the largest write-block-size
	  among all the memory devices used in system.

if FLASH_HAS_PAGE_LAYOUT

config FLASH_PAGE_LAYOUT
	bool "API for retrieving the layout of pages"
	default FLASH_HAS_PAGE_LAYOUT
	help
	  Enables API for retrieving the layout of flash memory pages.

endif

config FLASH_EX_OP_ENABLED
	bool "API for extended flash operations"
	depends on FLASH_HAS_EX_OP
	default n
	help
	  Enables flash extended operations API. It can be used to perform
	  non-standard operations e.g. manipulating flash protection.

config FLASH_INIT_PRIORITY
	int "Flash init priority"
	default KERNEL_INIT_PRIORITY_DEVICE
	help
	  Flash driver device initialization priority. This initialization
	  priority is used unless the driver implementation has its own
	  initialization priority

# zephyr-keep-sorted-start
source "drivers/flash/Kconfig.ambiq"
source "drivers/flash/Kconfig.andes"
source "drivers/flash/Kconfig.at45"
source "drivers/flash/Kconfig.b91"
source "drivers/flash/Kconfig.cadence_nand"
source "drivers/flash/Kconfig.cadence_qspi_nor"
source "drivers/flash/Kconfig.cc13xx_cc26xx"
source "drivers/flash/Kconfig.esp32"
source "drivers/flash/Kconfig.gd32"
source "drivers/flash/Kconfig.gecko"
source "drivers/flash/Kconfig.ifx_cat1"
source "drivers/flash/Kconfig.it8xxx2"
source "drivers/flash/Kconfig.lpc"
source "drivers/flash/Kconfig.max32"
source "drivers/flash/Kconfig.mcux"
source "drivers/flash/Kconfig.mspi"
source "drivers/flash/Kconfig.nios2_qspi"
source "drivers/flash/Kconfig.nor"
source "drivers/flash/Kconfig.nordic_qspi_nor"
source "drivers/flash/Kconfig.npcx_fiu"
source "drivers/flash/Kconfig.nrf"
source "drivers/flash/Kconfig.nrf_mram"
source "drivers/flash/Kconfig.nrf_rram"
source "drivers/flash/Kconfig.numaker"
source "drivers/flash/Kconfig.numaker_rmc"
source "drivers/flash/Kconfig.nxp_s32"
source "drivers/flash/Kconfig.renesas_ra"
source "drivers/flash/Kconfig.rpi_pico"
source "drivers/flash/Kconfig.rv32m1"
source "drivers/flash/Kconfig.sam"
source "drivers/flash/Kconfig.sam0"
source "drivers/flash/Kconfig.si32"
source "drivers/flash/Kconfig.simulator"
source "drivers/flash/Kconfig.smartbond"
source "drivers/flash/Kconfig.stm32"
source "drivers/flash/Kconfig.stm32_ospi"
source "drivers/flash/Kconfig.stm32_qspi"
source "drivers/flash/Kconfig.stm32_xspi"
source "drivers/flash/Kconfig.xmc4xxx"
# zephyr-keep-sorted-stop

module = FLASH
module-str = flash
source "subsys/logging/Kconfig.template.log_config"

endif # FLASH
