linux/drivers/mtd/nand/raw
Miquel Raynal b135b3358d mtd: rawnand: omap: Use BCH private fields in the specific OOB layout
The OMAP driver may leverage software BCH logic to locate errors while
using its own hardware to detect the presence of errors. This is
achieved with a "mixed" mode which initializes manually the software
BCH internal logic while providing its own OOB layout.

The issue here comes from the fact that the BCH driver has been
updated to only use generic NAND objects, and no longer depend on raw
NAND structures as it is usable from SPI-NAND as well. However, at the
end of the BCH context initialization, the driver checks the validity
of the OOB layout. At this stage, the raw NAND fields have not been
populated yet while being used by the layout helpers, leading to an
invalid layout.

The chosen solution here is to include the BCH structure definition
and to refer to the BCH fields directly (de-referenced as a const
pointer here) to know as early as possible the number of steps and ECC
bytes which have been chosen.

Note: I don't know which commit exactly triggered the error, but the
entire migration to a generic BCH driver got merged in one go, so this
should not be a problem for stable backports.

Reported-by: Adam Ford <aford173@gmail.com>
Fixes: 80fe603160 ("mtd: nand: ecc-bch: Stop using raw NAND structures")
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Tested-by: Adam Ford <aford173@gmail.com> #logicpd-torpedo-37xx-devkit-28.dts
Link: https://lore.kernel.org/linux-mtd/20210119155510.5655-1-miquel.raynal@bootlin.com
2021-01-20 23:38:00 +01:00
..
atmel mtd: rawnand: atmel: Check return values for nand_read_data_op 2020-09-30 16:44:17 +02:00
bcm47xxnflash mtd: rawnand: Use the new ECC engine type enumeration 2020-09-28 15:59:42 +02:00
brcmnand mtd: rawnand: brcmnand: Demote non-conformant kernel-doc headers 2020-11-20 12:37:31 +01:00
gpmi-nand mtd: rawnand: gpmi: fix dst bit offset when extracting raw payload 2021-01-04 12:08:32 +01:00
ingenic mtd: rawnand: ingenic: remove redundant get_device() in ingenic_ecc_get() 2020-12-10 22:37:31 +01:00
ams-delta.c mtd: rawnand: ams-delta: Do not force a particular software ECC engine 2020-12-11 20:09:57 +01:00
arasan-nand-controller.c mtd: rawnand: arasan: Document 'anfc_op's 'buf' member 2020-11-20 12:37:33 +01:00
au1550nd.c MTD core: 2020-12-16 14:58:35 -08:00
cadence-nand-controller.c mtd: rawnand: cadence: remove a redundant dev_err call 2020-09-30 16:44:17 +02:00
cafe_nand.c mtd: rawnand: cafe_nand: Remove superfluous param doc and add another 2020-11-20 12:37:32 +01:00
cs553x_nand.c mtd: nand: ecc-hamming: Rename the exported functions 2020-12-10 22:37:29 +01:00
davinci_nand.c mtd: rawnand: davinci: Do not use extra dereferencing 2020-12-10 22:37:32 +01:00
denali_dt.c mtd: rawnand: denali_dt: add reset controlling 2020-01-21 20:00:33 +01:00
denali_pci.c mtd: rawnand: Use the NAND framework user_conf object for ECC flags 2020-09-30 16:44:15 +02:00
denali.c mtd: rawnand: Use the new ECC engine type enumeration 2020-09-28 15:59:42 +02:00
denali.h mtd: rawnand: Replace zero-length array with flexible-array member 2020-03-11 16:17:54 +01:00
diskonchip.c SPI NOR core changes: 2020-12-16 18:48:16 +01:00
fsl_elbc_nand.c mtd: nand: ecc-hamming: Remove useless includes 2020-12-10 22:37:30 +01:00
fsl_ifc_nand.c mtd: nand: ecc-hamming: Remove useless includes 2020-12-10 22:37:30 +01:00
fsl_upm.c mtd: nand: ecc-hamming: Remove useless includes 2020-12-10 22:37:30 +01:00
fsmc_nand.c mtd: nand: ecc-hamming: Remove useless includes 2020-12-10 22:37:30 +01:00
gpio.c mtd: rawnand: gpio: Do not force a particular software ECC engine 2020-12-11 20:09:57 +01:00
hisi504_nand.c mtd: rawnand: Use the new ECC engine type enumeration 2020-09-28 15:59:42 +02:00
intel-nand-controller.c mtd: rawnand: intel: check the mtd name only after setting the variable 2021-01-14 16:44:39 +01:00
internals.h mtd: rawnand: Allocate the interface configurations dynamically 2020-06-26 08:35:08 +02:00
Kconfig mtd: rawnand: rockchip: NFC driver for RK3308, RK2928 and others 2020-12-10 22:37:33 +01:00
lpc32xx_mlc.c mtd: nand: ecc-hamming: Remove useless includes 2020-12-10 22:37:30 +01:00
lpc32xx_slc.c mtd: nand: ecc-hamming: Remove useless includes 2020-12-10 22:37:30 +01:00
Makefile mtd: rawnand: rockchip: NFC driver for RK3308, RK2928 and others 2020-12-10 22:37:33 +01:00
marvell_nand.c mtd: rawnand: marvell: Drop useless line 2020-12-10 22:37:32 +01:00
meson_nand.c mtd: rawnand: meson: Fix a resource leak in init 2020-12-10 22:37:33 +01:00
mpc5121_nfc.c mtd: rawnand: mpc5121: Do not force a particular software ECC engine 2020-12-11 20:09:58 +01:00
mtk_ecc.c mtd: Remove dev_err() usage after platform_get_irq() 2019-10-08 19:01:49 +02:00
mtk_ecc.h mtd: rawnand: mtk: Re-license MTK NAND driver as Dual MIT/GPL 2019-06-27 20:07:46 +02:00
mtk_nand.c mtd: rawnand: Use nanddev_get/set_ecc_requirements() when relevant 2020-09-28 15:59:48 +02:00
mxc_nand.c mtd: rawnand: mxc: Use a single line for of_device_id 2020-12-10 22:37:33 +01:00
mxic_nand.c mtd: nand: ecc-hamming: Move Hamming code to the generic NAND layer 2020-12-10 22:37:29 +01:00
nand_amd.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 157 2019-05-30 11:26:37 -07:00
nand_base.c mtd: nand: ecc-hamming: Create the software Hamming engine 2020-12-10 22:37:30 +01:00
nand_bbt.c mtd: rawnand: fix a kernel-doc markup 2020-12-10 22:37:31 +01:00
nand_esmt.c mtd: rawnand: Use nanddev_get/set_ecc_requirements() when relevant 2020-09-28 15:59:48 +02:00
nand_hynix.c mtd: rawnand: Use nanddev_get/set_ecc_requirements() when relevant 2020-09-28 15:59:48 +02:00
nand_ids.c mtd: rawnand: toshiba: Choose the interface configuration for TH58NVG2S3HBAI4 2020-06-26 08:35:08 +02:00
nand_jedec.c mtd: rawnand: Use nanddev_get/set_ecc_requirements() when relevant 2020-09-28 15:59:48 +02:00
nand_legacy.c mtd: onenand: Use mtd->oops_panic_write as condition 2020-12-10 22:37:32 +01:00
nand_macronix.c mtd: rawnand: Create a nand_chip operations structure 2020-06-26 08:35:04 +02:00
nand_micron.c mtd: rawnand: Use nanddev_get/set_ecc_requirements() when relevant 2020-09-28 15:59:48 +02:00
nand_onfi.c mtd: rawnand: Use nanddev_get/set_ecc_requirements() when relevant 2020-09-28 15:59:48 +02:00
nand_samsung.c mtd: rawnand: Use nanddev_get/set_ecc_requirements() when relevant 2020-09-28 15:59:48 +02:00
nand_timings.c mtd: rawnand: Allocate the interface configurations dynamically 2020-06-26 08:35:08 +02:00
nand_toshiba.c mtd: rawnand: Use the ECC framework OOB layouts 2020-09-30 16:43:52 +02:00
nandsim.c mtd: rawnand: nandsim: Fix the logic when selecting Hamming soft ECC engine 2021-01-14 16:44:37 +01:00
ndfc.c mtd: nand: ecc-hamming: Rename the exported functions 2020-12-10 22:37:29 +01:00
omap2.c mtd: rawnand: omap: Use BCH private fields in the specific OOB layout 2021-01-20 23:38:00 +01:00
omap_elm.c mtd: rawnand: omap_elm: Finish half populated function header, demote empty ones 2020-11-20 12:37:32 +01:00
orion_nand.c mtd: rawnand: orion: Do not force a particular software ECC engine 2020-12-11 20:09:58 +01:00
oxnas_nand.c mtd: rawnand: oxnas: cleanup/simplify code 2020-09-30 16:44:16 +02:00
pasemi_nand.c MTD core: 2020-12-16 14:58:35 -08:00
plat_nand.c mtd: rawnand: plat_nand: Do not force a particular software ECC engine 2020-12-11 20:10:01 +01:00
qcom_nandc.c mtd: rawnand: qcom: Add NAND controller support for SDX55 2020-12-10 22:37:33 +01:00
r852.c mtd: rawnand: r852: Move the ECC initialization to ->attach_chip() 2020-11-20 12:30:53 +01:00
r852.h mtd: rawnand: r852: Move the ECC initialization to ->attach_chip() 2020-11-20 12:30:53 +01:00
rockchip-nand-controller.c mtd: rawnand: rockchip: NFC driver for RK3308, RK2928 and others 2020-12-10 22:37:33 +01:00
s3c2410.c SPI NOR core changes: 2020-12-16 18:48:16 +01:00
sh_flctl.c mtd: rawnand: Use the new ECC engine type enumeration 2020-09-28 15:59:42 +02:00
sharpsl.c mtd: nand: ecc-hamming: Remove useless includes 2020-12-10 22:37:30 +01:00
sm_common.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
sm_common.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
socrates_nand.c mtd: rawnand: socrates: Do not force a particular software ECC engine 2020-12-11 20:10:02 +01:00
stm32_fmc2_nand.c mtd: rawnand: stm32_fmc2: fix broken ECC 2020-10-30 18:24:51 +01:00
sunxi_nand.c SPI NOR core changes: 2020-12-16 18:48:16 +01:00
tango_nand.c mtd: rawnand: Use the new ECC engine type enumeration 2020-09-28 15:59:42 +02:00
tegra_nand.c mtd: rawnand: Use the NAND framework user_conf object for ECC flags 2020-09-30 16:44:15 +02:00
tmio_nand.c mtd: nand: ecc-hamming: Remove useless includes 2020-12-10 22:37:30 +01:00
txx9ndfmc.c mtd: nand: ecc-hamming: Remove useless includes 2020-12-10 22:37:30 +01:00
vf610_nfc.c mtd: rawnand: vf610: Remove unused function vf610_nfc_transfer_size() 2020-09-30 16:44:17 +02:00
xway_nand.c mtd: rawnand: xway: Do not force a particular software ECC engine 2020-12-11 20:10:02 +01:00