diff options
author | Vasundhara Volam <vasundhara-v.volam@broadcom.com> | 2018-08-05 16:51:56 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2018-08-05 20:08:26 -0400 |
commit | cde49a42a9bbba18d7f33550fd70037930c14e97 (patch) | |
tree | 0cf94c307dcde29a16c52ae69681b60a0e54bfce | |
parent | 25e1acd6b92bde36c03273d883c44c4d0e8995e6 (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/Kconfig | 8 | ||||
-rw-r--r-- | drivers/net/ethernet/broadcom/bnxt/bnxt.c | 62 | ||||
-rw-r--r-- | drivers/net/ethernet/broadcom/bnxt/bnxt.h | 1 |
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 | ||
233 | config 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 | |||
233 | endif # NET_VENDOR_BROADCOM | 241 | endif # 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 | ||
6795 | static 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 | } | ||
6812 | static SENSOR_DEVICE_ATTR(temp1_input, 0444, bnxt_show_temp, NULL, 0); | ||
6813 | |||
6814 | static struct attribute *bnxt_attrs[] = { | ||
6815 | &sensor_dev_attr_temp1_input.dev_attr.attr, | ||
6816 | NULL | ||
6817 | }; | ||
6818 | ATTRIBUTE_GROUPS(bnxt); | ||
6819 | |||
6820 | static 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 | |||
6828 | static 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 | ||
6841 | static void bnxt_hwmon_close(struct bnxt *bp) | ||
6842 | { | ||
6843 | } | ||
6844 | |||
6845 | static void bnxt_hwmon_open(struct bnxt *bp) | ||
6846 | { | ||
6847 | } | ||
6848 | #endif | ||
6849 | |||
6792 | static bool bnxt_eee_config_ok(struct bnxt *bp) | 6850 | static 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) \ |