On 27-02-2025 07:26, Nicholas Piggin wrote:
On Sat Jan 4, 2025 at 2:18 AM AEST, Chalapathi V wrote:
There is a possibility that SPI controller can get into loop due to indefinite
RDR match failures. Hence put a limit to failures and stop the sequencer.
Signed-off-by: Chalapathi V <[email protected]>
---
hw/ssi/pnv_spi.c | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/hw/ssi/pnv_spi.c b/hw/ssi/pnv_spi.c
index 41beb559c6..d605fa8b46 100644
--- a/hw/ssi/pnv_spi.c
+++ b/hw/ssi/pnv_spi.c
@@ -20,6 +20,7 @@
#define PNV_SPI_OPCODE_LO_NIBBLE(x) (x & 0x0F)
#define PNV_SPI_MASKED_OPCODE(x) (x & 0xF0)
#define PNV_SPI_FIFO_SIZE 16
+#define RDR_MATCH_FAILURE_LIMIT 16
/*
* Macro from include/hw/ppc/fdt.h
@@ -838,21 +839,31 @@ static void operation_sequencer(PnvSpi *s)
*/
if (GETFIELD(SPI_STS_RDR_FULL, s->status) == 1) {
bool rdr_matched = false;
+ static int fail_count;
This will be shared by SPI instances, is that okay or should it be
in PnvSpi?
Other than that, looks good.
This should be in PnvSpi. Will update in V6. Thank You.
Reviewed-by: Nicholas Piggin <[email protected]>