aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVasundhara Volam <vasundhara-v.volam@broadcom.com>2018-08-05 16:51:56 -0400
committerDavid S. Miller <davem@davemloft.net>2018-08-05 20:08:26 -0400
commitcde49a42a9bbba18d7f33550fd70037930c14e97 (patch)
tree0cf94c307dcde29a16c52ae69681b60a0e54bfce
parent25e1acd6b92bde36c03273d883c44c4d0e8995e6 (diff)
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>
-rw-r--r--drivers/net/ethernet/broadcom/Kconfig8
-rw-r--r--drivers/net/ethernet/broadcom/bnxt/bnxt.c62
-rw-r--r--drivers/net/ethernet/broadcom/bnxt/bnxt.h1
3 files changed, 71 insertions, 0 deletions
diff --git a/drivers/net/ethernet/broadcom/Kconfig b/drivers/net/ethernet/broadcom/Kconfig
index b7aa8ad96dfb..c1d3ee9baf7e 100644
--- a/drivers/net/ethernet/broadcom/Kconfig
+++ b/drivers/net/ethernet/broadcom/Kconfig
@@ -230,4 +230,12 @@ config BNXT_DCB
230 230
231 If unsure, say N. 231 If unsure, say N.
232 232
233config BNXT_HWMON
234 bool "Broadcom NetXtreme-C/E HWMON support"
235 default y
236 depends on BNXT && HWMON && !(BNXT=y && HWMON=m)
237 ---help---
238 Say Y if you want to expose the thermal sensor data on NetXtreme-C/E
239 devices, via the hwmon sysfs interface.
240
233endif # NET_VENDOR_BROADCOM 241endif # NET_VENDOR_BROADCOM
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
index 56bd09758e22..dde904bccab9 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
@@ -51,6 +51,8 @@
51#include <linux/cpu_rmap.h> 51#include <linux/cpu_rmap.h>
52#include <linux/cpumask.h> 52#include <linux/cpumask.h>
53#include <net/pkt_cls.h> 53#include <net/pkt_cls.h>
54#include <linux/hwmon.h>
55#include <linux/hwmon-sysfs.h>
54 56
55#include "bnxt_hsi.h" 57#include "bnxt_hsi.h"
56#include "bnxt.h" 58#include "bnxt.h"
@@ -6789,6 +6791,62 @@ static void bnxt_get_wol_settings(struct bnxt *bp)
6789 } while (handle && handle != 0xffff); 6791 } while (handle && handle != 0xffff);
6790} 6792}
6791 6793
6794#ifdef CONFIG_BNXT_HWMON
6795static ssize_t bnxt_show_temp(struct device *dev,
6796 struct device_attribute *devattr, char *buf)
6797{
6798 struct hwrm_temp_monitor_query_input req = {0};
6799 struct hwrm_temp_monitor_query_output *resp;
6800 struct bnxt *bp = dev_get_drvdata(dev);
6801 u32 temp = 0;
6802
6803 resp = bp->hwrm_cmd_resp_addr;
6804 bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_TEMP_MONITOR_QUERY, -1, -1);
6805 mutex_lock(&bp->hwrm_cmd_lock);
6806 if (!_hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT))
6807 temp = resp->temp * 1000; /* display millidegree */
6808 mutex_unlock(&bp->hwrm_cmd_lock);
6809
6810 return sprintf(buf, "%u\n", temp);
6811}
6812static SENSOR_DEVICE_ATTR(temp1_input, 0444, bnxt_show_temp, NULL, 0);
6813
6814static struct attribute *bnxt_attrs[] = {
6815 &sensor_dev_attr_temp1_input.dev_attr.attr,
6816 NULL
6817};
6818ATTRIBUTE_GROUPS(bnxt);
6819
6820static void bnxt_hwmon_close(struct bnxt *bp)
6821{
6822 if (bp->hwmon_dev) {
6823 hwmon_device_unregister(bp->hwmon_dev);
6824 bp->hwmon_dev = NULL;
6825 }
6826}
6827
6828static void bnxt_hwmon_open(struct bnxt *bp)
6829{
6830 struct pci_dev *pdev = bp->pdev;
6831
6832 bp->hwmon_dev = hwmon_device_register_with_groups(&pdev->dev,
6833 DRV_MODULE_NAME, bp,
6834 bnxt_groups);
6835 if (IS_ERR(bp->hwmon_dev)) {
6836 bp->hwmon_dev = NULL;
6837 dev_warn(&pdev->dev, "Cannot register hwmon device\n");
6838 }
6839}
6840#else
6841static void bnxt_hwmon_close(struct bnxt *bp)
6842{
6843}
6844
6845static void bnxt_hwmon_open(struct bnxt *bp)
6846{
6847}
6848#endif
6849
6792static bool bnxt_eee_config_ok(struct bnxt *bp) 6850static bool bnxt_eee_config_ok(struct bnxt *bp)
6793{ 6851{
6794 struct ethtool_eee *eee = &bp->eee; 6852 struct ethtool_eee *eee = &bp->eee;
@@ -7040,6 +7098,9 @@ static int bnxt_open(struct net_device *dev)
7040 rc = __bnxt_open_nic(bp, true, true); 7098 rc = __bnxt_open_nic(bp, true, true);
7041 if (rc) 7099 if (rc)
7042 bnxt_hwrm_if_change(bp, false); 7100 bnxt_hwrm_if_change(bp, false);
7101
7102 bnxt_hwmon_open(bp);
7103
7043 return rc; 7104 return rc;
7044} 7105}
7045 7106
@@ -7102,6 +7163,7 @@ static int bnxt_close(struct net_device *dev)
7102{ 7163{
7103 struct bnxt *bp = netdev_priv(dev); 7164 struct bnxt *bp = netdev_priv(dev);
7104 7165
7166 bnxt_hwmon_close(bp);
7105 bnxt_close_nic(bp, true, true); 7167 bnxt_close_nic(bp, true, true);
7106 bnxt_hwrm_shutdown_link(bp); 7168 bnxt_hwrm_shutdown_link(bp);
7107 bnxt_hwrm_if_change(bp, false); 7169 bnxt_hwrm_if_change(bp, false);
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.h b/drivers/net/ethernet/broadcom/bnxt/bnxt.h
index 6c40b25716d3..006726c02f51 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.h
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.h
@@ -1411,6 +1411,7 @@ struct bnxt {
1411 struct bnxt_tc_info *tc_info; 1411 struct bnxt_tc_info *tc_info;
1412 struct dentry *debugfs_pdev; 1412 struct dentry *debugfs_pdev;
1413 struct dentry *debugfs_dim; 1413 struct dentry *debugfs_dim;
1414 struct device *hwmon_dev;
1414}; 1415};
1415 1416
1416#define BNXT_RX_STATS_OFFSET(counter) \ 1417#define BNXT_RX_STATS_OFFSET(counter) \