bnxt_en: Move hwmon functions into a dedicated file
This is in preparation for upcoming patches in the series. Driver has to expose more threshold temperatures through the hwmon sysfs interface. More code will be added and do not want to overload bnxt.c. Reviewed-by: Andy Gospodarek <andrew.gospodarek@broadcom.com> Cc: Jean Delvare <jdelvare@suse.com> Cc: Guenter Roeck <linux@roeck-us.net> Cc: linux-hwmon@vger.kernel.org Signed-off-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com> Signed-off-by: Michael Chan <michael.chan@broadcom.com> Acked-by: Guenter Roeck <linux@roeck-us.net> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
6ad71984aa
commit
a47f3b3992
@ -4,3 +4,4 @@ obj-$(CONFIG_BNXT) += bnxt_en.o
|
||||
bnxt_en-y := bnxt.o bnxt_hwrm.o bnxt_sriov.o bnxt_ethtool.o bnxt_dcb.o bnxt_ulp.o bnxt_xdp.o bnxt_ptp.o bnxt_vfr.o bnxt_devlink.o bnxt_dim.o bnxt_coredump.o
|
||||
bnxt_en-$(CONFIG_BNXT_FLOWER_OFFLOAD) += bnxt_tc.o
|
||||
bnxt_en-$(CONFIG_DEBUG_FS) += bnxt_debugfs.o
|
||||
bnxt_en-$(CONFIG_BNXT_HWMON) += bnxt_hwmon.o
|
||||
|
@ -52,8 +52,6 @@
|
||||
#include <linux/cpu_rmap.h>
|
||||
#include <linux/cpumask.h>
|
||||
#include <net/pkt_cls.h>
|
||||
#include <linux/hwmon.h>
|
||||
#include <linux/hwmon-sysfs.h>
|
||||
#include <net/page_pool/helpers.h>
|
||||
#include <linux/align.h>
|
||||
#include <net/netdev_queues.h>
|
||||
@ -71,6 +69,7 @@
|
||||
#include "bnxt_tc.h"
|
||||
#include "bnxt_devlink.h"
|
||||
#include "bnxt_debugfs.h"
|
||||
#include "bnxt_hwmon.h"
|
||||
|
||||
#define BNXT_TX_TIMEOUT (5 * HZ)
|
||||
#define BNXT_DEF_MSG_ENABLE (NETIF_MSG_DRV | NETIF_MSG_HW | \
|
||||
@ -10250,79 +10249,6 @@ static void bnxt_get_wol_settings(struct bnxt *bp)
|
||||
} 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_output *resp;
|
||||
struct hwrm_temp_monitor_query_input *req;
|
||||
struct bnxt *bp = dev_get_drvdata(dev);
|
||||
u32 len = 0;
|
||||
int rc;
|
||||
|
||||
rc = hwrm_req_init(bp, req, HWRM_TEMP_MONITOR_QUERY);
|
||||
if (rc)
|
||||
return rc;
|
||||
resp = hwrm_req_hold(bp, req);
|
||||
rc = hwrm_req_send(bp, req);
|
||||
if (!rc)
|
||||
len = sprintf(buf, "%u\n", resp->temp * 1000); /* display millidegree */
|
||||
hwrm_req_drop(bp, req);
|
||||
if (rc)
|
||||
return rc;
|
||||
return len;
|
||||
}
|
||||
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_uninit(struct bnxt *bp)
|
||||
{
|
||||
if (bp->hwmon_dev) {
|
||||
hwmon_device_unregister(bp->hwmon_dev);
|
||||
bp->hwmon_dev = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
static void bnxt_hwmon_init(struct bnxt *bp)
|
||||
{
|
||||
struct hwrm_temp_monitor_query_input *req;
|
||||
struct pci_dev *pdev = bp->pdev;
|
||||
int rc;
|
||||
|
||||
rc = hwrm_req_init(bp, req, HWRM_TEMP_MONITOR_QUERY);
|
||||
if (!rc)
|
||||
rc = hwrm_req_send_silent(bp, req);
|
||||
if (rc == -EACCES || rc == -EOPNOTSUPP) {
|
||||
bnxt_hwmon_uninit(bp);
|
||||
return;
|
||||
}
|
||||
|
||||
if (bp->hwmon_dev)
|
||||
return;
|
||||
|
||||
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_uninit(struct bnxt *bp)
|
||||
{
|
||||
}
|
||||
|
||||
static void bnxt_hwmon_init(struct bnxt *bp)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
static bool bnxt_eee_config_ok(struct bnxt *bp)
|
||||
{
|
||||
struct ethtool_eee *eee = &bp->eee;
|
||||
|
82
drivers/net/ethernet/broadcom/bnxt/bnxt_hwmon.c
Normal file
82
drivers/net/ethernet/broadcom/bnxt/bnxt_hwmon.c
Normal file
@ -0,0 +1,82 @@
|
||||
/* Broadcom NetXtreme-C/E network driver.
|
||||
*
|
||||
* Copyright (c) 2023 Broadcom Limited
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#include <linux/dev_printk.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/hwmon.h>
|
||||
#include <linux/hwmon-sysfs.h>
|
||||
#include <linux/pci.h>
|
||||
|
||||
#include "bnxt_hsi.h"
|
||||
#include "bnxt.h"
|
||||
#include "bnxt_hwrm.h"
|
||||
#include "bnxt_hwmon.h"
|
||||
|
||||
static ssize_t bnxt_show_temp(struct device *dev,
|
||||
struct device_attribute *devattr, char *buf)
|
||||
{
|
||||
struct hwrm_temp_monitor_query_output *resp;
|
||||
struct hwrm_temp_monitor_query_input *req;
|
||||
struct bnxt *bp = dev_get_drvdata(dev);
|
||||
u32 len = 0;
|
||||
int rc;
|
||||
|
||||
rc = hwrm_req_init(bp, req, HWRM_TEMP_MONITOR_QUERY);
|
||||
if (rc)
|
||||
return rc;
|
||||
resp = hwrm_req_hold(bp, req);
|
||||
rc = hwrm_req_send(bp, req);
|
||||
if (!rc)
|
||||
len = sprintf(buf, "%u\n", resp->temp * 1000); /* display millidegree */
|
||||
hwrm_req_drop(bp, req);
|
||||
if (rc)
|
||||
return rc;
|
||||
return len;
|
||||
}
|
||||
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);
|
||||
|
||||
void bnxt_hwmon_uninit(struct bnxt *bp)
|
||||
{
|
||||
if (bp->hwmon_dev) {
|
||||
hwmon_device_unregister(bp->hwmon_dev);
|
||||
bp->hwmon_dev = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
void bnxt_hwmon_init(struct bnxt *bp)
|
||||
{
|
||||
struct hwrm_temp_monitor_query_input *req;
|
||||
struct pci_dev *pdev = bp->pdev;
|
||||
int rc;
|
||||
|
||||
rc = hwrm_req_init(bp, req, HWRM_TEMP_MONITOR_QUERY);
|
||||
if (!rc)
|
||||
rc = hwrm_req_send_silent(bp, req);
|
||||
if (rc == -EACCES || rc == -EOPNOTSUPP) {
|
||||
bnxt_hwmon_uninit(bp);
|
||||
return;
|
||||
}
|
||||
|
||||
if (bp->hwmon_dev)
|
||||
return;
|
||||
|
||||
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");
|
||||
}
|
||||
}
|
25
drivers/net/ethernet/broadcom/bnxt/bnxt_hwmon.h
Normal file
25
drivers/net/ethernet/broadcom/bnxt/bnxt_hwmon.h
Normal file
@ -0,0 +1,25 @@
|
||||
/* Broadcom NetXtreme-C/E network driver.
|
||||
*
|
||||
* Copyright (c) 2023 Broadcom Limited
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#ifndef BNXT_HWMON_H
|
||||
#define BNXT_HWMON_H
|
||||
|
||||
#ifdef CONFIG_BNXT_HWMON
|
||||
void bnxt_hwmon_uninit(struct bnxt *bp);
|
||||
void bnxt_hwmon_init(struct bnxt *bp);
|
||||
#else
|
||||
static inline void bnxt_hwmon_uninit(struct bnxt *bp)
|
||||
{
|
||||
}
|
||||
|
||||
static inline void bnxt_hwmon_init(struct bnxt *bp)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
#endif
|
Loading…
x
Reference in New Issue
Block a user