diff options
author | Kalesh AP <kalesh-anakkur.purayil@broadcom.com> | 2023-09-27 05:57:31 +0200 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2023-10-04 12:23:01 +0200 |
commit | 3d9cf962067bef73757f987e3b30928b036499d8 (patch) | |
tree | 86119344235e44cf9d2ac32b8734899ab7e3632a /drivers/net/ethernet/broadcom | |
parent | bnxt_en: Expose threshold temperatures through hwmon (diff) | |
download | linux-3d9cf962067bef73757f987e3b30928b036499d8.tar.xz linux-3d9cf962067bef73757f987e3b30928b036499d8.zip |
bnxt_en: Use non-standard attribute to expose shutdown temperature
Implement the sysfs attributes directly in the driver for
shutdown threshold temperature and pass an extra attribute group
to the hwmon core when registering the hwmon device.
Link: https://lore.kernel.org/netdev/20230815045658.80494-12-michael.chan@broadcom.com/
Cc: Jean Delvare <jdelvare@suse.com>
Cc: Guenter Roeck <linux@roeck-us.net>
Cc: linux-hwmon@vger.kernel.org
Reviewed-by: Andy Gospodarek <andrew.gospodarek@broadcom.com>
Signed-off-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/broadcom')
-rw-r--r-- | drivers/net/ethernet/broadcom/bnxt/bnxt_hwmon.c | 54 |
1 files changed, 53 insertions, 1 deletions
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_hwmon.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_hwmon.c index 6a2cad5cc159..6d36158df26e 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt_hwmon.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_hwmon.c @@ -131,6 +131,57 @@ static const struct hwmon_chip_info bnxt_hwmon_chip_info = { .info = bnxt_hwmon_info, }; +static ssize_t temp1_shutdown_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + struct bnxt *bp = dev_get_drvdata(dev); + + return sysfs_emit(buf, "%u\n", bp->shutdown_thresh_temp * 1000); +} + +static ssize_t temp1_shutdown_alarm_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + struct bnxt *bp = dev_get_drvdata(dev); + u8 temp; + int rc; + + rc = bnxt_hwrm_temp_query(bp, &temp); + if (rc) + return -EIO; + + return sysfs_emit(buf, "%u\n", temp >= bp->shutdown_thresh_temp); +} + +static DEVICE_ATTR_RO(temp1_shutdown); +static DEVICE_ATTR_RO(temp1_shutdown_alarm); + +static struct attribute *bnxt_temp_extra_attrs[] = { + &dev_attr_temp1_shutdown.attr, + &dev_attr_temp1_shutdown_alarm.attr, + NULL, +}; + +static umode_t bnxt_temp_extra_attrs_visible(struct kobject *kobj, + struct attribute *attr, int index) +{ + struct device *dev = kobj_to_dev(kobj); + struct bnxt *bp = dev_get_drvdata(dev); + + /* Shutdown temperature setting in NVM is optional */ + if (!(bp->fw_cap & BNXT_FW_CAP_THRESHOLD_TEMP_SUPPORTED) || + !bp->shutdown_thresh_temp) + return 0; + + return attr->mode; +} + +static const struct attribute_group bnxt_temp_extra_group = { + .attrs = bnxt_temp_extra_attrs, + .is_visible = bnxt_temp_extra_attrs_visible, +}; +__ATTRIBUTE_GROUPS(bnxt_temp_extra); + void bnxt_hwmon_uninit(struct bnxt *bp) { if (bp->hwmon_dev) { @@ -156,7 +207,8 @@ void bnxt_hwmon_init(struct bnxt *bp) bp->hwmon_dev = hwmon_device_register_with_info(&pdev->dev, DRV_MODULE_NAME, bp, - &bnxt_hwmon_chip_info, NULL); + &bnxt_hwmon_chip_info, + bnxt_temp_extra_groups); if (IS_ERR(bp->hwmon_dev)) { bp->hwmon_dev = NULL; dev_warn(&pdev->dev, "Cannot register hwmon device\n"); |