linux-stable/drivers/mtd/nand/raw
Miquel Raynal cafb56dd74 mtd: rawnand: marvell: prevent timeouts on a loaded machine
marvell_nfc_wait_op() waits for completion during 'timeout_ms'
milliseconds before throwing an error. While the logic is fine, the
value of 'timeout_ms' is given by the core and actually correspond to
the maximum time the NAND chip will take to complete the
operation. Assuming there is no overhead in the propagation of the
interrupt signal to the the NAND controller (through the Ready/Busy
line), this delay does not take into account the latency of the
operating system. For instance, for a page write, the delay given by
the core is rounded up to 1ms. Hence, when the machine is over loaded,
there is chances that this timeout will be reached.

There are two ways to solve this issue that are not incompatible:
1/ Enlarge the timeout value (if so, how much?).
2/ Check after the waiting method if we did not miss any interrupt
because of the OS latency (an interrupt is still pending). In this
case, we assume the operation exited successfully.

We choose the second approach that is a must in all cases, with the
possibility to also modify the timeout value to be, e.g. at least 1
second in all cases.

Fixes: 02f26ecf8c ("mtd: nand: add reworked Marvell NAND controller driver")
Cc: stable@vger.kernel.org
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Reviewed-by: Boris Brezillon <boris.brezillon@bootlin.com>
2018-12-15 14:49:25 +01:00
..
atmel mtd: rawnand: Move ->setup_data_interface() to nand_controller_ops 2018-12-07 10:38:27 +01:00
bcm47xxnflash mtd: rawnand: Deprecate the ->select_chip() hook 2018-12-07 10:38:27 +01:00
brcmnand mtd: rawnand: Deprecate ->dev_ready() and ->waitfunc() 2018-10-03 11:12:25 +02:00
gpmi-nand mtd: rawnand: Deprecate the dummy_controller field 2018-12-07 10:58:11 +01:00
ams-delta.c mtd: rawnand: ams-delta: Use GPIO API for data I/O 2018-12-07 10:38:27 +01:00
au1550nd.c mtd: rawnand: Deprecate the ->select_chip() hook 2018-12-07 10:38:27 +01:00
cafe_nand.c mtd: rawnand: Deprecate the dummy_controller field 2018-12-07 10:58:11 +01:00
cmx270_nand.c mtd: rawnand: Deprecate ->chip_delay 2018-10-03 11:12:25 +02:00
cs553x_nand.c mtd: rawnand: Deprecate ->chip_delay 2018-10-03 11:12:25 +02:00
davinci_nand.c mtd: rawnand: Deprecate the dummy_controller field 2018-12-07 10:58:11 +01:00
denali.c mtd: rawnand: Deprecate the dummy_controller field 2018-12-07 10:58:11 +01:00
denali.h mtd: rawnand: denali: include <linux/bits.h> instead of <linux/bitops.h> 2018-11-05 10:57:07 +01:00
denali_dt.c mtd: rawnand: denali: use SPDX-License-Identifier and fix license mismatch 2018-09-04 23:37:40 +02:00
denali_pci.c mtd: rawnand: denali: use SPDX-License-Identifier and fix license mismatch 2018-09-04 23:37:40 +02:00
diskonchip.c mtd: rawnand: Deprecate the ->select_chip() hook 2018-12-07 10:38:27 +01:00
fsl_elbc_nand.c mtd: rawnand: Deprecate the ->select_chip() hook 2018-12-07 10:38:27 +01:00
fsl_ifc_nand.c mtd: rawnand: Deprecate the ->select_chip() hook 2018-12-07 10:38:27 +01:00
fsl_upm.c mtd: rawnand: Deprecate the ->select_chip() hook 2018-12-07 10:38:27 +01:00
fsmc_nand.c mtd: rawnand: fsmc: Fix all coding style issues reported by checkpatch 2018-12-07 10:54:48 +01:00
gpio.c mtd: rawnand: Deprecate ->chip_delay 2018-10-03 11:12:25 +02:00
hisi504_nand.c mtd: rawnand: Deprecate the dummy_controller field 2018-12-07 10:58:11 +01:00
internals.h mtd: rawnand: Move ->setup_data_interface() to nand_controller_ops 2018-12-07 10:38:27 +01:00
jz4740_nand.c mtd: rawnand: Deprecate the dummy_controller field 2018-12-07 10:58:11 +01:00
jz4780_bch.c mtd: rawnand: jz4780: annotate implicit fall throughs 2018-12-07 11:07:19 +01:00
jz4780_bch.h
jz4780_nand.c mtd: rawnand: Deprecate the ->select_chip() hook 2018-12-07 10:38:27 +01:00
Kconfig mtd: rawnand: ams-delta: Allow this driver to be compiled when COMPILE_TEST=y 2018-12-07 10:38:24 +01:00
lpc32xx_mlc.c mtd: rawnand: Deprecate the dummy_controller field 2018-12-07 10:58:11 +01:00
lpc32xx_slc.c mtd: rawnand: Deprecate the dummy_controller field 2018-12-07 10:58:11 +01:00
Makefile mtd: rawnand: ESMT: retrieve ECC requirements from 5th id byte 2018-10-03 11:12:25 +02:00
marvell_nand.c mtd: rawnand: marvell: prevent timeouts on a loaded machine 2018-12-15 14:49:25 +01:00
mpc5121_nfc.c mtd: rawnand: Deprecate the ->select_chip() hook 2018-12-07 10:38:27 +01:00
mtk_ecc.c mtd: rawnand: mtk: use of_device_get_match_data() 2018-04-29 08:56:41 +02:00
mtk_ecc.h
mtk_nand.c mtd: rawnand: Move ->setup_data_interface() to nand_controller_ops 2018-12-07 10:38:27 +01:00
mxc_nand.c mtd: rawnand: Deprecate the dummy_controller field 2018-12-07 10:58:11 +01:00
nand_amd.c mtd: rawnand: Keep all internal stuff private 2018-10-03 11:12:25 +02:00
nand_base.c mtd: rawnand: Deprecate the dummy_controller field 2018-12-07 10:58:11 +01:00
nand_bbt.c mtd: rawnand: Reorganize code to avoid forward declarations 2018-12-07 10:38:23 +01:00
nand_bch.c mtd: rawnand: Pass a nand_chip object to ecc->correct() 2018-10-03 11:12:25 +02:00
nand_ecc.c mtd: rawnand: Allow selection of ECC byte ordering at runtime 2018-10-03 11:12:25 +02:00
nand_esmt.c mtd: rawnand: ESMT: retrieve ECC requirements from 5th id byte 2018-10-03 11:12:25 +02:00
nand_hynix.c mtd: rawnand: Move the ->exec_op() method to nand_controller_ops 2018-12-07 10:38:27 +01:00
nand_ids.c mtd: rawnand: ESMT: retrieve ECC requirements from 5th id byte 2018-10-03 11:12:25 +02:00
nand_jedec.c mtd: rawnand: Fix JEDEC detection 2018-12-14 22:45:13 +01:00
nand_legacy.c mtd: rawnand: Move ->setup_data_interface() to nand_controller_ops 2018-12-07 10:38:27 +01:00
nand_macronix.c mtd: rawnand: Flag 1.8V AC chips with a broken GET_FEATURES(TIMINGS) 2018-11-06 10:18:01 +01:00
nand_micron.c mtd: rawnand: Keep all internal stuff private 2018-10-03 11:12:25 +02:00
nand_onfi.c mtd: rawnand: Move ONFI code to nand_onfi.c 2018-10-03 11:12:25 +02:00
nand_samsung.c mtd: rawnand: Keep all internal stuff private 2018-10-03 11:12:25 +02:00
nand_timings.c mtd: rawnand: Keep all internal stuff private 2018-10-03 11:12:25 +02:00
nand_toshiba.c mtd: rawnand: toshiba: Pass a single nand_chip object to the status helper 2018-10-08 10:00:10 +02:00
nandsim.c mtd: rawnand: Deprecate the dummy_controller field 2018-12-07 10:58:11 +01:00
ndfc.c mtd: rawnand: Deprecate the ->select_chip() hook 2018-12-07 10:38:27 +01:00
nuc900_nand.c mtd: rawnand: Deprecate ->chip_delay 2018-10-03 11:12:25 +02:00
omap2.c mtd: rawnand: omap2: Pass the parent of pdev to dma_request_chan() 2018-12-14 22:45:16 +01:00
omap_elm.c
orion_nand.c mtd: rawnand: Deprecate ->chip_delay 2018-10-03 11:12:25 +02:00
oxnas_nand.c mtd: rawnand: Deprecate ->chip_delay 2018-10-03 11:12:25 +02:00
pasemi_nand.c mtd: rawnand: Deprecate ->chip_delay 2018-10-03 11:12:25 +02:00
plat_nand.c mtd: rawnand: Deprecate the ->select_chip() hook 2018-12-07 10:38:27 +01:00
qcom_nandc.c mtd: rawnand: Deprecate the ->select_chip() hook 2018-12-07 10:38:27 +01:00
r852.c mtd: rawnand: Add nand_[de]select_target() helpers 2018-12-07 10:38:25 +01:00
r852.h mtd: rawnand: r852: fix spelling mistake "card_registred" -> "card_registered" 2018-10-08 10:00:10 +02:00
s3c2410.c mtd: rawnand: Move ->setup_data_interface() to nand_controller_ops 2018-12-07 10:38:27 +01:00
sh_flctl.c mtd: rawnand: Deprecate the dummy_controller field 2018-12-07 10:58:11 +01:00
sharpsl.c mtd: rawnand: Deprecate ->chip_delay 2018-10-03 11:12:25 +02:00
sm_common.c mtd: rawnand: Deprecate the dummy_controller field 2018-12-07 10:58:11 +01:00
sm_common.h
socrates_nand.c mtd: rawnand: Deprecate ->chip_delay 2018-10-03 11:12:25 +02:00
sunxi_nand.c mtd: rawnand: Move ->setup_data_interface() to nand_controller_ops 2018-12-07 10:38:27 +01:00
tango_nand.c mtd: rawnand: Move ->setup_data_interface() to nand_controller_ops 2018-12-07 10:38:27 +01:00
tegra_nand.c mtd: rawnand: Move ->setup_data_interface() to nand_controller_ops 2018-12-07 10:38:27 +01:00
tmio_nand.c mtd: rawnand: Allow selection of ECC byte ordering at runtime 2018-10-03 11:12:25 +02:00
txx9ndfmc.c mtd: rawnand: Allow selection of ECC byte ordering at runtime 2018-10-03 11:12:25 +02:00
vf610_nfc.c mtd: rawnand: vf610: Add an SPDX tag to replace the license text 2018-12-07 10:58:03 +01:00
xway_nand.c mtd: rawnand: Deprecate the ->select_chip() hook 2018-12-07 10:38:27 +01:00