1. 12 3月, 2015 2 次提交
  2. 06 2月, 2015 1 次提交
  3. 02 2月, 2015 1 次提交
  4. 21 1月, 2015 1 次提交
  5. 10 1月, 2015 1 次提交
  6. 08 1月, 2015 1 次提交
    • S
      mtd: nand: added nand_shutdown · 72ea4036
      Scott Branden 提交于
      Add nand_shutdown to wait for current nand operations to finish and prevent
      further operations by changing the nand flash state to FL_SHUTDOWN.
      
      This is addressing a problem observed during reboot tests using UBIFS
      root file system: NAND erase operations that are in progress during
      system reboot/shutdown are causing partial erased blocks. Although UBI should
      be able to detect and recover from this error, this change will avoid
      the creation of partial erased blocks on reboot in the middle of a NAND erase
      operation.
      Signed-off-by: NScott Branden <sbranden@broadcom.com>
      Tested-by: NScott Branden <sbranden@broadcom.com>
      Signed-off-by: NBrian Norris <computersforpeace@gmail.com>
      72ea4036
  7. 29 11月, 2014 1 次提交
  8. 26 11月, 2014 1 次提交
  9. 05 11月, 2014 2 次提交
  10. 23 9月, 2014 1 次提交
  11. 18 9月, 2014 1 次提交
  12. 20 8月, 2014 2 次提交
    • B
      mtd: nand: fix integer widening problems · 537ab1bd
      Brian Norris 提交于
      chip->pagebuf is a 32-bit type (int), so the shift will only be applied
      as 32-bit. Fix this for 64-bit safety.
      
      Caught by Coverity.
      Signed-off-by: NBrian Norris <computersforpeace@gmail.com>
      537ab1bd
    • W
      mtd: nand: fix nand_lock/unlock() function · 57d3a9a8
      White Ding 提交于
      Do nand reset before write protect check.
      
      If we want to check the WP# low or high through STATUS READ and check bit 7,
      we must reset the device, other operation (eg.erase/program a locked block) can
      also clear the bit 7 of status register.
      
      As we know the status register can be refreshed, if we do some operation to trigger it,
      for example if we do erase/program operation to one block that is locked, then READ STATUS,
      the bit 7 of READ STATUS will be 0 indicate the device in write protect, then if we do
      erase/program operation to another block that is unlocked, the bit 7 of READ STATUS will
      be 1 indicate the device is not write protect.
      Suppose we checked the bit 7 of READ STATUS is 0 then judge the WP# is low (write protect),
      but in this case the WP# maybe high if we do erase/program operation to a locked block,
      so we must reset the device if we want to check the WP# low or high through STATUS READ and
      check bit 7.
      Signed-off-by: NWhite Ding <bpqw@micron.com>
      Signed-off-by: NBrian Norris <computersforpeace@gmail.com>
      57d3a9a8
  13. 14 7月, 2014 1 次提交
    • T
      mtd: nand: reduce the warning noise when the ECC is too weak · 54c39e9b
      Thomas Petazzoni 提交于
      In commit 67a9ad9b ("mtd: nand: Warn the user if the selected ECC
      strength is too weak"), a check was added to inform the user when the
      ECC used for a NAND device is weaker than the recommended ECC
      advertised by the NAND chip. However, the warning uses WARN_ON(),
      which has two undesirable side-effects:
      
       - It just prints to the kernel log the fact that there is a warning
         in this file, at this line, but it doesn't explain anything about
         the warning itself.
      
       - It dumps a stack trace which is very noisy, for something that the
         user is most likely not able to fix. If a certain ECC used by the
         kernel is weaker than the advertised one, it's most likely to make
         sure the kernel uses an ECC that is compatible with the one used by
         the bootloader, and changing the bootloader may not necessarily be
         easy. Therefore, normal users would not be able to do anything to
         fix this very noisy warning, and will have to suffer from it at
         every kernel boot. At least every time I see this stack trace in my
         kernel boot log, I wonder what new thing is broken, just to realize
         that it's once again this NAND ECC warning.
      
      Therefore, this commit turns:
      
      ------------[ cut here ]------------
      WARNING: CPU: 0 PID: 1 at /home/thomas/projets/linux-2.6/drivers/mtd/nand/nand_base.c:4051 nand_scan_tail+0x538/0x780()
      Modules linked in:
      CPU: 0 PID: 1 Comm: swapper Not tainted 3.16.0-rc3-dirty #4
      [<c000e3dc>] (unwind_backtrace) from [<c000bee4>] (show_stack+0x10/0x14)
      [<c000bee4>] (show_stack) from [<c0018180>] (warn_slowpath_common+0x6c/0x8c)
      [<c0018180>] (warn_slowpath_common) from [<c001823c>] (warn_slowpath_null+0x1c/0x24)
      [<c001823c>] (warn_slowpath_null) from [<c02c50cc>] (nand_scan_tail+0x538/0x780)
      [<c02c50cc>] (nand_scan_tail) from [<c0639f78>] (orion_nand_probe+0x224/0x2e4)
      [<c0639f78>] (orion_nand_probe) from [<c026da00>] (platform_drv_probe+0x18/0x4c)
      [<c026da00>] (platform_drv_probe) from [<c026c1f4>] (really_probe+0x80/0x218)
      [<c026c1f4>] (really_probe) from [<c026c47c>] (__driver_attach+0x98/0x9c)
      [<c026c47c>] (__driver_attach) from [<c026a8f0>] (bus_for_each_dev+0x64/0x94)
      [<c026a8f0>] (bus_for_each_dev) from [<c026bae4>] (bus_add_driver+0x144/0x1ec)
      [<c026bae4>] (bus_add_driver) from [<c026cb00>] (driver_register+0x78/0xf8)
      [<c026cb00>] (driver_register) from [<c026da5c>] (platform_driver_probe+0x20/0xb8)
      [<c026da5c>] (platform_driver_probe) from [<c00088b8>] (do_one_initcall+0x80/0x1d8)
      [<c00088b8>] (do_one_initcall) from [<c0620c9c>] (kernel_init_freeable+0xf4/0x1b4)
      [<c0620c9c>] (kernel_init_freeable) from [<c049a098>] (kernel_init+0x8/0xec)
      [<c049a098>] (kernel_init) from [<c00095f0>] (ret_from_fork+0x14/0x24)
      ---[ end trace 62f87d875aceccb4 ]---
      
      Into the much shorter, and much more useful:
      
      nand: WARNING: MT29F2G08ABAEAWP: the ECC used on your system is too weak compared to the one required by the NAND chip
      Signed-off-by: NThomas Petazzoni <thomas.petazzoni@free-electrons.com>
      Signed-off-by: NBrian Norris <computersforpeace@gmail.com>
      54c39e9b
  14. 09 7月, 2014 1 次提交
  15. 22 5月, 2014 1 次提交
  16. 21 5月, 2014 2 次提交
  17. 10 5月, 2014 1 次提交
    • B
      mtd: nand: refactor erase_cmd() to return chip status · 49c50b97
      Brian Norris 提交于
      The nand_chip::erase_cmd callback previously served a dual purpose; for
      one, it allowed a per-flash-chip override, so that AG-AND devices could
      use a different erase command than other NAND. These AND devices were
      dropped in commit 14c65786 (mtd: nand:
      remove AG-AND support). On the other hand, some drivers (denali and
      doc-g4) need to use this sort of callback to implement
      controller-specific erase operations.
      
      To make the latter operation easier for some drivers (e.g., ST's new BCH
      NAND driver), it helps if the command dispatch and wait functions can be
      lumped together, rather than called separately.
      
      This patch does two things:
       1. Pull the call to chip->waitfunc() into chip->erase_cmd(), and return
          the status from this callback
       2. Rename erase_cmd() to just erase(), since this callback does a
          little more than just send a command
      Signed-off-by: NBrian Norris <computersforpeace@gmail.com>
      Tested-by: NLee Jones <lee.jones@linaro.org>
      49c50b97
  18. 30 4月, 2014 1 次提交
  19. 16 4月, 2014 1 次提交
  20. 05 4月, 2014 1 次提交
    • R
      Fix index regression in nand_read_subpage · 4a4163ca
      Ron 提交于
      Commit 7351d3a5 added an index variable
      as part of fixing checkpatch warnings, presumably as a tool to make some
      long lines shorter, however it only set that index in the case of there
      being no gaps in eccpos for the fragment being read.  Which means the
      later step of filling ecccode from oob_poi will use the wrong indexing
      into eccpos in that case.
      
      This patch restores the behaviour that existed prior to that change.
      Signed-off-by: NRon Lee <ron@debian.org>
      Signed-off-by: NBrian Norris <computersforpeace@gmail.com>
      4a4163ca
  21. 26 3月, 2014 1 次提交
  22. 11 3月, 2014 8 次提交
  23. 15 2月, 2014 1 次提交
    • B
      mtd: nand: fix off-by-one read retry mode counting · 28fa65e6
      Brian Norris 提交于
      A flash may support N read retry voltage threshold modes, numbered 0
      through N-1 (where mode 0 represents the initial state). However,
      nand_do_read_ops() tries to use mode 0 through N.
      
      This off-by-one error shows up, for instance, when using nanddump, and
      we have cycled through available modes:
      
          nand: setting READ RETRY mode 0
          nand: setting READ RETRY mode 1
          nand: setting READ RETRY mode 2
          nand: setting READ RETRY mode 3
          nand: setting READ RETRY mode 4
          nand: setting READ RETRY mode 5
          nand: setting READ RETRY mode 6
          nand: setting READ RETRY mode 7
          nand: setting READ RETRY mode 8
          libmtd: error!: cannot read 8192 bytes from mtd0 (eraseblock 20, offset 0)
                  error 22 (Invalid argument)
          nanddump: error!: mtd_read
      
      Tested on Micron MT29F64G08CBCBBH1, with 8 retry modes.
      Signed-off-by: NBrian Norris <computersforpeace@gmail.com>
      Acked-by: NHuang Shijie <b32955@freescale.com>
      28fa65e6
  24. 21 1月, 2014 1 次提交
  25. 15 1月, 2014 1 次提交
  26. 14 1月, 2014 3 次提交
    • B
      mtd: nand: support Micron READ RETRY · 8429bb39
      Brian Norris 提交于
      Micron provides READ RETRY support via the ONFI vendor-specific
      parameter block (to indicate how many read-retry modes are available)
      and the ONFI {GET,SET}_FEATURES commands with a vendor-specific feature
      address (to support reading/switching the current read-retry mode).
      
      The recommended sequence is as follows:
      
        1. Perform PAGE_READ operation
        2. If no ECC error, we are done
        3. Run SET_FEATURES with feature address 89h, mode 1
        4. Retry PAGE_READ operation
        5. If ECC error and there are remaining supported modes, increment the
           mode and return to step 3. Otherwise, this is a true ECC error.
        6. Run SET_FEATURES with feature address 89h, mode 0, to return to the
           default state.
      
      This patch implements the chip->setup_read_retry() callback for
      Micron and fills in the chip->read_retries.
      
      Tested on Micron MT29F32G08CBADA, which supports 8 read-retry modes.
      
      The Micron vendor-specific table was checked against the datasheets for
      the following Micron NAND:
      
      Needs retry   Cell-type    Part number          Vendor revision    Byte 180
      -----------   ---------    ----------------     ---------------    ------------
      No            SLC          MT29F16G08ABABA      1                  Reserved (0)
      No            MLC          MT29F32G08CBABA      1                  Reserved (0)
      No            SLC          MT29F1G08AACWP       1                  0
      Yes           MLC          MT29F32G08CBADA      1                  08h
      Yes           MLC          MT29F64G08CBABA      2                  08h
      Signed-off-by: NBrian Norris <computersforpeace@gmail.com>
      Acked-by: NHuang Shijie <b32955@freescale.com>
      8429bb39
    • B
      mtd: nand: add generic READ RETRY support · ba84fb59
      Brian Norris 提交于
      Modern MLC (and even SLC?) NAND can experience a large number of
      bitflips (beyond the recommended correctability capacity) due to drifts
      in the voltage threshold (Vt). These bitflips can cause ECC errors to
      occur well within the expected lifetime of the flash. To account for
      this, some manufacturers provide a mechanism for shifting the Vt
      threshold after a corrupted read.
      
      The generic pattern seems to be that a particular flash has N read retry
      modes (where N = 0, traditionally), and after an ECC failure, the host
      should reconfigure the flash to use the next available mode, then retry
      the read operation. This process repeats until all bitfips can be
      corrected or until the host has tried all available retry modes.
      
      This patch adds the infrastructure support for a
      vendor-specific/flash-specific callback, used for setting the read-retry
      mode (i.e., voltage threshold).
      
      For now, this patch always returns the flash to mode 0 (the default
      mode) after a successful read-retry, according to the flowchart found in
      Micron's datasheets. This may need to change in the future if it is
      determined that eventually, mode 0 is insufficient for the majority of
      the flash cells (and so for performance reasons, we should leave the
      flash in mode 1, 2, etc.).
      Signed-off-by: NBrian Norris <computersforpeace@gmail.com>
      Acked-by: NHuang Shijie <b32955@freescale.com>
      ba84fb59
    • B
      mtd: nand: localize ECC failures per page · b72f3dfb
      Brian Norris 提交于
      ECC failures can be tracked at the page level, not the do_read_ops level
      (i.e., a potentially multi-page transaction).
      
      This helps prepare for READ RETRY support.
      Signed-off-by: NBrian Norris <computersforpeace@gmail.com>
      Acked-by: NHuang Shijie <b32955@freescale.com>
      b72f3dfb
  27. 12 1月, 2014 1 次提交