* [PATCH 0/1] mtd: ubi: skip programming unused bits in ubi headers
@ 2025-11-06 5:49 Cheng Ming Lin
2025-11-06 5:49 ` [PATCH 1/1] " Cheng Ming Lin
0 siblings, 1 reply; 8+ messages in thread
From: Cheng Ming Lin @ 2025-11-06 5:49 UTC (permalink / raw)
To: richard, chengzhihao1, miquel.raynal, vigneshr, linux-mtd,
linux-kernel
Cc: alvinzhou, leoyu, Cheng Ming Lin
From: Cheng Ming Lin <chengminglin@mxic.com.tw>
This patch verification was performed on a Xilinx Zynq-PicoZed board with
mtd-utils version 2.3.0. Tests were conducted using both the nandsim
simulated NAND and a real NAND flash device.
Before modifying ubi/io.c, running the tests in mtd-utils/tests/ubi-tests
exhibited the following issue.
While running the mtd-utils/tests/ubi-tests/runubitests.sh test suite,
the execution reaches rsvol.c where, after ubi_mkvol is called, it
subsequently calls ubi_get_vol_info. At this point, there is a certain
probability of encountering an "error -2, no such file or directory".
To address this, I modified the ubi_mkvol function within mtd-utils by
adding a polling mechanism that waits for the /dev/ubi0_x device node
to be created before proceeding.
However, after adding this polling, the test encountered a similar "no
such file" error in io_paral.c. Further investigation pointed to a
potential issue with mdev. According to mdev documentation, kernel hotplug
events are not serialized and increment the SEQNUM environmental variable
on each invocation. This can cause hotplug and hot-unplug events to be
reordered, which sometimes results in device nodes not being created
as expected.
To solve this, I introduced an mdev.seq to serialize these events,
effectively resolving the problem.
With both modifications, the polling in ubi_mkvol and the mdev.seq
handling - runubitests.sh completes successfully.
Beyond these fixes, to validate the patch’s behavior with and without
subpage support, I also added a new module parameter subpage to nandsim.
This allows dynamically toggling subpage support. Setting the parameter
to 0 enforces the chip flag NAND_NO_SUBPAGE_WRITE, effectively disabling
subpage writes.
The experimental procedure and logs are detailed below, covering tests
on both real Macronix NAND flash and the nandsim simulated flash, each
tested with and without subpage support enabled.
- Without subpage support on Macronix NAND flash
nand: device found, Manufacturer ID: 0xc2, Chip ID: 0xda
nand: Macronix MX30LF2G18AC
nand: 256 MiB, SLC, erase size: 128 KiB, page size: 2048, OOB size: 64
zynq> ./mnt/mtd-utils/flash_unlock -u /dev/mtd0
zynq> flash_eraseall /dev/mtd0
Erasing 128 Kibyte @ 10000000 - 100% complete.
zynq> ./mnt/mtd-utils/ubiformat /dev/mtd0
ubiformat: mtd0 (nand), size 268435456 bytes (256.0 MiB), 2048 eraseblocks of 131072 bytes (128.0 KiB), min. I/O size 2048 bytes
libscan: scanning eraseblock 2047 -- 100 % complete
ubiformat: 2048 eraseblocks are supposedly empty
ubiformat: formatting eraseblock 2047 -- 100 % complete
zynq> ./mnt/mtd-utils/ubiattach -m 0
ubi0: attaching mtd0
ubi0: scanning is finished
ubi0: attached mtd0 (name "43a00000.Unified_Extensible_Flash_Controller", size 256 MiB)
ubi0: PEB size: 131072 bytes (128 KiB), LEB size: 126976 bytes
ubi0: min./max. I/O unit sizes: 2048/2048, sub-page size 2048
ubi0: VID header offset: 2048 (aligned 2048), data offset: 4096
ubi0: good PEBs: 2048, bad PEBs: 0, corrupted PEBs: 0
ubi0: user volume: 0, internal volumes: 1, max. volumes count: 128
ubi0: max/mean erase counter: 0/0, WL threshold: 4096, image sequence number: 2132442355
ubi0: available PEBs: 2004, total reserved PEBs: 44, PEBs reserved for bad PEB handling: 40
ubi0: background thread "ubi_bgt0d" started, PID 88
UBI device number 0, total 2048 LEBs (260046848 bytes, 248.0 MiB), available 2004 LEBs (254459904 bytes, 242.6 MiB), LEB size 126976 bytes (124.0 KiB)
zynq> ./mnt/mtd-utils/tests/ubi-tests/runubitests.sh /dev/ubi0
Running mkvol_basic /dev/ubi0
Running mkvol_bad /dev/ubi0
ubi0 error: ubi_cdev_ioctl: bad volume creation request
Volume creation request dump:
vol_id -2
alignment 1
bytes 254459904
vol_type 3
name_len 22
1st 16 characters of name: mkvol_bad:test_m
ubi0 error: ubi_cdev_ioctl: bad volume creation request
Volume creation request dump:
vol_id 128
alignment 1
bytes 254459904
vol_type 3
name_len 22
1st 16 characters of name: mkvol_bad:test_m
ubi0 error: ubi_cdev_ioctl: bad volume creation request
Volume creation request dump:
vol_id 0
alignment 0
bytes 254459904
vol_type 3
name_len 22
1st 16 characters of name: mkvol_bad:test_m
ubi0 error: ubi_cdev_ioctl: bad volume creation request
Volume creation request dump:
vol_id 0
alignment -1
bytes 254459904
vol_type 3
name_len 22
1st 16 characters of name: mkvol_bad:test_m
ubi0 error: ubi_cdev_ioctl: bad volume creation request
Volume creation request dump:
vol_id 0
alignment 126977
bytes 254459904
vol_type 3
name_len 22
1st 16 characters of name: mkvol_bad:test_m
ubi0 error: ubi_cdev_ioctl: bad volume creation request
Volume creation request dump:
vol_id 0
alignment 2049
bytes 254459904
vol_type 3
name_len 22
1st 16 characters of name: mkvol_bad:test_m
ubi0 error: ubi_cdev_ioctl: bad volume creation request
Volume creation request dump:
vol_id 0
alignment 1
bytes -1
vol_type 3
name_len 22
1st 16 characters of name: mkvol_bad:test_m
ubi0 error: ubi_cdev_ioctl: bad volume creation request
Volume creation request dump:
vol_id 0
alignment 1
bytes 0
vol_type 3
name_len 22
1st 16 characters of name: mkvol_bad:test_m
ubi0 error: ubi_create_volume: not enough PEBs, only 2004 available
ubi0 error: ubi_create_volume: cannot create volume 0, error -28
ubi0 error: ubi_create_volume: not enough PEBs, only 2004 available
ubi0 error: ubi_create_volume: cannot create volume 0, error -28
ubi0 error: ubi_cdev_ioctl: bad volume creation request
Volume creation request dump:
vol_id 0
alignment 1
bytes 126976
vol_type 7
name_len 22
1st 16 characters of name: mkvol_bad:test_m
ubi0 error: ubi_create_volume: volume 0 already exists
ubi0 error: ubi_create_volume: cannot create volume 0, error -17
ubi0 error: ubi_create_volume: volume "mkvol_bad:test_mkvol()" exists (ID 0)
ubi0 error: ubi_create_volume: cannot create volume 1, error -17
ubi0 error: ubi_create_volume: volume "mkvol_bad:test_mkvol()" exists (ID 0)
ubi0 error: ubi_create_volume: cannot create volume 1, error -17
ubi0 error: ubi_open_volume: cannot open device 0, volume 128, error -22
ubi0 error: ubi_open_volume: cannot open device 0, volume -1, error -22
ubi0 error: ubi_open_volume: cannot open device 0, volume 128, error -22
ubi0 error: ubi_open_volume: cannot open device 0, volume 0, error -19
ubi0 error: ubi_open_volume: cannot open device 0, volume 0, error -19
Running mkvol_paral /dev/ubi0
Running rsvol /dev/ubi0
Running io_basic /dev/ubi0
Running io_read /dev/ubi0
Running io_update /dev/ubi0
Running io_paral /dev/ubi0
Running volrefcnt /dev/ubi0
SUCCESS
- With subpage support of Macronix NAND flash
nand: device found, Manufacturer ID: 0xc2, Chip ID: 0xda
nand: Macronix MX30LF2G18AC
nand: 256 MiB, SLC, erase size: 128 KiB, page size: 2048, OOB size: 64
zynq> ./mnt/mtd-utils/flash_unlock -u /dev/mtd0
zynq> flash_eraseall /dev/mtd0
Erasing 128 Kibyte @ 10000000 - 100% complete.
zynq> ./mnt/mtd-utils/ubiformat /dev/mtd0
ubiformat: mtd0 (nand), size 268435456 bytes (256.0 MiB), 2048 eraseblocks of 131072 bytes (128.0 KiB), min. I/O size 2048 bytes
libscan: scanning eraseblock 2047 -- 100 % complete
ubiformat: 2048 eraseblocks are supposedly empty
ubiformat: formatting eraseblock 2047 -- 100 % complete
zynq> ./mnt/mtd-utils/ubiattach -m 0
ubi0: attaching mtd0
ubi0: scanning is finished
ubi0: attached mtd0 (name "43a00000.Unified_Extensible_Flash_Controller", size 256 MiB)
ubi0: PEB size: 131072 bytes (128 KiB), LEB size: 129024 bytes
ubi0: min./max. I/O unit sizes: 2048/2048, sub-page size 512
ubi0: VID header offset: 512 (aligned 512), data offset: 2048
ubi0: good PEBs: 2048, bad PEBs: 0, corrupted PEBs: 0
ubi0: user volume: 0, internal volumes: 1, max. volumes count: 128
ubi0: max/mean erase counter: 0/0, WL threshold: 4096, image sequence number: 1464207753
ubi0: available PEBs: 2004, total reserved PEBs: 44, PEBs reserved for bad PEB handling: 40
ubi0: background thread "ubi_bgt0d" started, PID 88
UBI device number 0, total 2048 LEBs (264241152 bytes, 252.0 MiB), available 2004 LEBs (258564096 bytes, 246.5 MiB), LEB size 129024 bytes (126.0 KiB)
zynq> ./mnt/mtd-utils/tests/ubi-tests/runubitests.sh /dev/ubi0
Running mkvol_basic /dev/ubi0
Running mkvol_bad /dev/ubi0
ubi0 error: ubi_cdev_ioctl: bad volume creation request
Volume creation request dump:
vol_id -2
alignment 1
bytes 258564096
vol_type 3
name_len 22
1st 16 characters of name: mkvol_bad:test_m
ubi0 error: ubi_cdev_ioctl: bad volume creation request
Volume creation request dump:
vol_id 128
alignment 1
bytes 258564096
vol_type 3
name_len 22
1st 16 characters of name: mkvol_bad:test_m
ubi0 error: ubi_cdev_ioctl: bad volume creation request
Volume creation request dump:
vol_id 0
alignment 0
bytes 258564096
vol_type 3
name_len 22
1st 16 characters of name: mkvol_bad:test_m
ubi0 error: ubi_cdev_ioctl: bad volume creation request
Volume creation request dump:
vol_id 0
alignment -1
bytes 258564096
vol_type 3
name_len 22
1st 16 characters of name: mkvol_bad:test_m
ubi0 error: ubi_cdev_ioctl: bad volume creation request
Volume creation request dump:
vol_id 0
alignment 129025
bytes 258564096
vol_type 3
name_len 22
1st 16 characters of name: mkvol_bad:test_m
ubi0 error: ubi_cdev_ioctl: bad volume creation request
Volume creation request dump:
vol_id 0
alignment 2049
bytes 258564096
vol_type 3
name_len 22
1st 16 characters of name: mkvol_bad:test_m
ubi0 error: ubi_cdev_ioctl: bad volume creation request
Volume creation request dump:
vol_id 0
alignment 1
bytes -1
vol_type 3
name_len 22
1st 16 characters of name: mkvol_bad:test_m
ubi0 error: ubi_cdev_ioctl: bad volume creation request
Volume creation request dump:
vol_id 0
alignment 1
bytes 0
vol_type 3
name_len 22
1st 16 characters of name: mkvol_bad:test_m
ubi0 error: ubi_create_volume: not enough PEBs, only 2004 available
ubi0 error: ubi_create_volume: cannot create volume 0, error -28
ubi0 error: ubi_create_volume: not enough PEBs, only 2004 available
ubi0 error: ubi_create_volume: cannot create volume 0, error -28
ubi0 error: ubi_cdev_ioctl: bad volume creation request
Volume creation request dump:
vol_id 0
alignment 1
bytes 129024
vol_type 7
name_len 22
1st 16 characters of name: mkvol_bad:test_m
ubi0 error: ubi_create_volume: volume 0 already exists
ubi0 error: ubi_create_volume: cannot create volume 0, error -17
ubi0 error: ubi_create_volume: volume "mkvol_bad:test_mkvol()" exists (ID 0)
ubi0 error: ubi_create_volume: cannot create volume 1, error -17
ubi0 error: ubi_create_volume: volume "mkvol_bad:test_mkvol()" exists (ID 0)
ubi0 error: ubi_create_volume: cannot create volume 1, error -17
ubi0 error: ubi_open_volume: cannot open device 0, volume 128, error -22
ubi0 error: ubi_open_volume: cannot open device 0, volume -1, error -22
ubi0 error: ubi_open_volume: cannot open device 0, volume 128, error -22
ubi0 error: ubi_open_volume: cannot open device 0, volume 0, error -19
ubi0 error: ubi_open_volume: cannot open device 0, volume 0, error -19
Running mkvol_paral /dev/ubi0
Running rsvol /dev/ubi0
Running io_basic /dev/ubi0
Running io_read /dev/ubi0
Running io_update /dev/ubi0
Running io_paral /dev/ubi0
Running volrefcnt /dev/ubi0
SUCCESS
- nandsim: Toshiba NAND 128MiB 1,8V 8-bit without subpage support
zynq> modprobe nandsim do_delays=1 subpage=0
[nandsim] warning: read_byte: unexpected data output cycle, state is STATE_READY return 0x0
[nandsim] warning: read_byte: unexpected data output cycle, state is STATE_READY return 0x0
[nandsim] warning: read_byte: unexpected data output cycle, state is STATE_READY return 0x0
[nandsim] warning: read_byte: unexpected data output cycle, state is STATE_READY return 0x0
[nandsim] warning: read_byte: unexpected data output cycle, state is STATE_READY return 0x0
[nandsim] warning: read_byte: unexpected data output cycle, state is STATE_READY return 0x0
nand: device found, Manufacturer ID: 0x98, Chip ID: 0x39
nand: Toshiba NAND 128MiB 1,8V 8-bit
nand: 128 MiB, SLC, erase size: 16 KiB, page size: 512, OOB size: 16
flash size: 128 MiB
page size: 512 bytes
OOB area size: 16 bytes
sector size: 16 KiB
pages number: 262144
pages per sector: 32
bus width: 8
bits in sector size: 14
bits in page size: 9
bits in OOB size: 4
flash size with OOB: 135168 KiB
page address bytes: 4
sector address bytes: 3
options: 0x42
Scanning device for bad blocks
Creating 1 MTD partitions on "NAND 128MiB 1,8V 8-bit":
0x000000000000-0x000008000000 : "NAND simulator partition 0"
zynq> ./mnt/mtd-utils/ubiattach -m 0
ubi0: attaching mtd0
ubi0: scanning is finished
ubi0: empty MTD device detected
ubi0: attached mtd0 (name "NAND 128MiB 1,8V 8-bit", size 128 MiB)
ubi0: PEB size: 16384 bytes (16 KiB), LEB size: 15360 bytes
ubi0: min./max. I/O unit sizes: 512/512, sub-page size 512
ubi0: VID header offset: 512 (aligned 512), data offset: 1024
ubi0: good PEBs: 8192, bad PEBs: 0, corrupted PEBs: 0
ubi0: user volume: 0, internal volumes: 1, max. volumes count: 89
ubi0: max/mean erase counter: 0/0, WL threshold: 4096, image sequence number: 1430177206
ubi0: available PEBs: 8028, total reserved PEBs: 164, PEBs reserved for bad PEB handling: 160
ubi0: background thread "ubi_bgt0d" started, PID 93
UBI device number 0, total 8192 LEBs (125829120 bytes, 120.0 MiB), available 8028 LEBs (123310080 bytes, 117.5 MiB), LEB size 15360 bytes (15.0 KiB)
zynq> ./mnt/mtd-utils/tests/ubi-tests/runubitests.sh /dev/ubi0
Running mkvol_basic /dev/ubi0
Running mkvol_bad /dev/ubi0
ubi0 error: ubi_cdev_ioctl: bad volume creation request
Volume creation request dump:
vol_id -2
alignment 1
bytes 123310080
vol_type 3
name_len 22
1st 16 characters of name: mkvol_bad:test_m
ubi0 error: ubi_cdev_ioctl: bad volume creation request
Volume creation request dump:
vol_id 89
alignment 1
bytes 123310080
vol_type 3
name_len 22
1st 16 characters of name: mkvol_bad:test_m
ubi0 error: ubi_cdev_ioctl: bad volume creation request
Volume creation request dump:
vol_id 0
alignment 0
bytes 123310080
vol_type 3
name_len 22
1st 16 characters of name: mkvol_bad:test_m
ubi0 error: ubi_cdev_ioctl: bad volume creation request
Volume creation request dump:
vol_id 0
alignment -1
bytes 123310080
vol_type 3
name_len 22
1st 16 characters of name: mkvol_bad:test_m
ubi0 error: ubi_cdev_ioctl: bad volume creation request
Volume creation request dump:
vol_id 0
alignment 15361
bytes 123310080
vol_type 3
name_len 22
1st 16 characters of name: mkvol_bad:test_m
ubi0 error: ubi_cdev_ioctl: bad volume creation request
Volume creation request dump:
vol_id 0
alignment 513
bytes 123310080
vol_type 3
name_len 22
1st 16 characters of name: mkvol_bad:test_m
ubi0 error: ubi_cdev_ioctl: bad volume creation request
Volume creation request dump:
vol_id 0
alignment 1
bytes -1
vol_type 3
name_len 22
1st 16 characters of name: mkvol_bad:test_m
ubi0 error: ubi_cdev_ioctl: bad volume creation request
Volume creation request dump:
vol_id 0
alignment 1
bytes 0
vol_type 3
name_len 22
1st 16 characters of name: mkvol_bad:test_m
ubi0 error: ubi_create_volume: not enough PEBs, only 8028 available
ubi0 error: ubi_create_volume: cannot create volume 0, error -28
ubi0 error: ubi_create_volume: not enough PEBs, only 8028 available
ubi0 error: ubi_create_volume: cannot create volume 0, error -28
ubi0 error: ubi_cdev_ioctl: bad volume creation request
Volume creation request dump:
vol_id 0
alignment 1
bytes 15360
vol_type 7
name_len 22
1st 16 characters of name: mkvol_bad:test_m
ubi0 error: ubi_create_volume: volume 0 already exists
ubi0 error: ubi_create_volume: cannot create volume 0, error -17
ubi0 error: ubi_create_volume: volume "mkvol_bad:test_mkvol()" exists (ID 0)
ubi0 error: ubi_create_volume: cannot create volume 1, error -17
ubi0 error: ubi_create_volume: volume "mkvol_bad:test_mkvol()" exists (ID 0)
ubi0 error: ubi_create_volume: cannot create volume 1, error -17
ubi0 error: ubi_open_volume: cannot open device 0, volume 89, error -22
ubi0 error: ubi_open_volume: cannot open device 0, volume -1, error -22
ubi0 error: ubi_open_volume: cannot open device 0, volume 89, error -22
ubi0 error: ubi_open_volume: cannot open device 0, volume 0, error -19
ubi0 error: ubi_open_volume: cannot open device 0, volume 0, error -19Running mkvol_paral /dev/ubi0
Running rsvol /dev/ubi0
Running io_basic /dev/ubi0
Running io_read /dev/ubi0
Running io_update /dev/ubi0
Running io_paral /dev/ubi0
Running volrefcnt /dev/ubi0
SUCCESS
- nandsim: Toshiba NAND 128MiB 1,8V 8-bit with subpage support
zynq> modprobe nandsim do_delays=1 subpage=1
[nandsim] warning: read_byte: unexpected data output cycle, state is STATE_READY return 0x0
[nandsim] warning: read_byte: unexpected data output cycle, state is STATE_READY return 0x0
[nandsim] warning: read_byte: unexpected data output cycle, state is STATE_READY return 0x0
[nandsim] warning: read_byte: unexpected data output cycle, state is STATE_READY return 0x0
[nandsim] warning: read_byte: unexpected data output cycle, state is STATE_READY return 0x0
[nandsim] warning: read_byte: unexpected data output cycle, state is STATE_READY return 0x0
nand: device found, Manufacturer ID: 0x98, Chip ID: 0x39
nand: Toshiba NAND 128MiB 1,8V 8-bit
nand: 128 MiB, SLC, erase size: 16 KiB, page size: 512, OOB size: 16
flash size: 128 MiB
page size: 512 bytes
OOB area size: 16 bytes
sector size: 16 KiB
pages number: 262144
pages per sector: 32
bus width: 8
bits in sector size: 14
bits in page size: 9
bits in OOB size: 4
flash size with OOB: 135168 KiB
page address bytes: 4
sector address bytes: 3
options: 0x42
Scanning device for bad blocks
Creating 1 MTD partitions on "NAND 128MiB 1,8V 8-bit":
0x000000000000-0x000008000000 : "NAND simulator partition 0"
zynq> ./mnt/mtd-utils/ubiattach -m 0
ubi0: attaching mtd0
ubi0: scanning is finished
ubi0: empty MTD device detected
ubi0: attached mtd0 (name "NAND 128MiB 1,8V 8-bit", size 128 MiB)
ubi0: PEB size: 16384 bytes (16 KiB), LEB size: 15872 bytes
ubi0: min./max. I/O unit sizes: 512/512, sub-page size 256
ubi0: VID header offset: 256 (aligned 256), data offset: 512
ubi0: good PEBs: 8192, bad PEBs: 0, corrupted PEBs: 0
ubi0: user volume: 0, internal volumes: 1, max. volumes count: 92
ubi0: max/mean erase counter: 0/0, WL threshold: 4096, image sequence number: 1169990024
ubi0: available PEBs: 8028, total reserved PEBs: 164, PEBs reserved for bad PEB handling: 160
ubi0: background thread "ubi_bgt0d" started, PID 94
UBI device number 0, total 8192 LEBs (130023424 bytes, 124.0 MiB), available 8028 LEBs (127420416 bytes, 121.5 MiB), LEB size 15872 bytes (15.5 KiB)
zynq> ./mnt/mtd-utils/tests/ubi-tests/runubitests.sh /dev/ubi0
Running mkvol_basic /dev/ubi0
Running mkvol_bad /dev/ubi0
ubi0 error: ubi_cdev_ioctl: bad volume creation request
Volume creation request dump:
vol_id -2
alignment 1
bytes 127420416
vol_type 3
name_len 22
1st 16 characters of name: mkvol_bad:test_m
ubi0 error: ubi_cdev_ioctl: bad volume creation request
Volume creation request dump:
vol_id 92
alignment 1
bytes 127420416
vol_type 3
name_len 22
1st 16 characters of name: mkvol_bad:test_m
ubi0 error: ubi_cdev_ioctl: bad volume creation request
Volume creation request dump:
vol_id 0
alignment 0
bytes 127420416
vol_type 3
name_len 22
1st 16 characters of name: mkvol_bad:test_m
ubi0 error: ubi_cdev_ioctl: bad volume creation request
Volume creation request dump:
vol_id 0
alignment -1
bytes 127420416
vol_type 3
name_len 22
1st 16 characters of name: mkvol_bad:test_m
ubi0 error: ubi_cdev_ioctl: bad volume creation request
Volume creation request dump:
vol_id 0
alignment 15873
bytes 127420416
vol_type 3
name_len 22
1st 16 characters of name: mkvol_bad:test_m
ubi0 error: ubi_cdev_ioctl: bad volume creation request
Volume creation request dump:
vol_id 0
alignment 513
bytes 127420416
vol_type 3
name_len 22
1st 16 characters of name: mkvol_bad:test_m
ubi0 error: ubi_cdev_ioctl: bad volume creation request
Volume creation request dump:
vol_id 0
alignment 1
bytes -1
vol_type 3
name_len 22
1st 16 characters of name: mkvol_bad:test_m
ubi0 error: ubi_cdev_ioctl: bad volume creation request
Volume creation request dump:
vol_id 0
alignment 1
bytes 0
vol_type 3
name_len 22
1st 16 characters of name: mkvol_bad:test_m
ubi0 error: ubi_create_volume: not enough PEBs, only 8028 available
ubi0 error: ubi_create_volume: cannot create volume 0, error -28
ubi0 error: ubi_create_volume: not enough PEBs, only 8028 available
ubi0 error: ubi_create_volume: cannot create volume 0, error -28
ubi0 error: ubi_cdev_ioctl: bad volume creation request
Volume creation request dump:
vol_id 0
alignment 1
bytes 15872
vol_type 7
name_len 22
1st 16 characters of name: mkvol_bad:test_m
ubi0 error: ubi_create_volume: volume 0 already exists
ubi0 error: ubi_create_volume: cannot create volume 0, error -17
ubi0 error: ubi_create_volume: volume "mkvol_bad:test_mkvol()" exists (ID 0)
ubi0 error: ubi_create_volume: cannot create volume 1, error -17
ubi0 error: ubi_create_volume: volume "mkvol_bad:test_mkvol()" exists (ID 0)
ubi0 error: ubi_create_volume: cannot create volume 1, error -17
ubi0 error: ubi_open_volume: cannot open device 0, volume 92, error -22
ubi0 error: ubi_open_volume: cannot open device 0, volume -1, error -22
ubi0 error: ubi_open_volume: cannot open device 0, volume 92, error -22
ubi0 error: ubi_open_volume: cannot open device 0, volume 0, error -19
ubi0 error: ubi_open_volume: cannot open device 0, volume 0, error -19
Running mkvol_paral /dev/ubi0
Running rsvol /dev/ubi0
Running io_basic /dev/ubi0
Running io_read /dev/ubi0
Running io_update /dev/ubi0
Running io_paral /dev/ubi0
Running volrefcnt /dev/ubi0
SUCCESS
- nandsim: Micron NAND 256MiB 3,3V 8-bit without subpage support
zynq> modprobe nandsim do_delays=1 subpage=0 first_id_byte=0x2C second
_id_byte=0xDA third_id_byte=0x90 fourth_id_byte=0x95
[nandsim] warning: read_byte: unexpected data output cycle, state is STATE_READY return 0x0
[nandsim] warning: read_byte: unexpected data output cycle, state is STATE_READY return 0x0
[nandsim] warning: read_byte: unexpected data output cycle, state is STATE_READY return 0x0
[nandsim] warning: read_byte: unexpected data output cycle, state is STATE_READY return 0x0
[nandsim] warning: read_byte: unexpected data output cycle, state is STATE_READY return 0x0
nand: device found, Manufacturer ID: 0x2c, Chip ID: 0xda
nand: Micron NAND 256MiB 3,3V 8-bit
nand: 256 MiB, SLC, erase size: 128 KiB, page size: 2048, OOB size: 64
flash size: 256 MiB
page size: 2048 bytes
OOB area size: 64 bytes
sector size: 128 KiB
pages number: 131072
pages per sector: 64
bus width: 8
bits in sector size: 17
bits in page size: 11
bits in OOB size: 6
flash size with OOB: 270336 KiB
page address bytes: 5
sector address bytes: 3
options: 0x8
Scanning device for bad blocks
Creating 1 MTD partitions on "NAND 256MiB 3,3V 8-bit":
0x000000000000-0x000010000000 : "NAND simulator partition 0"
zynq> ./mnt/mtd-utils/ubiattach -m 0
ubi0: attaching mtd0
ubi0: scanning is finished
ubi0: empty MTD device detected
ubi0: attached mtd0 (name "NAND 256MiB 3,3V 8-bit", size 256 MiB)
ubi0: PEB size: 131072 bytes (128 KiB), LEB size: 126976 bytes
ubi0: min./max. I/O unit sizes: 2048/2048, sub-page size 2048
ubi0: VID header offset: 2048 (aligned 2048), data offset: 4096
ubi0: good PEBs: 2048, bad PEBs: 0, corrupted PEBs: 0
ubi0: user volume: 0, internal volumes: 1, max. volumes count: 128
ubi0: max/mean erase counter: 0/0, WL threshold: 4096, image sequence number: 61027497
ubi0: available PEBs: 2004, total reserved PEBs: 44, PEBs reserved for bad PEB handling: 40
ubi0: background thread "ubi_bgt0d" started, PID 95
UBI device number 0, total 2048 LEBs (260046848 bytes, 248.0 MiB), available 2004 LEBs (254459904 bytes, 242.6 MiB), LEB size 126976 bytes (124.0 KiB)
zynq> ./mnt/mtd-utils/tests/ubi-tests/runubitests.sh /dev/ubi0
Running mkvol_basic /dev/ubi0
Running mkvol_bad /dev/ubi0
ubi0 error: ubi_cdev_ioctl: bad volume creation request
Volume creation request dump:
vol_id -2
alignment 1
bytes 123310080
vol_type 3
name_len 22
1st 16 characters of name: mkvol_bad:test_m
ubi0 error: ubi_cdev_ioctl: bad volume creation request
Volume creation request dump:
vol_id 89
alignment 1
bytes 123310080
vol_type 3
name_len 22
1st 16 characters of name: mkvol_bad:test_m
ubi0 error: ubi_cdev_ioctl: bad volume creation request
Volume creation request dump:
vol_id 0
alignment 0
bytes 123310080
vol_type 3
name_len 22
1st 16 characters of name: mkvol_bad:test_m
ubi0 error: ubi_cdev_ioctl: bad volume creation request
Volume creation request dump:
vol_id 0
alignment -1
bytes 123310080
vol_type 3
name_len 22
1st 16 characters of name: mkvol_bad:test_m
ubi0 error: ubi_cdev_ioctl: bad volume creation request
Volume creation request dump:
vol_id 0
alignment 15361
bytes 123310080
vol_type 3
name_len 22
1st 16 characters of name: mkvol_bad:test_m
ubi0 error: ubi_cdev_ioctl: bad volume creation request
Volume creation request dump:
vol_id 0
alignment 513
bytes 123310080
vol_type 3
name_len 22
1st 16 characters of name: mkvol_bad:test_m
ubi0 error: ubi_cdev_ioctl: bad volume creation request
Volume creation request dump:
vol_id 0
alignment 1
bytes -1
vol_type 3
name_len 22
1st 16 characters of name: mkvol_bad:test_m
ubi0 error: ubi_cdev_ioctl: bad volume creation request
Volume creation request dump:
vol_id 0
alignment 1
bytes 0
vol_type 3
name_len 22
1st 16 characters of name: mkvol_bad:test_m
ubi0 error: ubi_create_volume: not enough PEBs, only 8028 available
ubi0 error: ubi_create_volume: cannot create volume 0, error -28
ubi0 error: ubi_create_volume: not enough PEBs, only 8028 available
ubi0 error: ubi_create_volume: cannot create volume 0, error -28
ubi0 error: ubi_cdev_ioctl: bad volume creation request
Volume creation request dump:
vol_id 0
alignment 1
bytes 15360
vol_type 7
name_len 22
1st 16 characters of name: mkvol_bad:test_m
ubi0 error: ubi_create_volume: volume 0 already exists
ubi0 error: ubi_create_volume: cannot create volume 0, error -17
ubi0 error: ubi_create_volume: volume "mkvol_bad:test_mkvol()" exists (ID 0)
ubi0 error: ubi_create_volume: cannot create volume 1, error -17
ubi0 error: ubi_create_volume: volume "mkvol_bad:test_mkvol()" exists (ID 0)
ubi0 error: ubi_create_volume: cannot create volume 1, error -17
ubi0 error: ubi_open_volume: cannot open device 0, volume 89, error -22
ubi0 error: ubi_open_volume: cannot open device 0, volume -1, error -22
ubi0 error: ubi_open_volume: cannot open device 0, volume 89, error -22
ubi0 error: ubi_open_volume: cannot open device 0, volume 0, error -19
ubi0 error: ubi_open_volume: cannot open device 0, volume 0, error -19
Running mkvol_paral /dev/ubi0
Running rsvol /dev/ubi0
Running io_basic /dev/ubi0
Running io_read /dev/ubi0
Running io_update /dev/ubi0
Running io_paral /dev/ubi0
Running volrefcnt /dev/ubi0
SUCCESS
- nandsim: Micron NAND 256MiB 3,3V 8-bit with subpage support
zynq> modprobe nandsim do_delays=1 subpage=1 first_id_byte=0x2C second
_id_byte=0xDA third_id_byte=0x90 fourth_id_byte=0x95
[nandsim] warning: read_byte: unexpected data output cycle, state is STATE_READY return 0x0
[nandsim] warning: read_byte: unexpected data output cycle, state is STATE_READY return 0x0
[nandsim] warning: read_byte: unexpected data output cycle, state is STATE_READY return 0x0
[nandsim] warning: read_byte: unexpected data output cycle, state is STATE_READY return 0x0
[nandsim] warning: read_byte: unexpected data output cycle, state is STATE_READY return 0x0
nand: device found, Manufacturer ID: 0x2c, Chip ID: 0xda
nand: Micron NAND 256MiB 3,3V 8-bit
nand: 256 MiB, SLC, erase size: 128 KiB, page size: 2048, OOB size: 64
flash size: 256 MiB
page size: 2048 bytes
OOB area size: 64 bytes
sector size: 128 KiB
pages number: 131072
pages per sector: 64
bus width: 8
bits in sector size: 17
bits in page size: 11
bits in OOB size: 6
flash size with OOB: 270336 KiB
page address bytes: 5
sector address bytes: 3
options: 0x8
Scanning device for bad blocks
Creating 1 MTD partitions on "NAND 256MiB 3,3V 8-bit":
0x000000000000-0x000010000000 : "NAND simulator partition 0"
zynq> ./mnt/mtd-utils/ubiattach -m 0
ubi0: attaching mtd0
ubi0: scanning is finished
ubi0: empty MTD device detected
ubi0: attached mtd0 (name "NAND 128MiB 1,8V 8-bit", size 128 MiB)
ubi0: PEB size: 16384 bytes (16 KiB), LEB size: 15872 bytes
ubi0: min./max. I/O unit sizes: 512/512, sub-page size 256
ubi0: VID header offset: 256 (aligned 256), data offset: 512
ubi0: good PEBs: 8192, bad PEBs: 0, corrupted PEBs: 0
ubi0: user volume: 0, internal volumes: 1, max. volumes count: 92
ubi0: max/mean erase counter: 0/0, WL threshold: 4096, image sequence number: 1784788311
ubi0: available PEBs: 8028, total reserved PEBs: 164, PEBs reserved for bad PEB handling: 160
ubi0: background thread "ubi_bgt0d" started, PID 93
UBI device number 0, total 8192 LEBs (130023424 bytes, 124.0 MiB), available 8028 LEBs (127420416 bytes, 121.5 MiB), LEB size 15872 bytes (15.5 KiB)
zynq> ./mnt/mtd-utils/tests/ubi-tests/runubitests.sh /dev/ubi0
Running mkvol_basic /dev/ubi0
Running mkvol_bad /dev/ubi0
ubi0 error: ubi_cdev_ioctl: bad volume creation request
Volume creation request dump:
vol_id -2
alignment 1
bytes 127420416
vol_type 3
name_len 22
1st 16 characters of name: mkvol_bad:test_m
ubi0 error: ubi_cdev_ioctl: bad volume creation request
Volume creation request dump:
vol_id 92
alignment 1
bytes 127420416
vol_type 3
name_len 22
1st 16 characters of name: mkvol_bad:test_m
ubi0 error: ubi_cdev_ioctl: bad volume creation request
Volume creation request dump:
vol_id 0
alignment 0
bytes 127420416
vol_type 3
name_len 22
1st 16 characters of name: mkvol_bad:test_m
ubi0 error: ubi_cdev_ioctl: bad volume creation request
Volume creation request dump:
vol_id 0
alignment -1
bytes 127420416
vol_type 3
name_len 22
1st 16 characters of name: mkvol_bad:test_m
ubi0 error: ubi_cdev_ioctl: bad volume creation request
Volume creation request dump:
vol_id 0
alignment 15873
bytes 127420416
vol_type 3
name_len 22
1st 16 characters of name: mkvol_bad:test_m
ubi0 error: ubi_cdev_ioctl: bad volume creation request
Volume creation request dump:
vol_id 0
alignment 513
bytes 127420416
vol_type 3
name_len 22
1st 16 characters of name: mkvol_bad:test_m
ubi0 error: ubi_cdev_ioctl: bad volume creation request
Volume creation request dump:
vol_id 0
alignment 1
bytes -1
vol_type 3
name_len 22
1st 16 characters of name: mkvol_bad:test_m
ubi0 error: ubi_cdev_ioctl: bad volume creation request
Volume creation request dump:
vol_id 0
alignment 1
bytes 0
vol_type 3
name_len 22
1st 16 characters of name: mkvol_bad:test_m
ubi0 error: ubi_create_volume: not enough PEBs, only 8028 available
ubi0 error: ubi_create_volume: cannot create volume 0, error -28
ubi0 error: ubi_create_volume: not enough PEBs, only 8028 available
ubi0 error: ubi_create_volume: cannot create volume 0, error -28
ubi0 error: ubi_cdev_ioctl: bad volume creation request
Volume creation request dump:
vol_id 0
alignment 1
bytes 15872
vol_type 7
name_len 22
1st 16 characters of name: mkvol_bad:test_m
ubi0 error: ubi_create_volume: volume 0 already exists
ubi0 error: ubi_create_volume: cannot create volume 0, error -17
ubi0 error: ubi_create_volume: volume "mkvol_bad:test_mkvol()" exists (ID 0)
ubi0 error: ubi_create_volume: cannot create volume 1, error -17
ubi0 error: ubi_create_volume: volume "mkvol_bad:test_mkvol()" exists (ID 0)
ubi0 error: ubi_create_volume: cannot create volume 1, error -17
ubi0 error: ubi_open_volume: cannot open device 0, volume 92, error -22
ubi0 error: ubi_open_volume: cannot open device 0, volume -1, error -22
ubi0 error: ubi_open_volume: cannot open device 0, volume 92, error -22
ubi0 error: ubi_open_volume: cannot open device 0, volume 0, error -19
ubi0 error: ubi_open_volume: cannot open device 0, volume 0, error -19
Running mkvol_paral /dev/ubi0
Running rsvol /dev/ubi0
Running io_basic /dev/ubi0
Running io_read /dev/ubi0
Running io_update /dev/ubi0
Running io_paral /dev/ubi0
Running volrefcnt /dev/ubi0
SUCCESS
- nandsim: Toshiba NAND 512MiB 3,3V 8-bit without subpage support
zynq> modprobe nandsim do_delays=1 subpage=0 first_id_byte=0x98 second
_id_byte=0xdc third_id_byte=0x91 fourth_id_byte=0x15
[nandsim] warning: read_byte: unexpected data output cycle, state is STATE_READY return 0x0
[nandsim] warning: read_byte: unexpected data output cycle, state is STATE_READY return 0x0
[nandsim] warning: read_byte: unexpected data output cycle, state is STATE_READY return 0x0
[nandsim] warning: read_byte: unexpected data output cycle, state is STATE_READY return 0x0
[nandsim] warning: read_byte: unexpected data output cycle, state is STATE_READY return 0x0
nand: device found, Manufacturer ID: 0x98, Chip ID: 0xdc
nand: Toshiba NAND 512MiB 3,3V 8-bit
nand: 512 MiB, SLC, erase size: 128 KiB, page size: 2048, OOB size: 64
flash size: 512 MiB
page size: 2048 bytes
OOB area size: 64 bytes
sector size: 128 KiB
pages number: 262144
pages per sector: 64
bus width: 8
bits in sector size: 17
bits in page size: 11
bits in OOB size: 6
flash size with OOB: 540672 KiB
page address bytes: 5
sector address bytes: 3
options: 0x8
Scanning device for bad blocks
Creating 1 MTD partitions on "NAND 512MiB 3,3V 8-bit":
0x000000000000-0x000020000000 : "NAND simulator partition 0"
zynq> ./mnt/mtd-utils/ubiattach -m 0
ubi0: attaching mtd0
ubi0: scanning is finished
ubi0: empty MTD device detected
ubi0: attached mtd0 (name "NAND 512MiB 3,3V 8-bit", size 512 MiB)
ubi0: PEB size: 131072 bytes (128 KiB), LEB size: 126976 bytes
ubi0: min./max. I/O unit sizes: 2048/2048, sub-page size 2048
ubi0: VID header offset: 2048 (aligned 2048), data offset: 4096
ubi0: good PEBs: 4096, bad PEBs: 0, corrupted PEBs: 0
ubi0: user volume: 0, internal volumes: 1, max. volumes count: 128
ubi0: max/mean erase counter: 0/0, WL threshold: 4096, image sequence number: 412901883
ubi0: available PEBs: 4012, total reserved PEBs: 84, PEBs reserved for bad PEB handling: 80
ubi0: background thread "ubi_bgt0d" started, PID 93
UBI device number 0, total 4096 LEBs (520093696 bytes, 496.0 MiB), available 4012 LEBs (509427712 bytes, 485.8 MiB), LEB size 126976 bytes (124.0 KiB)
zynq> ./mnt/mtd-utils/tests/ubi-tests/runubitests.sh /dev/ubi0
Running mkvol_basic /dev/ubi0
Running mkvol_bad /dev/ubi0
ubi0 error: ubi_cdev_ioctl: bad volume creation request
Volume creation request dump:
vol_id -2
alignment 1
bytes 509427712
vol_type 3
name_len 22
1st 16 characters of name: mkvol_bad:test_m
ubi0 error: ubi_cdev_ioctl: bad volume creation request
Volume creation request dump:
vol_id 128
alignment 1
bytes 509427712
vol_type 3
name_len 22
1st 16 characters of name: mkvol_bad:test_m
ubi0 error: ubi_cdev_ioctl: bad volume creation request
Volume creation request dump:
vol_id 0
alignment 0
bytes 509427712
vol_type 3
name_len 22
1st 16 characters of name: mkvol_bad:test_m
ubi0 error: ubi_cdev_ioctl: bad volume creation request
Volume creation request dump:
vol_id 0
alignment -1
bytes 509427712
vol_type 3
name_len 22
1st 16 characters of name: mkvol_bad:test_m
ubi0 error: ubi_cdev_ioctl: bad volume creation request
Volume creation request dump:
vol_id 0
alignment 126977
bytes 509427712
vol_type 3
name_len 22
1st 16 characters of name: mkvol_bad:test_m
ubi0 error: ubi_cdev_ioctl: bad volume creation request
Volume creation request dump:
vol_id 0
alignment 2049
bytes 509427712
vol_type 3
name_len 22
1st 16 characters of name: mkvol_bad:test_m
ubi0 error: ubi_cdev_ioctl: bad volume creation request
Volume creation request dump:
vol_id 0
alignment 1
bytes -1
vol_type 3
name_len 22
1st 16 characters of name: mkvol_bad:test_m
ubi0 error: ubi_cdev_ioctl: bad volume creation request
Volume creation request dump:
vol_id 0
alignment 1
bytes 0
vol_type 3
name_len 22
1st 16 characters of name: mkvol_bad:test_m
ubi0 error: ubi_create_volume: not enough PEBs, only 4012 available
ubi0 error: ubi_create_volume: cannot create volume 0, error -28
ubi0 error: ubi_create_volume: not enough PEBs, only 4012 available
ubi0 error: ubi_create_volume: cannot create volume 0, error -28
ubi0 error: ubi_cdev_ioctl: bad volume creation request
Volume creation request dump:
vol_id 0
alignment 1
bytes 126976
vol_type 7
name_len 22
1st 16 characters of name: mkvol_bad:test_m
ubi0 error: ubi_create_volume: volume 0 already exists
ubi0 error: ubi_create_volume: cannot create volume 0, error -17
ubi0 error: ubi_create_volume: volume "mkvol_bad:test_mkvol()" exists (ID 0)
ubi0 error: ubi_create_volume: cannot create volume 1, error -17
ubi0 error: ubi_create_volume: volume "mkvol_bad:test_mkvol()" exists (ID 0)
ubi0 error: ubi_create_volume: cannot create volume 1, error -17
ubi0 error: ubi_open_volume: cannot open device 0, volume 128, error -22
ubi0 error: ubi_open_volume: cannot open device 0, volume -1, error -22
ubi0 error: ubi_open_volume: cannot open device 0, volume 128, error -22
ubi0 error: ubi_open_volume: cannot open device 0, volume 0, error -19
ubi0 error: ubi_open_volume: cannot open device 0, volume 0, error -19
Running mkvol_paral /dev/ubi0
Running rsvol /dev/ubi0
Running io_basic /dev/ubi0
Running io_read /dev/ubi0
Running io_update /dev/ubi0
Running io_paral /dev/ubi0
Running volrefcnt /dev/ubi0
SUCCESS
- nandsim: Toshiba NAND 512MiB 3,3V 8-bit with subpage support
zynq> modprobe nandsim do_delays=1 subpage=1 first_id_byte=0x98 second
_id_byte=0xdc third_id_byte=0x91 fourth_id_byte=0x15
[nandsim] warning: read_byte: unexpected data output cycle, state is STATE_READY return 0x0
[nandsim] warning: read_byte: unexpected data output cycle, state is STATE_READY return 0x0
[nandsim] warning: read_byte: unexpected data output cycle, state is STATE_READY return 0x0
[nandsim] warning: read_byte: unexpected data output cycle, state is STATE_READY return 0x0
[nandsim] warning: read_byte: unexpected data output cycle, state is STATE_READY return 0x0
nand: device found, Manufacturer ID: 0x98, Chip ID: 0xdc
nand: Toshiba NAND 512MiB 3,3V 8-bit
nand: 512 MiB, SLC, erase size: 128 KiB, page size: 2048, OOB size: 64
flash size: 512 MiB
page size: 2048 bytes
OOB area size: 64 bytes
sector size: 128 KiB
pages number: 262144
pages per sector: 64
bus width: 8
bits in sector size: 17
bits in page size: 11
bits in OOB size: 6
flash size with OOB: 540672 KiB
page address bytes: 5
sector address bytes: 3
options: 0x8
Scanning device for bad blocks
Creating 1 MTD partitions on "NAND 512MiB 3,3V 8-bit":
0x000000000000-0x000020000000 : "NAND simulator partition 0"
zynq> ./mnt/mtd-utils/ubiattach -m 0
ubi0: attaching mtd0
ubi0: scanning is finished
ubi0: empty MTD device detected
ubi0: attached mtd0 (name "NAND 512MiB 3,3V 8-bit", size 512 MiB)
ubi0: PEB size: 131072 bytes (128 KiB), LEB size: 129024 bytes
ubi0: min./max. I/O unit sizes: 2048/2048, sub-page size 512
ubi0: VID header offset: 512 (aligned 512), data offset: 2048
ubi0: good PEBs: 4096, bad PEBs: 0, corrupted PEBs: 0
ubi0: user volume: 0, internal volumes: 1, max. volumes count: 128
ubi0: max/mean erase counter: 0/0, WL threshold: 4096, image sequence number: 1235604384
ubi0: available PEBs: 4012, total reserved PEBs: 84, PEBs reserved for bad PEB handling: 80
ubi0: background thread "ubi_bgt0d" started, PID 96
UBI device number 0, total 4096 LEBs (528482304 bytes, 504.0 MiB), available 4012 LEBs (517644288 bytes, 493.6 MiB), LEB size 129024 bytes (126.0 KiB)
zynq> ./mnt/mtd-utils/tests/ubi-tests/runubitests.sh /dev/ubi0
Running mkvol_basic /dev/ubi0
Running mkvol_bad /dev/ubi0
ubi0 error: ubi_cdev_ioctl: bad volume creation request
Volume creation request dump:
vol_id -2
alignment 1
bytes 517644288
vol_type 3
name_len 22
1st 16 characters of name: mkvol_bad:test_m
ubi0 error: ubi_cdev_ioctl: bad volume creation request
Volume creation request dump:
vol_id 128
alignment 1
bytes 517644288
vol_type 3
name_len 22
1st 16 characters of name: mkvol_bad:test_m
ubi0 error: ubi_cdev_ioctl: bad volume creation request
Volume creation request dump:
vol_id 0
alignment 0
bytes 517644288
vol_type 3
name_len 22
1st 16 characters of name: mkvol_bad:test_m
ubi0 error: ubi_cdev_ioctl: bad volume creation request
Volume creation request dump:
vol_id 0
alignment -1
bytes 517644288
vol_type 3
name_len 22
1st 16 characters of name: mkvol_bad:test_m
ubi0 error: ubi_cdev_ioctl: bad volume creation request
Volume creation request dump:
vol_id 0
alignment 129025
bytes 517644288
vol_type 3
name_len 22
1st 16 characters of name: mkvol_bad:test_m
ubi0 error: ubi_cdev_ioctl: bad volume creation request
Volume creation request dump:
vol_id 0
alignment 2049
bytes 517644288
vol_type 3
name_len 22
1st 16 characters of name: mkvol_bad:test_m
ubi0 error: ubi_cdev_ioctl: bad volume creation request
Volume creation request dump:
vol_id 0
alignment 1
bytes -1
vol_type 3
name_len 22
1st 16 characters of name: mkvol_bad:test_m
ubi0 error: ubi_cdev_ioctl: bad volume creation request
Volume creation request dump:
vol_id 0
alignment 1
bytes 0
vol_type 3
name_len 22
1st 16 characters of name: mkvol_bad:test_m
ubi0 error: ubi_create_volume: not enough PEBs, only 4012 available
ubi0 error: ubi_create_volume: cannot create volume 0, error -28
ubi0 error: ubi_create_volume: not enough PEBs, only 4012 available
ubi0 error: ubi_create_volume: cannot create volume 0, error -28
ubi0 error: ubi_cdev_ioctl: bad volume creation request
Volume creation request dump:
vol_id 0
alignment 1
bytes 129024
vol_type 7
name_len 22
1st 16 characters of name: mkvol_bad:test_m
ubi0 error: ubi_create_volume: volume 0 already exists
ubi0 error: ubi_create_volume: cannot create volume 0, error -17
ubi0 error: ubi_create_volume: volume "mkvol_bad:test_mkvol()" exists (ID 0)
ubi0 error: ubi_create_volume: cannot create volume 1, error -17
ubi0 error: ubi_create_volume: volume "mkvol_bad:test_mkvol()" exists (ID 0)
ubi0 error: ubi_create_volume: cannot create volume 1, error -17
ubi0 error: ubi_open_volume: cannot open device 0, volume 128, error -22
ubi0 error: ubi_open_volume: cannot open device 0, volume -1, error -22
ubi0 error: ubi_open_volume: cannot open device 0, volume 128, error -22
ubi0 error: ubi_open_volume: cannot open device 0, volume 0, error -19
ubi0 error: ubi_open_volume: cannot open device 0, volume 0, error -19
Running mkvol_paral /dev/ubi0
Running rsvol /dev/ubi0
Running io_basic /dev/ubi0
Running io_read /dev/ubi0
Running io_update /dev/ubi0
Running io_paral /dev/ubi0
Running volrefcnt /dev/ubi0
SUCCESS
Cheng Ming Lin (1):
mtd: ubi: skip programming unused bits in ubi headers
drivers/mtd/ubi/io.c | 7 +++++++
1 file changed, 7 insertions(+)
--
2.25.1
^ permalink raw reply [flat|nested] 8+ messages in thread* [PATCH 1/1] mtd: ubi: skip programming unused bits in ubi headers
2025-11-06 5:49 [PATCH 0/1] mtd: ubi: skip programming unused bits in ubi headers Cheng Ming Lin
@ 2025-11-06 5:49 ` Cheng Ming Lin
2025-11-06 9:10 ` Miquel Raynal
0 siblings, 1 reply; 8+ messages in thread
From: Cheng Ming Lin @ 2025-11-06 5:49 UTC (permalink / raw)
To: richard, chengzhihao1, miquel.raynal, vigneshr, linux-mtd,
linux-kernel
Cc: alvinzhou, leoyu, Cheng Ming Lin
From: Cheng Ming Lin <chengminglin@mxic.com.tw>
This patch prevents unnecessary programming of bits in ec_hdr and
vid_hdr that are not used or read during normal UBI operation. These
unused bits are typcially already set to 1 in erased flash and do not
need to be explicitly programmed to 0 if they are not used.
Programming such unused areas offers no functional benefit and may
result in unnecessary flash wear, reducing the overall lifetime of the
device. By skipping these writes, we preserve the flash state as much as
possible and minimize wear caused by redundant operations.
This change ensures that only necessary fields are written when preparing
UBI headers, improving flash efficiency without affecting functionality.
Additionally, the Kioxia TC58NVG1S3HTA00 datasheet (page 63) also notes
that continuous program/erase cycling with a high percentage of '0' bits
in the data pattern can accelerate block endurance degradation.
This further supports avoiding large 0x00 patterns.
Link: https://europe.kioxia.com/content/dam/kioxia/newidr/productinfo/datasheet/201910/DST_TC58NVG1S3HTA00-TDE_EN_31442.pdf
Signed-off-by: Cheng Ming Lin <chengminglin@mxic.com.tw>
---
drivers/mtd/ubi/io.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/drivers/mtd/ubi/io.c b/drivers/mtd/ubi/io.c
index a4999bce4..c21242a14 100644
--- a/drivers/mtd/ubi/io.c
+++ b/drivers/mtd/ubi/io.c
@@ -868,6 +868,8 @@ int ubi_io_write_ec_hdr(struct ubi_device *ubi, int pnum,
return -EROFS;
}
+ memset((char *)ec_hdr + UBI_EC_HDR_SIZE, 0xFF, ubi->ec_hdr_alsize - UBI_EC_HDR_SIZE);
+
err = ubi_io_write(ubi, ec_hdr, pnum, 0, ubi->ec_hdr_alsize);
return err;
}
@@ -1150,6 +1152,11 @@ int ubi_io_write_vid_hdr(struct ubi_device *ubi, int pnum,
return -EROFS;
}
+ if (ubi->vid_hdr_shift)
+ memset((char *)p, 0xFF, ubi->vid_hdr_alsize - UBI_VID_HDR_SIZE);
+ else
+ memset((char *)p + UBI_VID_HDR_SIZE, 0xFF, ubi->vid_hdr_alsize - UBI_VID_HDR_SIZE);
+
err = ubi_io_write(ubi, p, pnum, ubi->vid_hdr_aloffset,
ubi->vid_hdr_alsize);
return err;
--
2.25.1
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH 1/1] mtd: ubi: skip programming unused bits in ubi headers
2025-11-06 5:49 ` [PATCH 1/1] " Cheng Ming Lin
@ 2025-11-06 9:10 ` Miquel Raynal
2025-11-06 9:45 ` Cheng Ming Lin
2025-11-07 6:31 ` Cheng Ming Lin
0 siblings, 2 replies; 8+ messages in thread
From: Miquel Raynal @ 2025-11-06 9:10 UTC (permalink / raw)
To: Cheng Ming Lin
Cc: richard, chengzhihao1, vigneshr, linux-mtd, linux-kernel,
alvinzhou, leoyu, Cheng Ming Lin
Hello,
On 06/11/2025 at 13:49:40 +08, Cheng Ming Lin <linchengming884@gmail.com> wrote:
> From: Cheng Ming Lin <chengminglin@mxic.com.tw>
>
> This patch prevents unnecessary programming of bits in ec_hdr and
> vid_hdr that are not used or read during normal UBI operation. These
> unused bits are typcially already set to 1 in erased flash and do not
> need to be explicitly programmed to 0 if they are not used.
>
> Programming such unused areas offers no functional benefit and may
> result in unnecessary flash wear, reducing the overall lifetime of the
> device. By skipping these writes, we preserve the flash state as much as
> possible and minimize wear caused by redundant operations.
>
> This change ensures that only necessary fields are written when preparing
> UBI headers, improving flash efficiency without affecting functionality.
>
> Additionally, the Kioxia TC58NVG1S3HTA00 datasheet (page 63) also notes
> that continuous program/erase cycling with a high percentage of '0' bits
> in the data pattern can accelerate block endurance degradation.
> This further supports avoiding large 0x00 patterns.
>
> Link: https://europe.kioxia.com/content/dam/kioxia/newidr/productinfo/datasheet/201910/DST_TC58NVG1S3HTA00-TDE_EN_31442.pdf
>
> Signed-off-by: Cheng Ming Lin <chengminglin@mxic.com.tw>
Thanks for this very clear and detailed commit log, as well as for the
well written cover letter. I am personally fine with the overall idea of
clearing these unused bits to 1. Yet, I have one concern regarding the
implementation, please see below.
> ---
> drivers/mtd/ubi/io.c | 7 +++++++
> 1 file changed, 7 insertions(+)
>
> diff --git a/drivers/mtd/ubi/io.c b/drivers/mtd/ubi/io.c
> index a4999bce4..c21242a14 100644
> --- a/drivers/mtd/ubi/io.c
> +++ b/drivers/mtd/ubi/io.c
> @@ -868,6 +868,8 @@ int ubi_io_write_ec_hdr(struct ubi_device *ubi, int pnum,
> return -EROFS;
> }
>
> + memset((char *)ec_hdr + UBI_EC_HDR_SIZE, 0xFF, ubi->ec_hdr_alsize - UBI_EC_HDR_SIZE);
> +
> err = ubi_io_write(ubi, ec_hdr, pnum, 0, ubi->ec_hdr_alsize);
> return err;
> }
> @@ -1150,6 +1152,11 @@ int ubi_io_write_vid_hdr(struct ubi_device *ubi, int pnum,
> return -EROFS;
> }
>
> + if (ubi->vid_hdr_shift)
> + memset((char *)p, 0xFF, ubi->vid_hdr_alsize - UBI_VID_HDR_SIZE);
> + else
> + memset((char *)p + UBI_VID_HDR_SIZE, 0xFF, ubi->vid_hdr_alsize - UBI_VID_HDR_SIZE);
Here I am reaching the limits of my UBI knowledge, so I would prefer
Richard to (in)validate what I am saying, but AFAIU, the VID header can
be literally anywhere in the page, not just at the start or end of a
subpage, so in the vid_hdr_shift I would expect some extra maths to
happen, no?
Here is an excerpt of the main comment at the top of the io.c file:
* As it was noted above, the VID header may start at a non-aligned
* offset. For example, in case of a 2KiB page NAND flash with a 512
* bytes sub-page, the VID header may reside at offset 1984 which is
* the last 64 bytes of the * last sub-page (EC header is always at
* offset zero).
I am not sure this is super common today though.
Thanks,
Miquèl
^ permalink raw reply [flat|nested] 8+ messages in thread* Re: [PATCH 1/1] mtd: ubi: skip programming unused bits in ubi headers
2025-11-06 9:10 ` Miquel Raynal
@ 2025-11-06 9:45 ` Cheng Ming Lin
2025-11-07 6:31 ` Cheng Ming Lin
1 sibling, 0 replies; 8+ messages in thread
From: Cheng Ming Lin @ 2025-11-06 9:45 UTC (permalink / raw)
To: Miquel Raynal
Cc: richard, chengzhihao1, vigneshr, linux-mtd, linux-kernel,
alvinzhou, leoyu, Cheng Ming Lin
Hi Miquel,
Miquel Raynal <miquel.raynal@bootlin.com> 於 2025年11月6日 週四 下午5:10寫道:
>
> Hello,
>
> On 06/11/2025 at 13:49:40 +08, Cheng Ming Lin <linchengming884@gmail.com> wrote:
>
> > From: Cheng Ming Lin <chengminglin@mxic.com.tw>
> >
> > This patch prevents unnecessary programming of bits in ec_hdr and
> > vid_hdr that are not used or read during normal UBI operation. These
> > unused bits are typcially already set to 1 in erased flash and do not
> > need to be explicitly programmed to 0 if they are not used.
> >
> > Programming such unused areas offers no functional benefit and may
> > result in unnecessary flash wear, reducing the overall lifetime of the
> > device. By skipping these writes, we preserve the flash state as much as
> > possible and minimize wear caused by redundant operations.
> >
> > This change ensures that only necessary fields are written when preparing
> > UBI headers, improving flash efficiency without affecting functionality.
> >
> > Additionally, the Kioxia TC58NVG1S3HTA00 datasheet (page 63) also notes
> > that continuous program/erase cycling with a high percentage of '0' bits
> > in the data pattern can accelerate block endurance degradation.
> > This further supports avoiding large 0x00 patterns.
> >
> > Link: https://europe.kioxia.com/content/dam/kioxia/newidr/productinfo/datasheet/201910/DST_TC58NVG1S3HTA00-TDE_EN_31442.pdf
> >
> > Signed-off-by: Cheng Ming Lin <chengminglin@mxic.com.tw>
>
> Thanks for this very clear and detailed commit log, as well as for the
> well written cover letter. I am personally fine with the overall idea of
> clearing these unused bits to 1. Yet, I have one concern regarding the
> implementation, please see below.
>
> > ---
> > drivers/mtd/ubi/io.c | 7 +++++++
> > 1 file changed, 7 insertions(+)
> >
> > diff --git a/drivers/mtd/ubi/io.c b/drivers/mtd/ubi/io.c
> > index a4999bce4..c21242a14 100644
> > --- a/drivers/mtd/ubi/io.c
> > +++ b/drivers/mtd/ubi/io.c
> > @@ -868,6 +868,8 @@ int ubi_io_write_ec_hdr(struct ubi_device *ubi, int pnum,
> > return -EROFS;
> > }
> >
> > + memset((char *)ec_hdr + UBI_EC_HDR_SIZE, 0xFF, ubi->ec_hdr_alsize - UBI_EC_HDR_SIZE);
> > +
> > err = ubi_io_write(ubi, ec_hdr, pnum, 0, ubi->ec_hdr_alsize);
> > return err;
> > }
> > @@ -1150,6 +1152,11 @@ int ubi_io_write_vid_hdr(struct ubi_device *ubi, int pnum,
> > return -EROFS;
> > }
> >
> > + if (ubi->vid_hdr_shift)
> > + memset((char *)p, 0xFF, ubi->vid_hdr_alsize - UBI_VID_HDR_SIZE);
> > + else
> > + memset((char *)p + UBI_VID_HDR_SIZE, 0xFF, ubi->vid_hdr_alsize - UBI_VID_HDR_SIZE);
>
> Here I am reaching the limits of my UBI knowledge, so I would prefer
> Richard to (in)validate what I am saying, but AFAIU, the VID header can
> be literally anywhere in the page, not just at the start or end of a
> subpage, so in the vid_hdr_shift I would expect some extra maths to
> happen, no?
>
> Here is an excerpt of the main comment at the top of the io.c file:
>
> * As it was noted above, the VID header may start at a non-aligned
> * offset. For example, in case of a 2KiB page NAND flash with a 512
> * bytes sub-page, the VID header may reside at offset 1984 which is
> * the last 64 bytes of the * last sub-page (EC header is always at
> * offset zero).
>
Here I was considering the comment in io.c, and also the definitions in
ubi.h, which say:
* @vid_hdr_offset: starting offset of the volume identifier header (might
* be unaligned)
* @vid_hdr_aloffset: starting offset of the VID header aligned to
* @hdrs_min_io_size
* @vid_hdr_shift: contains @vid_hdr_offset - @vid_hdr_aloffset
So, if ubi->vid_hdr_shift is non-zero, then the VID header is not located
at the beginning of the subpage. In this case, we fill 0xFF from the start
of the buffer until the actual vid_hdr_start.
If ubi->vid_hdr_shift is zero, then the VID header is already placed at
the beginning of the subpage. Then we fill 0xFF only after the header
region in the buffer.
> I am not sure this is super common today though.
>
> Thanks,
> Miquèl
Thanks,
Cheng Ming Lin
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 1/1] mtd: ubi: skip programming unused bits in ubi headers
2025-11-06 9:10 ` Miquel Raynal
2025-11-06 9:45 ` Cheng Ming Lin
@ 2025-11-07 6:31 ` Cheng Ming Lin
2025-11-07 8:23 ` Miquel Raynal
2025-11-07 9:12 ` Richard Weinberger
1 sibling, 2 replies; 8+ messages in thread
From: Cheng Ming Lin @ 2025-11-07 6:31 UTC (permalink / raw)
To: Miquel Raynal
Cc: richard, chengzhihao1, vigneshr, linux-mtd, linux-kernel,
alvinzhou, leoyu, Cheng Ming Lin
Hi Miquel,
Miquel Raynal <miquel.raynal@bootlin.com> 於 2025年11月6日 週四 下午5:10寫道:
>
> Hello,
>
> On 06/11/2025 at 13:49:40 +08, Cheng Ming Lin <linchengming884@gmail.com> wrote:
>
> > From: Cheng Ming Lin <chengminglin@mxic.com.tw>
> >
> > This patch prevents unnecessary programming of bits in ec_hdr and
> > vid_hdr that are not used or read during normal UBI operation. These
> > unused bits are typcially already set to 1 in erased flash and do not
> > need to be explicitly programmed to 0 if they are not used.
> >
> > Programming such unused areas offers no functional benefit and may
> > result in unnecessary flash wear, reducing the overall lifetime of the
> > device. By skipping these writes, we preserve the flash state as much as
> > possible and minimize wear caused by redundant operations.
> >
> > This change ensures that only necessary fields are written when preparing
> > UBI headers, improving flash efficiency without affecting functionality.
> >
> > Additionally, the Kioxia TC58NVG1S3HTA00 datasheet (page 63) also notes
> > that continuous program/erase cycling with a high percentage of '0' bits
> > in the data pattern can accelerate block endurance degradation.
> > This further supports avoiding large 0x00 patterns.
> >
> > Link: https://europe.kioxia.com/content/dam/kioxia/newidr/productinfo/datasheet/201910/DST_TC58NVG1S3HTA00-TDE_EN_31442.pdf
> >
> > Signed-off-by: Cheng Ming Lin <chengminglin@mxic.com.tw>
>
> Thanks for this very clear and detailed commit log, as well as for the
> well written cover letter. I am personally fine with the overall idea of
> clearing these unused bits to 1. Yet, I have one concern regarding the
> implementation, please see below.
>
> > ---
> > drivers/mtd/ubi/io.c | 7 +++++++
> > 1 file changed, 7 insertions(+)
> >
> > diff --git a/drivers/mtd/ubi/io.c b/drivers/mtd/ubi/io.c
> > index a4999bce4..c21242a14 100644
> > --- a/drivers/mtd/ubi/io.c
> > +++ b/drivers/mtd/ubi/io.c
> > @@ -868,6 +868,8 @@ int ubi_io_write_ec_hdr(struct ubi_device *ubi, int pnum,
> > return -EROFS;
> > }
> >
> > + memset((char *)ec_hdr + UBI_EC_HDR_SIZE, 0xFF, ubi->ec_hdr_alsize - UBI_EC_HDR_SIZE);
> > +
> > err = ubi_io_write(ubi, ec_hdr, pnum, 0, ubi->ec_hdr_alsize);
> > return err;
> > }
> > @@ -1150,6 +1152,11 @@ int ubi_io_write_vid_hdr(struct ubi_device *ubi, int pnum,
> > return -EROFS;
> > }
> >
> > + if (ubi->vid_hdr_shift)
> > + memset((char *)p, 0xFF, ubi->vid_hdr_alsize - UBI_VID_HDR_SIZE);
> > + else
> > + memset((char *)p + UBI_VID_HDR_SIZE, 0xFF, ubi->vid_hdr_alsize - UBI_VID_HDR_SIZE);
>
> Here I am reaching the limits of my UBI knowledge, so I would prefer
> Richard to (in)validate what I am saying, but AFAIU, the VID header can
> be literally anywhere in the page, not just at the start or end of a
> subpage, so in the vid_hdr_shift I would expect some extra maths to
> happen, no?
I understand your point now. If the VID header is not guaranteed to be
at the start or end of a subpage, then yes, my current logic needs to be
reworked to cover that case.
>
> Here is an excerpt of the main comment at the top of the io.c file:
>
> * As it was noted above, the VID header may start at a non-aligned
> * offset. For example, in case of a 2KiB page NAND flash with a 512
> * bytes sub-page, the VID header may reside at offset 1984 which is
> * the last 64 bytes of the * last sub-page (EC header is always at
> * offset zero).
>
> I am not sure this is super common today though.
>
> Thanks,
> Miquèl
Thanks,
Cheng Ming Lin
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 1/1] mtd: ubi: skip programming unused bits in ubi headers
2025-11-07 6:31 ` Cheng Ming Lin
@ 2025-11-07 8:23 ` Miquel Raynal
2025-11-07 8:28 ` Cheng Ming Lin
2025-11-07 9:12 ` Richard Weinberger
1 sibling, 1 reply; 8+ messages in thread
From: Miquel Raynal @ 2025-11-07 8:23 UTC (permalink / raw)
To: Cheng Ming Lin
Cc: richard, chengzhihao1, vigneshr, linux-mtd, linux-kernel,
alvinzhou, leoyu, Cheng Ming Lin
Hello,
>> > + if (ubi->vid_hdr_shift)
>> > + memset((char *)p, 0xFF, ubi->vid_hdr_alsize - UBI_VID_HDR_SIZE);
>> > + else
>> > + memset((char *)p + UBI_VID_HDR_SIZE, 0xFF, ubi->vid_hdr_alsize - UBI_VID_HDR_SIZE);
>>
>> Here I am reaching the limits of my UBI knowledge, so I would prefer
>> Richard to (in)validate what I am saying, but AFAIU, the VID header can
>> be literally anywhere in the page, not just at the start or end of a
>> subpage, so in the vid_hdr_shift I would expect some extra maths to
>> happen, no?
>
> I understand your point now. If the VID header is not guaranteed to be
> at the start or end of a subpage, then yes, my current logic needs to be
> reworked to cover that case.
I don't know if this is easy to do, but maybe you can memset the whole
buffer before filling it. That would avoid the need to know where the
VID header will be.
Thanks,
Miquèl
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 1/1] mtd: ubi: skip programming unused bits in ubi headers
2025-11-07 8:23 ` Miquel Raynal
@ 2025-11-07 8:28 ` Cheng Ming Lin
0 siblings, 0 replies; 8+ messages in thread
From: Cheng Ming Lin @ 2025-11-07 8:28 UTC (permalink / raw)
To: Miquel Raynal
Cc: richard, chengzhihao1, vigneshr, linux-mtd, linux-kernel,
alvinzhou, leoyu, Cheng Ming Lin
Hi Miquel,
Miquel Raynal <miquel.raynal@bootlin.com> 於 2025年11月7日 週五 下午4:23寫道:
>
> Hello,
>
> >> > + if (ubi->vid_hdr_shift)
> >> > + memset((char *)p, 0xFF, ubi->vid_hdr_alsize - UBI_VID_HDR_SIZE);
> >> > + else
> >> > + memset((char *)p + UBI_VID_HDR_SIZE, 0xFF, ubi->vid_hdr_alsize - UBI_VID_HDR_SIZE);
> >>
> >> Here I am reaching the limits of my UBI knowledge, so I would prefer
> >> Richard to (in)validate what I am saying, but AFAIU, the VID header can
> >> be literally anywhere in the page, not just at the start or end of a
> >> subpage, so in the vid_hdr_shift I would expect some extra maths to
> >> happen, no?
> >
> > I understand your point now. If the VID header is not guaranteed to be
> > at the start or end of a subpage, then yes, my current logic needs to be
> > reworked to cover that case.
>
> I don't know if this is easy to do, but maybe you can memset the whole
> buffer before filling it. That would avoid the need to know where the
> VID header will be.
At this point I have two possible directions.
The first approach is to keep doing it in two parts, like:
memset((char *)p, 0xFF, ubi->vid_hdr_shift);
memset((char *)p + ubi->vid_hdr_shift + UBI_VID_HDR_SIZE, 0xFF,
ubi->vid_hdr_alsize - (ubi->vid_hdr_shift + UBI_VID_HDR_SIZE));
The second approach would be to modify ubi_init_vid_buf() in ubi/ubi.h,
so that its memset fills the buffer with 0xFF from the beginning.
The second one is cleaner, but ubi_init_vid_buf() is not always called
before ubi_io_write_vid_hdr(), so I am checking right now whether this
would affect other paths.
>
> Thanks,
> Miquèl
Thanks,
Cheng Ming Lin
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 1/1] mtd: ubi: skip programming unused bits in ubi headers
2025-11-07 6:31 ` Cheng Ming Lin
2025-11-07 8:23 ` Miquel Raynal
@ 2025-11-07 9:12 ` Richard Weinberger
1 sibling, 0 replies; 8+ messages in thread
From: Richard Weinberger @ 2025-11-07 9:12 UTC (permalink / raw)
To: Cheng Ming Lin
Cc: Miquel Raynal, chengzhihao1, Vignesh Raghavendra, linux-mtd,
linux-kernel, Alvin Zhou, leoyu, Cheng Ming Lin
----- Ursprüngliche Mail -----
> Von: "Cheng Ming Lin" <linchengming884@gmail.com>
>> Here I am reaching the limits of my UBI knowledge, so I would prefer
>> Richard to (in)validate what I am saying, but AFAIU, the VID header can
>> be literally anywhere in the page, not just at the start or end of a
>> subpage, so in the vid_hdr_shift I would expect some extra maths to
>> happen, no?
Good catch!
I had to read the code change twice to see the problem, though. :-S
> I understand your point now. If the VID header is not guaranteed to be
> at the start or end of a subpage, then yes, my current logic needs to be
> reworked to cover that case.
Yes. This can be configured using ubiattach --vid-hdr-offset ...
With nandsim you can test all kind of combinations.
Thanks,
//richard
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2025-11-07 9:18 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-11-06 5:49 [PATCH 0/1] mtd: ubi: skip programming unused bits in ubi headers Cheng Ming Lin
2025-11-06 5:49 ` [PATCH 1/1] " Cheng Ming Lin
2025-11-06 9:10 ` Miquel Raynal
2025-11-06 9:45 ` Cheng Ming Lin
2025-11-07 6:31 ` Cheng Ming Lin
2025-11-07 8:23 ` Miquel Raynal
2025-11-07 8:28 ` Cheng Ming Lin
2025-11-07 9:12 ` Richard Weinberger
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox