12345678910111213141516171819202122232425262728293031323334353637 |
- From 833bfade96561216aa2129516a5926a0326860a2 Mon Sep 17 00:00:00 2001
- From: Hauke Mehrtens <hauke@hauke-m.de>
- Date: Mon, 17 Apr 2017 01:38:05 +0200
- Subject: spi: double time out tolerance
- The generic SPI code calculates how long the issued transfer would take
- and adds 100ms in addition to the timeout as tolerance. On my 500 MHz
- Lantiq Mips SoC I am getting timeouts from the SPI like this when the
- system boots up:
- m25p80 spi32766.4: SPI transfer timed out
- blk_update_request: I/O error, dev mtdblock3, sector 2
- SQUASHFS error: squashfs_read_data failed to read block 0x6e
- After increasing the tolerance for the timeout to 200ms I haven't seen
- these SPI transfer time outs any more.
- The Lantiq SPI driver in use here has an extra work queue in between,
- which gets triggered when the controller send the last word and the
- hardware FIFOs used for reading and writing are only 8 words long.
- Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
- Signed-off-by: Mark Brown <broonie@kernel.org>
- ---
- drivers/spi/spi.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
- --- a/drivers/spi/spi.c
- +++ b/drivers/spi/spi.c
- @@ -1004,7 +1004,7 @@ static int spi_transfer_one_message(stru
- ret = 0;
- ms = 8LL * 1000LL * xfer->len;
- do_div(ms, xfer->speed_hz);
- - ms += ms + 100; /* some tolerance */
- + ms += ms + 200; /* some tolerance */
-
- if (ms > UINT_MAX)
- ms = UINT_MAX;
|