# SPDX-License-Identifier: Apache-2.0

config SOC_FLASH_MCUX
	bool "MCUX flash shim driver"
	default y
	depends on DT_HAS_NXP_KINETIS_FTFA_ENABLED || \
		   DT_HAS_NXP_KINETIS_FTFE_ENABLED || \
		   DT_HAS_NXP_KINETIS_FTFL_ENABLED || \
		   DT_HAS_NXP_IAP_FMC55_ENABLED || \
		   DT_HAS_NXP_IAP_FMC553_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.

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 "RAM"
	select CODE_DATA_RELOCATION_SRAM

endchoice

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

endif # FLASH_MCUX_FLEXSPI_XIP

endif # HAS_MCUX_FLEXSPI
