On Fri, 31 Jul 2020 08:53:55 +0300 Igor Russkikh wrote: > Here we return existing fw & mfw versions, we also fetch device's > serial number. > > The base device specific structure (qed_dev_info) was not directly > available to the base driver before. > Thus, here we create and store a private copy of this structure > in qed_dev root object.
Please include example output of devlink info on you device. > diff --git a/drivers/net/ethernet/qlogic/qed/qed_devlink.c > b/drivers/net/ethernet/qlogic/qed/qed_devlink.c > index a62c47c61edf..57ef2c56c884 100644 > --- a/drivers/net/ethernet/qlogic/qed/qed_devlink.c > +++ b/drivers/net/ethernet/qlogic/qed/qed_devlink.c > @@ -45,7 +45,55 @@ static const struct devlink_param qed_devlink_params[] = { > qed_dl_param_get, qed_dl_param_set, NULL), > }; > > -static const struct devlink_ops qed_dl_ops; > +static int qed_devlink_info_get(struct devlink *devlink, > + struct devlink_info_req *req, > + struct netlink_ext_ack *extack) > +{ > + struct qed_devlink *qed_dl = devlink_priv(devlink); > + struct qed_dev *cdev = qed_dl->cdev; > + struct qed_dev_info *dev_info; > + char buf[100]; > + int err; > + > + dev_info = &cdev->common_dev_info; > + > + err = devlink_info_driver_name_put(req, KBUILD_MODNAME); > + if (err) > + return err; > + > + memcpy(buf, cdev->hwfns[0].hw_info.part_num, > sizeof(cdev->hwfns[0].hw_info.part_num)); > + buf[sizeof(cdev->hwfns[0].hw_info.part_num)] = 0; Part number != serial number. What's the thing you're reporting here actually identifying. > + > + snprintf(buf, sizeof(buf), "%d.%d.%d.%d", > + GET_MFW_FIELD(dev_info->mfw_rev, QED_MFW_VERSION_3), > + GET_MFW_FIELD(dev_info->mfw_rev, QED_MFW_VERSION_2), > + GET_MFW_FIELD(dev_info->mfw_rev, QED_MFW_VERSION_1), > + GET_MFW_FIELD(dev_info->mfw_rev, QED_MFW_VERSION_0)); > + > + err = devlink_info_version_stored_put(req, > + > DEVLINK_INFO_VERSION_GENERIC_FW_MGMT, buf); > + if (err) > + return err; Assuming MFW means management FW - this looks good. > + snprintf(buf, sizeof(buf), "%d.%d.%d.%d", > + dev_info->fw_major, > + dev_info->fw_minor, > + dev_info->fw_rev, > + dev_info->fw_eng); > + > + return devlink_info_version_running_put(req, > + > DEVLINK_INFO_VERSION_GENERIC_FW, buf); But what's this one?