
menuconfig MTD_RAW_NAND
	bool "Raw NAND Device Support"
if MTD_RAW_NAND

config SYS_NAND_SELF_INIT
	bool
	help
	  This option, if enabled, provides more flexible and linux-like
	  NAND initialization process.

config SYS_NAND_DRIVER_ECC_LAYOUT
	bool
	help
	  Omit standard ECC layouts to safe space. Select this if your driver
	  is known to provide its own ECC layout.

config SYS_NAND_USE_FLASH_BBT
	bool "Enable BBT (Bad Block Table) support"
	help
	  Enable the BBT (Bad Block Table) usage.

config NAND_ATMEL
	bool "Support Atmel NAND controller"
	imply SYS_NAND_USE_FLASH_BBT
	help
	  Enable this driver for NAND flash platforms using an Atmel NAND
	  controller.

if NAND_ATMEL

config ATMEL_NAND_HWECC
	bool "Atmel Hardware ECC"

config ATMEL_NAND_HW_PMECC
	bool "Atmel Programmable Multibit ECC (PMECC)"
	select ATMEL_NAND_HWECC
	help
	  The Programmable Multibit ECC (PMECC) controller is a programmable
	  binary BCH(Bose, Chaudhuri and Hocquenghem) encoder and decoder.

config PMECC_CAP
	int "PMECC Correctable ECC Bits"
	depends on ATMEL_NAND_HW_PMECC
	default 2
	help
	  Correctable ECC bits, can be 2, 4, 8, 12, and 24.

config PMECC_SECTOR_SIZE
	int "PMECC Sector Size"
	depends on ATMEL_NAND_HW_PMECC
	default 512
	help
	  Sector size, in bytes, can be 512 or 1024.

config SPL_GENERATE_ATMEL_PMECC_HEADER
	bool "Atmel PMECC Header Generation"
	select ATMEL_NAND_HWECC
	select ATMEL_NAND_HW_PMECC
	help
	  Generate Programmable Multibit ECC (PMECC) header for SPL image.

endif

config NAND_BRCMNAND
	bool "Support Broadcom NAND controller"
	depends on OF_CONTROL && DM && DM_MTD
	help
	  Enable the driver for NAND flash on platforms using a Broadcom NAND
	  controller.

config NAND_BRCMNAND_6368
	bool "Support Broadcom NAND controller on bcm6368"
	depends on NAND_BRCMNAND && ARCH_BMIPS
	help
	  Enable support for broadcom nand driver on bcm6368.

config NAND_BRCMNAND_68360
       bool "Support Broadcom NAND controller on bcm68360"
       depends on NAND_BRCMNAND && ARCH_BCM68360
       help
         Enable support for broadcom nand driver on bcm68360.

config NAND_BRCMNAND_6838
       bool "Support Broadcom NAND controller on bcm6838"
       depends on NAND_BRCMNAND && ARCH_BMIPS && SOC_BMIPS_BCM6838
       help
         Enable support for broadcom nand driver on bcm6838.

config NAND_BRCMNAND_6858
       bool "Support Broadcom NAND controller on bcm6858"
       depends on NAND_BRCMNAND && ARCH_BCM6858
       help
         Enable support for broadcom nand driver on bcm6858.

config NAND_BRCMNAND_63158
       bool "Support Broadcom NAND controller on bcm63158"
       depends on NAND_BRCMNAND && ARCH_BCM63158
       help
         Enable support for broadcom nand driver on bcm63158.

config NAND_DAVINCI
	bool "Support TI Davinci NAND controller"
	help
	  Enable this driver for NAND flash controllers available in TI Davinci
	  and Keystone2 platforms

config KEYSTONE_RBL_NAND
	depends on ARCH_KEYSTONE
	def_bool y

config SPL_NAND_LOAD
	def_bool y
	depends on NAND_DAVINCI && ARCH_DAVINCI && SPL_NAND_SUPPORT

config NAND_DENALI
	bool
	select SYS_NAND_SELF_INIT
	imply CMD_NAND

