forked from Minki/linux
p54spi: fix incorrect access sequence to DMA_WRITE_CTRL in p54spi_spi_write_dma
Host is not allowed to modify DMA_WRITE_CTRL register if bit HOST_ALLOWED in it is not set. Wait for HOST_ALLOWED first. Also get rid of timeout in p54spi_wait_bit as it's been playing a role of workaround for such an incorrect register access. Signed-off-by: Max Filippov <jcmvbkbc@gmail.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
4eaf16bc1f
commit
210dd1bb9b
@ -172,8 +172,6 @@ static int p54spi_wait_bit(struct p54s_priv *priv, u16 reg, __le32 bits)
|
||||
__le32 buffer = p54spi_read32(priv, reg);
|
||||
if ((buffer & bits) == bits)
|
||||
return 1;
|
||||
|
||||
msleep(0);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@ -181,9 +179,6 @@ static int p54spi_wait_bit(struct p54s_priv *priv, u16 reg, __le32 bits)
|
||||
static int p54spi_spi_write_dma(struct p54s_priv *priv, __le32 base,
|
||||
const void *buf, size_t len)
|
||||
{
|
||||
p54spi_write16(priv, SPI_ADRS_DMA_WRITE_CTRL,
|
||||
cpu_to_le16(SPI_DMA_WRITE_CTRL_ENABLE));
|
||||
|
||||
if (!p54spi_wait_bit(priv, SPI_ADRS_DMA_WRITE_CTRL,
|
||||
cpu_to_le32(HOST_ALLOWED))) {
|
||||
dev_err(&priv->spi->dev, "spi_write_dma not allowed "
|
||||
@ -191,6 +186,9 @@ static int p54spi_spi_write_dma(struct p54s_priv *priv, __le32 base,
|
||||
return -EAGAIN;
|
||||
}
|
||||
|
||||
p54spi_write16(priv, SPI_ADRS_DMA_WRITE_CTRL,
|
||||
cpu_to_le16(SPI_DMA_WRITE_CTRL_ENABLE));
|
||||
|
||||
p54spi_write16(priv, SPI_ADRS_DMA_WRITE_LEN, cpu_to_le16(len));
|
||||
p54spi_write32(priv, SPI_ADRS_DMA_WRITE_BASE, base);
|
||||
p54spi_spi_write(priv, SPI_ADRS_DMA_DATA, buf, len);
|
||||
|
Loading…
Reference in New Issue
Block a user