can: m_can: Count TXE FIFO getidx in the driver
authorMarkus Schneider-Pargmann <msp@baylibre.com>
Tue, 6 Dec 2022 11:57:21 +0000 (12:57 +0100)
committerMarc Kleine-Budde <mkl@pengutronix.de>
Mon, 12 Dec 2022 10:58:32 +0000 (11:58 +0100)
The getindex simply increases by one for every iteration. There is no
need to get the current getidx every time from a register. Instead we
can just count and wrap if necessary.

Signed-off-by: Markus Schneider-Pargmann <msp@baylibre.com>
Link: https://lore.kernel.org/all/20221206115728.1056014-5-msp@baylibre.com
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
drivers/net/can/m_can/m_can.c

index 045679a..83d3a7f 100644 (file)
@@ -1030,15 +1030,13 @@ static int m_can_echo_tx_event(struct net_device *dev)
 
        /* Get Tx Event fifo element count */
        txe_count = FIELD_GET(TXEFS_EFFL_MASK, m_can_txefs);
+       fgi = FIELD_GET(TXEFS_EFGI_MASK, m_can_txefs);
 
        /* Get and process all sent elements */
        for (i = 0; i < txe_count; i++) {
                u32 txe, timestamp = 0;
                int err;
 
-               /* retrieve get index */
-               fgi = FIELD_GET(TXEFS_EFGI_MASK, m_can_read(cdev, M_CAN_TXEFS));
-
                /* get message marker, timestamp */
                err = m_can_txe_fifo_read(cdev, fgi, 4, &txe);
                if (err) {
@@ -1052,6 +1050,7 @@ static int m_can_echo_tx_event(struct net_device *dev)
                /* ack txe element */
                m_can_write(cdev, M_CAN_TXEFA, FIELD_PREP(TXEFA_EFAI_MASK,
                                                          fgi));
+               fgi = (++fgi >= cdev->mcfg[MRAM_TXE].num ? 0 : fgi);
 
                /* update stats */
                m_can_tx_update_stats(cdev, msg_mark, timestamp);