spi: lantiq: fix: Rx overflow error in full duplex mode
[ Upstream commit5.4-rM2-2.2.x-imx-squashed661ccf2b3f
] In full duplex mode, rx overflow error is observed. To overcome the error, wait until the complete data got received and proceed further. Fixes:17f84b793c
("spi: lantiq-ssc: add support for Lantiq SSC SPI controller") Signed-off-by: Dilip Kota <eswara.kota@linux.intel.com> Link: https://lore.kernel.org/r/efb650b0faa49a00788c4e0ca8ef7196bdba851d.1594957019.git.eswara.kota@linux.intel.com Signed-off-by: Mark Brown <broonie@kernel.org> Signed-off-by: Sasha Levin <sashal@kernel.org>
parent
e22730350d
commit
b1fe27d227
|
@ -184,6 +184,7 @@ struct lantiq_ssc_spi {
|
|||
unsigned int tx_fifo_size;
|
||||
unsigned int rx_fifo_size;
|
||||
unsigned int base_cs;
|
||||
unsigned int fdx_tx_level;
|
||||
};
|
||||
|
||||
static u32 lantiq_ssc_readl(const struct lantiq_ssc_spi *spi, u32 reg)
|
||||
|
@ -481,6 +482,7 @@ static void tx_fifo_write(struct lantiq_ssc_spi *spi)
|
|||
u32 data;
|
||||
unsigned int tx_free = tx_fifo_free(spi);
|
||||
|
||||
spi->fdx_tx_level = 0;
|
||||
while (spi->tx_todo && tx_free) {
|
||||
switch (spi->bits_per_word) {
|
||||
case 2 ... 8:
|
||||
|
@ -509,6 +511,7 @@ static void tx_fifo_write(struct lantiq_ssc_spi *spi)
|
|||
|
||||
lantiq_ssc_writel(spi, data, LTQ_SPI_TB);
|
||||
tx_free--;
|
||||
spi->fdx_tx_level++;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -520,6 +523,13 @@ static void rx_fifo_read_full_duplex(struct lantiq_ssc_spi *spi)
|
|||
u32 data;
|
||||
unsigned int rx_fill = rx_fifo_level(spi);
|
||||
|
||||
/*
|
||||
* Wait until all expected data to be shifted in.
|
||||
* Otherwise, rx overrun may occur.
|
||||
*/
|
||||
while (rx_fill != spi->fdx_tx_level)
|
||||
rx_fill = rx_fifo_level(spi);
|
||||
|
||||
while (rx_fill) {
|
||||
data = lantiq_ssc_readl(spi, LTQ_SPI_RB);
|
||||
|
||||
|
|
Loading…
Reference in New Issue