mbox series

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

Message ID 20180713123213.23596-1-miquel.raynal@bootlin.com
Headers show
Series SPI-NAND support | expand

Message

Miquel Raynal July 13, 2018, 12:31 p.m. UTC
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

 cmd/Kconfig                                   |    7 +
 cmd/Makefile                                  |    1 +
 cmd/mtd.c                                     |  392 ++++++++
 cmd/mtdparts.c                                |  113 ++-
 cmd/ubi.c                                     |    5 -
 doc/device-tree-bindings/mtd/spi-nand.txt     |    5 +
 drivers/mtd/Kconfig                           |    7 +-
 drivers/mtd/Makefile                          |    4 +-
 drivers/mtd/mtd-uclass.c                      |    9 +
 drivers/mtd/mtdcore.c                         |  106 ++-
 drivers/mtd/mtdcore.h                         |    6 -
 drivers/mtd/mtdpart.c                         |    6 +-
 drivers/mtd/nand/Kconfig                      |  281 +-----
 drivers/mtd/nand/Makefile                     |   79 +-
 drivers/mtd/nand/bbt.c                        |  132 +++
 drivers/mtd/nand/core.c                       |  243 +++++
 drivers/mtd/nand/raw/Kconfig                  |  279 ++++++
 drivers/mtd/nand/raw/Makefile                 |   77 ++
 drivers/mtd/nand/{ => raw}/am335x_spl_bch.c   |    0
 drivers/mtd/nand/{ => raw}/arasan_nfc.c       |    0
 drivers/mtd/nand/{ => raw}/atmel_nand.c       |    0
 drivers/mtd/nand/{ => raw}/atmel_nand_ecc.h   |    0
 drivers/mtd/nand/{ => raw}/davinci_nand.c     |    0
 drivers/mtd/nand/{ => raw}/denali.c           |    0
 drivers/mtd/nand/{ => raw}/denali.h           |    0
 drivers/mtd/nand/{ => raw}/denali_dt.c        |    0
 drivers/mtd/nand/{ => raw}/denali_spl.c       |    0
 drivers/mtd/nand/{ => raw}/fsl_elbc_nand.c    |    0
 drivers/mtd/nand/{ => raw}/fsl_elbc_spl.c     |    0
 drivers/mtd/nand/{ => raw}/fsl_ifc_nand.c     |    0
 drivers/mtd/nand/{ => raw}/fsl_ifc_spl.c      |    0
 drivers/mtd/nand/{ => raw}/fsl_upm.c          |    0
 drivers/mtd/nand/{ => raw}/fsmc_nand.c        |    0
 drivers/mtd/nand/{ => raw}/kb9202_nand.c      |    0
 drivers/mtd/nand/{ => raw}/kirkwood_nand.c    |    0
 drivers/mtd/nand/{ => raw}/kmeter1_nand.c     |    0
 drivers/mtd/nand/{ => raw}/lpc32xx_nand_mlc.c |    0
 drivers/mtd/nand/{ => raw}/lpc32xx_nand_slc.c |    0
 drivers/mtd/nand/{ => raw}/mxc_nand.c         |    0
 drivers/mtd/nand/{ => raw}/mxc_nand.h         |    0
 drivers/mtd/nand/{ => raw}/mxc_nand_spl.c     |    0
 drivers/mtd/nand/{ => raw}/mxs_nand.c         |    0
 drivers/mtd/nand/{ => raw}/mxs_nand.h         |    0
 drivers/mtd/nand/{ => raw}/mxs_nand_dt.c      |    0
 drivers/mtd/nand/{ => raw}/mxs_nand_spl.c     |    0
 drivers/mtd/nand/{ => raw}/nand.c             |    0
 drivers/mtd/nand/{ => raw}/nand_base.c        |   56 --
 drivers/mtd/nand/{ => raw}/nand_bbt.c         |    0
 drivers/mtd/nand/{ => raw}/nand_bch.c         |    0
 drivers/mtd/nand/{ => raw}/nand_ecc.c         |    0
 drivers/mtd/nand/{ => raw}/nand_ids.c         |    0
 drivers/mtd/nand/{ => raw}/nand_plat.c        |    0
 drivers/mtd/nand/{ => raw}/nand_spl_load.c    |    0
 drivers/mtd/nand/{ => raw}/nand_spl_loaders.c |    0
 drivers/mtd/nand/{ => raw}/nand_spl_simple.c  |    0
 drivers/mtd/nand/{ => raw}/nand_timings.c     |    0
 drivers/mtd/nand/{ => raw}/nand_util.c        |    0
 drivers/mtd/nand/{ => raw}/omap_elm.c         |    0
 drivers/mtd/nand/{ => raw}/omap_gpmc.c        |    0
 drivers/mtd/nand/{ => raw}/pxa3xx_nand.c      |    0
 drivers/mtd/nand/{ => raw}/pxa3xx_nand.h      |    0
 drivers/mtd/nand/{ => raw}/sunxi_nand.c       |    0
 drivers/mtd/nand/{ => raw}/sunxi_nand_spl.c   |    0
 drivers/mtd/nand/{ => raw}/tegra_nand.c       |    0
 drivers/mtd/nand/{ => raw}/tegra_nand.h       |    0
 drivers/mtd/nand/{ => raw}/vf610_nfc.c        |    0
 drivers/mtd/nand/{ => raw}/zynq_nand.c        |    0
 drivers/mtd/nand/spi/Kconfig                  |    7 +
 drivers/mtd/nand/spi/Makefile                 |    4 +
 drivers/mtd/nand/spi/core.c                   | 1254 +++++++++++++++++++++++++
 drivers/mtd/nand/spi/macronix.c               |  146 +++
 drivers/mtd/nand/spi/micron.c                 |  135 +++
 drivers/mtd/nand/spi/winbond.c                |  143 +++
 drivers/mtd/onenand/onenand_base.c            |   60 --
 drivers/spi/Kconfig                           |    7 +
 drivers/spi/Makefile                          |    1 +
 drivers/spi/spi-mem.c                         |  500 ++++++++++
 include/jffs2/load_kernel.h                   |    7 +-
 include/linux/mtd/mtd.h                       |   34 +-
 include/linux/mtd/nand.h                      |  734 +++++++++++++++
 include/linux/mtd/partitions.h                |    3 +
 include/linux/mtd/spinand.h                   |  432 +++++++++
 include/spi-mem.h                             |  258 +++++
 include/spi.h                                 |   11 +
 84 files changed, 5024 insertions(+), 520 deletions(-)
 create mode 100644 cmd/mtd.c
 create mode 100644 doc/device-tree-bindings/mtd/spi-nand.txt
 create mode 100644 drivers/mtd/nand/bbt.c
 create mode 100644 drivers/mtd/nand/core.c
 create mode 100644 drivers/mtd/nand/raw/Kconfig
 create mode 100644 drivers/mtd/nand/raw/Makefile
 rename drivers/mtd/nand/{ => raw}/am335x_spl_bch.c (100%)
 rename drivers/mtd/nand/{ => raw}/arasan_nfc.c (100%)
 rename drivers/mtd/nand/{ => raw}/atmel_nand.c (100%)
 rename drivers/mtd/nand/{ => raw}/atmel_nand_ecc.h (100%)
 rename drivers/mtd/nand/{ => raw}/davinci_nand.c (100%)
 rename drivers/mtd/nand/{ => raw}/denali.c (100%)
 rename drivers/mtd/nand/{ => raw}/denali.h (100%)
 rename drivers/mtd/nand/{ => raw}/denali_dt.c (100%)
 rename drivers/mtd/nand/{ => raw}/denali_spl.c (100%)
 rename drivers/mtd/nand/{ => raw}/fsl_elbc_nand.c (100%)
 rename drivers/mtd/nand/{ => raw}/fsl_elbc_spl.c (100%)
 rename drivers/mtd/nand/{ => raw}/fsl_ifc_nand.c (100%)
 rename drivers/mtd/nand/{ => raw}/fsl_ifc_spl.c (100%)
 rename drivers/mtd/nand/{ => raw}/fsl_upm.c (100%)
 rename drivers/mtd/nand/{ => raw}/fsmc_nand.c (100%)
 rename drivers/mtd/nand/{ => raw}/kb9202_nand.c (100%)
 rename drivers/mtd/nand/{ => raw}/kirkwood_nand.c (100%)
 rename drivers/mtd/nand/{ => raw}/kmeter1_nand.c (100%)
 rename drivers/mtd/nand/{ => raw}/lpc32xx_nand_mlc.c (100%)
 rename drivers/mtd/nand/{ => raw}/lpc32xx_nand_slc.c (100%)
 rename drivers/mtd/nand/{ => raw}/mxc_nand.c (100%)
 rename drivers/mtd/nand/{ => raw}/mxc_nand.h (100%)
 rename drivers/mtd/nand/{ => raw}/mxc_nand_spl.c (100%)
 rename drivers/mtd/nand/{ => raw}/mxs_nand.c (100%)
 rename drivers/mtd/nand/{ => raw}/mxs_nand.h (100%)
 rename drivers/mtd/nand/{ => raw}/mxs_nand_dt.c (100%)
 rename drivers/mtd/nand/{ => raw}/mxs_nand_spl.c (100%)
 rename drivers/mtd/nand/{ => raw}/nand.c (100%)
 rename drivers/mtd/nand/{ => raw}/nand_base.c (98%)
 rename drivers/mtd/nand/{ => raw}/nand_bbt.c (100%)
 rename drivers/mtd/nand/{ => raw}/nand_bch.c (100%)
 rename drivers/mtd/nand/{ => raw}/nand_ecc.c (100%)
 rename drivers/mtd/nand/{ => raw}/nand_ids.c (100%)
 rename drivers/mtd/nand/{ => raw}/nand_plat.c (100%)
 rename drivers/mtd/nand/{ => raw}/nand_spl_load.c (100%)
 rename drivers/mtd/nand/{ => raw}/nand_spl_loaders.c (100%)
 rename drivers/mtd/nand/{ => raw}/nand_spl_simple.c (100%)
 rename drivers/mtd/nand/{ => raw}/nand_timings.c (100%)
 rename drivers/mtd/nand/{ => raw}/nand_util.c (100%)
 rename drivers/mtd/nand/{ => raw}/omap_elm.c (100%)
 rename drivers/mtd/nand/{ => raw}/omap_gpmc.c (100%)
 rename drivers/mtd/nand/{ => raw}/pxa3xx_nand.c (100%)
 rename drivers/mtd/nand/{ => raw}/pxa3xx_nand.h (100%)
 rename drivers/mtd/nand/{ => raw}/sunxi_nand.c (100%)
 rename drivers/mtd/nand/{ => raw}/sunxi_nand_spl.c (100%)
 rename drivers/mtd/nand/{ => raw}/tegra_nand.c (100%)
 rename drivers/mtd/nand/{ => raw}/tegra_nand.h (100%)
 rename drivers/mtd/nand/{ => raw}/vf610_nfc.c (100%)
 rename drivers/mtd/nand/{ => raw}/zynq_nand.c (100%)
 create mode 100644 drivers/mtd/nand/spi/Kconfig
 create mode 100644 drivers/mtd/nand/spi/Makefile
 create mode 100644 drivers/mtd/nand/spi/core.c
 create mode 100644 drivers/mtd/nand/spi/macronix.c
 create mode 100644 drivers/mtd/nand/spi/micron.c
 create mode 100644 drivers/mtd/nand/spi/winbond.c
 create mode 100644 drivers/spi/spi-mem.c
 create mode 100644 include/linux/mtd/nand.h
 create mode 100644 include/linux/mtd/spinand.h
 create mode 100644 include/spi-mem.h

