# SPDX-License-Identifier: GPL-2.0-only
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 || 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
