Message ID | 20230927035734.42816-4-michael.chan@broadcom.com (mailing list archive) |
---|---|
State | Accepted |
Commit | a47f3b3992aa7666227e2e48d45fd6b8bc8053be |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | bnxt_en: hwmon and SRIOV updates | expand |
On Tue, Sep 26, 2023 at 08:57:28PM -0700, Michael Chan wrote: > From: Kalesh AP <kalesh-anakkur.purayil@broadcom.com> > > 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> > --- > drivers/net/ethernet/broadcom/bnxt/Makefile | 1 + > drivers/net/ethernet/broadcom/bnxt/bnxt.c | 76 +---------------- > .../net/ethernet/broadcom/bnxt/bnxt_hwmon.c | 82 +++++++++++++++++++ > .../net/ethernet/broadcom/bnxt/bnxt_hwmon.h | 25 ++++++ > 4 files changed, 109 insertions(+), 75 deletions(-) > create mode 100644 drivers/net/ethernet/broadcom/bnxt/bnxt_hwmon.c > create mode 100644 drivers/net/ethernet/broadcom/bnxt/bnxt_hwmon.h > > diff --git a/drivers/net/ethernet/broadcom/bnxt/Makefile b/drivers/net/ethernet/broadcom/bnxt/Makefile > index 2bc2b707d6ee..ba6c239d52fa 100644 > --- a/drivers/net/ethernet/broadcom/bnxt/Makefile > +++ b/drivers/net/ethernet/broadcom/bnxt/Makefile > @@ -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 > diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c > index 785084147994..b83f8de0a015 100644 > --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c > +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c > @@ -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; > diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_hwmon.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_hwmon.c > new file mode 100644 > index 000000000000..476616d97071 > --- /dev/null > +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_hwmon.c > @@ -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"); > + } > +} > diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_hwmon.h b/drivers/net/ethernet/broadcom/bnxt/bnxt_hwmon.h > new file mode 100644 > index 000000000000..af310066687c > --- /dev/null > +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_hwmon.h > @@ -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 > -- > 2.30.1 >
diff --git a/drivers/net/ethernet/broadcom/bnxt/Makefile b/drivers/net/ethernet/broadcom/bnxt/Makefile index 2bc2b707d6ee..ba6c239d52fa 100644 --- a/drivers/net/ethernet/broadcom/bnxt/Makefile +++ b/drivers/net/ethernet/broadcom/bnxt/Makefile @@ -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 diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c index 785084147994..b83f8de0a015 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c @@ -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; diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_hwmon.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_hwmon.c new file mode 100644 index 000000000000..476616d97071 --- /dev/null +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_hwmon.c @@ -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"); + } +} diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_hwmon.h b/drivers/net/ethernet/broadcom/bnxt/bnxt_hwmon.h new file mode 100644 index 000000000000..af310066687c --- /dev/null +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_hwmon.h @@ -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