mirror of https://gitee.com/openkylin/linux.git
bnxt_en: Add hwmon sysfs support to read temperature
Export temperature sensor reading via hwmon sysfs. Signed-off-by: Vasundhara Volam <vasundhara-v.volam@broadcom.com> Signed-off-by: Michael Chan <michael.chan@broadcom.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
25e1acd6b9
commit
cde49a42a9
|
@ -230,4 +230,12 @@ config BNXT_DCB
|
||||||
|
|
||||||
If unsure, say N.
|
If unsure, say N.
|
||||||
|
|
||||||
|
config BNXT_HWMON
|
||||||
|
bool "Broadcom NetXtreme-C/E HWMON support"
|
||||||
|
default y
|
||||||
|
depends on BNXT && HWMON && !(BNXT=y && HWMON=m)
|
||||||
|
---help---
|
||||||
|
Say Y if you want to expose the thermal sensor data on NetXtreme-C/E
|
||||||
|
devices, via the hwmon sysfs interface.
|
||||||
|
|
||||||
endif # NET_VENDOR_BROADCOM
|
endif # NET_VENDOR_BROADCOM
|
||||||
|
|
|
@ -51,6 +51,8 @@
|
||||||
#include <linux/cpu_rmap.h>
|
#include <linux/cpu_rmap.h>
|
||||||
#include <linux/cpumask.h>
|
#include <linux/cpumask.h>
|
||||||
#include <net/pkt_cls.h>
|
#include <net/pkt_cls.h>
|
||||||
|
#include <linux/hwmon.h>
|
||||||
|
#include <linux/hwmon-sysfs.h>
|
||||||
|
|
||||||
#include "bnxt_hsi.h"
|
#include "bnxt_hsi.h"
|
||||||
#include "bnxt.h"
|
#include "bnxt.h"
|
||||||
|
@ -6789,6 +6791,62 @@ static void bnxt_get_wol_settings(struct bnxt *bp)
|
||||||
} while (handle && handle != 0xffff);
|
} while (handle && handle != 0xffff);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_BNXT_HWMON
|
||||||
|
static ssize_t bnxt_show_temp(struct device *dev,
|
||||||
|
struct device_attribute *devattr, char *buf)
|
||||||
|
{
|
||||||
|
struct hwrm_temp_monitor_query_input req = {0};
|
||||||
|
struct hwrm_temp_monitor_query_output *resp;
|
||||||
|
struct bnxt *bp = dev_get_drvdata(dev);
|
||||||
|
u32 temp = 0;
|
||||||
|
|
||||||
|
resp = bp->hwrm_cmd_resp_addr;
|
||||||
|
bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_TEMP_MONITOR_QUERY, -1, -1);
|
||||||
|
mutex_lock(&bp->hwrm_cmd_lock);
|
||||||
|
if (!_hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT))
|
||||||
|
temp = resp->temp * 1000; /* display millidegree */
|
||||||
|
mutex_unlock(&bp->hwrm_cmd_lock);
|
||||||
|
|
||||||
|
return sprintf(buf, "%u\n", temp);
|
||||||
|
}
|
||||||
|
static SENSOR_DEVICE_ATTR(temp1_input, 0444, bnxt_show_temp, NULL, 0);
|
||||||
|
|
||||||
|
static struct attribute *bnxt_attrs[] = {
|
||||||
|
&sensor_dev_attr_temp1_input.dev_attr.attr,
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
ATTRIBUTE_GROUPS(bnxt);
|
||||||
|
|
||||||
|
static void bnxt_hwmon_close(struct bnxt *bp)
|
||||||
|
{
|
||||||
|
if (bp->hwmon_dev) {
|
||||||
|
hwmon_device_unregister(bp->hwmon_dev);
|
||||||
|
bp->hwmon_dev = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void bnxt_hwmon_open(struct bnxt *bp)
|
||||||
|
{
|
||||||
|
struct pci_dev *pdev = bp->pdev;
|
||||||
|
|
||||||
|
bp->hwmon_dev = hwmon_device_register_with_groups(&pdev->dev,
|
||||||
|
DRV_MODULE_NAME, bp,
|
||||||
|
bnxt_groups);
|
||||||
|
if (IS_ERR(bp->hwmon_dev)) {
|
||||||
|
bp->hwmon_dev = NULL;
|
||||||
|
dev_warn(&pdev->dev, "Cannot register hwmon device\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
static void bnxt_hwmon_close(struct bnxt *bp)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
static void bnxt_hwmon_open(struct bnxt *bp)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static bool bnxt_eee_config_ok(struct bnxt *bp)
|
static bool bnxt_eee_config_ok(struct bnxt *bp)
|
||||||
{
|
{
|
||||||
struct ethtool_eee *eee = &bp->eee;
|
struct ethtool_eee *eee = &bp->eee;
|
||||||
|
@ -7040,6 +7098,9 @@ static int bnxt_open(struct net_device *dev)
|
||||||
rc = __bnxt_open_nic(bp, true, true);
|
rc = __bnxt_open_nic(bp, true, true);
|
||||||
if (rc)
|
if (rc)
|
||||||
bnxt_hwrm_if_change(bp, false);
|
bnxt_hwrm_if_change(bp, false);
|
||||||
|
|
||||||
|
bnxt_hwmon_open(bp);
|
||||||
|
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7102,6 +7163,7 @@ static int bnxt_close(struct net_device *dev)
|
||||||
{
|
{
|
||||||
struct bnxt *bp = netdev_priv(dev);
|
struct bnxt *bp = netdev_priv(dev);
|
||||||
|
|
||||||
|
bnxt_hwmon_close(bp);
|
||||||
bnxt_close_nic(bp, true, true);
|
bnxt_close_nic(bp, true, true);
|
||||||
bnxt_hwrm_shutdown_link(bp);
|
bnxt_hwrm_shutdown_link(bp);
|
||||||
bnxt_hwrm_if_change(bp, false);
|
bnxt_hwrm_if_change(bp, false);
|
||||||
|
|
|
@ -1411,6 +1411,7 @@ struct bnxt {
|
||||||
struct bnxt_tc_info *tc_info;
|
struct bnxt_tc_info *tc_info;
|
||||||
struct dentry *debugfs_pdev;
|
struct dentry *debugfs_pdev;
|
||||||
struct dentry *debugfs_dim;
|
struct dentry *debugfs_dim;
|
||||||
|
struct device *hwmon_dev;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define BNXT_RX_STATS_OFFSET(counter) \
|
#define BNXT_RX_STATS_OFFSET(counter) \
|
||||||
|
|
Loading…
Reference in New Issue