mtd: rawnand: marvell: add suspend and resume hooks
This patch restores the suspend and resume hooks that the old driver used
to have. Apart from stopping and starting the clocks, the resume callback
also nullifies the selected_chip pointer, so the next command that is issued
will re-select the chip and thereby restore the timing registers.
Factor out some code from marvell_nfc_init() into a new function
marvell_nfc_reset() and also call it at resume time to reset some registers
that don't retain their contents during low-power mode.
Without this patch, a PXA3xx based system would cough up an error similar to
the one below after resume.
[ 44.660162] marvell-nfc
43100000.nand-controller: Timeout waiting for RB signal
[ 44.671492] ubi0 error: ubi_io_write: error -110 while writing 2048 bytes to PEB 102:38912, written 0 bytes
[ 44.682887] CPU: 0 PID: 1417 Comm: remote-control Not tainted 4.18.0-rc2+ #344
[ 44.691197] Hardware name: Marvell PXA3xx (Device Tree Support)
[ 44.697111] Backtrace:
[ 44.699593] [<
c0106458>] (dump_backtrace) from [<
c0106718>] (show_stack+0x18/0x1c)
[ 44.708931] r7:
00000800 r6:
00009800 r5:
00000066 r4:
c6139000
[ 44.715833] [<
c0106700>] (show_stack) from [<
c0678a60>] (dump_stack+0x20/0x28)
[ 44.724206] [<
c0678a40>] (dump_stack) from [<
c0456cbc>] (ubi_io_write+0x3d4/0x630)
[ 44.732925] [<
c04568e8>] (ubi_io_write) from [<
c0454428>] (ubi_eba_write_leb+0x690/0x6fc)
...
Fixes: 02f26ecf8c77 ("mtd: nand: add reworked Marvell NAND controller driver")
Cc: stable@vger.kernel.org
Signed-off-by: Daniel Mack <daniel@zonque.org>
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>