]> git.baikalelectronics.ru Git - kernel.git/commit
mtd: rawnand: Ensure nand_soft_waitrdy wait period is enough
authorMartin Devera <devik@eaxlabs.cz>
Thu, 16 Jan 2020 13:54:31 +0000 (14:54 +0100)
committerMiquel Raynal <miquel.raynal@bootlin.com>
Mon, 9 Mar 2020 13:49:14 +0000 (14:49 +0100)
commitad2f5b3dc05f6b76008bbdfc10358a009b8d58a5
tree284b52f9002d7631a47120030448f8ccde49fbad
parent5ffd64ecc0987e6f01533e7cc8fa89b7b34f793f
mtd: rawnand: Ensure nand_soft_waitrdy wait period is enough

The used way to compute jiffies timeout brokes when
jiffie difference is 1.
Assume that nand_soft_waitrdy is called with timeout_ms==1.
Jiffies are 1000 for example (assume something more like 1000.99
- just before incrementing to 1001).
We compute timeout_ms = 1000+msecs_to_jiffies(1) = 1001.
nand_read_data_op is called for the first time and returns 0.
During the call jiffies changes to 1001 thus "while loop" ends
here (wrongly). Notice that routine was called with expected timeout
1ms but actual timeout used was something between 0...1ms.

Fixes STM32MP1 FMC2 NAND controller which sometimes failed
exactly in this way.

Signed-off-by: Martin Devera <devik@eaxlabs.cz>
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Link: https://lore.kernel.org/linux-mtd/20200116135431.17480-1-devik@eaxlabs.cz
drivers/mtd/nand/raw/nand_base.c