1. 13 Sep, 2017 2 commits
    • Martin Blumenstingl's avatar
      mtd: nand: hynix: add support for 20nm NAND chips · c54a3184
      Martin Blumenstingl authored
      commit fd213b5b upstream.
      
      According to the datasheet of the H27UCG8T2BTR the NAND Technology field
      (6th byte of the "Device Identifier Description", bits 0-2) the
      following values are possible:
      - 0x0 = 48nm
      - 0x1 = 41nm
      - 0x2 = 32nm
      - 0x3 = 26nm
      - 0x4 = 20nm
      - (all others are reserved)
      
      Fix this by extending the mask for this field to allow detecting value
      0x4 (20nm) as valid NAND technology.
      Without this the detection of the ECC requirements fails, because the
      code assumes that the device is a 48nm device (0x4 & 0x3 = 0x0) and
      aborts with "Invalid ECC requirements" because it cannot map the "ECC
      Level". Extending the mask makes the ECC requirement detection code
      recognize this chip as <= 26nm and sets up the ECC step size and ECC
      strength correctly.
      Signed-off-by: default avatarMartin Blumenstingl <martin.blumenstingl@googlemail.com>
      Fixes: 78f3482d ("mtd: nand: hynix: Rework NAND ID decoding to extract more information")
      Signed-off-by: default avatarBoris Brezillon <boris.brezillon@free-electrons.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      c54a3184
    • Lothar Waßmann's avatar
      mtd: nand: make Samsung SLC NAND usable again · 2b8b46b2
      Lothar Waßmann authored
      commit 69fc0129 upstream.
      
      commit c51d0ac5 ("mtd: nand: Move Samsung specific init/detection
      logic in nand_samsung.c") introduced a regression for Samsung SLC NAND
      chips. Prior to this commit chip->bits_per_cell was initialized by calling
      nand_get_bits_per_cell() before using nand_is_slc().
      With the offending commit this call is skipped, leaving
      chip->bits_per_cell cleared to zero when the manufacturer specific
      '.detect' function calls nand_is_slc() which in turn interprets
      bits_per_cell != 1 as indication for an MLC chip.
      The effect is that e.g. a K9F1G08U0F NAND chip is falsely detected as
      MLC NAND with 4KiB page size rather than SLC with 2KiB page size.
      
      Add a call to nand_get_bits_per_cell() before calling the .detect hook
      function in nand_manufacturer_detect(), so that the nand_is_slc()
      calls in the manufacturer specific code will return correct results.
      
      Fixes: c51d0ac5 ("mtd: nand: Move Samsung specific init/detection logic in nand_samsung.c")
      Signed-off-by: default avatarLothar Waßmann <LW@KARO-electronics.de>
      Signed-off-by: default avatarBoris Brezillon <boris.brezillon@free-electrons.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      2b8b46b2
  2. 10 Sep, 2017 1 commit
  3. 09 Sep, 2017 37 commits