[PATCH RESEND u-boot-spi 0/8] Fix `mtd erase` when used with mtdpart

Marek Behún marek.behun at nic.cz
Thu Jul 15 01:51:01 CEST 2021


Hello,

I accidentally forgot to send this series to U-Boot's mailing list last
time, meaning it did not end up in patchwork, so now I am resending it.
Sorry for this mess.

The original cover letter said:

this patch series fixes the `mtd erase` command when used with mtdpart
with a partition of non-zero offset.

Currently when the `mtd erase` command is used for such a partition,
it does not erase all blocks. Instead after a block is erased, the next
block address not current block address + block size, but current block
address + block size + partition offset, due to spi_nor_erase() not
calling mtd_erase_callback():
  => mtd erase "Rescue system"
  Erasing 0x00000000 ... 0x006fffff (1792 eraseblock(s))
  jedec_spi_nor spi-nor at 0: at 0x100000, len 4096
  jedec_spi_nor spi-nor at 0: at 0x201000, len 4096
  jedec_spi_nor spi-nor at 0: at 0x302000, len 4096
  jedec_spi_nor spi-nor at 0: at 0x403000, len 4096
  jedec_spi_nor spi-nor at 0: at 0x504000, len 4096
  jedec_spi_nor spi-nor at 0: at 0x605000, len 4096
  jedec_spi_nor spi-nor at 0: at 0x706000, len 4096

This series adds some fixes to spi_nor_erase() function, then adds
calling of mtd_erase_callback() to fix this bug.

The series also contains an improvement - adding the posibility to
interrupt spi_nor_erase() with Ctrl+C; and another one - making mtdpart's
_erase() method more sane so that the above mentioned bug will not occur
even if underlying driver does not call mtd_erase_callback().

Moreover I would also like to start a discussion regarding the MTD
subsystem:
- U-Boot's MTD subsystem is based on Linux's, with many #ifdef __U_BOOT__
  macros
- this was done to make it easier to port Linux's patches to U-Boot
- the problem is that it seems nobody did port Linux's MTD patches to
  U-Boot for a long time, the code is many times different from Linux',
  and it would be very hard to align it
- therefore I propose to get rid of all the #ifdefs, remove the Linux
  specific code, and continue developing the code independently from
  Linux. This would make it impossible to apply Linux patches in some
  kind of automatic way, but this is currently already impossible
  anyway
What do you guys think?

Marek

Marek Behún (8):
  mtd: spi-nor-core: Try cleaning up in case writing BAR failed
  mtd: spi-nor-core: Check return value of write_enable() in
    spi_nor_erase()
  mtd: spi-nor-core: Don't overwrite return value if it is non-zero
  mtd: spi-nor-core: Check return value of write_disable() in
    spi_nor_erase()
  mtd: spi-nor-core: Don't check for zero length in spi_nor_erase()
  mtd: spi-nor-core: Call mtd_erase_callback() from spi_nor_erase()
  mtd: spi-nor-core: Check for ctrlc() in spi_nor_erase()
  mtd: mtdpart: Make mtdpart's _erase method sane

 drivers/mtd/mtdpart.c          | 26 +++++++++++++-------
 drivers/mtd/spi/spi-nor-core.c | 44 ++++++++++++++++++++++++++--------
 2 files changed, 52 insertions(+), 18 deletions(-)

-- 
2.31.1



More information about the U-Boot mailing list