BIOC_FLUSH is used to flush the cache which may exist in mtd driver to guarantee the power-loss resilience. It's optional, so it's enough that mtd_nand returns -ENOTTY.
On Sat, Feb 24, 2024 at 8:28 PM Saurav Pal <resyfer....@gmail.com> wrote: > Hi all, > > I've been trying to develop a device simulator for the NAND flash (in the > sim). > > A short note on what this does is create a virtual NAND flash (from RAM) > and provide a driver, as well as a wrapper around the upper half (which for > now, does nothing extra). This helps in creating records of > reads/writes/erases (in a separate file) for testing and statistics > purposes. > > Since littlefs is one of the supported filesystems on MTD devices, I tried > to use it to test mount but it tries to use an ioctl with BIOC_FLUSH in the > format process, which is not supported as far as code in > drivers/mtd/mtd_nand.c go. > > *Should that be something that the NAND driver should support?* > > Here are the logs of that process, the first ioctl is for MTDIOC_GEOMETRY > (which is supported), and second for BIOC_FLUSH (in *bold*): > > nuttx ➤ make && ./nuttx > LD: nuttx > login: admin > password: > User Logged-in! > nsh> ls /dev > /dev: > console > gpio0 > gpio1 > gpio2 > gpio3 > loop > null > oneshot > ram0 > ram1 > ram2 > zero > nsh> mtddev > Size: 2097152 B > > Pages: 4096 > Blocks: 33 > Writing...Done > Driver running > nsh> ls /dev > /dev: > console > gpio0 > gpio1 > gpio2 > gpio3 > loop > mtd > null > oneshot > ram0 > ram1 > ram2 > zero > nsh> mount -t littlefs -o forceformat /dev/mtd /hi > Upper! ioctl > Command: 1537 | BIOC_FLUSH: 1293 > Upper! bread > Page 128 > Lower! rawread : Page 128 > Lower! rawread : Page 129 > Lower! rawread : Page 130 > Lower! rawread : Page 131 > Upper! erase > Lower! eraseblock : Block 0 > Upper! bread > Page 0 > Lower! rawread : Page 0 > Lower! rawread : Page 1 > Lower! rawread : Page 2 > Lower! rawread : Page 3 > Upper! bread > Page 4 > Lower! rawread : Page 4 > Lower! rawread : Page 5 > Lower! rawread : Page 6 > Lower! rawread : Page 7 > Upper! bwrite > Lower! rawwrite : Page 0 > Lower! rawwrite : Page 1 > Lower! rawwrite : Page 2 > Lower! rawwrite : Page 3 > Upper! ioctl > *Command: 1293 | BIOC_FLUSH: 1293* > Error Upper! ioctl | -25 > Upper! bread > Page 0 > Lower! rawread : Page 0 > Lower! rawread : Page 1 > Lower! rawread : Page 2 > Lower! rawread : Page 3 > nx_mount: ERROR: Bind method failed: -28 > nsh: mount: mount failed: 28 > nsh> > > The logs with "Upper!" refer to the upper half of the driver being > executed, and same for the lower, and the pages are numbered from the start > of the device (ie. (block << LOG_N_BLOCKS_PER_PAGE) + page_in_block)). > > Regards, > SP >