mtd: spi-nor: Recover from Spansion/Cypress errors
authorAlexander Sverdlin <alexander.sverdlin@nokia.com>
Mon, 17 Jul 2017 15:54:07 +0000 (17:54 +0200)
committerCyrille Pitchen <cyrille.pitchen@wedev4u.fr>
Tue, 1 Aug 2017 19:15:33 +0000 (21:15 +0200)
commitc4b3eacc1dfef5f36dbdf9a99be37834d3e23ed0
tree097f720ba1663553c9eba8395d77e0d40f958eed
parentfe602838a66d34f3d1de71feab92b403e244db8c
mtd: spi-nor: Recover from Spansion/Cypress errors

S25FL{128|256|512}S datasheets say:
"When P_ERR or E_ERR bits are set to one, the WIP bit will remain set to
one indicating the device remains busy and unable to receive new operation
commands. A Clear Status Register (CLSR) command must be received to return
the device to standby mode."

Current spi-nor code works until first error occurs, but write/erase errors
are not just rare hardware failures, they also occur if user tries to flash
write-protected areas. After such attempt no SPI command can be executed
any more and even read fails. This patch adds support for P_ERR and E_ERR
bits in Status Register 1 (so that operation fails immediately and not
after a long timeout) and proper recovery from the error condition.

Tested on Spansion S25FS128S, which is supported by S25FL129P entry.

Signed-off-by: Alexander Sverdlin <alexander.sverdlin@nokia.com>
Signed-off-by: Cyrille Pitchen <cyrille.pitchen@wedev4u.fr>
drivers/mtd/spi-nor/spi-nor.c
include/linux/mtd/spi-nor.h