[00/15] can: m_can: Optimizations for tcan and peripheral chips

Message ID 20221116205308.2996556-1-msp@baylibre.com
Headers
Series can: m_can: Optimizations for tcan and peripheral chips |

Message

Markus Schneider-Pargmann Nov. 16, 2022, 8:52 p.m. UTC
  Hi,

this series is aimed at optimizing the driver code for tcan chips and
more generally for peripheral m_can chips.

I did different things to improve the performance:
- Reduce the number of SPI transfers.
- Reduce the number of interrupts.
- Enable use of FIFOs.

I am working with a tcan4550 in loopback mode attached to a beaglebone
black. I am currently working on optimizing the receive path as well
which will be submitted in another series once it is done.

Best,
Markus

Markus Schneider-Pargmann (15):
  can: m_can: Eliminate double read of TXFQS in tx_handler
  can: m_can: Wakeup net queue once tx was issued
  can: m_can: Cache tx putidx and transmits in flight
  can: m_can: Use transmit event FIFO watermark level interrupt
  can: m_can: Disable unused interrupts
  can: m_can: Avoid reading irqstatus twice
  can: m_can: Read register PSR only on error
  can: m_can: Count TXE FIFO getidx in the driver
  can: m_can: Count read getindex in the driver
  can: m_can: Batch acknowledge rx fifo
  can: m_can: Batch acknowledge transmit events
  can: tcan4x5x: Remove invalid write in clear_interrupts
  can: tcan4x5x: Fix use of register error status mask
  can: tcan4x5x: Fix register range of first block
  can: tcan4x5x: Specify separate read/write ranges

 drivers/net/can/m_can/m_can.c           | 140 +++++++++++++++---------
 drivers/net/can/m_can/m_can.h           |   5 +
 drivers/net/can/m_can/tcan4x5x-core.c   |  19 ++--
 drivers/net/can/m_can/tcan4x5x-regmap.c |  45 ++++++--
 4 files changed, 141 insertions(+), 68 deletions(-)


base-commit: 094226ad94f471a9f19e8f8e7140a09c2625abaa
prerequisite-patch-id: e9df6751d43bb0d1e3b8938d7e93bc1cfa22cef2
prerequisite-patch-id: dad9ec37af766bcafe54cb156f896267a0f47fe1
prerequisite-patch-id: f4e6f1a213a31df2741a5fa3baa87aa45ef6707a
  

Comments

Marc Kleine-Budde Dec. 2, 2022, 2:03 p.m. UTC | #1
On 16.11.2022 21:52:53, Markus Schneider-Pargmann wrote:
> Hi,
> 
> this series is aimed at optimizing the driver code for tcan chips and
> more generally for peripheral m_can chips.
> 
> I did different things to improve the performance:
> - Reduce the number of SPI transfers.
> - Reduce the number of interrupts.
> - Enable use of FIFOs.
> 
> I am working with a tcan4550 in loopback mode attached to a beaglebone
> black. I am currently working on optimizing the receive path as well
> which will be submitted in another series once it is done.

The patches I've not commented on look fine. If you re-spin the series
only containing those, I'll include them in my next pull request, which
I'll send out soonish.

regards,
Marc

> Best,
> Markus
> 
> Markus Schneider-Pargmann (15):
>   can: m_can: Eliminate double read of TXFQS in tx_handler
>   can: m_can: Wakeup net queue once tx was issued
>   can: m_can: Cache tx putidx and transmits in flight
>   can: m_can: Use transmit event FIFO watermark level interrupt
>   can: m_can: Disable unused interrupts
>   can: m_can: Avoid reading irqstatus twice
>   can: m_can: Read register PSR only on error
>   can: m_can: Count TXE FIFO getidx in the driver
>   can: m_can: Count read getindex in the driver
>   can: m_can: Batch acknowledge rx fifo
>   can: m_can: Batch acknowledge transmit events
>   can: tcan4x5x: Remove invalid write in clear_interrupts
>   can: tcan4x5x: Fix use of register error status mask
>   can: tcan4x5x: Fix register range of first block
>   can: tcan4x5x: Specify separate read/write ranges
> 
>  drivers/net/can/m_can/m_can.c           | 140 +++++++++++++++---------
>  drivers/net/can/m_can/m_can.h           |   5 +
>  drivers/net/can/m_can/tcan4x5x-core.c   |  19 ++--
>  drivers/net/can/m_can/tcan4x5x-regmap.c |  45 ++++++--
>  4 files changed, 141 insertions(+), 68 deletions(-)
> 
> 
> base-commit: 094226ad94f471a9f19e8f8e7140a09c2625abaa
> prerequisite-patch-id: e9df6751d43bb0d1e3b8938d7e93bc1cfa22cef2
> prerequisite-patch-id: dad9ec37af766bcafe54cb156f896267a0f47fe1
> prerequisite-patch-id: f4e6f1a213a31df2741a5fa3baa87aa45ef6707a