config NAND_DENALI_DT
	bool "Support Denali NAND controller as a DT device"
	select NAND_DENALI
	depends on OF_CONTROL && DM_MTD
	help
	  Enable the driver for NAND flash on platforms using a Denali NAND
	  controller as a DT device.

config NAND_LPC32XX_MLC
	bool "Support LPC32XX_MLC controller"
	help
	  Enable the LPC32XX MLC NAND controller.

config NAND_LPC32XX_SLC
	bool "Support LPC32XX_SLC controller"
	help
	  Enable the LPC32XX SLC NAND controller.

config NAND_OMAP_GPMC
	bool "Support OMAP GPMC NAND controller"
	depends on ARCH_OMAP2PLUS
	help
	  Enables omap_gpmc.c driver for OMAPx and AMxxxx platforms.
	  GPMC controller is used for parallel NAND flash devices, and can
	  do ECC calculation (not ECC error detection) for HAM1, BCH4, BCH8
	  and BCH16 ECC algorithms.

config NAND_OMAP_GPMC_PREFETCH
	bool "Enable GPMC Prefetch"
	depends on NAND_OMAP_GPMC
	default y
	help
	  On OMAP platforms that use the GPMC controller
	  (CONFIG_NAND_OMAP_GPMC_PREFETCH), this options enables the code that
	  uses the prefetch mode to speed up read operations.

config NAND_OMAP_ELM
	bool "Enable ELM driver for OMAPxx and AMxx platforms."
	depends on NAND_OMAP_GPMC && !OMAP34XX
	help
	  ELM controller is used for ECC error detection (not ECC calculation)
	  of BCH4, BCH8 and BCH16 ECC algorithms.
	  Some legacy platforms like OMAP3xx do not have in-built ELM h/w engine,
	  thus such SoC platforms need to depend on software library for ECC error
	  detection. However ECC calculation on such plaforms would still be
	  done by GPMC controller.

config NAND_VF610_NFC
	bool "Support for Freescale NFC for VF610"
	select SYS_NAND_SELF_INIT
	select SYS_NAND_DRIVER_ECC_LAYOUT
	imply CMD_NAND
	help
	  Enables support for NAND Flash Controller on some Freescale
	  processors like the VF610, MCF54418 or Kinetis K70.
	  The driver supports a maximum 2k page size. The driver
	  currently does not support hardware ECC.

if NAND_VF610_NFC

config NAND_VF610_NFC_DT
        bool "Support Vybrid's vf610 NAND controller as a DT device"
        depends on OF_CONTROL && DM_MTD
        help
          Enable the driver for Vybrid's vf610 NAND flash on platforms
	  using device tree.

choice
	prompt "Hardware ECC strength"
	depends on NAND_VF610_NFC
	default SYS_NAND_VF610_NFC_45_ECC_BYTES
	help
	  Select the ECC strength used in the hardware BCH ECC block.

config SYS_NAND_VF610_NFC_45_ECC_BYTES
	bool "24-error correction (45 ECC bytes)"

config SYS_NAND_VF610_NFC_60_ECC_BYTES
	bool "32-error correction (60 ECC bytes)"

endchoice

endif

config NAND_PXA3XX
	bool "Support for NAND on PXA3xx and Armada 370/XP/38x"
	select SYS_NAND_SELF_INIT
	select DM_MTD
	select REGMAP
	select SYSCON
	imply CMD_NAND
	help
	  This enables the driver for the NAND flash device found on
	  PXA3xx processors (NFCv1) and also on Armada 370/XP (NFCv2).

config NAND_SUNXI
	bool "Support for NAND on Allwinner SoCs"
	default ARCH_SUNXI
	depends on MACH_SUN4I || MACH_SUN5I || MACH_SUN7I || MACH_SUN8I
	select SYS_NAND_SELF_INIT
	select SYS_NAND_U_BOOT_LOCATIONS
	select SPL_NAND_SUPPORT
	imply CMD_NAND
	---help---
	Enable support for NAND. This option enables the standard and
	SPL drivers.
	The SPL driver only supports reading from the NAND using DMA
	transfers.

