On Fri, 25 Apr 2025 19:09:31 +0200 Ivan Vecera wrote: > +static int zl3073x_devlink_info_get(struct devlink *devlink, > + struct devlink_info_req *req, > + struct netlink_ext_ack *extack) > +{ > + struct zl3073x_dev *zldev = devlink_priv(devlink); > + u16 id, revision, fw_ver; > + char buf[16]; > + u32 cfg_ver; > + int rc; > + > + rc = zl3073x_read_u16(zldev, ZL_REG_ID, &id); > + if (rc) > + return rc; > + > + snprintf(buf, sizeof(buf), "%X", id); > + rc = devlink_info_version_fixed_put(req, > + > DEVLINK_INFO_VERSION_GENERIC_ASIC_ID, > + buf); > + if (rc) > + return rc; > + > + rc = zl3073x_read_u16(zldev, ZL_REG_REVISION, &revision); > + if (rc) > + return rc; > + > + snprintf(buf, sizeof(buf), "%X", revision); > + rc = devlink_info_version_fixed_put(req, > + > DEVLINK_INFO_VERSION_GENERIC_ASIC_REV, > + buf); > + if (rc) > + return rc; > + > + rc = zl3073x_read_u16(zldev, ZL_REG_FW_VER, &fw_ver); > + if (rc) > + return rc; > + > + snprintf(buf, sizeof(buf), "%u", fw_ver); > + rc = devlink_info_version_fixed_put(req, > + DEVLINK_INFO_VERSION_GENERIC_FW,
Are you sure FW version is fixed? Fixed is for unchangeable properties like ASIC revision or serial numbers. > + buf); > + if (rc) > + return rc; > + > + rc = zl3073x_read_u32(zldev, ZL_REG_CUSTOM_CONFIG_VER, &cfg_ver); > + if (rc) > + return rc; > + > + /* No custom config version */ > + if (cfg_ver == U32_MAX) > + return 0; > + > + snprintf(buf, sizeof(buf), "%lu.%lu.%lu.%lu", > + FIELD_GET(GENMASK(31, 24), cfg_ver), > + FIELD_GET(GENMASK(23, 16), cfg_ver), > + FIELD_GET(GENMASK(15, 8), cfg_ver), > + FIELD_GET(GENMASK(7, 0), cfg_ver)); > + > + return devlink_info_version_running_put(req, "cfg.custom_ver", buf); You need to document the custom versions and properties in a driver specific file under Documentation/networking/device_drivers/ -- pw-bot: cr