mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-16 22:56:44 +07:00
ba4087e956
On NAND flash devices, UBI reserves some physical erase blocks (PEB) for bad block handling. Today, the number of reserved PEB can only be set as a percentage of the total number of PEB in each MTD partition. For example, for a NAND flash with 128KiB PEB, 2 MTD partition of 20MiB (mtd0) and 100MiB (mtd1) and 2% reserved PEB: - the UBI device on mtd0 will have 2 PEB reserved - the UBI device on mtd1 will have 16 PEB reserved The problem with this behaviour is that NAND flash manufacturers give a minimum number of valid block (NVB) during the endurance life of the device, e.g.: Parameter Symbol Min Max Unit Notes -------------------------------------------------------------- Valid block number NVB 1004 1024 Blocks 1 From this number we can deduce the maximum number of bad PEB that a device will contain during its endurance life: a 128MiB NAND flash (1024 PEB) will not have less than 20 bad blocks during the flash endurance life. But the manufacturer doesn't tell where those bad block will appear. He doesn't say either if they will be equally disposed on the whole device (and I'm pretty sure they won't). So, according to the datasheets, we should reserve the maximum number of bad PEB for each UBI device (worst case scenario: 20 bad blocks appears on the smallest MTD partition). So this patch make UBI use the whole MTD device size to calculate the maximum bad expected eraseblocks. The Kconfig option is in per1024 blocks, thus it can have a default value of 20 which is *very* common for NAND devices. Signed-off-by: Richard Genoud <richard.genoud@gmail.com> Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
67 lines
2.8 KiB
Plaintext
67 lines
2.8 KiB
Plaintext
menuconfig MTD_UBI
|
|
tristate "Enable UBI - Unsorted block images"
|
|
select CRC32
|
|
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_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.
|
|
|
|
Leave the default value if unsure.
|
|
|
|
config MTD_UBI_GLUEBI
|
|
tristate "MTD devices emulation driver (gluebi)"
|
|
help
|
|
This option enables gluebi - an additional driver which emulates MTD
|
|
devices on top of UBI volumes: for each UBI volumes an MTD device is
|
|
created, and all I/O to this MTD device is redirected to the UBI
|
|
volume. This is handy to make MTD-oriented software (like JFFS2)
|
|
work on top of UBI. Do not enable this unless you use legacy
|
|
software.
|
|
|
|
endif # MTD_UBI
|