if NAND_SUNXI

config NAND_SUNXI_SPL_ECC_STRENGTH
	int "Allwinner NAND SPL ECC Strength"
	default 64

config NAND_SUNXI_SPL_ECC_SIZE
	int "Allwinner NAND SPL ECC Step Size"
	default 1024

config NAND_SUNXI_SPL_USABLE_PAGE_SIZE
	int "Allwinner NAND SPL Usable Page Size"
	default 1024

endif

config NAND_ARASAN
	bool "Configure Arasan Nand"
	select SYS_NAND_SELF_INIT
	depends on DM_MTD
	imply CMD_NAND
	help
	  This enables Nand driver support for Arasan nand flash
	  controller. This uses the hardware ECC for read and
	  write operations.

config NAND_MXC
	bool "MXC NAND support"
	depends on CPU_ARM926EJS || CPU_ARM1136 || MX5
	imply CMD_NAND
	help
	  This enables the NAND driver for the NAND flash controller on the
	  i.MX27 / i.MX31 / i.MX5 rocessors.

config NAND_MXS
	bool "MXS NAND support"
	depends on MX23 || MX28 || MX6 || MX7 || IMX8 || IMX8M
	select SYS_NAND_SELF_INIT
	imply CMD_NAND
	select APBH_DMA
	select APBH_DMA_BURST if ARCH_MX6 || ARCH_MX7 || ARCH_IMX8 || ARCH_IMX8M
	select APBH_DMA_BURST8 if ARCH_MX6 || ARCH_MX7 || ARCH_IMX8 || ARCH_IMX8M
	help
	  This enables NAND driver for the NAND flash controller on the
	  MXS processors.

if NAND_MXS

config NAND_MXS_DT
	bool "Support MXS NAND controller as a DT device"
	depends on OF_CONTROL && DM_MTD
	help
	  Enable the driver for MXS NAND flash on platforms using
	  device tree.

config NAND_MXS_USE_MINIMUM_ECC
	bool "Use minimum ECC strength supported by the controller"
	default false

endif

config NAND_ZYNQ
	bool "Support for Zynq Nand controller"
	select SYS_NAND_SELF_INIT
	select DM_MTD
	imply CMD_NAND
	help
	  This enables Nand driver support for Nand flash controller
	  found on Zynq SoC.

config NAND_ZYNQ_USE_BOOTLOADER1_TIMINGS
	bool "Enable use of 1st stage bootloader timing for NAND"
	depends on NAND_ZYNQ
	help
	  This flag prevent U-boot reconfigure NAND flash controller and reuse
	  the NAND timing from 1st stage bootloader.

config NAND_OCTEONTX
	bool "Support for OcteonTX NAND controller"
	select SYS_NAND_SELF_INIT
	imply CMD_NAND
	help
	 This enables Nand flash controller hardware found on the OcteonTX
	 processors.

config NAND_OCTEONTX_HW_ECC
	bool "Support Hardware ECC for OcteonTX NAND controller"
	depends on NAND_OCTEONTX
	default y
	help
	 This enables Hardware BCH engine found on the OcteonTX processors to
	 support ECC for NAND flash controller.

config NAND_STM32_FMC2
	bool "Support for NAND controller on STM32MP SoCs"
	depends on ARCH_STM32MP
	select SYS_NAND_SELF_INIT
	imply CMD_NAND
	help
	  Enables support for NAND Flash chips on SoCs containing the FMC2
	  NAND controller. This controller is found on STM32MP SoCs.
	  The controller supports a maximum 8k page size and supports
	  a maximum 8-bit correction error per sector of 512 bytes.

config CORTINA_NAND
	bool "Support for NAND controller on Cortina-Access SoCs"
	depends on CORTINA_PLATFORM
	select SYS_NAND_SELF_INIT
	select DM_MTD
	imply CMD_NAND
	help
	  Enables support for NAND Flash chips on Coartina-Access SoCs platform
	  This controller is found on Presidio/Venus SoCs.
	  The controller supports a maximum 8k page size and supports
	  a maximum 40-bit error correction per sector of 1024 bytes.

