Commit 899929ba authored by Ricardo Ribalda Delgado's avatar Ricardo Ribalda Delgado Committed by Mark Brown

spi/xilinx: Leave the IRQ always enabled.

Instead of enabling the IRQ and disabling it for every transaction.

Specially the small transactions (1,2 words) benefit from removing 3 bus
accesses.
Signed-off-by: default avatarRicardo Ribalda Delgado <ricardo.ribalda@gmail.com>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 4c9a7614
...@@ -167,8 +167,11 @@ static void xspi_init_hw(struct xilinx_spi *xspi) ...@@ -167,8 +167,11 @@ static void xspi_init_hw(struct xilinx_spi *xspi)
/* Reset the SPI device */ /* Reset the SPI device */
xspi->write_fn(XIPIF_V123B_RESET_MASK, xspi->write_fn(XIPIF_V123B_RESET_MASK,
regs_base + XIPIF_V123B_RESETR_OFFSET); regs_base + XIPIF_V123B_RESETR_OFFSET);
/* Disable all the interrupts just in case */ /* Enable the transmit empty interrupt, which we use to determine
xspi->write_fn(0, regs_base + XIPIF_V123B_IIER_OFFSET); * progress on the transmission.
*/
xspi->write_fn(XSPI_INTR_TX_EMPTY,
regs_base + XIPIF_V123B_IIER_OFFSET);
/* Enable the global IPIF interrupt */ /* Enable the global IPIF interrupt */
xspi->write_fn(XIPIF_V123B_GINTR_ENABLE, xspi->write_fn(XIPIF_V123B_GINTR_ENABLE,
regs_base + XIPIF_V123B_DGIER_OFFSET); regs_base + XIPIF_V123B_DGIER_OFFSET);
...@@ -237,7 +240,6 @@ static void xilinx_spi_fill_tx_fifo(struct xilinx_spi *xspi, int n_words) ...@@ -237,7 +240,6 @@ static void xilinx_spi_fill_tx_fifo(struct xilinx_spi *xspi, int n_words)
static int xilinx_spi_txrx_bufs(struct spi_device *spi, struct spi_transfer *t) static int xilinx_spi_txrx_bufs(struct spi_device *spi, struct spi_transfer *t)
{ {
struct xilinx_spi *xspi = spi_master_get_devdata(spi->master); struct xilinx_spi *xspi = spi_master_get_devdata(spi->master);
u32 ipif_ier;
/* We get here with transmitter inhibited */ /* We get here with transmitter inhibited */
...@@ -246,14 +248,6 @@ static int xilinx_spi_txrx_bufs(struct spi_device *spi, struct spi_transfer *t) ...@@ -246,14 +248,6 @@ static int xilinx_spi_txrx_bufs(struct spi_device *spi, struct spi_transfer *t)
xspi->remaining_bytes = t->len; xspi->remaining_bytes = t->len;
reinit_completion(&xspi->done); reinit_completion(&xspi->done);
/* Enable the transmit empty interrupt, which we use to determine
* progress on the transmission.
*/
ipif_ier = xspi->read_fn(xspi->regs + XIPIF_V123B_IIER_OFFSET);
xspi->write_fn(ipif_ier | XSPI_INTR_TX_EMPTY,
xspi->regs + XIPIF_V123B_IIER_OFFSET);
for (;;) { for (;;) {
u16 cr; u16 cr;
int n_words; int n_words;
...@@ -290,9 +284,6 @@ static int xilinx_spi_txrx_bufs(struct spi_device *spi, struct spi_transfer *t) ...@@ -290,9 +284,6 @@ static int xilinx_spi_txrx_bufs(struct spi_device *spi, struct spi_transfer *t)
break; break;
} }
/* Disable the transmit empty interrupt */
xspi->write_fn(ipif_ier, xspi->regs + XIPIF_V123B_IIER_OFFSET);
return t->len - xspi->remaining_bytes; return t->len - xspi->remaining_bytes;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment