menu "UBI support"

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"
	depends on MTD
	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_UBI_BLOCK
	def_bool n

config MTD_UBI_MODULE
	def_bool y
	help
	  ubi_init() disables returning error codes when built into the Linux
	  kernel so that it doesn't hang the Linux kernel boot process.  Since
	  the U-Boot driver code depends on getting valid error codes from this
	  function we just tell the UBI layer that we are building as a module
	  (which only enables the additional error reporting).

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)"
	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"