config ROCKCHIP_NAND
	bool "Support for NAND controller on Rockchip SoCs"
	depends on ARCH_ROCKCHIP
	select SYS_NAND_SELF_INIT
	select DM_MTD
	imply CMD_NAND
	help
	  Enables support for NAND Flash chips on Rockchip SoCs platform.
	  This controller is found on Rockchip SoCs.
	  There are four different versions of NAND FLASH Controllers,
	  including:
	    NFC v600: RK2928, RK3066, RK3188
	    NFC v622: RK3036, RK3128
	    NFC v800: RK3308, RV1108
	    NFC v900: PX30, RK3326

comment "Generic NAND options"

config SYS_NAND_BLOCK_SIZE
	hex "NAND chip eraseblock size"
	depends on ARCH_SUNXI || SPL_NAND_SUPPORT || TPL_NAND_SUPPORT
	depends on !NAND_MXS_DT && !NAND_DENALI_DT && !NAND_LPC32XX_MLC
	help
	  Number of data bytes in one eraseblock for the NAND chip on the
	  board. This is the multiple of NAND_PAGE_SIZE and the number of
	  pages.

config SYS_NAND_ONFI_DETECTION
	bool "Enable detection of ONFI compliant devices during probe"
	help
	  Enables detection of ONFI compliant devices during probe.
	  And fetching device parameters flashed on device, by parsing
	  ONFI parameter page.

config SYS_NAND_PAGE_COUNT
	hex "NAND chip page count"
	depends on SPL_NAND_SUPPORT && (NAND_ATMEL || NAND_MXC || \
		SPL_NAND_AM33XX_BCH || SPL_NAND_LOAD || SPL_NAND_SIMPLE)
	help
	  Number of pages in the NAND chip.

config SYS_NAND_PAGE_SIZE
	hex "NAND chip page size"
	depends on ARCH_SUNXI || NAND_OMAP_GPMC || NAND_LPC32XX_SLC || \
		SPL_NAND_SIMPLE || (NAND_MXC && SPL_NAND_SUPPORT) || \
		(NAND_ATMEL && SPL_NAND_SUPPORT) || SPL_GENERATE_ATMEL_PMECC_HEADER
	depends on !NAND_MXS_DT && !NAND_DENALI_DT && !NAND_LPC32XX_MLC
	help
	  Number of data bytes in one page for the NAND chip on the
	  board, not including the OOB area.

config SYS_NAND_OOBSIZE
	hex "NAND chip OOB size"
	depends on ARCH_SUNXI || NAND_OMAP_GPMC || NAND_LPC32XX_SLC || \
		SPL_NAND_SIMPLE || (NAND_MXC && SPL_NAND_SUPPORT) || \
		(NAND_ATMEL && SPL_NAND_SUPPORT) || SPL_GENERATE_ATMEL_PMECC_HEADER
	depends on !NAND_MXS_DT && !NAND_DENALI_DT && !NAND_LPC32XX_MLC
	help
	  Number of bytes in the Out-Of-Band area for the NAND chip on
	  the board.

# Enhance depends when converting drivers to Kconfig which use this config
# option (mxc_nand, ndfc, omap_gpmc).
config SYS_NAND_BUSWIDTH_16BIT
	bool "Use 16-bit NAND interface"
	depends on NAND_VF610_NFC || NAND_OMAP_GPMC || NAND_MXC || ARCH_DAVINCI
	help
	  Indicates that NAND device has 16-bit wide data-bus. In absence of this
	  config, bus-width of NAND device is assumed to be either 8-bit and later
	  determined by reading ONFI params.
	  Above config is useful when NAND device's bus-width information cannot
	  be determined from on-chip ONFI params, like in following scenarios:
	  - SPL boot does not support reading of ONFI parameters. This is done to
	    keep SPL code foot-print small.
	  - In current U-Boot flow using nand_init(), driver initialization
	    happens in board_nand_init() which is called before any device probe
	    (nand_scan_ident + nand_scan_tail), thus device's ONFI parameters are
	    not available while configuring controller. So a static CONFIG_NAND_xx
	    is needed to know the device's bus-width in advance.

