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.
This commit is contained in:
Richard Tucker 2024-06-17 10:55:28 +10:00 committed by Xiang Xiao
parent 8e30c13441
commit 6953814425
1 changed files with 2 additions and 4 deletions

View File

@ -282,13 +282,11 @@ static void sja1000_reset(struct can_dev_s *dev)
sja1000_putreg(priv, SJA1000_MODE_REG, 0); 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. * Command register can only be modified when in Operation Mode.
*/ */
sja1000_putreg(priv, SJA1000_CMD_REG, SJA1000_ABORT_TX_M sja1000_write_cmdreg(priv, SJA1000_ABORT_TX_M | SJA1000_CLR_OVERRUN_M);
| SJA1000_RELEASE_BUF_M
| SJA1000_CLR_OVERRUN_M);
#ifdef CONFIG_ARCH_HAVE_MULTICPU #ifdef CONFIG_ARCH_HAVE_MULTICPU
spin_unlock_irqrestore(&priv->lock, flags); spin_unlock_irqrestore(&priv->lock, flags);