[U-Boot] [PATCH v4 00/27] SPI-NAND support

Miquel Raynal
2018-07-30T15:23:18Z

Hi Stefan, Tom,

Stefan Roese <sr@denx.de> wrote on Mon, 30 Jul 2018 17:11:49 +0200:

> Hi Miquel,
> Hi Jagan,
>
> On 26.07.2018 09:29, Miquel Raynal wrote:
> > Hi Jagan,
> > > Jagan Teki <jagan@amarulasolutions.com> wrote on Thu, 26 Jul 2018
> > 11:00:56 +0530:
> > >> On Fri, Jul 13, 2018 at 6:01 PM, Miquel Raynal
> >> <miquel.raynal@bootlin.com> wrote:
> >>> During the last months, Boris Brezillon shared his work to support
> >>> serial flashes within Linux. First, he delivered (and merged) a new
> >>> layer called spi-mem. He also initiated in Linux MTD subsystem the move
> >>> of all 'raw' NAND related code to a raw/ subdirectory, adding at the
> >>> same time a NAND core that would be shared with all NAND devices. Then,
> >>> he contributed a generic SPI-NAND driver, making use of this NAND core,
> >>> as well as some vendor code to drive a few chips.
> >>>
> >>> On top of this work, I added an 'mtd' U-Boot command to handle all sort
> >>> of MTD devices. This should become the default command instead of having
> >>> one per flash flavor ('sf', 'nand', 'spi-nand' ?).
> >>>
> >>> The series has been tested on an Ocelot board PCB123 (VSC7514),
> >>> featuring a Macronix SPI NAND chip.
> >>>
> >>> TL;DR: the series contains:
> >>> - A few patches from Linux to resynchronize some areas of the MTD layer.
> >>> - Various fixes and re-organization of the MTD subsystem.
> >>> - The introduction of the SPI-mem interface.
> >>> - The addition of the generic SPI-NAND driver (and its bindings).
> >>> - Several SPI NAND chip drivers (Macronix, Micron, Winbond).
> >>> - A new 'mtd' command.
> >>> - Support for spi-nand devices in mtdparts.
> >>>
> >>> To test your SPI-NAND device with U-Boot simply follow these lines:
> >>> >>>> setenv mtdparts mtdparts=spi-nand0:1m(foo),-(bar)
> >>>> setenv mtdids spi-nand0=spi-nand0
> >>>> mtdparts # show the spi-nand device partitions
> >>>> ubi part bar # create a static UBI volume in the bar partition
> >>>
> >>> Thanks,
> >>> Miquèl
> >>>
> >>> Changes since v3:
> >>> -----------------
> >>> * Fixed the debug messages in spi-mem to print either Rx or Tx data.
> >>> * Fixed a Kconfig error that prevented to build mtdparts with plain
> >>> defconfig.
> >>> * Fixed a compilation error due to the above error that prevented one
> >>> file to be compiled.
> >>> * Adapted the mtd command to probe MTD partitions also.
> >>> * Declared mtd_probe_devices() in a header so mtdparts or UBI could
> >>> use it too (to probe all devices and MTD partitions in a clean way).
> >>> * As I worked on mtdparts, I found annoying and completely useless the
> >>> fact that we need to prefix the environment variable with
> >>> "mtdparts=". Canceled this obligation.
> >>> * Added one patch to allow spi-nand devices to be recognized by mtdparts
> >>> (this is purely useless but needed to be done in order to use this
> >>> command).
> >>> * Removed useless definitions of MTD device types in UBI code.
> >>> * Wrote a generic mtdparts environment variable parser, used by the mtd
> >>> command.
> >>> * Used the mtd_probe_devices() function from get_mtd_info() in
> >>> cmd/mtdparts.c to be sure the desired partition really does not exist
> >>> (otherwise it will be probed and then found).
> >>>
> >>> Changes since v2:
> >>> -----------------
> >>> * Rebased on u-boot master branch.
> >>> * Removed extra-parenthesis in
> >>> "mtd: Fallback to ->_read/write() when ->_read/write_oob() is missing"
> >>> * s/fiels/files/ in "mtd: move NAND fiels into a raw/ subdirectory"
> >>> * Do not describe generic SPI device properties in SPI NAND bindings.
> >>> * Changes in the mtd command:
> >>> * Printing more information in 'mtd list' (device type, device
> >>> characteristics)
> >>> * Switch to do_div() instead of '(u32)value64b % value32b' which only
> >>> worked because value32b was a power of 2.
> >>> * Removed erase.chip option.
> >>> * By default, erase/read/write happen on the full MTD device while a
> >>> dump will only work on a single page.
> >>>
> >>> Changes since v1:
> >>> -----------------
> >>> * Fixed the nand_memorg structure of the MX35LF2GE4AB chip.
> >>> * Added Reviewed-by tags from Jagan.
> >>> * Backported and squashed two patches fixing things in the SPI NAND core
> >>> received on the Linux ML.
> >>> * Backported more changes in mtdcore.c from Linux.
> >>> * Added a patch to add a fallback on mtd->_read/_write() in mtdcore.c
> >>> when mtd->_read/write_oob() is not supported.
> >>> * Removed the DT changes, useless as the DTs are not available in
> >>> mainline yet.
> >>> * Addressed Boris/Stefan comments on the 'mtd' command.
> >>> * Added support for multi-pages OOB read/write.
> >>>
> >>>
> >>> Boris Brezillon (7):
> >>> mtd: Fallback to ->_read/write_oob() when ->_read/write() is missing
> >>> mtd: Add sanity checks in mtd_write/read_oob()
> >>> mtd: nand: Add core infrastructure to deal with NAND devices
> >>> mtd: nand: Pass mode information to nand_page_io_req
> >>> spi: Extend the core to ease integration of SPI memory controllers
> >>> mtd: spinand: Add initial support for the MX35LF1GE4AB chip
> >>> dt-bindings: Add bindings for SPI NAND devices
> >>>
> >>> Brian Norris (1):
> >>> mtd: add get/set of_node/flash_node helpers
> >>>
> >>> Ezequiel Garcia (1):
> >>> mtd: Uninline mtd_write_oob and move it to mtdcore.c
> >>>
> >>> Frieder Schrempf (1):
> >>> mtd: spinand: Add initial support for Winbond W25M02GV
> >>>
> >>> Miquel Raynal (15):
> >>> mtd: Fallback to ->_read/write() when ->_read/write_oob() is missing
> >>> mtd: fix build issue with includes
> >>> mtd: move definitions to enlarge their range
> >>> mtd: move all flash categories inside MTD submenu
> >>> mtd: move NAND files into a raw/ subdirectory
> >>> mtd: rename nand into rawnand in Kconfig prompt
> >>> mtd: spinand: Add initial support for the MX35LF2GE4AB chip
> >>> mtd: declare MTD_PARTITIONS symbol in Kconfig
> >>> cmd: ubi: delete useless and misleading definitions
> >>> cmd: mtdparts: accept spi-nand devices
> >>> cmd: mtdparts: add a generic 'mtdparts' parser
> >>> cmd: mtdparts: remove useless 'mtdparts=' prefix
> >>> mtd: uclass: add probe function
> >>> cmd: mtd: add 'mtd' command
> >>> cmd: mtdparts: try to probe the MTD devices as a fallback
> >>>
> >>> Peter Pan (2):
> >>> mtd: nand: Add core infrastructure to support SPI NANDs
> >>> mtd: spinand: Add initial support for Micron MT29F2G01ABAGD
> >>
> >> Acked--by: Jagan Teki <jagan@openedev.com>
> >>
> > > Thanks!
> > >> Can you rebase on master and send the needed patches or whole? Look
> >> like some changes been added in drivers/mtd/nand/Kconfig
> > > I'll wait a bit for Stefan review also and I think I missed something
> > in mtdparts: old partitions are not freed when creating new ones.
>
> I'm back from vacation and am starting to work on this SPI NAND
> support again. Right now, I'm facing a problem with 32 Bytes
> missing when written to NAND and read back. Most likely a problem
> with my SPI driver which supports a maximum of 32 Bytes per SPI
> message (I'm using adjust_op_size() to adjust the max xfer size).
>
> As for waiting for my review comments, I would suggest to pull
> this patchset (once updated onto TOT) soon, as the merge window
> closes just today. We can fix issues later in this release cycle.
> Otherwise we need to postpone this series to the next release, which
> is of course also on option.

You are right, I forgot about that. It would be really nice to have
this feature merged for this release indeed. I also agree that, are
there are no users yet, it would be interesting to upstream it now and
be reactive on the fixes.

Tom, if you agree with this (and if it's not too late), I am rebasing
this work, if I don't have huge conflicts it could be ready any time
soon. Would you agree to merge it?

Thanks,
Miquèl