]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
can: kvaser_usb: Store the different firmware version components in a struct
authorJimmy Assarsson <extja@kvaser.com>
Fri, 25 Jul 2025 12:34:47 +0000 (14:34 +0200)
committerMarc Kleine-Budde <mkl@pengutronix.de>
Fri, 25 Jul 2025 16:01:20 +0000 (18:01 +0200)
Store firmware version in kvaser_usb_fw_version struct, specifying the
different components of the version number.
And drop debug prinout of firmware version, since later patches will expose
it via the devlink interface.

Reviewed-by: Vincent Mailhol <mailhol.vincent@wanadoo.fr>
Signed-off-by: Jimmy Assarsson <extja@kvaser.com>
Link: https://patch.msgid.link/20250725123452.41-7-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_core.c
drivers/net/can/usb/kvaser_usb/kvaser_usb_hydra.c
drivers/net/can/usb/kvaser_usb/kvaser_usb_leaf.c

index fba972e7220df2afb3c7c1e77e9aa6caa1da35c0..a36d86494113c13a4995dfe0bd06386b1b13fb21 100644 (file)
 #define KVASER_USB_CAP_EXT_CAP                 0x02
 #define KVASER_USB_HYDRA_CAP_EXT_CMD           0x04
 
+#define KVASER_USB_SW_VERSION_MAJOR_MASK GENMASK(31, 24)
+#define KVASER_USB_SW_VERSION_MINOR_MASK GENMASK(23, 16)
+#define KVASER_USB_SW_VERSION_BUILD_MASK GENMASK(15, 0)
+
 struct kvaser_usb_dev_cfg;
 
 enum kvaser_usb_leaf_family {
@@ -83,6 +87,12 @@ struct kvaser_usb_tx_urb_context {
        u32 echo_index;
 };
 
+struct kvaser_usb_fw_version {
+       u8 major;
+       u8 minor;
+       u16 build;
+};
+
 struct kvaser_usb_busparams {
        __le32 bitrate;
        u8 tseg1;
@@ -101,7 +111,7 @@ struct kvaser_usb {
        struct usb_endpoint_descriptor *bulk_in, *bulk_out;
        struct usb_anchor rx_submitted;
 
-       u32 fw_version;
+       struct kvaser_usb_fw_version fw_version;
        unsigned int nchannels;
        /* @max_tx_urbs: Firmware-reported maximum number of outstanding,
         * not yet ACKed, transmissions on this device. This value is
index 46e6cda0bf8d21c015813298ce4a456632cdacd4..2313fbc1a2c3f0c3113e9376251e1f119e743f2d 100644 (file)
@@ -963,11 +963,6 @@ static int kvaser_usb_probe(struct usb_interface *intf,
        if (WARN_ON(!dev->cfg))
                return -ENODEV;
 
-       dev_dbg(&intf->dev, "Firmware version: %d.%d.%d\n",
-               ((dev->fw_version >> 24) & 0xff),
-               ((dev->fw_version >> 16) & 0xff),
-               (dev->fw_version & 0xffff));
-
        dev_dbg(&intf->dev, "Max outstanding tx = %d URBs\n", dev->max_tx_urbs);
 
        err = ops->dev_get_card_info(dev);
index a4402b4845c61da7691484ec1d36d10192858c3b..388ebf2b1a5b113d9173184372ae8400069acdd0 100644 (file)
@@ -1839,6 +1839,7 @@ static int kvaser_usb_hydra_get_software_details(struct kvaser_usb *dev)
        size_t cmd_len;
        int err;
        u32 flags;
+       u32 fw_version;
        struct kvaser_usb_dev_card_data *card_data = &dev->card_data;
 
        cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
@@ -1863,7 +1864,10 @@ static int kvaser_usb_hydra_get_software_details(struct kvaser_usb *dev)
        if (err)
                goto end;
 
-       dev->fw_version = le32_to_cpu(cmd->sw_detail_res.sw_version);
+       fw_version = le32_to_cpu(cmd->sw_detail_res.sw_version);
+       dev->fw_version.major = FIELD_GET(KVASER_USB_SW_VERSION_MAJOR_MASK, fw_version);
+       dev->fw_version.minor = FIELD_GET(KVASER_USB_SW_VERSION_MINOR_MASK, fw_version);
+       dev->fw_version.build = FIELD_GET(KVASER_USB_SW_VERSION_BUILD_MASK, fw_version);
        flags = le32_to_cpu(cmd->sw_detail_res.sw_flags);
 
        if (flags & KVASER_USB_HYDRA_SW_FLAG_FW_BAD) {
index a67855521ccc5b6f9834f46f54caf54252eac0b8..b4f5d4fba6304839fe23896b6dfa60fc05d4bb07 100644 (file)
@@ -741,9 +741,13 @@ static int kvaser_usb_leaf_send_simple_cmd(const struct kvaser_usb *dev,
 static void kvaser_usb_leaf_get_software_info_leaf(struct kvaser_usb *dev,
                                                   const struct leaf_cmd_softinfo *softinfo)
 {
+       u32 fw_version;
        u32 sw_options = le32_to_cpu(softinfo->sw_options);
 
-       dev->fw_version = le32_to_cpu(softinfo->fw_version);
+       fw_version = le32_to_cpu(softinfo->fw_version);
+       dev->fw_version.major = FIELD_GET(KVASER_USB_SW_VERSION_MAJOR_MASK, fw_version);
+       dev->fw_version.minor = FIELD_GET(KVASER_USB_SW_VERSION_MINOR_MASK, fw_version);
+       dev->fw_version.build = FIELD_GET(KVASER_USB_SW_VERSION_BUILD_MASK, fw_version);
        dev->max_tx_urbs = le16_to_cpu(softinfo->max_outstanding_tx);
 
        if (sw_options & KVASER_USB_LEAF_SWOPTION_EXT_CAP)
@@ -784,6 +788,7 @@ static int kvaser_usb_leaf_get_software_info_inner(struct kvaser_usb *dev)
 {
        struct kvaser_cmd cmd;
        int err;
+       u32 fw_version;
 
        err = kvaser_usb_leaf_send_simple_cmd(dev, CMD_GET_SOFTWARE_INFO, 0);
        if (err)
@@ -798,7 +803,13 @@ static int kvaser_usb_leaf_get_software_info_inner(struct kvaser_usb *dev)
                kvaser_usb_leaf_get_software_info_leaf(dev, &cmd.u.leaf.softinfo);
                break;
        case KVASER_USBCAN:
-               dev->fw_version = le32_to_cpu(cmd.u.usbcan.softinfo.fw_version);
+               fw_version = le32_to_cpu(cmd.u.usbcan.softinfo.fw_version);
+               dev->fw_version.major = FIELD_GET(KVASER_USB_SW_VERSION_MAJOR_MASK,
+                                                 fw_version);
+               dev->fw_version.minor = FIELD_GET(KVASER_USB_SW_VERSION_MINOR_MASK,
+                                                 fw_version);
+               dev->fw_version.build = FIELD_GET(KVASER_USB_SW_VERSION_BUILD_MASK,
+                                                 fw_version);
                dev->max_tx_urbs =
                        le16_to_cpu(cmd.u.usbcan.softinfo.max_outstanding_tx);
                dev->cfg = &kvaser_usb_leaf_usbcan_dev_cfg;