BTW: I don't have access to these prerequisite-patch-id.
  
Markus Schneider-Pargmann Dec. 5, 2022, 9:09 a.m. UTC | #2
Good Morning Marc,

On Fri, Dec 02, 2022 at 03:03:06PM +0100, Marc Kleine-Budde wrote:
> On 16.11.2022 21:52:53, Markus Schneider-Pargmann wrote:
> > Hi,
> > 
> > this series is aimed at optimizing the driver code for tcan chips and
> > more generally for peripheral m_can chips.
> > 
> > I did different things to improve the performance:
> > - Reduce the number of SPI transfers.
> > - Reduce the number of interrupts.
> > - Enable use of FIFOs.
> > 
> > I am working with a tcan4550 in loopback mode attached to a beaglebone
> > black. I am currently working on optimizing the receive path as well
> > which will be submitted in another series once it is done.
> 
> The patches I've not commented on look fine. If you re-spin the series
> only containing those, I'll include them in my next pull request, which
> I'll send out soonish.

Ok, thank you, I will send a subset of the patches today.

> 
> regards,
> Marc
> 
> > Best,
> > Markus
> > 
> > Markus Schneider-Pargmann (15):
> >   can: m_can: Eliminate double read of TXFQS in tx_handler
> >   can: m_can: Wakeup net queue once tx was issued
> >   can: m_can: Cache tx putidx and transmits in flight
> >   can: m_can: Use transmit event FIFO watermark level interrupt
> >   can: m_can: Disable unused interrupts
> >   can: m_can: Avoid reading irqstatus twice
> >   can: m_can: Read register PSR only on error
> >   can: m_can: Count TXE FIFO getidx in the driver
> >   can: m_can: Count read getindex in the driver
> >   can: m_can: Batch acknowledge rx fifo
> >   can: m_can: Batch acknowledge transmit events
> >   can: tcan4x5x: Remove invalid write in clear_interrupts
> >   can: tcan4x5x: Fix use of register error status mask
> >   can: tcan4x5x: Fix register range of first block
> >   can: tcan4x5x: Specify separate read/write ranges
> > 
> >  drivers/net/can/m_can/m_can.c           | 140 +++++++++++++++---------
> >  drivers/net/can/m_can/m_can.h           |   5 +
> >  drivers/net/can/m_can/tcan4x5x-core.c   |  19 ++--
> >  drivers/net/can/m_can/tcan4x5x-regmap.c |  45 ++++++--
> >  4 files changed, 141 insertions(+), 68 deletions(-)
> > 
> > 
> > base-commit: 094226ad94f471a9f19e8f8e7140a09c2625abaa
> > prerequisite-patch-id: e9df6751d43bb0d1e3b8938d7e93bc1cfa22cef2
> > prerequisite-patch-id: dad9ec37af766bcafe54cb156f896267a0f47fe1
> > prerequisite-patch-id: f4e6f1a213a31df2741a5fa3baa87aa45ef6707a
> 
> BTW: I don't have access to these prerequisite-patch-id.

I think I messed up here. I have three patches, SPI fixes and devicetree
snippet that this series is based on. I guess I shouldn't have used
--base then or rebase on something without these patches first.

Thanks,
Markus