1. 12 Jan, 2018 6 commits
    • Miquel Raynal's avatar
      mtd: nand: add reworked Marvell NAND controller driver · 02f26ecf
      Miquel Raynal authored
      Add marvell_nand driver which aims at replacing the existing pxa3xx_nand
      driver.
      
      The new driver intends to be easier to understand and follows the brand
      new NAND framework rules by implementing hooks for every pattern the
      controller might support and referencing them inside a parser object
      that will be given to the core at each ->exec_op() call.
      
      Raw accessors are implemented, useful to test/debug memory/filesystem
      corruptions. Userspace binaries contained in the mtd-utils package may
      now be used and their output trusted.
      
      Most of the DT nodes using the old driver kept non-optimal timings from
      the bootloader (even if there was some mechanisms to derive them if the
      chip was ONFI compliant). The new default is to implement
      ->setup_data_interface() and follow the core's decision regarding the
      chip.
      
      Thanks to the improved timings, implementation of ONFI mode 5 support
      (with EDO managed by adding a delay on data sampling), merging the
      commands together and optimizing writes in the command registers, the
      new driver may achieve faster throughputs in both directions.
      Measurements show an improvement of about +23% read throughput and +24%
      write throughput. These measurements have been done with an
      Armada-385-DB-AP (4kiB NAND pages forced in 4-bit strength BCH ECC
      correction) using the userspace tool 'flash_speed' from the MTD test
      suite.
      
      Besides these important topics, the new driver addresses several
      unsolved known issues in the old driver which:
      - did not work with ECC soft neither with ECC none ;
      - relied on naked read/write (which is unchanged) while the NFCv1
        embedded in the pxa3xx platforms do not implement it, so several
        NAND commands did not actually ever work without any notice (like
        reading the ONFI PARAM_PAGE or SET/GET_FEATURES) ;
      - wrote the OOB data correctly, but was not able to read it correctly
        past the first OOB data chunk ;
      - did not retrieve ECC bytes ;
      - used device tree bindings that did not allow more than one NAND chip,
        and did not allow to choose the correct chip select if not
        incrementing from 0. Plus, the Ready/Busy line used had to be 0.
      
      Old device tree bindings are still supported but deprecated. A more
      hierarchical view has to be used to keep the controller and the NAND
      chip structures clearly separated both inside the device tree and also
      in the driver code.
      Signed-off-by: default avatarMiquel Raynal <miquel.raynal@free-electrons.com>
      Tested-by: default avatarSean Nyekjaer <sean.nyekjaer@prevas.dk>
      Tested-by: default avatarWilly Tarreau <w@1wt.eu>
      Signed-off-by: default avatarBoris Brezillon <boris.brezillon@free-electrons.com>
      02f26ecf
    • Miquel Raynal's avatar
      dt-bindings: mtd: add Marvell NAND controller documentation · a82d2069
      Miquel Raynal authored
      Document the legacy and the new bindings for Marvell NAND controller.
      
      The pxa3xx_nand.c driver does only support legacy bindings, which are
      incomplete and inaccurate. A rework of this controller (called
      marvell_nand.c) does support both.
      Signed-off-by: default avatarMiquel Raynal <miquel.raynal@free-electrons.com>
      Reviewed-by: default avatarRob Herring <robh@kernel.org>
      Signed-off-by: default avatarBoris Brezillon <boris.brezillon@free-electrons.com>
      a82d2069
    • Miquel Raynal's avatar
      dt-bindings: mtd: document new nand-rb property · b76bb4e6
      Miquel Raynal authored
      There are already an atmel,rb and an allwinner,rb properties, let's not
      make other ones and instead use a generic term: nand-rb to define NAND
      chips Ready/Busy lines.
      Signed-off-by: default avatarMiquel Raynal <miquel.raynal@free-electrons.com>
      Reviewed-by: default avatarRob Herring <robh@kernel.org>
      Signed-off-by: default avatarBoris Brezillon <boris.brezillon@free-electrons.com>
      b76bb4e6
    • Miquel Raynal's avatar
      mtd: nand: Fix nand_do_read_oob() return value · 87e89ce8
      Miquel Raynal authored
      Starting from commit 041e4575 ("mtd: nand: handle ECC errors in
      OOB"), nand_do_read_oob() (from the NAND core) did return 0 or a
      negative error, and the MTD layer expected it.
      
      However, the trend for the NAND layer is now to return an error or a
      positive number of bitflips. Deciding which status to return to the user
      belongs to the MTD layer.
      
      Commit e47f6858 ("mtd: check for max_bitflips in mtd_read_oob()")
      brought this logic to the mtd_read_oob() function while the return value
      coming from nand_do_read_oob() (called by the ->_read_oob() hook) was
      left unchanged.
      
      Fixes: e47f6858 ("mtd: check for max_bitflips in mtd_read_oob()")
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarMiquel Raynal <miquel.raynal@free-electrons.com>
      Signed-off-by: default avatarBoris Brezillon <boris.brezillon@free-electrons.com>
      87e89ce8
    • Miquel Raynal's avatar
      mtd: mtd_oobtest: Handle bitflips during reads · 12663b44
      Miquel Raynal authored
      Reads from NAND devices usually trigger bitflips, this is an expected
      behavior. While bitflips are under a given threshold, the MTD core
      returns 0. However, when the number of corrected bitflips is above this
      same threshold, -EUCLEAN is returned to inform the upper layer that this
      block is slightly dying and soon the ECC engine will be overtaken so
      actions should be taken to move the data out of it.
      
      This particular condition should not be treated like an error and the
      test should continue.
      Signed-off-by: default avatarMiquel Raynal <miquel.raynal@free-electrons.com>
      Signed-off-by: default avatarBoris Brezillon <boris.brezillon@free-electrons.com>
      12663b44
    • Nicolas Ferre's avatar
      MAINTAINERS: mtd/nand: update Microchip nand entry · 7cce5d83
      Nicolas Ferre authored
      Update Wenyou Yang email address.
      Take advantage of this update to move this entry to the MICROCHIP / ATMEL
      location and add the DT binding documentation link.
      Signed-off-by: default avatarNicolas Ferre <nicolas.ferre@microchip.com>
      Acked-by: default avatarWenyou Yang <wenyou.yang@microchip.com>
      Signed-off-by: default avatarBoris Brezillon <boris.brezillon@free-electrons.com>
      7cce5d83
  2. 10 Jan, 2018 1 commit
  3. 09 Jan, 2018 2 commits
  4. 06 Jan, 2018 3 commits
  5. 18 Dec, 2017 4 commits
  6. 16 Dec, 2017 1 commit
    • Miquel Raynal's avatar
      mtd: nand: add ->exec_op() implementation · 8878b126
      Miquel Raynal authored
      Introduce a new interface to instruct NAND controllers to send specific
      NAND operations. The new interface takes the form of a single method
      called ->exec_op(). This method is designed to replace ->cmd_ctrl(),
      ->cmdfunc() and ->read/write_byte/word/buf() hooks.
      
      ->exec_op() is passed a set of instructions describing the operation
      to execute. Each instruction has a type (ADDR, CMD, DATA, WAITRDY)
      and delay. The delay is here to help simple controllers wait enough
      time between each instruction, advanced controllers with integrated
      timings control can ignore these delays.
      
      Controllers that natively support complex operations (operations
      formed of several instructions) can use the NAND op parser
      infrastructure. This infrastructure allows controller drivers to
      describe the sequence of instructions they support (called
      nand_op_pattern) and a hook for each of these supported sequences. The
      core then tries to find the best match for a given NAND operation, and
      calls the associated hook.
      
      Various other helpers are also added to ease NAND controller drivers
      writing.
      
      This new interface should ease support of vendor specific operations
      in that NAND manufacturer drivers now have a way to check if the
      controller they are connected to supports a specific operation, and
      complain or refuse to probe the NAND chip when that's not the case.
      Suggested-by: default avatarBoris Brezillon <boris.brezillon@free-electrons.com>
      Signed-off-by: default avatarMiquel Raynal <miquel.raynal@free-electrons.com>
      Signed-off-by: default avatarBoris Brezillon <boris.brezillon@free-electrons.com>
      8878b126
  7. 14 Dec, 2017 14 commits
  8. 01 Dec, 2017 1 commit
  9. 30 Nov, 2017 8 commits