summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHauke Mehrtens <hauke@hauke-m.de>2017-04-17 01:38:05 +0200
committerMark Brown <broonie@kernel.org>2017-04-18 19:57:51 +0200
commit833bfade96561216aa2129516a5926a0326860a2 (patch)
treef4cfcadc39ee8879833d2eefe4a7ba798bb115e4
parentspi: dynamycally allocated message initialization (diff)
downloadlinux-833bfade96561216aa2129516a5926a0326860a2.tar.xz
linux-833bfade96561216aa2129516a5926a0326860a2.zip
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>
-rw-r--r--drivers/spi/spi.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c
index 656dd3e3220c..0af62c6f93a8 100644
--- a/drivers/spi/spi.c
+++ b/drivers/spi/spi.c
@@ -1012,7 +1012,7 @@ static int spi_transfer_one_message(struct spi_master *master,
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;