Comments

Jagan Teki July 26, 2018, 5:30 a.m. UTC | #1
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>

Can you rebase on master and send the needed patches or whole? Look
like some changes been added in drivers/mtd/nand/Kconfig
Miquel Raynal July 26, 2018, 7:29 a.m. UTC | #2
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.

Kind regards,
Miquèl
Stefan Roese July 30, 2018, 3:11 p.m. UTC | #3
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.

Thanks,
Stefan
Miquel Raynal July 30, 2018, 3:23 p.m. UTC | #4
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
Tom Rini July 30, 2018, 4:10 p.m. UTC | #5
On Mon, Jul 30, 2018 at 05:23:18PM +0200, Miquel Raynal wrote:
> 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?

Yes, I want this in the upcoming release.  So Jagan, please apply this
and send me a PR if there's no further immediate changes required.
Thanks!
Jagan Teki July 31, 2018, 5:36 a.m. UTC | #6
On Mon, Jul 30, 2018 at 8:41 PM, Stefan Roese <sr@denx.de> wrote:
> 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.

Is this resolved with v5?

>
> 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).

Is it with kirkwood?

> 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.

If the issue is generic and it changed the current behavior on mtd or
any other related areas, it's better to hold.

Jagan.
Stefan Roese July 31, 2018, 5:50 a.m. UTC | #7
Hi Jagan,