config SYS_NAND_MAX_CHIPS
	int "NAND max chips"
	default 1
	depends on NAND_ARASAN
	help
	  The maximum number of NAND chips per device to be supported.

if SPL

config SYS_NAND_5_ADDR_CYCLE
	bool "Wait 5 address cycles during NAND commands"
	depends on SPL_NAND_AM33XX_BCH || SPL_NAND_SIMPLE || \
		(SPL_NAND_SUPPORT && NAND_ATMEL)
	default y
	help
	  Some controllers require waiting for 5 address cycles when issuing
	  some commands, on NAND chips larger than 128MiB.

choice
	prompt "NAND bad block marker/indicator position in the OOB"
	depends on SPL_NAND_AM33XX_BCH || SPL_NAND_DENALI || SPL_NAND_SIMPLE || \
		SPL_NAND_SUPPORT && (NAND_ATMEL || NAND_MXC)
	default HAS_NAND_LARGE_BADBLOCK_POS
	help
	  In the OOB, which position contains the badblock information.

config HAS_NAND_LARGE_BADBLOCK_POS
	bool "Set the bad block marker/indicator to the 'large' position"

config HAS_NAND_SMALL_BADBLOCK_POS
	bool "Set the bad block marker/indicator to the 'small' position"

endchoice

config SYS_NAND_BAD_BLOCK_POS
	int
	default 0 if HAS_NAND_LARGE_BADBLOCK_POS
	default 5 if HAS_NAND_SMALL_BADBLOCK_POS

config SYS_NAND_U_BOOT_LOCATIONS
	bool "Define U-boot binaries locations in NAND"
	help
	Enable CONFIG_SYS_NAND_U_BOOT_OFFS though Kconfig.
	This option should not be enabled when compiling U-boot for boards
	defining CONFIG_SYS_NAND_U_BOOT_OFFS in their include/configs/<board>.h
	file.

config SYS_NAND_U_BOOT_OFFS
	hex "Location in NAND to read U-Boot from"
	default 0x800000 if NAND_SUNXI
	depends on SYS_NAND_U_BOOT_LOCATIONS
	help
	Set the offset from the start of the nand where u-boot should be
	loaded from.

config SYS_NAND_U_BOOT_OFFS_REDUND
	hex "Location in NAND to read U-Boot from"
	default SYS_NAND_U_BOOT_OFFS
	depends on SYS_NAND_U_BOOT_LOCATIONS
	help
	Set the offset from the start of the nand where the redundant u-boot
	should be loaded from.

config SPL_NAND_AM33XX_BCH
	bool "Enables SPL-NAND driver which supports ELM based"
	depends on NAND_OMAP_GPMC && !OMAP34XX
	default y
        help
	  Hardware ECC correction. This is useful for platforms which have ELM
	  hardware engine and use NAND boot mode.
	  Some legacy platforms like OMAP3xx do not have in-built ELM h/w engine,
	  so those platforms should use CONFIG_SPL_NAND_SIMPLE for enabling
          SPL-NAND driver with software ECC correction support.

config SPL_NAND_DENALI
	bool "Support Denali NAND controller for SPL"
	help
	  This is a small implementation of the Denali NAND controller
	  for use on SPL.

config NAND_DENALI_SPARE_AREA_SKIP_BYTES
	int "Number of bytes skipped in OOB area"
	depends on SPL_NAND_DENALI
	range 0 63
	help
	  This option specifies the number of bytes to skip from the beginning
	  of OOB area before last ECC sector data starts.  This is potentially
	  used to preserve the bad block marker in the OOB area.

config SPL_NAND_SIMPLE
	bool "Use simple SPL NAND driver"
	depends on !SPL_NAND_AM33XX_BCH
	help
	  Support for NAND boot using simple NAND drivers that
	  expose the cmd_ctrl() interface.
endif

endif   # if NAND
