* [PATCH net] can: m_can: pci: fix iomap_read_fifo() and iomap_write_fifo()
@ 2021-11-18 14:40 Matthias Schiffer
2021-11-18 15:09 ` Jarkko Nikula
0 siblings, 1 reply; 2+ messages in thread
From: Matthias Schiffer @ 2021-11-18 14:40 UTC (permalink / raw)
To: Wolfgang Grandegger, Marc Kleine-Budde
Cc: David S. Miller, Jakub Kicinski, Felipe Balbi (Intel),
Jarkko Nikula, Matt Kline, linux-can, netdev, linux-kernel,
Matthias Schiffer
The same fix that was previously done in m_can_platform in commit
99d173fbe894 ("can: m_can: fix iomap_read_fifo() and iomap_write_fifo()")
is required in m_can_pci as well to make iomap_read_fifo() and
iomap_write_fifo() work for val_count > 1.
Fixes: 812270e5445b ("can: m_can: Batch FIFO writes during CAN transmit")
Fixes: 1aa6772f64b4 ("can: m_can: Batch FIFO reads during CAN receive")
Signed-off-by: Matthias Schiffer <matthias.schiffer@ew.tq-group.com>
---
drivers/net/can/m_can/m_can_pci.c | 14 ++++++++++++--
1 file changed, 12 insertions(+), 2 deletions(-)
diff --git a/drivers/net/can/m_can/m_can_pci.c b/drivers/net/can/m_can/m_can_pci.c
index 8bbbaa264f0d..b56a54d6c5a9 100644
--- a/drivers/net/can/m_can/m_can_pci.c
+++ b/drivers/net/can/m_can/m_can_pci.c
@@ -47,8 +47,13 @@ static u32 iomap_read_reg(struct m_can_classdev *cdev, int reg)
static int iomap_read_fifo(struct m_can_classdev *cdev, int offset, void *val, size_t val_count)
{
struct m_can_pci_priv *priv = cdev_to_priv(cdev);
+ void __iomem *src = priv->base + offset;
- ioread32_rep(priv->base + offset, val, val_count);
+ while (val_count--) {
+ *(unsigned int *)val = ioread32(src);
+ val += 4;
+ src += 4;
+ }
return 0;
}
@@ -66,8 +71,13 @@ static int iomap_write_fifo(struct m_can_classdev *cdev, int offset,
const void *val, size_t val_count)
{
struct m_can_pci_priv *priv = cdev_to_priv(cdev);
+ void __iomem *dst = priv->base + offset;
- iowrite32_rep(priv->base + offset, val, val_count);
+ while (val_count--) {
+ iowrite32(*(unsigned int *)val, dst);
+ val += 4;
+ dst += 4;
+ }
return 0;
}
--
2.17.1
^ permalink raw reply [flat|nested] 2+ messages in thread* Re: [PATCH net] can: m_can: pci: fix iomap_read_fifo() and iomap_write_fifo()
2021-11-18 14:40 [PATCH net] can: m_can: pci: fix iomap_read_fifo() and iomap_write_fifo() Matthias Schiffer
@ 2021-11-18 15:09 ` Jarkko Nikula
0 siblings, 0 replies; 2+ messages in thread
From: Jarkko Nikula @ 2021-11-18 15:09 UTC (permalink / raw)
To: Matthias Schiffer, Wolfgang Grandegger, Marc Kleine-Budde
Cc: David S. Miller, Jakub Kicinski, Felipe Balbi (Intel),
Matt Kline, linux-can, netdev, linux-kernel
On 11/18/21 4:40 PM, Matthias Schiffer wrote:
> The same fix that was previously done in m_can_platform in commit
> 99d173fbe894 ("can: m_can: fix iomap_read_fifo() and iomap_write_fifo()")
> is required in m_can_pci as well to make iomap_read_fifo() and
> iomap_write_fifo() work for val_count > 1.
>
> Fixes: 812270e5445b ("can: m_can: Batch FIFO writes during CAN transmit")
> Fixes: 1aa6772f64b4 ("can: m_can: Batch FIFO reads during CAN receive")
> Signed-off-by: Matthias Schiffer <matthias.schiffer@ew.tq-group.com>
> ---
> drivers/net/can/m_can/m_can_pci.c | 14 ++++++++++++--
> 1 file changed, 12 insertions(+), 2 deletions(-)
>
I tested this on top of plain v5.15 (v5.16-rc1 has some rootfs
regression on my EHL HW) where my test case was receiving zeros and this
makes it working again like in v5.14 and earlier.
Tested-by: Jarkko Nikula <jarkko.nikula@linux.intel.com>
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2021-11-18 15:09 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-11-18 14:40 [PATCH net] can: m_can: pci: fix iomap_read_fifo() and iomap_write_fifo() Matthias Schiffer
2021-11-18 15:09 ` Jarkko Nikula
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®