On 31.07.2018 07:36, Jagan Teki wrote:

<snip>

>>>> 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.
> 
> Is this resolved with v5?
> 
>>
>> 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).
> 
> Is it with kirkwood?

No. Its with a new platform I'm currently working on (MediaTek
MT7688 MIPS) - custom board. The platform and board port will be
posted in a few days / weeks (once its ready).

>> 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.
> 
> If the issue is generic and it changed the current behavior on mtd or
> any other related areas, it's better to hold.

AFAICT its not generic. The SPI NAND seems to be working for Miquel
and its a new infrastructure. So chances for breaking an existing
board / platform are pretty low. By pulling this patchset now, we
enable the possibility for implementing and testing it on other
platforms sooner. Tom also seems to be willing to do so.

Thanks,
Stefan
Miquel Raynal July 31, 2018, 7:37 a.m. UTC | #8
Hi Jagan,

Stefan Roese <sr@denx.de> wrote on Tue, 31 Jul 2018 07:50:54 +0200:

> Hi Jagan,
> 
> On 31.07.2018 07:36, Jagan Teki wrote:
> 
> <snip>
> 
> >>>> 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.  
> > > Is this resolved with v5?  

Absolutely not, but I will fix it in a next series during the
stabilization cycle. Maybe I will rework a bit mtdparts too, to trash
the thin layer that handles the partitions to use in a much more
consistent way the MTD core.

> > >>  
> >> 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).
> > > Is it with kirkwood?  
> 
> No. Its with a new platform I'm currently working on (MediaTek
> MT7688 MIPS) - custom board. The platform and board port will be
> posted in a few days / weeks (once its ready).
> 
> >> 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.
> > > If the issue is generic and it changed the current behavior on mtd or  
> > any other related areas, it's better to hold.  
> 
> AFAICT its not generic. The SPI NAND seems to be working for Miquel
> and its a new infrastructure. So chances for breaking an existing
> board / platform are pretty low.

I totally agree on this.

> By pulling this patchset now, we
> enable the possibility for implementing and testing it on other
> platforms sooner. Tom also seems to be willing to do so.

Jagan, I just saw your answer to the cover letter of the v5,
thanks for applying it.

Regards,
Miquèl