can: kvaser_pciefd: Set hardware timestamp on transmitted packets
authorJimmy Assarsson <extja@kvaser.com>
Mon, 29 May 2023 13:42:38 +0000 (15:42 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 19 Jul 2023 14:21:11 +0000 (16:21 +0200)
[ Upstream commit ec681b91befa982477e24a150dd6452427fe6473 ]

Set hardware timestamp on transmitted packets.

Fixes: 26ad340e582d ("can: kvaser_pciefd: Add driver for Kvaser PCIEcan devices")
Signed-off-by: Jimmy Assarsson <extja@kvaser.com>
Reviewed-by: Vincent Mailhol <mailhol.vincent@wanadoo.fr>
Link: https://lore.kernel.org/all/20230529134248.752036-5-extja@kvaser.com
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/net/can/kvaser_pciefd.c

index 0b53729..74a4724 100644 (file)
@@ -1519,6 +1519,7 @@ static void kvaser_pciefd_handle_nack_packet(struct kvaser_pciefd_can *can,
 
        if (skb) {
                cf->can_id |= CAN_ERR_BUSERROR;
+               kvaser_pciefd_set_skb_timestamp(can->kv_pcie, skb, p->timestamp);
                netif_rx(skb);
        } else {
                stats->rx_dropped++;
@@ -1550,8 +1551,15 @@ static int kvaser_pciefd_handle_ack_packet(struct kvaser_pciefd *pcie,
                netdev_dbg(can->can.dev, "Packet was flushed\n");
        } else {
                int echo_idx = p->header[0] & KVASER_PCIEFD_PACKET_SEQ_MSK;
-               int dlc = can_get_echo_skb(can->can.dev, echo_idx, NULL);
-               u8 count = ioread32(can->reg_base +
+               int dlc;
+               u8 count;
+               struct sk_buff *skb;
+
+               skb = can->can.echo_skb[echo_idx];
+               if (skb)
+                       kvaser_pciefd_set_skb_timestamp(pcie, skb, p->timestamp);
+               dlc = can_get_echo_skb(can->can.dev, echo_idx, NULL);
+               count = ioread32(can->reg_base +
                                    KVASER_PCIEFD_KCAN_TX_NPACKETS_REG) & 0xff;
 
                if (count < KVASER_PCIEFD_CAN_TX_MAX_COUNT &&