]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
can: kvaser_usb: hydra: Set hardware timestamp on transmitted packets
authorJimmy Assarsson <extja@kvaser.com>
Mon, 1 Jul 2024 15:49:25 +0000 (17:49 +0200)
committerMarc Kleine-Budde <mkl@pengutronix.de>
Mon, 5 Aug 2024 15:39:01 +0000 (17:39 +0200)
Set hardware timestamp on transmitted packets.

Signed-off-by: Jimmy Assarsson <extja@kvaser.com>
Reviewed-by: Vincent Mailhol <mailhol.vincent@wanadoo.fr>
Link: https://lore.kernel.org/all/20240701154936.92633-5-extja@kvaser.com
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
drivers/net/can/usb/kvaser_usb/kvaser_usb_hydra.c

index f102f9de7d1630f51fdbe68caa3dd35b201d86db..3764b263add3a89064ed7c25ad10921ff8efc1ed 100644 (file)
@@ -10,7 +10,6 @@
  *  - Transition from CAN_STATE_ERROR_WARNING to CAN_STATE_ERROR_ACTIVE is only
  *    reported after a call to do_get_berr_counter(), since firmware does not
  *    distinguish between ERROR_WARNING and ERROR_ACTIVE.
- *  - Hardware timestamps are not set for CAN Tx frames.
  */
 
 #include <linux/completion.h>
@@ -1187,6 +1186,7 @@ static void kvaser_usb_hydra_tx_acknowledge(const struct kvaser_usb *dev,
        bool one_shot_fail = false;
        bool is_err_frame = false;
        u16 transid = kvaser_usb_hydra_get_cmd_transid(cmd);
+       struct sk_buff *skb;
 
        priv = kvaser_usb_hydra_net_priv_from_cmd(dev, cmd);
        if (!priv)
@@ -1213,6 +1213,9 @@ static void kvaser_usb_hydra_tx_acknowledge(const struct kvaser_usb *dev,
 
        spin_lock_irqsave(&priv->tx_contexts_lock, irq_flags);
 
+       skb = priv->can.echo_skb[context->echo_index];
+       if (skb)
+               skb_hwtstamps(skb)->hwtstamp = kvaser_usb_hydra_ktime_from_cmd(dev->cfg, cmd);
        len = can_get_echo_skb(priv->netdev, context->echo_index, NULL);
        context->echo_index = dev->max_tx_urbs;
        --priv->active_tx_contexts;