linux/drivers/mtd/nand
Pekon Gupta eae39cb493 mtd: nand: omap: fix ecclayout to be in sync with u-boot NAND driver
Fixes: commit a919e51161
       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: Enric Balletbo Serra <eballetbo@iseebcn.com>
Tested-by: Enric Balletbo i Serra <eballetbo@gmail.com>
Tested-by: Stefan Roese <sr@denx.de>
Signed-off-by: Pekon Gupta <pekon@ti.com>
Signed-off-by: Brian Norris <computersforpeace@gmail.com>
2014-02-23 14:49:56 -08:00
..
bcm47xxnflash mtd: bcm47xxnflash: Use devm_kzalloc 2013-11-06 23:32:56 -08:00
gpmi-nand mtd: gpmi: add sanity check when mapping DMA for read_buf/write_buf 2014-01-27 21:55:03 -08:00
ams-delta.c mtd: nand: ams-delta: remove unnecessary platform_set_drvdata() 2013-08-05 20:58:30 +01:00
atmel_nand.c mtd: atmel_nand: use dev_err() instead of printk() 2014-01-07 10:07:03 -08:00
atmel_nand_ecc.h
atmel_nand_nfc.h mtd: atmel_nand: add Nand Flash Controller (NFC) support 2013-08-05 21:07:41 +01:00
au1550nd.c mtd: au1550nd: Remove unnecessary OOM messages 2014-01-03 11:22:29 -08:00
bf5xx_nand.c mtd: bf5xx_nand: Remove unnecessary OOM messages 2014-01-03 11:22:29 -08:00
cafe_nand.c mtd: cafe_nand: Remove unnecessary OOM messages 2014-01-03 11:22:29 -08:00
cmx270_nand.c mtd: cmx270_nand: Remove unnecessary OOM messages 2014-01-03 11:22:29 -08:00
cs553x_nand.c mtd: cs553x_nand: Remove unnecessary OOM messages 2014-01-03 11:22:29 -08:00
davinci_nand.c mtd: davinci_nand: Remove unnecessary OOM messages 2014-01-03 11:22:30 -08:00
denali.c mtd: denali: kill the NAND_MAX_PAGESIZE/NAND_MAX_OOBSIZE 2014-01-11 12:20:15 -08:00
denali.h mtd: denali: kill the NAND_MAX_PAGESIZE/NAND_MAX_OOBSIZE 2014-01-11 12:20:15 -08:00
denali_dt.c mtd: denali_dt: Use devm_clk_get() 2014-01-03 11:22:27 -08:00
denali_pci.c mtd: denali: Drop print of build date/time 2014-01-09 08:52:48 -08:00
diskonchip.c mtd: diskonchip: Remove unnecessary OOM messages 2014-01-03 11:22:30 -08:00
docg4.c Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2013-11-15 16:47:22 -08:00
fsl_elbc_nand.c mtd: nand: Update mtd.name assignment type to u64 for IFC, eLBC 2014-01-11 12:07:35 -08:00
fsl_ifc_nand.c mtd: nand: Update mtd.name assignment type to u64 for IFC, eLBC 2014-01-11 12:07:35 -08:00
fsl_upm.c drivers: clean-up prom.h implicit includes 2013-10-09 20:04:04 -05:00
fsmc_nand.c mtd: fsmc_nand: use dev_warn() instead of printk() 2014-01-07 10:07:03 -08:00
gpio.c mtd: nand-gpio: don't waste memory for OF failure 2014-01-07 10:07:34 -08:00
jz4740_nand.c mtd: jz4740_nand: Remove unnecessary OOM messages 2014-01-03 11:22:30 -08:00
Kconfig mtd: nand: davinci: reuse driver for Keystone arch 2014-01-03 11:22:26 -08:00
lpc32xx_mlc.c mtd: lpc32xx_mlc: Remove unnecessary OOM messages 2014-01-07 10:06:58 -08:00
lpc32xx_slc.c mtd: lpc32xx_slc: Remove unnecessary OOM messages 2014-01-07 10:07:00 -08:00
Makefile mtd: remove alauda driver 2013-08-30 21:51:57 +01:00
mpc5121_nfc.c Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc 2014-01-30 17:07:18 -08:00
mxc_nand.c mtd: mxc-nand: kill the NAND_MAX_PAGESIZE/NAND_MAX_OOBSIZE 2014-01-11 12:20:06 -08:00
nand_base.c mtd: nand: fix off-by-one read retry mode counting 2014-02-14 12:08:20 -08:00
nand_bbt.c mtd: nand_bbt: kill NAND_BBT_SCANALLPAGES 2013-11-06 23:33:14 -08:00
nand_bch.c
nand_ecc.c
nand_ids.c mtd: nand: add Intel manufacturer ID 2014-01-20 11:30:52 -08:00
nandsim.c MTD merge for 3.13 2013-11-14 12:31:43 +09:00
ndfc.c drivers: clean-up prom.h implicit includes 2013-10-09 20:04:04 -05:00
nuc900_nand.c mtd: nuc900_nand: remove redundant return value check of platform_get_resource() 2014-01-20 11:38:13 -08:00
omap2.c mtd: nand: omap: fix ecclayout to be in sync with u-boot NAND driver 2014-02-23 14:49:56 -08:00
orion_nand.c mtd: orion_nand: use dev_err() instead of printk() 2014-01-07 10:07:31 -08:00
pasemi_nand.c mtd: pasemi_nand.c: remove superfluous name cast 2014-01-03 11:22:09 -08:00
plat_nand.c mtd: plat_nand: remove redundant return value check of platform_get_resource() 2014-01-20 11:37:29 -08:00
pxa3xx_nand.c mtd: nand: pxa3xx: Add support for 2048 bytes page size devices 2014-01-20 11:20:47 -08:00
r852.c tree-wide: use reinit_completion instead of INIT_COMPLETION 2013-11-15 09:32:21 +09:00
r852.h
s3c2410.c mtd: s3c2410: Merge plat/regs-nand.h into s3c2410.c 2014-01-22 17:31:57 -08:00
sh_flctl.c mtd: sh_flctl: Remove unnecessary OOM messages 2014-01-07 10:07:02 -08:00
sharpsl.c mtd: sharpsl: use dev_err() instead of printk() 2014-01-07 10:07:31 -08:00
sm_common.c mtd: nand: refactor chip->block_markbad interface 2013-08-30 16:47:52 +01:00
sm_common.h
socrates_nand.c MTD merge for 3.13 2013-11-14 12:31:43 +09:00
tmio_nand.c mtd: tmio_nand: Use devm_*() functions 2014-01-03 11:22:28 -08:00
txx9ndfmc.c mtd: txx9ndfmc: Remove unnecessary OOM messages 2014-01-03 11:22:30 -08:00
xway_nand.c