# SPDX-License-Identifier: GPL-2.0-only
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_BRCM_U_BOOT
	tristate "Broadcom's U-Boot partition parser"
	depends on ARCH_BCMBCA || COMPILE_TEST
	help
	  Broadcom uses a custom way of storing U-Boot environment variables.
	  They are placed inside U-Boot partition itself at unspecified offset.
	  It's possible to locate them by looking for a custom header with a
	  magic value. This driver does that and creates subpartitions for
	  each found environment variables block.

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/mtd.yaml.

config MTD_OF_PARTS_BCM4908
	bool "BCM4908 partitioning support"
	depends on MTD_OF_PARTS && (ARCH_BCMBCA || COMPILE_TEST)
	default ARCH_BCMBCA
	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_BCMBCA || 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_TPLINK_SAFELOADER
	tristate "TP-Link Safeloader partitions parser"
	depends on MTD && (ARCH_BCM_5301X || ATH79 || SOC_MT7620 || SOC_MT7621 || COMPILE_TEST)
	help
	  TP-Link home routers use flash partitions to store various data. Info
	  about flash space layout is stored in a partitions table using a
	  custom ASCII-based format.

	  That format was first found in devices with SafeLoader bootloader and
	  was named after it. Later it was adapted to CFE and U-Boot
	  bootloaders.

	  This driver reads partitions table, parses it and creates MTD
	  partitions.

config MTD_PARSER_TRX
	tristate "Parser for TRX format partitions"
	depends on MTD && (BCM47XX || ARCH_BCM_5301X || ARCH_MEDIATEK || RALINK || 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 || 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.

config MTD_SERCOMM_PARTS
	tristate "Sercomm partition table parser"
	depends on MTD && RALINK
	help
	  This provides partitions table parser for devices with Sercomm
	  partition map. This partition table contains real partition
	  offsets, which may differ from device to device depending on the
	  number and location of bad blocks on NAND.
