ptp: ocp: Update devlink firmware display path.
authorJonathan Lemon <jonathan.lemon@gmail.com>
Tue, 8 Mar 2022 00:05:35 +0000 (16:05 -0800)
committerDavid S. Miller <davem@davemloft.net>
Wed, 9 Mar 2022 10:57:07 +0000 (10:57 +0000)
Cache the firmware version when the card is initialized,
and use this field to populate the devlink firmware information.

The cached firmware version will be used for feature gating in
upcoming patches.

Signed-off-by: Jonathan Lemon <jonathan.lemon@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/ptp/ptp_ocp.c

index 433bd9d5d75cfe8a93d56286888cdeb64b61d84f..98b3f01e76c92b1533f9cbc9504e947a5c666e9e 100644 (file)
@@ -244,6 +244,7 @@ struct ptp_ocp {
        int                     gnss2_port;
        int                     mac_port;       /* miniature atomic clock */
        int                     nmea_port;
+       u32                     fw_version;
        u8                      board_id[OCP_BOARD_ID_LEN];
        u8                      serial[OCP_SERIAL_LEN];
        bool                    has_eeprom_data;
@@ -1139,23 +1140,15 @@ ptp_ocp_devlink_info_get(struct devlink *devlink, struct devlink_info_req *req,
        if (err)
                return err;
 
-       if (bp->image) {
-               u32 ver = ioread32(&bp->image->version);
-
-               if (ver & 0xffff) {
-                       sprintf(buf, "%d", ver);
-                       err = devlink_info_version_running_put(req,
-                                                              "fw",
-                                                              buf);
-               } else {
-                       sprintf(buf, "%d", ver >> 16);
-                       err = devlink_info_version_running_put(req,
-                                                              "loader",
-                                                              buf);
-               }
-               if (err)
-                       return err;
+       if (bp->fw_version & 0xffff) {
+               sprintf(buf, "%d", bp->fw_version);
+               err = devlink_info_version_running_put(req, "fw", buf);
+       } else {
+               sprintf(buf, "%d", bp->fw_version >> 16);
+               err = devlink_info_version_running_put(req, "loader", buf);
        }
+       if (err)
+               return err;
 
        if (!bp->has_eeprom_data) {
                ptp_ocp_read_eeprom(bp);
@@ -1468,6 +1461,7 @@ ptp_ocp_fb_board_init(struct ptp_ocp *bp, struct ocp_resource *r)
 {
        bp->flash_start = 1024 * 4096;
        bp->eeprom_map = fb_eeprom_map;
+       bp->fw_version = ioread32(&bp->image->version);
 
        ptp_ocp_tod_init(bp);
        ptp_ocp_nmea_out_init(bp);
@@ -2576,17 +2570,14 @@ ptp_ocp_info(struct ptp_ocp *bp)
 
        ptp_ocp_phc_info(bp);
 
-       if (bp->image) {
-               u32 ver = ioread32(&bp->image->version);
+       dev_info(dev, "version %x\n", bp->fw_version);
+       if (bp->fw_version & 0xffff)
+               dev_info(dev, "regular image, version %d\n",
+                        bp->fw_version & 0xffff);
+       else
+               dev_info(dev, "golden image, version %d\n",
+                        bp->fw_version >> 16);
 
-               dev_info(dev, "version %x\n", ver);
-               if (ver & 0xffff)
-                       dev_info(dev, "regular image, version %d\n",
-                                ver & 0xffff);
-               else
-                       dev_info(dev, "golden image, version %d\n",
-                                ver >> 16);
-       }
        ptp_ocp_serial_info(dev, "GNSS", bp->gnss_port, 115200);
        ptp_ocp_serial_info(dev, "GNSS2", bp->gnss2_port, 115200);
        ptp_ocp_serial_info(dev, "MAC", bp->mac_port, 57600);