From: Marek Vasut Date: Tue, 10 Apr 2018 14:58:46 +0000 (+0200) Subject: spi: sh_qspi: Replace ad hoc waiting with wait_for_bit X-Git-Tag: v2018.05-rc2~18^2~3 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=9573db654d1999a1dfde6469782aa8d7cf3d589f;p=u-boot spi: sh_qspi: Replace ad hoc waiting with wait_for_bit Replace the ad-hoc endless loops with wait_for_bit() with reasonable timeout. Note that the loops had internal 10uS delays, although there is no reason for those on this HW, so they are dropped. Signed-off-by: Marek Vasut Cc: Nobuhiro Iwamatsu --- diff --git a/drivers/spi/sh_qspi.c b/drivers/spi/sh_qspi.c index 8eaa6744cc..d7f558a541 100644 --- a/drivers/spi/sh_qspi.c +++ b/drivers/spi/sh_qspi.c @@ -11,6 +11,7 @@ #include #include #include +#include #include #include @@ -236,23 +237,17 @@ int spi_xfer(struct spi_slave *slave, unsigned int bitlen, const void *dout, rdata = din; while (nbyte > 0) { - while (!(readb(&ss->regs->spsr) & SPSR_SPTEF)) { - if (ctrlc()) { - puts("abort\n"); - return 1; - } - udelay(10); - } + ret = wait_for_bit_8(&ss->regs->spsr, SPSR_SPTEF, + true, 1000, true); + if (ret) + return ret; writeb(*tdata, (u8 *)(&ss->regs->spdr)); - while (!(readb(&ss->regs->spsr) & SPSR_SPRFF)) { - if (ctrlc()) { - puts("abort\n"); - return 1; - } - udelay(10); - } + ret = wait_for_bit_8(&ss->regs->spsr, SPSR_SPRFF, + true, 1000, true); + if (ret) + return ret; *rdata = readb((u8 *)(&ss->regs->spdr));