# SPDX-License-Identifier: Apache-2.0

config SOC_FLASH_MCUX
	bool "MCUX flash shim driver"
	default y
	depends on DT_HAS_NXP_LPC_IAP_ENABLED || \
		   DT_HAS_NXP_KINETIS_FTFA_ENABLED || \
		   DT_HAS_NXP_KINETIS_FTFE_ENABLED || \
		   DT_HAS_NXP_KINETIS_FTFL_ENABLED
	select FLASH_HAS_PAGE_LAYOUT
	select FLASH_HAS_DRIVER_ENABLED
	select MPU_ALLOW_FLASH_WRITE if ARM_MPU
	help
	  Enables the MCUX flash shim driver.
	  WARNING: This driver will disable the system interrupts for
	  the duration of the flash erase/write operations. This will
	  have an impact on the overall system performance - whether
	  this is acceptable or not will depend on the use case.

if SOC_FLASH_MCUX

config CHECK_BEFORE_READING
	bool "Verify area before reading it"
	default y if SOC_SERIES_LPC55XXX
	help
	  Do a margin check flash command before reading an area.
	  This feature prevents erroneous/forbidden reading. Some ECC enabled
	  devices will crash when reading an erased or wrongly programmed area.

endif # SOC_FLASH_MCUX

if DT_HAS_NXP_IMX_FLEXSPI_ENABLED

menu "Flexspi flash driver"

config FLASH_MCUX_FLEXSPI_NOR
	bool "MCUX FlexSPI NOR driver"
	default y
	depends on DT_HAS_NXP_IMX_FLEXSPI_NOR_ENABLED
	select FLASH_HAS_PAGE_LAYOUT
	select FLASH_HAS_DRIVER_ENABLED
	select MEMC
	select MEMC_MCUX_FLEXSPI

config FLASH_MCUX_FLEXSPI_MX25UM51345G
	bool "MCUX FlexSPI MX25UM51345G driver"
	default y
	depends on DT_HAS_NXP_IMX_FLEXSPI_MX25UM51345G_ENABLED
	select FLASH_HAS_PAGE_LAYOUT
	select FLASH_HAS_DRIVER_ENABLED
	select MEMC
	select MEMC_MCUX_FLEXSPI

config FLASH_MCUX_FLEXSPI_HYPERFLASH
	bool "MCUX FlexSPI HYPERFLASH driver"
	default y
	depends on DT_HAS_NXP_IMX_FLEXSPI_HYPERFLASH_ENABLED
	select FLASH_HAS_PAGE_LAYOUT
	select FLASH_HAS_DRIVER_ENABLED
	select MEMC
	select MEMC_MCUX_FLEXSPI

endmenu

if FLASH_MCUX_FLEXSPI_MX25UM51345G

choice FLASH_MCUX_FLEXSPI_MX25UM51345G_OPI_MODE
	prompt "FlexSPI MX25UM51345G OPI mode"
	default FLASH_MCUX_FLEXSPI_MX25UM51345G_OPI_DTR
	help
	  Select the MX25UM51345G octal flash operation mode(Octal I/O STR
	  or Octal I/O DTR).

config FLASH_MCUX_FLEXSPI_MX25UM51345G_OPI_STR
	bool "STR"

config FLASH_MCUX_FLEXSPI_MX25UM51345G_OPI_DTR
	bool "DTR"

endchoice

endif # FLASH_MCUX_FLEXSPI_MX25UM51345G

config FLASH_MCUX_FLEXSPI_NOR_WRITE_BUFFER
	bool "MCUX FlexSPI NOR write RAM buffer"
	default y
	depends on (FLASH_MCUX_FLEXSPI_NOR || FLASH_MCUX_FLEXSPI_MX25UM51345G)
	help
	  Copy the data to a RAM buffer before writing it to the flash.
	  This prevents faults when the data to write would be located on the
	  flash itself.

config FLASH_MCUX_FLEXSPI_HYPERFLASH_WRITE_BUFFER
	bool "MCUX FlexSPI HYPERFLASH write RAM buffer"
	default y
	depends on FLASH_MCUX_FLEXSPI_HYPERFLASH
	help
	  Copy the data to a RAM buffer before writing it to the flash.
	  This prevents faults when the data to write would be located on the
	  flash itself.

config FLASH_MCUX_FLEXSPI_XIP
	bool "MCUX FlexSPI flash access with xip"
	default y
	depends on MEMC_MCUX_FLEXSPI
	depends on (CODE_FLEXSPI || CODE_FLEXSPI2 || SOC_SERIES_IMX_RT6XX)
	select XIP
	help
	  Allows using the flash API while running in XIP.
	  WARNING: It is possible to overwrite the running application itself.

if FLASH_MCUX_FLEXSPI_XIP

choice FLASH_MCUX_FLEXSPI_XIP_MEM_TARGET
	prompt "FlexSPI drivers relocation target"
	default FLASH_MCUX_FLEXSPI_XIP_MEM_ITCM
	help
	  Select the location to run the FlexSPI drivers when using
	  the flash API.

config FLASH_MCUX_FLEXSPI_XIP_MEM_ITCM
	bool "ITCM"
	select CODE_DATA_RELOCATION

config FLASH_MCUX_FLEXSPI_XIP_MEM_SRAM
	bool "SRAM"
	select CODE_DATA_RELOCATION_SRAM

endchoice

config FLASH_MCUX_FLEXSPI_XIP_MEM
	string
	default "ITCM" if FLASH_MCUX_FLEXSPI_XIP_MEM_ITCM
	default "SRAM" if FLASH_MCUX_FLEXSPI_XIP_MEM_SRAM

endif # FLASH_MCUX_FLEXSPI_XIP

endif # HAS_MCUX_FLEXSPI
