forked from luck/tmp_suning_uos_patched
spi: mxic: Fix the transmit path
commit 5fd6739e0df7e320bcac103dfb95fe75941fea17 upstream.
By working with external hardware ECC engines, we figured out that
Under certain circumstances, it is needed for the SPI controller to
check INT_TX_EMPTY and INT_RX_NOT_EMPTY in both receive and transmit
path (not only in the receive path). The delay penalty being
negligible, move this code in the common path.
Fixes: b942d80b0a
("spi: Add MXIC controller driver")
Cc: stable@vger.kernel.org
Suggested-by: Mason Yang <masonccyang@mxic.com.tw>
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Reviewed-by: Zhengxun Li <zhengxunli@mxic.com.tw>
Reviewed-by: Mark Brown <broonie@kernel.org>
Link: https://lore.kernel.org/linux-mtd/20220127091808.1043392-10-miquel.raynal@bootlin.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
be22ebe79e
commit
145a63201d
|
@ -304,10 +304,8 @@ static int mxic_spi_data_xfer(struct mxic_spi *mxic, const void *txbuf,
|
|||
|
||||
writel(data, mxic->regs + TXD(nbytes % 4));
|
||||
|
||||
if (rxbuf) {
|
||||
ret = readl_poll_timeout(mxic->regs + INT_STS, sts,
|
||||
sts & INT_TX_EMPTY, 0,
|
||||
USEC_PER_SEC);
|
||||
sts & INT_TX_EMPTY, 0, USEC_PER_SEC);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
|
@ -318,11 +316,9 @@ static int mxic_spi_data_xfer(struct mxic_spi *mxic, const void *txbuf,
|
|||
return ret;
|
||||
|
||||
data = readl(mxic->regs + RXD);
|
||||
if (rxbuf) {
|
||||
data >>= (8 * (4 - nbytes));
|
||||
memcpy(rxbuf + pos, &data, nbytes);
|
||||
WARN_ON(readl(mxic->regs + INT_STS) & INT_RX_NOT_EMPTY);
|
||||
} else {
|
||||
readl(mxic->regs + RXD);
|
||||
}
|
||||
WARN_ON(readl(mxic->regs + INT_STS) & INT_RX_NOT_EMPTY);
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user