spi: Fixes for v6.5
A couple more small driver specific fixes for v6.5, the device mode for Cadence had been broken by some recent updates done for host mode and large transfers for multi-byte words on stm32 had been broken by an API update in what I think was a rebasing incident. -----BEGIN PGP SIGNATURE----- iQEzBAABCgAdFiEEreZoqmdXGLWf4p/qJNaLcl1Uh9AFAmTmYAoACgkQJNaLcl1U h9BbJgf/SYpiYLihGK/GN+asSj91E5qVi7gvqzccEVkUNjjIvDp3isWI827PUtei 9IlFGEAkMNH4CMfTpa6jyqrgc8CubwK2Vg6rsuZ6z/5CgQois6ZneJo19XKetNLQ z2mXQh2JwaffI2hDqLWpe/YP2iQOJtCKXKTImfZ4xEeV3ioXwkp4qo1/s1MClhIY hhOqLMLro/y5Wvqb3oDsLcus1KQj8+lufgQwF1X41bYkb6eX5iJ4vQyIWBgyRSEC /XgGPGCi2/7ltkogegdcYSI3H/M0/0Zs97yGyWWUbnCdSaHa+kE00tbiQgSH+yZ8 LRecDPhM0bekCHC96oh62DZI5maBEQ== =W+jt -----END PGP SIGNATURE----- Merge tag 'spi-fix-v6.5-rc7' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/spi Pull spi fixes from Mark Brown: "A couple more small driver specific fixes for v6.5. The device mode for Cadence had been broken by some recent updates done for host mode and large transfers for multi-byte words on stm32 had been broken by an API update in what I think was a rebasing incident" * tag 'spi-fix-v6.5-rc7' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/spi: spi: spi-cadence: Fix data corruption issues in slave mode spi: stm32: fix accidential revert to byte-sized transfer splitting
This commit is contained in:
commit
0de5ec4463
|
@ -317,12 +317,6 @@ static void cdns_spi_process_fifo(struct cdns_spi *xspi, int ntx, int nrx)
|
|||
xspi->rx_bytes -= nrx;
|
||||
|
||||
while (ntx || nrx) {
|
||||
/* When xspi in busy condition, bytes may send failed,
|
||||
* then spi control did't work thoroughly, add one byte delay
|
||||
*/
|
||||
if (cdns_spi_read(xspi, CDNS_SPI_ISR) & CDNS_SPI_IXR_TXFULL)
|
||||
udelay(10);
|
||||
|
||||
if (ntx) {
|
||||
if (xspi->txbuf)
|
||||
cdns_spi_write(xspi, CDNS_SPI_TXD, *xspi->txbuf++);
|
||||
|
@ -392,6 +386,11 @@ static irqreturn_t cdns_spi_irq(int irq, void *dev_id)
|
|||
if (xspi->tx_bytes) {
|
||||
cdns_spi_process_fifo(xspi, trans_cnt, trans_cnt);
|
||||
} else {
|
||||
/* Fixed delay due to controller limitation with
|
||||
* RX_NEMPTY incorrect status
|
||||
* Xilinx AR:65885 contains more details
|
||||
*/
|
||||
udelay(10);
|
||||
cdns_spi_process_fifo(xspi, 0, trans_cnt);
|
||||
cdns_spi_write(xspi, CDNS_SPI_IDR,
|
||||
CDNS_SPI_IXR_DEFAULT);
|
||||
|
@ -439,12 +438,18 @@ static int cdns_transfer_one(struct spi_controller *ctlr,
|
|||
cdns_spi_setup_transfer(spi, transfer);
|
||||
} else {
|
||||
/* Set TX empty threshold to half of FIFO depth
|
||||
* only if TX bytes are more than half FIFO depth.
|
||||
* only if TX bytes are more than FIFO depth.
|
||||
*/
|
||||
if (xspi->tx_bytes > xspi->tx_fifo_depth)
|
||||
cdns_spi_write(xspi, CDNS_SPI_THLD, xspi->tx_fifo_depth >> 1);
|
||||
}
|
||||
|
||||
/* When xspi in busy condition, bytes may send failed,
|
||||
* then spi control didn't work thoroughly, add one byte delay
|
||||
*/
|
||||
if (cdns_spi_read(xspi, CDNS_SPI_ISR) & CDNS_SPI_IXR_TXFULL)
|
||||
udelay(10);
|
||||
|
||||
cdns_spi_process_fifo(xspi, xspi->tx_fifo_depth, 0);
|
||||
spi_transfer_delay_exec(transfer);
|
||||
|
||||
|
|
|
@ -1001,9 +1001,9 @@ static int stm32_spi_prepare_msg(struct spi_controller *ctrl,
|
|||
if (spi->cfg->set_number_of_data) {
|
||||
int ret;
|
||||
|
||||
ret = spi_split_transfers_maxsize(ctrl, msg,
|
||||
STM32H7_SPI_TSIZE_MAX,
|
||||
GFP_KERNEL | GFP_DMA);
|
||||
ret = spi_split_transfers_maxwords(ctrl, msg,
|
||||
STM32H7_SPI_TSIZE_MAX,
|
||||
GFP_KERNEL | GFP_DMA);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue