menu "UBI support"

config CONFIG_UBI_SILENCE_MSG
	bool "UBI silence verbose messages"
	default ENV_IS_IN_UBI
	help
	  Make the verbose messages from UBI stop printing. This leaves
	  warnings and errors enabled.

config MTD_UBI
	bool "Enable UBI - Unsorted block images"
	select CRC32
	select RBTREE
	select MTD_PARTITIONS
	help
	  UBI is a software layer above MTD layer which admits of LVM-like
	  logical volumes on top of MTD devices, hides some complexities of
	  flash chips like wear and bad blocks and provides some other useful
	  capabilities. Please, consult the MTD web site for more details
	  (www.linux-mtd.infradead.org).

if MTD_UBI

config MTD_PARTITIONS
	bool "Enable mtd part"
	default y
	help
		Sometimes user want partitions their mtd device, it't helpful to their management and operates their storage device in logic partition, enable this, mtd driver will support partitions.

config MTD_UBI_WL_THRESHOLD
	int "UBI wear-leveling threshold"
	default 4096
	range 2 65536
	help
	  This parameter defines the maximum difference between the highest
	  erase counter value and the lowest erase counter value of eraseblocks
	  of UBI devices. When this threshold is exceeded, UBI starts performing
	  wear leveling by means of moving data from eraseblock with low erase
	  counter to eraseblocks with high erase counter.

	  The default value should be OK for SLC NAND flashes, NOR flashes and
	  other flashes which have eraseblock life-cycle 100000 or more.
	  However, in case of MLC NAND flashes which typically have eraseblock
	  life-cycle less than 10000, the threshold should be lessened (e.g.,
	  to 128 or 256, although it does not have to be power of 2).

config MTD_UBI_BEB_LIMIT
	int "Maximum expected bad eraseblock count per 1024 eraseblocks"
	default 20
	range 0 768
	help
	  This option specifies the maximum bad physical eraseblocks UBI
	  expects on the MTD device (per 1024 eraseblocks). If the underlying
	  flash does not admit of bad eraseblocks (e.g. NOR flash), this value
	  is ignored.

	  NAND datasheets often specify the minimum and maximum NVM (Number of
	  Valid Blocks) for the flashes' endurance lifetime. The maximum
	  expected bad eraseblocks per 1024 eraseblocks then can be calculated
	  as "1024 * (1 - MinNVB / MaxNVB)", which gives 20 for most NANDs
	  (MaxNVB is basically the total count of eraseblocks on the chip).

	  To put it differently, if this value is 20, UBI will try to reserve
	  about 1.9% of physical eraseblocks for bad blocks handling. And that
	  will be 1.9% of eraseblocks on the entire NAND chip, not just the MTD
	  partition UBI attaches. This means that if you have, say, a NAND
	  flash chip admits maximum 40 bad eraseblocks, and it is split on two
	  MTD partitions of the same size, UBI will reserve 40 eraseblocks when
	  attaching a partition.

	  This option can be overridden by the "mtd=" UBI module parameter or
	  by the "attach" ioctl.

	  Leave the default value if unsure.

config MTD_UBI_FASTMAP
	bool "UBI Fastmap (Experimental feature)"
	default n
	help
	   Important: this feature is experimental so far and the on-flash
	   format for fastmap may change in the next kernel versions

	   Fastmap is a mechanism which allows attaching an UBI device
	   in nearly constant time. Instead of scanning the whole MTD device it
	   only has to locate a checkpoint (called fastmap) on the device.
	   The on-flash fastmap contains all information needed to attach
	   the device. Using fastmap makes only sense on large devices where
	   attaching by scanning takes long. UBI will not automatically install
	   a fastmap on old images, but you can set the UBI module parameter
	   fm_autoconvert to 1 if you want so. Please note that fastmap-enabled
	   images are still usable with UBI implementations without
	   fastmap support. On typical flash devices the whole fastmap fits
	   into one PEB. UBI will reserve PEBs to hold two fastmaps.

	   If in doubt, say "N".

config MTD_UBI_FASTMAP_AUTOCONVERT
	int "enable UBI Fastmap autoconvert"
	depends on MTD_UBI_FASTMAP
	default 0
	help
	  Set this parameter to enable fastmap automatically on images
	  without a fastmap.

config MTD_UBI_FM_DEBUG
	int "Enable UBI fastmap debug"
	depends on MTD_UBI_FASTMAP
	default 0
	help
	  Enable UBI fastmap debug

endif # MTD_UBI
endmenu # "Enable UBI - Unsorted block images"
