# 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_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

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

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_PAGE_LAYOUT
	bool "API for retrieving the layout of pages"
	depends on FLASH_HAS_PAGE_LAYOUT
	default y
	help
	  Enables API for retrieving the layout of flash memory pages.

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

source "drivers/flash/Kconfig.b91"

source "drivers/flash/Kconfig.cc13xx_cc26xx"

source "drivers/flash/Kconfig.at45"

source "drivers/flash/Kconfig.esp32"

source "drivers/flash/Kconfig.it8xxx2"

source "drivers/flash/Kconfig.nrf"

source "drivers/flash/Kconfig.lpc"

source "drivers/flash/Kconfig.mcux"

source "drivers/flash/Kconfig.nios2_qspi"

source "drivers/flash/Kconfig.npcx_fiu"

source "drivers/flash/Kconfig.gecko"

source "drivers/flash/Kconfig.nor"

source "drivers/flash/Kconfig.rpi_pico"

source "drivers/flash/Kconfig.stm32"

source "drivers/flash/Kconfig.stm32_qspi"

source "drivers/flash/Kconfig.stm32_ospi"

source "drivers/flash/Kconfig.sam0"

source "drivers/flash/Kconfig.sam"

source "drivers/flash/Kconfig.simulator"

source "drivers/flash/Kconfig.rv32m1"

source "drivers/flash/Kconfig.nordic_qspi_nor"

source "drivers/flash/Kconfig.smartbond"

source "drivers/flash/Kconfig.cadence_qspi_nor"

source "drivers/flash/Kconfig.gd32"

source "drivers/flash/Kconfig.xmc4xxx"

source "drivers/flash/Kconfig.ifx_cat1"
source "drivers/flash/Kconfig.cadence_nand"

source "drivers/flash/Kconfig.numaker"

source "drivers/flash/Kconfig.nxp_s32"

source "drivers/flash/Kconfig.andes"

source "drivers/flash/Kconfig.ambiq"

endif # FLASH
