# SPDX-License-Identifier: GPL-2.0-only
config MTD_AR7_PARTS
	tristate "TI AR7 partitioning parser"
	help
	  TI AR7 partitioning parser support

config MTD_BCM47XX_PARTS
	tristate "BCM47XX partitioning parser"
	depends on BCM47XX || ARCH_BCM_5301X
	help
	  This provides partitions parser for devices based on BCM47xx
	  boards.

config MTD_BCM63XX_PARTS
	bool "BCM63XX CFE partitioning parser"
	depends on BCM63XX || BMIPS_GENERIC || COMPILE_TEST
	select CRC32
	select MTD_PARSER_IMAGETAG
	help
	  This provides partition parsing for BCM63xx devices with CFE
	  bootloaders.

config MTD_CMDLINE_PARTS
	tristate "Command line partition table parsing"
	depends on MTD
	help
	  Allow generic configuration of the MTD partition tables via the kernel
	  command line. Multiple flash resources are supported for hardware where
	  different kinds of flash memory are available.

	  You will still need the parsing functions to be called by the driver
	  for your particular device. It won't happen automatically. The
	  SA1100 map driver (CONFIG_MTD_SA1100) has an option for this, for
	  example.

	  The format for the command line is as follows:

	  mtdparts=<mtddef>[;<mtddef]
	  <mtddef>  := <mtd-id>:<partdef>[,<partdef>]
	  <partdef> := <size>[@offset][<name>][ro]
	  <mtd-id>  := unique id used in mapping driver/device
	  <size>    := standard linux memsize OR "-" to denote all
	  remaining space
	  <name>    := (NAME)

	  Due to the way Linux handles the command line, no spaces are
	  allowed in the partition definition, including mtd id's and partition
	  names.

	  Examples:

	  1 flash resource (mtd-id "sa1100"), with 1 single writable partition:
	  mtdparts=sa1100:-

	  Same flash, but 2 named partitions, the first one being read-only:
	  mtdparts=sa1100:256k(ARMboot)ro,-(root)

	  If unsure, say 'N'.

config MTD_OF_PARTS
	tristate "OpenFirmware (device tree) partitioning parser"
	default y
	depends on OF
	help
	  This provides a open firmware device tree partition parser
	  which derives the partition map from the children of the
	  flash memory node, as described in
	  Documentation/devicetree/bindings/mtd/partition.txt.

config MTD_OF_PARTS_BCM4908
	bool "BCM4908 partitioning support"
	depends on MTD_OF_PARTS && (ARCH_BCM4908 || COMPILE_TEST)
	default ARCH_BCM4908
	help
	  This provides partitions parser for BCM4908 family devices
	  that can have multiple "firmware" partitions. It takes care of
	  finding currently used one and backup ones.

config MTD_OF_PARTS_LINKSYS_NS
	bool "Linksys Northstar partitioning support"
	depends on MTD_OF_PARTS && (ARCH_BCM_5301X || ARCH_BCM4908 || COMPILE_TEST)
	default ARCH_BCM_5301X
	help
	  This provides partitions parser for Linksys devices based on Broadcom
	  Northstar architecture. Linksys commonly uses fixed flash layout with
	  two "firmware" partitions. Currently used firmware has to be detected
	  using CFE environment variable.

config MTD_PARSER_IMAGETAG
	tristate "Parser for BCM963XX Image Tag format partitions"
	depends on BCM63XX || BMIPS_GENERIC || COMPILE_TEST
	select CRC32
	help
	  Image Tag is the firmware header used by broadcom on their xDSL line
	  of devices. It is used to describe the offsets and lengths of kernel
	  and rootfs partitions.
	  This driver adds support for parsing a partition with an Image Tag
	  header and creates up to two partitions, kernel and rootfs.

config MTD_AFS_PARTS
	tristate "ARM Firmware Suite partition parsing"
	depends on (ARM || ARM64)
	help
	  The ARM Firmware Suite allows the user to divide flash devices into
	  multiple 'images'. Each such image has a header containing its name
	  and offset/size etc.

	  If you need code which can detect and parse these tables, and
	  register MTD 'partitions' corresponding to each image detected,
	  enable this option.

	  You will still need the parsing functions to be called by the driver
	  for your particular device. It won't happen automatically. The
	  'physmap' map driver (CONFIG_MTD_PHYSMAP) does this, for example.

config MTD_PARSER_TRX
	tristate "Parser for TRX format partitions"
	depends on MTD && (BCM47XX || ARCH_BCM_5301X || ARCH_MEDIATEK || COMPILE_TEST)
	help
	  TRX is a firmware format used by Broadcom on their devices. It
	  may contain up to 3/4 partitions (depending on the version).
	  This driver will parse TRX header and report at least two partitions:
	  kernel and rootfs.

config MTD_SHARPSL_PARTS
	tristate "Sharp SL Series NAND flash partition parser"
	depends on MTD_NAND_SHARPSL || MTD_NAND_TMIO || COMPILE_TEST
	help
	  This provides the read-only FTL logic necessary to read the partition
	  table from the NAND flash of Sharp SL Series (Zaurus) and the MTD
	  partition parser using this code.

config MTD_REDBOOT_PARTS
	tristate "RedBoot partition table parsing"
	help
	  RedBoot is a ROM monitor and bootloader which deals with multiple
	  'images' in flash devices by putting a table one of the erase
	  blocks on the device, similar to a partition table, which gives
	  the offsets, lengths and names of all the images stored in the
	  flash.

	  If you need code which can detect and parse this table, and register
	  MTD 'partitions' corresponding to each image in the table, enable
	  this option.

	  You will still need the parsing functions to be called by the driver
	  for your particular device. It won't happen automatically. The
	  SA1100 map driver (CONFIG_MTD_SA1100) has an option for this, for
	  example.

if MTD_REDBOOT_PARTS

config MTD_REDBOOT_DIRECTORY_BLOCK
	int "Location of RedBoot partition table"
	default "-1"
	help
	  This option is the Linux counterpart to the
	  CYGNUM_REDBOOT_FIS_DIRECTORY_BLOCK RedBoot compile time
	  option.

	  The option specifies which Flash sectors holds the RedBoot
	  partition table.  A zero or positive value gives an absolute
	  erase block number. A negative value specifies a number of
	  sectors before the end of the device.

	  For example "2" means block number 2, "-1" means the last
	  block and "-2" means the penultimate block.

config MTD_REDBOOT_PARTS_UNALLOCATED
	bool "Include unallocated flash regions"
	help
	  If you need to register each unallocated flash region as a MTD
	  'partition', enable this option.

config MTD_REDBOOT_PARTS_READONLY
	bool "Force read-only for RedBoot system images"
	help
	  If you need to force read-only for 'RedBoot', 'RedBoot Config' and
	  'FIS directory' images, enable this option.

endif # MTD_REDBOOT_PARTS

config MTD_QCOMSMEM_PARTS
	tristate "Qualcomm SMEM flash partition parser"
	depends on QCOM_SMEM
	help
	  This provides support for parsing partitions from Shared Memory (SMEM)
	  for NAND and SPI flash on Qualcomm platforms.
