]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
can: kvaser_usb: leaf: Store MSB of timestamp
authorJimmy Assarsson <extja@kvaser.com>
Mon, 1 Jul 2024 15:49:32 +0000 (17:49 +0200)
committerMarc Kleine-Budde <mkl@pengutronix.de>
Mon, 5 Aug 2024 15:39:02 +0000 (17:39 +0200)
Store MSB of timestamp, provided from the device via the clock overflow
event, for usbcan devices (M16C).

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

index 4256a0caae201d5ce81b960ed12022cc80b98a84..591f707d28953bffe977394a685ca23b037c514b 100644 (file)
@@ -70,6 +70,7 @@ struct kvaser_usb_dev_card_data {
        u32 ctrlmode_supported;
        u32 capabilities;
        struct kvaser_usb_dev_card_data_hydra hydra;
+       u32 usbcan_timestamp_msb;
 };
 
 /* Context for an outstanding, not yet ACKed, transmission */
index 2c0313c8f63ee38cb5d267e9f5d6944fd2faf337..465707174f2eea249b92c6a7e8e83aeff27555d9 100644 (file)
 /* Extended CAN identifier flag */
 #define KVASER_EXTENDED_FRAME          BIT(31)
 
+/* USBCanII timestamp */
+#define KVASER_USB_USBCAN_CLK_OVERFLOW_MASK GENMASK(31, 16)
+
 struct kvaser_cmd_simple {
        u8 tid;
        u8 channel;
@@ -418,7 +421,6 @@ static const u8 kvaser_usb_leaf_cmd_sizes_usbcan[] = {
        [CMD_CHIP_STATE_EVENT]          = kvaser_fsize(u.usbcan.chip_state_event),
        [CMD_CAN_ERROR_EVENT]           = kvaser_fsize(u.usbcan.can_error_event),
        [CMD_ERROR_EVENT]               = kvaser_fsize(u.usbcan.error_event),
-       /* ignored events: */
        [CMD_USBCAN_CLOCK_OVERFLOW_EVENT] = kvaser_fsize(u.usbcan.clk_overflow_event),
 };
 
@@ -1573,7 +1575,7 @@ static void kvaser_usb_leaf_get_busparams_reply(const struct kvaser_usb *dev,
        complete(&priv->get_busparams_comp);
 }
 
-static void kvaser_usb_leaf_handle_command(const struct kvaser_usb *dev,
+static void kvaser_usb_leaf_handle_command(struct kvaser_usb *dev,
                                           const struct kvaser_cmd *cmd)
 {
        if (kvaser_usb_leaf_verify_size(dev, cmd) < 0)
@@ -1619,12 +1621,15 @@ static void kvaser_usb_leaf_handle_command(const struct kvaser_usb *dev,
                kvaser_usb_leaf_get_busparams_reply(dev, cmd);
                break;
 
-       /* Ignored commands */
        case CMD_USBCAN_CLOCK_OVERFLOW_EVENT:
                if (dev->driver_info->family != KVASER_USBCAN)
                        goto warn;
+               dev->card_data.usbcan_timestamp_msb =
+                                       le32_to_cpu(cmd->u.usbcan.clk_overflow_event.time) &
+                                       KVASER_USB_USBCAN_CLK_OVERFLOW_MASK;
                break;
 
+       /* Ignored commands */
        case CMD_FLUSH_QUEUE_REPLY:
                if (dev->driver_info->family != KVASER_LEAF)
                        goto warn;