linux/drivers/mtd/nand
Ezequiel Garcia d20d0a6cf7 mtd: nand: pxa3xx: Clear need_wait flag when starting a command
Currently the driver assumes all commands will eventually trigger a RnB
transition, and thus a "device is ready" IRQ.

This assumption means that on every issued command, the dev_ready completion
handler is init'ed and the need_wait flag is set.

However this is incorrect: some commands (such as NAND_CMD_STATUS) don't
make the device 'busy' and thus a RnB transition never occurs.
Given, the NAND core never calls waitfunc() after such commands, this
is not a problem.

Therefore, it's possible to only clear the need_wait flag on every command
that is started.

This fixes a current bug that can be reproduced on PXA boards by writing
blank (all 0xff'ed) to a page:

  1. The kernel issues NAND_CMD_STATUS and sets need_wait=1. The flag
     won't be cleared for this command since no RnB transition is
     involved.

  2. NAND_CMD_PAGEPROG is issued but since the data is blank, the driver
     decides not to execute the command (and no IRQ activity is
     involved).

  3. The NAND core calls waitfunc() and waits for the dev_ready
     completion, which will never end since the device _is_ already ready.

Tested-by: Arnaud Ebalard <arno@natisbad.org>
Signed-off-by: Ezequiel Garcia <ezequiel.garcia@free-electrons.com>
Signed-off-by: Brian Norris <computersforpeace@gmail.com>
2014-01-03 11:22:26 -08:00
..
bcm47xxnflash mtd: bcm47xxnflash: Use devm_kzalloc 2013-11-06 23:32:56 -08:00
gpmi-nand mtd: gpmi: change pr_debug to dev_dbg 2014-01-03 11:22:20 -08:00
ams-delta.c mtd: nand: ams-delta: remove unnecessary platform_set_drvdata() 2013-08-05 20:58:30 +01:00
atmel_nand_ecc.h mtd: at91: atmel_nand: add Programmable Multibit ECC controller support 2012-07-06 18:23:25 +01:00
atmel_nand_nfc.h mtd: atmel_nand: add Nand Flash Controller (NFC) support 2013-08-05 21:07:41 +01:00
atmel_nand.c Merge branch 'next' of git://git.infradead.org/users/vkoul/slave-dma 2013-11-20 13:20:24 -08:00
au1550nd.c mtd: au1550nd: add missing platform_set_drvdata() 2014-01-03 11:22:24 -08:00
bf5xx_nand.c mtd: nand: use dev_get_platdata() 2013-08-30 21:34:33 +01:00
cafe_nand.c mtd: nand: subpage write support for hardware based ECC schemes 2013-04-05 13:22:59 +01:00
cmx270_nand.c mtd: kill MTD_NAND_VERIFY_WRITE 2012-09-29 15:00:46 +01:00
cs553x_nand.c mtd cs553x_nand: use kzalloc() instead of memset 2013-08-30 21:52:48 +01:00
davinci_nand.c mtd: nand: davinci: don't request AEMIF address range 2014-01-03 11:22:26 -08:00
denali_dt.c mtd: denali_dt: Remove redundant use of of_match_ptr 2013-04-05 14:04:34 +01:00
denali_pci.c mtd: denali: remove DEFINE_PCI_DEVICE_TABLE macro 2014-01-03 11:22:23 -08:00
denali.c mtd: denali: Mark function is_erased() as static 2014-01-03 11:22:26 -08:00
denali.h mtd: denali: add a DT driver 2012-11-15 15:37:46 +02:00
diskonchip.c mtd: nand: diskonchip: Request memory region prior ioremap() 2014-01-03 11:22:19 -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 merge for 3.13 2013-11-14 12:31:43 +09:00
fsl_ifc_nand.c MTD merge for 3.13 2013-11-14 12:31:43 +09:00
fsl_upm.c drivers: clean-up prom.h implicit includes 2013-10-09 20:04:04 -05:00
fsmc_nand.c dmaengine: remove DMA unmap flags 2013-11-14 11:04:38 -08:00
gpio.c mtd: nand: use dev_get_platdata() 2013-08-30 21:34:33 +01:00
jz4740_nand.c mtd: nand: use dev_get_platdata() 2013-08-30 21:34:33 +01:00
Kconfig mtd: nand: davinci: reuse driver for Keystone arch 2014-01-03 11:22:26 -08:00
lpc32xx_mlc.c mtd: nand: lpc32xx_mlc: drop custom write_page callback 2014-01-03 11:22:26 -08:00
lpc32xx_slc.c mtd: nand: lpc32xx_slc: Remove redundant of_match_ptr 2013-11-06 23:32:45 -08:00
Makefile mtd: remove alauda driver 2013-08-30 21:51:57 +01:00
mpc5121_nfc.c mtd: mpc5121_nfc: drop devm_free_irq of devm_ allocated irq 2014-01-03 11:22:20 -08:00
mxc_nand.c mtd: mxc_nand: add missing clk_disable_unprepare() in mxcnd_remove() 2014-01-03 11:22:24 -08:00
nand_base.c mtd: nand: refactor print messages 2014-01-03 11:22:22 -08:00
nand_bbt.c mtd: nand_bbt: kill NAND_BBT_SCANALLPAGES 2013-11-06 23:33:14 -08:00
nand_bch.c mtd: cleanup style on pr_debug messages 2011-09-11 15:02:16 +03:00
nand_ecc.c mtd: nane: print source of error message 2013-02-04 09:27:19 +02:00
nand_ids.c mtd: add the ecc info for some full-id nand chips 2013-08-30 21:34:47 +01: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: nand: nuc900_nand: remove unnecessary platform_set_drvdata() 2013-08-05 20:59:09 +01:00
omap2.c mtd: nand: omap: fix error return code in omap_nand_probe() 2013-11-06 23:33:15 -08:00
orion_nand.c mtd: nand: use dev_get_platdata() 2013-08-30 21:34:33 +01:00
pasemi_nand.c mtd: pasemi_nand.c: remove superfluous name cast 2014-01-03 11:22:09 -08:00
plat_nand.c mtd: nand: use dev_get_platdata() 2013-08-30 21:34:33 +01:00
pxa3xx_nand.c mtd: nand: pxa3xx: Clear need_wait flag when starting a command 2014-01-03 11:22:26 -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: nand: use dev_get_platdata() 2013-08-30 21:34:33 +01:00
sh_flctl.c mtd: nand: sh_flctl: Remove unneeded CONFIG_OF 2014-01-03 11:22:24 -08:00
sharpsl.c mtd: nand: use dev_get_platdata() 2013-08-30 21:34:33 +01: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: nand: remove deprecated IRQF_DISABLED 2013-11-07 00:08:56 -08:00
txx9ndfmc.c mtd: simplify use of devm_ioremap_resource 2013-08-30 21:36:15 +01:00
xway_nand.c mtd: lantiq: Add NAND support on Lantiq XWAY SoC. 2012-09-29 15:05:18 +01:00