From 695381442584466727c5c74ec46a2ebc04d6ce11 Mon Sep 17 00:00:00 2001 From: Richard Tucker Date: Mon, 17 Jun 2024 10:55:28 +1000 Subject: [PATCH] drivers/can/sja1000: fix Rx buffer pointer issue When initialising the SJA1000 peripheral on some implementations (SJA1000_FDTOL), "releasing" the buffer when the Rx buffer is empty causes a buffer pointer misalignment. On peripheral initialise, remove the flag to "release" the buffer. This should be safe for all systems using the SJA1000 CAN controller as a "reset" to the peripheral clears the Rx FIFO. --- drivers/can/sja1000.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/drivers/can/sja1000.c b/drivers/can/sja1000.c index 5da5f81566..d305f05cc5 100644 --- a/drivers/can/sja1000.c +++ b/drivers/can/sja1000.c @@ -282,13 +282,11 @@ static void sja1000_reset(struct can_dev_s *dev) sja1000_putreg(priv, SJA1000_MODE_REG, 0); } - /* Abort transmission, release RX buffer and clear overrun. + /* Abort transmission and clear overrun. * Command register can only be modified when in Operation Mode. */ - sja1000_putreg(priv, SJA1000_CMD_REG, SJA1000_ABORT_TX_M - | SJA1000_RELEASE_BUF_M - | SJA1000_CLR_OVERRUN_M); + sja1000_write_cmdreg(priv, SJA1000_ABORT_TX_M | SJA1000_CLR_OVERRUN_M); #ifdef CONFIG_ARCH_HAVE_MULTICPU spin_unlock_irqrestore(&priv->lock, flags);