can: m_can: m_can_fifo_{read,write}: don't read or write from/to FIFO if length is 0
In order to optimize FIFO access, especially on m_can cores attached to slow busses like SPI, in patch |e39381770e
("can: m_can: Disable IRQs on FIFO bus errors") bulk read/write support has been added to the m_can_fifo_{read,write} functions. That change leads to the tcan driver to call regmap_bulk_{read,write}() with a length of 0 (for CAN frames with 0 data length). regmap treats this as an error: | tcan4x5x spi1.0 tcan4x5x0: FIFO write returned -22 This patch fixes the problem by not calling the cdev->ops->{read,write)_fifo() in case of a 0 length read/write. Fixes:e39381770e
("can: m_can: Disable IRQs on FIFO bus errors") Link: https://lore.kernel.org/all/20220114155751.2651888-1-mkl@pengutronix.de Cc: stable@vger.kernel.org Cc: Matt Kline <matt@bitbashing.io> Cc: Chandrasekar Ramakrishnan <rcsekar@samsung.com> Reported-by: Michael Anochin <anochin@photo-meter.com> Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
This commit is contained in:
parent
17a3042262
commit
db72589c49
@ -336,6 +336,9 @@ m_can_fifo_read(struct m_can_classdev *cdev,
|
||||
u32 addr_offset = cdev->mcfg[MRAM_RXF0].off + fgi * RXF0_ELEMENT_SIZE +
|
||||
offset;
|
||||
|
||||
if (val_count == 0)
|
||||
return 0;
|
||||
|
||||
return cdev->ops->read_fifo(cdev, addr_offset, val, val_count);
|
||||
}
|
||||
|
||||
@ -346,6 +349,9 @@ m_can_fifo_write(struct m_can_classdev *cdev,
|
||||
u32 addr_offset = cdev->mcfg[MRAM_TXB].off + fpi * TXB_ELEMENT_SIZE +
|
||||
offset;
|
||||
|
||||
if (val_count == 0)
|
||||
return 0;
|
||||
|
||||
return cdev->ops->write_fifo(cdev, addr_offset, val, val_count);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user