1. 26 8月, 2014 1 次提交
    • R
      mtd: nand: omap: Revert to using software ECC by default · 7d5929c1
      Roger Quadros 提交于
      For v3.12 and prior, 1-bit Hamming code ECC via software was the
      default choice. Commit c66d0391 in v3.13 changed the behaviour
      to use 1-bit Hamming code via Hardware using a different ECC layout
      i.e. (ROM code layout) than what is used by software ECC.
      
      This ECC layout change causes NAND filesystems created in v3.12
      and prior to be unusable in v3.13 and later. So revert back to
      using software ECC by default if an ECC scheme is not explicitely
      specified.
      
      This defect can be observed on the following boards during legacy boot
      
      -omap3beagle
      -omap3touchbook
      -overo
      -am3517crane
      -devkit8000
      -ldp
      -3430sdp
      Signed-off-by: NRoger Quadros <rogerq@ti.com>
      Tested-by: NGrazvydas Ignotas <notasas@gmail.com>
      Signed-off-by: NTony Lindgren <tony@atomide.com>
      7d5929c1
  2. 29 5月, 2014 1 次提交
  3. 21 5月, 2014 2 次提交
    • P
      mtd: nand: omap: add support for BCH16_ECC - NAND driver updates · 9748fff9
      pekon gupta 提交于
      This patch add support for BCH16 ecc-scheme in OMAP NAND driver, by extending
      following functions:
       - omap_enable_hwecc (nand_chip->ecc.hwctl): configure GPMC controller
       - omap_calculate_ecc_bch (nand_chip->ecc.calculate): fetch ECC signature from GPMC controller
       - omap_elm_correct_data (nand_chip->ecc.correct): detect and correct ECC errors using ELM
      
      (a) BCH16 ecc-scheme can detect and correct 16 bit-flips per 512Bytes of data.
      (b) BCH16 ecc-scheme generates 26-bytes of ECC syndrome / 512B.
      Due to (b) this scheme can only be used with NAND devices which have enough
      OOB to satisfy the relation: "OOBsize per page >= 26 * (page-size / 512)"
      Signed-off-by: NPekon Gupta <pekon@ti.com>
      Signed-off-by: NBrian Norris <computersforpeace@gmail.com>
      9748fff9
    • P
      mtd: nand: omap: fix BCHx ecc.correct to return detected bit-flips in erased-page · f306e8c3
      pekon gupta 提交于
      fixes: commit 62116e51
             mtd: nand: omap2: Support for hardware BCH error correction.
      
      In omap_elm_correct_data(), if bitflip_count in an erased-page is within the
      correctable limit (< ecc.strength), then it is not indicated back to the caller
      ecc->read_page().
      
      This mis-guides upper layers like MTD and UBIFS layer to assume erased-page as
      perfectly clean and use it for writing even if actual bitflip_count was
      dangerously high (bitflip_count > mtd->bitflip_threshold).
      
      This patch fixes this above issue, by returning 'stats' to caller
      ecc->read_page() under all scenarios.
      Reported-by: NBrian Norris <computersforpeace@gmail.com>
      Signed-off-by: NPekon Gupta <pekon@ti.com>
      Cc: <stable@vger.kernel.org> # 3.9.x+
      Signed-off-by: NBrian Norris <computersforpeace@gmail.com>
      f306e8c3
  4. 16 4月, 2014 1 次提交
  5. 26 3月, 2014 2 次提交
  6. 20 3月, 2014 13 次提交
  7. 24 2月, 2014 3 次提交
    • P
      mtd: nand: omap: fix ecclayout->oobfree->length · bb38eefb
      Pekon Gupta 提交于
      This patch excludes reserved-marker byte-position from oobfree->length
      calculation. Thus all bytes from oobfree->offset till end of OOB are free.
      
      CC: <stable@vger.kernel.org> # 3.13.x+
      Signed-off-by: NPekon Gupta <pekon@ti.com>
      Signed-off-by: NBrian Norris <computersforpeace@gmail.com>
      bb38eefb
    • P
      mtd: nand: omap: fix ecclayout->oobfree->offset · aa6092f9
      Pekon Gupta 提交于
      1) In current implementation, ecclayout->oobfree->offset is calculated with
       respect to ecclayout->eccpos[0] which is incorrect because ECC bytes may not
       be stored contiguously in OOB.
       So, this patch calculates ecclayout->oobfree->offset with respect to last
       ECC byte-position 'eccpos[ecclayout->eccbytes-1]'.
      
      2) ECC layout of some ecc-schemes expects reserved-markers at specific eccpos[]
       which should not be over-written by any file-system metadata.
       So this patch aligns oobfree->offset taking into account of such markers.
      
      CC: <stable@vger.kernel.org> # 3.13.x+
      Tested-by: NEnric Balletbo i Serra <eballetbo@gmail.com>
      Tested-by: NStefan Roese <sr@denx.de>
      Signed-off-by: NPekon Gupta <pekon@ti.com>
      Signed-off-by: NBrian Norris <computersforpeace@gmail.com>
      aa6092f9
    • P
      mtd: nand: omap: fix ecclayout to be in sync with u-boot NAND driver · eae39cb4
      Pekon Gupta 提交于
      Fixes: commit a919e511
             mtd: nand: omap2: clean-up BCHx_HW and BCHx_SW ECC configurations in device_probe
      
      Fixes ecclayout mismatch introduced in above commit for following ecc-schemes:
       - OMAP_ECC_BCH4_CODE_HW_DETECTION_SW
       - OMAP_ECC_BCH8_CODE_HW_DETECTION_SW
       However, this patch also touches other ecc-schemes as the fix required
       refactoring common code, into ecc-scheme specific code.
      
      This patch aligns ecc-layout for below ecc-schemes as per reference [1],[2],[3]
      
       +---+------------+-------------++-------------+-------------+
       |OOB|BCH8_CODE_HW|BCH8_CODE_HW_||HAM1_CODE_HW |HAM1_CODE_HW |
       |pos|            | DETECTION_SW||(x8 device)  |(x16 device) |
       +---+------------+-------------++-------------+-------------+
       | 0 |BADBLK_MARK | BADBLK_MARK || BADBLK_MARK | BADBLK_MARK |
       | 1 |BADBLK_MARK | BADBLK_MARK || eccpos[0]   | BADBLK_MARK |
       | 2 | eccpos[0]  | eccpos[0]   || eccpos[1]   | eccpos[0]   |
       | 3 | eccpos[1]  | eccpos[1]   || eccpos[2]   | eccpos[1]   |
       | 4 | eccpos[2]  | eccpos[2]   || eccpos[3]   | eccpos[2]   |
       | 5 | eccpos[3]  | eccpos[3]   || eccpos[4]   | eccpos[3]   |
       | 6 | eccpos[4]  | eccpos[4]   || eccpos[5]   | eccpos[4]   |
       | 7 | eccpos[5]  | eccpos[5]   || eccpos[6]   | eccpos[5]   |
       | 8 | eccpos[6]  | eccpos[6]   || eccpos[7]   | eccpos[6]   |
       | 9 | eccpos[7]  | eccpos[7]   || eccpos[8]   | eccpos[7]   |
       |10 | eccpos[8]  | eccpos[8]   || eccpos[9]   | eccpos[8]   |
       |11 | eccpos[9]  | eccpos[9]   || eccpos[10]  | eccpos[9]   |
       |12 | eccpos[10] | eccpos[10]  || eccpos[11]  | eccpos[10]  |
       |13 | eccpos[11] | eccpos[11]  || oobfree[0]  | eccpos[11]  |
       |14 | eccpos[12] | eccpos[12]  || oobfree[1]  | oobfree[0]  |
       |15 | eccpos[13] | <reserved>  || oobfree[2]  | oobfree[1]  |
       +---+------------+-------------++-------------+-------------+
       |16 | eccpos[14] | eccpos[13]  || oobfree[3]  | oobfree[2]  |
       |...| [...]      | [...]       || [...]       | [...]       |
       |56 | eccpos[54] | eccpos[51]  || oobfree[43] | oobfree[42] |
       |57 | eccpos[55] | <reserved>  || oobfree[44] | oobfree[43] |
       +===+============+=============+==============+=============+
       |58 | oobfree[0] | oobfree[0]  || oobfree[45] | oobfree[44] |
       |59 | oobfree[1] | oobfree[1]  || oobfree[46] | oobfree[45] |
       |60 | oobfree[2] | oobfree[2]  || oobfree[47] | oobfree[46] |
       |61 | oobfree[3] | oobfree[3]  || oobfree[48] | oobfree[47] |
       |62 | oobfree[4] | oobfree[4]  || oobfree[49] | oobfree[48] |
       |63 | oobfree[5] | oobfree[5]  || oobfree[50] | oobfree[49] |
       +---+------------+-------------+--------------+-------------+
      
      [1] ecc-layout expected by ROM code, as specified in SoC TRM under:
            Chapter="Initialization"
              Section="Device Initialization by ROM code"
                  Sub-Section="Memory Booting"
                      Heading="NAND"
                      Figure="ECC Locations in NAND Spare Areas"
      
      [2] ecc-layout updates in u-boot
          http://lists.denx.de/pipermail/u-boot/2013-November/167551.html
      
      [3] u-boot configurations to match above ecc-layout are documented at
          https://processors.wiki.ti.com/index.php/Linux_Core_NAND_User%27s_Guide
      
      CC: <stable@vger.kernel.org> # 3.13.x+
      Reported-by: NEnric Balletbo Serra <eballetbo@iseebcn.com>
      Tested-by: NEnric Balletbo i Serra <eballetbo@gmail.com>
      Tested-by: NStefan Roese <sr@denx.de>
      Signed-off-by: NPekon Gupta <pekon@ti.com>
      Signed-off-by: NBrian Norris <computersforpeace@gmail.com>
      eae39cb4
  8. 08 1月, 2014 1 次提交
  9. 07 11月, 2013 8 次提交
  10. 31 8月, 2013 1 次提交
  11. 30 8月, 2013 1 次提交
  12. 06 8月, 2013 1 次提交
  13. 05 4月, 2013 2 次提交
  14. 04 2月, 2013 2 次提交
    • P
      mtd: nand: omap2: Support for hardware BCH error correction. · 62116e51
      Philip Avinash 提交于
      ELM module can be used for hardware error correction of BCH 4 & 8 bit.
      ELM module functionality is verified by checking the availability of
      handle for ELM module in device tree. Hence supporting
      1. ELM module available, BCH error correction done by ELM module. Also
      support read & write page in one shot by adding custom read_page and
      write_page methods. This helps in optimizing code for NAND flashes with
      page size less than 4 KB.
      2. If ELM module not available fall back to software BCH error
      correction support.
      
      New structure member is added to omap_nand_info
      1. "is_elm_used" to know the status of whether the ELM module is used for
         error correction or not.
      2. "elm_dev" device pointer to elm device on detection of ELM module.
      
      Also being here update the device tree documentation of gpmc-nand for
      adding optional property elm_id.
      
      Note:
      ECC layout uses 1 extra bytes for 512 byte of data to handle erased
      pages. Extra byte programmed to zero for programmed pages. Also BCH8
      requires 14 byte ecc to maintain compatibility with RBL ECC layout.
      This results a common ecc layout across RBL, U-boot & Linux with BCH8.
      Signed-off-by: NPhilip Avinash <avinashphilip@ti.com>
      Signed-off-by: NArtem Bityutskiy <artem.bityutskiy@linux.intel.com>
      62116e51
    • P
      mtd: nand: omap2: Update nerrors using ecc.strength · c3e4b995
      Philip Avinash 提交于
      Remove check of ecc bytes with 13, number of errors can directly update
      from nand ecc strength. This will increase re-usability of the code.
      Also add macro definitions BCH8_ERROR_MAX & BCH4_ERROR_MAX for better
      readability and cleaner code.
      Signed-off-by: NPhilip Avinash <avinashphilip@ti.com>
      Signed-off-by: NArtem Bityutskiy <artem.bityutskiy@linux.intel.com>
      c3e4b995
  15. 15 1月, 2013 1 次提交