# Copyright (c) 2018 Savoir-Faire Linux.
# Copyright (c) 2024 Nordic Semiconductor ASA
#
# SPDX-License-Identifier: Apache-2.0

menuconfig SPI_NOR
	bool "SPI NOR Flash"
	default y
	depends on DT_HAS_JEDEC_SPI_NOR_ENABLED
	select FLASH_HAS_DRIVER_ENABLED
	select FLASH_HAS_EXPLICIT_ERASE
	select FLASH_HAS_PAGE_LAYOUT
	select FLASH_JESD216
	select FLASH_HAS_EX_OP
	select SPI

if SPI_NOR

choice SPI_NOR_SFDP
	prompt "Source for Serial Flash Discoverable Parameters"
	default SPI_NOR_SFDP_MINIMAL

config SPI_NOR_SFDP_MINIMAL
	bool "Fixed flash configuration"
	help
	  Synthesize a minimal configuration assuming 256 By page size (or as
	  set by the page-size devicetree property) and
	  standard 4 KiBy and 64 KiBy erase instructions.  Requires the size and
	  jedec-id properties in the devicetree jedec,spi-nor node.

config SPI_NOR_SFDP_DEVICETREE
	bool "Basic Flash Parameters from devicetree node"
	help
	  The JESD216 Basic Flash Parameters table must be provided in the
	  sfdp-bfp property in devicetree.  The size and jedec-id properties are
	  also required.

config SPI_NOR_SFDP_RUNTIME
	bool "Read flash parameters at runtime"
	help
	  Read all flash device characteristics from the device at runtime.
	  This option is the most flexible as it should provide functionality
	  for all supported JESD216-compatible devices.

endchoice

config SPI_NOR_INIT_PRIORITY
	int "Init priority"
	default 80
	help
	  Device driver initialization priority.
	  Device is connected to SPI bus, it has to
	  be initialized after SPI driver.

config SPI_NOR_CS_WAIT_DELAY
	int "Delay time in us"
	default 0
	help
	  This is the wait delay (in us) to allow for CS switching to take effect

config SPI_NOR_SLEEP_WHILE_WAITING_UNTIL_READY
	bool "Sleep while waiting for flash operations to complete"
	default y
	help
	  Flash operations can take anywhere from 1ms to 240 seconds to
	  complete. Enabling this option adds a delay between polls on the
	  status register for slow operations. Disabling this option can
	  result in significant flash savings if this driver is the only user
	  of "k_sleep". This can be the case when building as a bootloader.

config SPI_NOR_FLASH_LAYOUT_PAGE_SIZE
	int "Page size to use for FLASH_LAYOUT feature"
	default 65536
	help
	  When CONFIG_FLASH_PAGE_LAYOUT is used this driver will support
	  that API.  By default the page size corresponds to the block
	  size (65536).  Other options include the 32K-byte erase size
	  (32768), the sector size (4096), or any non-zero multiple of the
	  sector size.

config SPI_NOR_ACTIVE_DWELL_MS
	int "Dwell period (ms) after last use to stay in active mode"
	depends on PM_DEVICE_RUNTIME
	default 10
	help
	  Flash accesses commonly occur in bursts, where entering and exiting DPD
	  mode between each access adds significantly to the total operation time.
	  This option controls how long to remain in active mode after each API
	  call, eliminating the active->idle->active transition sequence if another
	  transaction occurs before the dwell period expires.

endif # SPI_NOR
