Hello Marc, did you have a chance to look at it? Regards, Sven ________________________________________ Von: Sven Schuchmann <schuchmann@xxxxxxxxxxxxxxxxx> Gesendet: Sonntag, 6. Oktober 2024 10:31 An: Marc Kleine-Budde <mkl@xxxxxxxxxxxxxx>; Manivannan Sadhasivam <manivannan.sadhasivam@xxxxxxxxxx>; Thomas Kopp <thomas.kopp@xxxxxxxxxxxxx>; Vincent Mailhol <mailhol.vincent@xxxxxxxxxx> Cc: linux-can@xxxxxxxxxxxxxxx <linux-can@xxxxxxxxxxxxxxx>; kernel@xxxxxxxxxxxxxx <kernel@xxxxxxxxxxxxxx> Betreff: AW: [PATCH RFC can] can: mcp251xfd: mcp251xfd_get_tef_len(): fix length calculation Hello Marc, sorry, it still crashes: [ 25.173548] mcp251xfd spi1.0 canfd1: IRQ handler mcp251xfd_handle_tefif() returned -22. [ 25.173576] mcp251xfd spi1.0 canfd1: IRQ handler returned -22 (intf=0xbf1a0010). I attached the dump. Regards, Sven ________________________________________ Von: Marc Kleine-Budde <mkl@xxxxxxxxxxxxxx> Gesendet: Dienstag, 1. Oktober 2024 17:06 An: Manivannan Sadhasivam <manivannan.sadhasivam@xxxxxxxxxx>; Thomas Kopp <thomas.kopp@xxxxxxxxxxxxx>; Vincent Mailhol <mailhol.vincent@xxxxxxxxxx> Cc: linux-can@xxxxxxxxxxxxxxx <linux-can@xxxxxxxxxxxxxxx>; kernel@xxxxxxxxxxxxxx <kernel@xxxxxxxxxxxxxx>; Sven Schuchmann <schuchmann@xxxxxxxxxxxxxxxxx>; Marc Kleine-Budde <mkl@xxxxxxxxxxxxxx> Betreff: [PATCH RFC can] can: mcp251xfd: mcp251xfd_get_tef_len(): fix length calculation Reported-by: Sven Schuchmann <schuchmann@xxxxxxxxxxxxxxxxx> Closes: https://patch.msgid.link/FR3P281MB155216711EFF900AD9791B7ED9692@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Fixes: b8e0ddd36ce9 ("can: mcp251xfd: tef: prepare to workaround broken TEF FIFO tail index erratum") Signed-off-by: Marc Kleine-Budde <mkl@xxxxxxxxxxxxxx> --- Hello, I think the length calculation is wrong. Can you try this compile tested only patch. I'll add a proper patch description later. Marc --- drivers/net/can/spi/mcp251xfd/mcp251xfd-tef.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/drivers/net/can/spi/mcp251xfd/mcp251xfd-tef.c b/drivers/net/can/spi/mcp251xfd/mcp251xfd-tef.c index f732556d233a7be3b43f6f08e0b8f25732190104..e40a6d4134c29b32baeda7ad3dbaf4de27b54ba3 100644 --- a/drivers/net/can/spi/mcp251xfd/mcp251xfd-tef.c +++ b/drivers/net/can/spi/mcp251xfd/mcp251xfd-tef.c @@ -16,9 +16,9 @@ #include "mcp251xfd.h" -static inline bool mcp251xfd_tx_fifo_sta_full(u32 fifo_sta) +static inline bool mcp251xfd_tx_fifo_sta_empty(u32 fifo_sta) { - return !(fifo_sta & MCP251XFD_REG_FIFOSTA_TFNRFNIF); + return !(fifo_sta & MCP251XFD_REG_FIFOSTA_TFERFFIF); } static inline int @@ -122,7 +122,11 @@ mcp251xfd_get_tef_len(struct mcp251xfd_priv *priv, u8 *len_p) if (err) return err; - if (mcp251xfd_tx_fifo_sta_full(fifo_sta)) { + /* If the chip says the TX-FIFO is empty, but there are no TX + * buffers free in the ring, we assume all have been sent. + */ + if (mcp251xfd_tx_fifo_sta_empty(fifo_sta) && + mcp251xfd_get_tx_free(tx_ring) == 0) { *len_p = tx_ring->obj_num; return 0; } --- base-commit: d505d3593b52b6c43507f119572409087416ba28 change-id: 20241001-mcp251xfd-fix-length-calculation-09b6cc10aeb0 Best regards, -- Marc Kleine-Budde <mkl@xxxxxxxxxxxxxx>