hw/ssi: Fix Linux driver init issue with xilinx_spi
authorChris Rauer <crauer@google.com>
Mon, 3 Apr 2023 15:12:30 +0000 (16:12 +0100)
committerPeter Maydell <peter.maydell@linaro.org>
Mon, 3 Apr 2023 15:12:30 +0000 (16:12 +0100)
The problem is that the Linux driver expects the master transaction inhibit
bit(R_SPICR_MTI) to be set during driver initialization so that it can
detect the fifo size but QEMU defaults it to zero out of reset.  The
datasheet indicates this bit is active on reset.

See page 25, SPI Control Register section:
https://www.xilinx.com/content/dam/xilinx/support/documents/ip_documentation/axi_quad_spi/v3_2/pg153-axi-quad-spi.pdf

Signed-off-by: Chris Rauer <crauer@google.com>
Message-id: 20230323182811.2641044-1-crauer@google.com
Reviewed-by: Edgar E. Iglesias <edgar@zeroasic.com>
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
hw/ssi/xilinx_spi.c

index 552927622f43e21220bbec8aa17d0083df844d52..d4de2e7aabc2905e20b02daca29d1c236daee4b1 100644 (file)
@@ -156,6 +156,7 @@ static void xlx_spi_do_reset(XilinxSPI *s)
     txfifo_reset(s);
 
     s->regs[R_SPISSR] = ~0;
+    s->regs[R_SPICR] = R_SPICR_MTI;
     xlx_spi_update_irq(s);
     xlx_spi_update_cs(s);
 }