* [PATCH net-next 07/11] bnxt_en: Read partno and serialno of the board from VPD
@ 2020-03-17 15:17 Vasundhara Volam
2020-03-17 15:17 ` [PATCH net-next 08/11] bnxt_en: Add partno and serialno to devlink info_get cb Vasundhara Volam
` (3 more replies)
0 siblings, 4 replies; 9+ messages in thread
From: Vasundhara Volam @ 2020-03-17 15:17 UTC (permalink / raw)
To: davem; +Cc: netdev, Vasundhara Volam, Michael Chan
Store the part number and serial number information from VPD in
the bnxt structure. Follow up patch will add the support to display
the information via devlink command.
Signed-off-by: Vasundhara Volam <vasundhara-v.volam@broadcom.com>
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
---
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 59 +++++++++++++++++++++++++++++++
drivers/net/ethernet/broadcom/bnxt/bnxt.h | 4 +++
2 files changed, 63 insertions(+)
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
index 663dcf6..b03cdda 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
@@ -11727,6 +11727,63 @@ static int bnxt_init_mac_addr(struct bnxt *bp)
return rc;
}
+#define BNXT_VPD_LEN 512
+static void bnxt_vpd_read_info(struct bnxt *bp)
+{
+ struct pci_dev *pdev = bp->pdev;
+ int i, len, pos, ro_size;
+ ssize_t vpd_size;
+ u8 *vpd_data;
+
+ vpd_data = kmalloc(BNXT_VPD_LEN, GFP_KERNEL);
+ if (!vpd_data)
+ return;
+
+ vpd_size = pci_read_vpd(pdev, 0, BNXT_VPD_LEN, vpd_data);
+ if (vpd_size <= 0) {
+ netdev_err(bp->dev, "Unable to read VPD\n");
+ goto exit;
+ }
+
+ i = pci_vpd_find_tag(vpd_data, 0, vpd_size, PCI_VPD_LRDT_RO_DATA);
+ if (i < 0) {
+ netdev_err(bp->dev, "VPD READ-Only not found\n");
+ goto exit;
+ }
+
+ ro_size = pci_vpd_lrdt_size(&vpd_data[i]);
+ i += PCI_VPD_LRDT_TAG_SIZE;
+ if (i + ro_size > vpd_size)
+ goto exit;
+
+ pos = pci_vpd_find_info_keyword(vpd_data, i, ro_size,
+ PCI_VPD_RO_KEYWORD_PARTNO);
+ if (pos < 0)
+ goto read_sn;
+
+ len = pci_vpd_info_field_size(&vpd_data[pos]);
+ pos += PCI_VPD_INFO_FLD_HDR_SIZE;
+ if (len + pos > vpd_size)
+ goto read_sn;
+
+ strlcpy(bp->board_partno, &vpd_data[pos], min(len, BNXT_VPD_FLD_LEN));
+
+read_sn:
+ pos = pci_vpd_find_info_keyword(vpd_data, i, ro_size,
+ PCI_VPD_RO_KEYWORD_SERIALNO);
+ if (pos < 0)
+ goto exit;
+
+ len = pci_vpd_info_field_size(&vpd_data[pos]);
+ pos += PCI_VPD_INFO_FLD_HDR_SIZE;
+ if (len + pos > vpd_size)
+ goto exit;
+
+ strlcpy(bp->board_serialno, &vpd_data[pos], min(len, BNXT_VPD_FLD_LEN));
+exit:
+ kfree(vpd_data);
+}
+
static int bnxt_pcie_dsn_get(struct bnxt *bp, u8 dsn[])
{
struct pci_dev *pdev = bp->pdev;
@@ -11784,6 +11841,8 @@ static int bnxt_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
dev->ethtool_ops = &bnxt_ethtool_ops;
pci_set_drvdata(pdev, dev);
+ bnxt_vpd_read_info(bp);
+
rc = bnxt_alloc_hwrm_resources(bp);
if (rc)
goto init_err_pci_clean;
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.h b/drivers/net/ethernet/broadcom/bnxt/bnxt.h
index 5adc25f..7f5f35b 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.h
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.h
@@ -1500,6 +1500,10 @@ struct bnxt {
(chip_num) == CHIP_NUM_58804 || \
(chip_num) == CHIP_NUM_58808)
+#define BNXT_VPD_FLD_LEN 32
+ char board_partno[BNXT_VPD_FLD_LEN];
+ char board_serialno[BNXT_VPD_FLD_LEN];
+
struct net_device *dev;
struct pci_dev *pdev;
--
1.8.3.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH net-next 08/11] bnxt_en: Add partno and serialno to devlink info_get cb
2020-03-17 15:17 [PATCH net-next 07/11] bnxt_en: Read partno and serialno of the board from VPD Vasundhara Volam
@ 2020-03-17 15:17 ` Vasundhara Volam
2020-03-17 17:51 ` Jakub Kicinski
2020-03-17 15:17 ` [PATCH net-next 09/11] devlink: Add new enable_ecn generic device param Vasundhara Volam
` (2 subsequent siblings)
3 siblings, 1 reply; 9+ messages in thread
From: Vasundhara Volam @ 2020-03-17 15:17 UTC (permalink / raw)
To: davem; +Cc: netdev, Vasundhara Volam, Michael Chan
Add part number and serial number info from the vital product data
to info_get command via devlink tool.
Some of the broadcom devices support both PCI extended config space
for device serial number and VPD serial number. With this patch, both
the information will be displayed via info_get cb.
Update bnxt.rst documentation as well.
Example display:
$ devlink dev info pci/0000:3b:00.1
pci/0000:3b:00.1:
driver bnxt_en
serial_number B0-26-28-FF-FE-C8-85-20
versions:
fixed:
board.id BCM957508-P2100G
asic.id 1750
asic.rev 1
vpd.serialno P2100pm01920A0032CQ
running:
drv.spec 1.10.1.12
hw.addr b0:26:28:c8:85:21
hw.mh_base_addr b0:26:28:c8:85:20
fw 216.0.286.0
fw.psid 0.0.6
fw.app 216.0.251.0
Signed-off-by: Vasundhara Volam <vasundhara-v.volam@broadcom.com>
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
---
Documentation/networking/devlink/bnxt.rst | 6 ++++++
drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c | 15 +++++++++++++++
2 files changed, 21 insertions(+)
diff --git a/Documentation/networking/devlink/bnxt.rst b/Documentation/networking/devlink/bnxt.rst
index f850a18..17b6522 100644
--- a/Documentation/networking/devlink/bnxt.rst
+++ b/Documentation/networking/devlink/bnxt.rst
@@ -51,12 +51,18 @@ The ``bnxt_en`` driver reports the following versions
* - Name
- Type
- Description
+ * - ``board.id``
+ - fixed
+ - Part number identifying the board design
* - ``asic.id``
- fixed
- ASIC design identifier
* - ``asic.rev``
- fixed
- ASIC design revision
+ * - ``vpd.serialno``
+ - fixed
+ - Serial number identifying the board
* - ``drv.spec``
- running
- HWRM specification version supported by driver HWRM implementation
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c
index 607e27a..6065602 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c
@@ -439,6 +439,14 @@ static int bnxt_dl_info_get(struct devlink *dl, struct devlink_info_req *req,
if (rc)
return rc;
+ if (strlen(bp->board_partno)) {
+ rc = devlink_info_version_fixed_put(req,
+ DEVLINK_INFO_VERSION_GENERIC_BOARD_ID,
+ bp->board_partno);
+ if (rc)
+ return rc;
+ }
+
sprintf(buf, "%X", bp->chip_num);
rc = devlink_info_version_fixed_put(req,
DEVLINK_INFO_VERSION_GENERIC_ASIC_ID, buf);
@@ -461,6 +469,13 @@ static int bnxt_dl_info_get(struct devlink *dl, struct devlink_info_req *req,
return rc;
}
+ if (strlen(bp->board_serialno)) {
+ rc = devlink_info_version_fixed_put(req, "vpd.serialno",
+ bp->board_serialno);
+ if (rc)
+ return rc;
+ }
+
rc = devlink_info_version_running_put(req,
DEVLINK_INFO_VERSION_GENERIC_DRV_SPEC, HWRM_VERSION_STR);
if (rc)
--
1.8.3.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH net-next 09/11] devlink: Add new enable_ecn generic device param
2020-03-17 15:17 [PATCH net-next 07/11] bnxt_en: Read partno and serialno of the board from VPD Vasundhara Volam
2020-03-17 15:17 ` [PATCH net-next 08/11] bnxt_en: Add partno and serialno to devlink info_get cb Vasundhara Volam
@ 2020-03-17 15:17 ` Vasundhara Volam
2020-03-17 17:52 ` Jakub Kicinski
2020-03-17 15:17 ` [PATCH net-next 10/11] bnxt_en: Update firmware interface spec to 1.10.1.26 Vasundhara Volam
2020-03-17 15:17 ` [PATCH net-next 11/11] bnxt_en: Use "enable_ecn" devlink param Vasundhara Volam
3 siblings, 1 reply; 9+ messages in thread
From: Vasundhara Volam @ 2020-03-17 15:17 UTC (permalink / raw)
To: davem; +Cc: netdev, Pavan Chebbi, Jiri Pirko, Vasundhara Volam, Michael Chan
From: Pavan Chebbi <pavan.chebbi@broadcom.com>
Add new device parameter to enable/disable handling of Explicit
Congestion Notification(ECN) in the device.
This patch also addresses comments from Jiri Pirko, to update the
devlink-info.rst documentation.
Cc: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: Pavan Chebbi <pavan.chebbi@broadcom.com>
Signed-off-by: Vasundhara Volam <vasundhara-v.volam@broadcom.com>
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
---
Documentation/networking/devlink/devlink-params.rst | 5 +++++
include/net/devlink.h | 4 ++++
net/core/devlink.c | 5 +++++
3 files changed, 14 insertions(+)
diff --git a/Documentation/networking/devlink/devlink-params.rst b/Documentation/networking/devlink/devlink-params.rst
index da2f85c..0e6c965 100644
--- a/Documentation/networking/devlink/devlink-params.rst
+++ b/Documentation/networking/devlink/devlink-params.rst
@@ -106,3 +106,8 @@ own name.
* - ``region_snapshot_enable``
- Boolean
- Enable capture of ``devlink-region`` snapshots.
+ * - ``enable_ecn``
+ - Boolean
+ - Enable handling of Explicit Congestion Notification(ECN) in the device.
+ When enabled hardware may set the code point to Congestion
+ Encountered(CE) before dropping the packet.
diff --git a/include/net/devlink.h b/include/net/devlink.h
index e130d24..825a8f9 100644
--- a/include/net/devlink.h
+++ b/include/net/devlink.h
@@ -404,6 +404,7 @@ enum devlink_param_generic_id {
DEVLINK_PARAM_GENERIC_ID_FW_LOAD_POLICY,
DEVLINK_PARAM_GENERIC_ID_RESET_DEV_ON_DRV_PROBE,
DEVLINK_PARAM_GENERIC_ID_ENABLE_ROCE,
+ DEVLINK_PARAM_GENERIC_ID_ENABLE_ECN,
/* add new param generic ids above here*/
__DEVLINK_PARAM_GENERIC_ID_MAX,
@@ -441,6 +442,9 @@ enum devlink_param_generic_id {
#define DEVLINK_PARAM_GENERIC_ENABLE_ROCE_NAME "enable_roce"
#define DEVLINK_PARAM_GENERIC_ENABLE_ROCE_TYPE DEVLINK_PARAM_TYPE_BOOL
+#define DEVLINK_PARAM_GENERIC_ENABLE_ECN_NAME "enable_ecn"
+#define DEVLINK_PARAM_GENERIC_ENABLE_ECN_TYPE DEVLINK_PARAM_TYPE_BOOL
+
#define DEVLINK_PARAM_GENERIC(_id, _cmodes, _get, _set, _validate) \
{ \
.id = DEVLINK_PARAM_GENERIC_ID_##_id, \
diff --git a/net/core/devlink.c b/net/core/devlink.c
index f51bebc..116d887 100644
--- a/net/core/devlink.c
+++ b/net/core/devlink.c
@@ -3012,6 +3012,11 @@ static int devlink_nl_cmd_flash_update(struct sk_buff *skb,
.name = DEVLINK_PARAM_GENERIC_ENABLE_ROCE_NAME,
.type = DEVLINK_PARAM_GENERIC_ENABLE_ROCE_TYPE,
},
+ {
+ .id = DEVLINK_PARAM_GENERIC_ID_ENABLE_ECN,
+ .name = DEVLINK_PARAM_GENERIC_ENABLE_ECN_NAME,
+ .type = DEVLINK_PARAM_GENERIC_ENABLE_ECN_TYPE,
+ },
};
static int devlink_param_generic_verify(const struct devlink_param *param)
--
1.8.3.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH net-next 10/11] bnxt_en: Update firmware interface spec to 1.10.1.26.
2020-03-17 15:17 [PATCH net-next 07/11] bnxt_en: Read partno and serialno of the board from VPD Vasundhara Volam
2020-03-17 15:17 ` [PATCH net-next 08/11] bnxt_en: Add partno and serialno to devlink info_get cb Vasundhara Volam
2020-03-17 15:17 ` [PATCH net-next 09/11] devlink: Add new enable_ecn generic device param Vasundhara Volam
@ 2020-03-17 15:17 ` Vasundhara Volam
2020-03-17 15:17 ` [PATCH net-next 11/11] bnxt_en: Use "enable_ecn" devlink param Vasundhara Volam
3 siblings, 0 replies; 9+ messages in thread
From: Vasundhara Volam @ 2020-03-17 15:17 UTC (permalink / raw)
To: davem; +Cc: netdev, Vasundhara Volam, Michael Chan
ECN and ECN statistics firmware commands support, PFC watchdog
support and few minor changes to the spec.
Signed-off-by: Vasundhara Volam <vasundhara-v.volam@broadcom.com>
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
---
drivers/net/ethernet/broadcom/bnxt/bnxt_hsi.h | 307 +++++++++++++++++++++++---
1 file changed, 282 insertions(+), 25 deletions(-)
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_hsi.h b/drivers/net/ethernet/broadcom/bnxt/bnxt_hsi.h
index 7cf27df..0f080b9 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt_hsi.h
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_hsi.h
@@ -2,7 +2,7 @@
*
* Copyright (c) 2014-2016 Broadcom Corporation
* Copyright (c) 2014-2018 Broadcom Limited
- * Copyright (c) 2018-2019 Broadcom Inc.
+ * Copyright (c) 2018-2020 Broadcom Inc.
*
* 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
@@ -207,6 +207,8 @@ struct cmd_nums {
#define HWRM_PORT_PHY_MDIO_READ 0xb6UL
#define HWRM_PORT_PHY_MDIO_BUS_ACQUIRE 0xb7UL
#define HWRM_PORT_PHY_MDIO_BUS_RELEASE 0xb8UL
+ #define HWRM_PORT_QSTATS_EXT_PFC_WD 0xb9UL
+ #define HWRM_PORT_ECN_QSTATS 0xbaUL
#define HWRM_FW_RESET 0xc0UL
#define HWRM_FW_QSTATUS 0xc1UL
#define HWRM_FW_HEALTH_CHECK 0xc2UL
@@ -220,6 +222,8 @@ struct cmd_nums {
#define HWRM_FW_SET_STRUCTURED_DATA 0xcaUL
#define HWRM_FW_GET_STRUCTURED_DATA 0xcbUL
#define HWRM_FW_IPC_MAILBOX 0xccUL
+ #define HWRM_FW_ECN_CFG 0xcdUL
+ #define HWRM_FW_ECN_QCFG 0xceUL
#define HWRM_EXEC_FWD_RESP 0xd0UL
#define HWRM_REJECT_FWD_RESP 0xd1UL
#define HWRM_FWD_RESP 0xd2UL
@@ -341,6 +345,9 @@ struct cmd_nums {
#define HWRM_MFG_OTP_CFG 0x207UL
#define HWRM_MFG_OTP_QCFG 0x208UL
#define HWRM_MFG_HDMA_TEST 0x209UL
+ #define HWRM_MFG_FRU_EEPROM_WRITE 0x20aUL
+ #define HWRM_MFG_FRU_EEPROM_READ 0x20bUL
+ #define HWRM_SV 0x400UL
#define HWRM_DBG_READ_DIRECT 0xff10UL
#define HWRM_DBG_READ_INDIRECT 0xff11UL
#define HWRM_DBG_WRITE_DIRECT 0xff12UL
@@ -356,6 +363,7 @@ struct cmd_nums {
#define HWRM_DBG_RING_INFO_GET 0xff1cUL
#define HWRM_DBG_CRASHDUMP_HEADER 0xff1dUL
#define HWRM_DBG_CRASHDUMP_ERASE 0xff1eUL
+ #define HWRM_DBG_DRV_TRACE 0xff1fUL
#define HWRM_NVM_FACTORY_DEFAULTS 0xffeeUL
#define HWRM_NVM_VALIDATE_OPTION 0xffefUL
#define HWRM_NVM_FLUSH 0xfff0UL
@@ -429,8 +437,8 @@ struct hwrm_err_output {
#define HWRM_VERSION_MAJOR 1
#define HWRM_VERSION_MINOR 10
#define HWRM_VERSION_UPDATE 1
-#define HWRM_VERSION_RSVD 12
-#define HWRM_VERSION_STR "1.10.1.12"
+#define HWRM_VERSION_RSVD 26
+#define HWRM_VERSION_STR "1.10.1.26"
/* hwrm_ver_get_input (size:192b/24B) */
struct hwrm_ver_get_input {
@@ -647,6 +655,7 @@ struct hwrm_async_event_cmpl {
#define ASYNC_EVENT_CMPL_EVENT_ID_TFLIB_LINK_STATUS_CHANGE 0x3eUL
#define ASYNC_EVENT_CMPL_EVENT_ID_QUIESCE_DONE 0x3fUL
#define ASYNC_EVENT_CMPL_EVENT_ID_DEFERRED_RESPONSE 0x40UL
+ #define ASYNC_EVENT_CMPL_EVENT_ID_PFC_WATCHDOG_CFG_CHANGE 0x41UL
#define ASYNC_EVENT_CMPL_EVENT_ID_FW_TRACE_MSG 0xfeUL
#define ASYNC_EVENT_CMPL_EVENT_ID_HWRM_ERROR 0xffUL
#define ASYNC_EVENT_CMPL_EVENT_ID_LAST ASYNC_EVENT_CMPL_EVENT_ID_HWRM_ERROR
@@ -1089,7 +1098,7 @@ struct hwrm_func_qcaps_input {
u8 unused_0[6];
};
-/* hwrm_func_qcaps_output (size:640b/80B) */
+/* hwrm_func_qcaps_output (size:704b/88B) */
struct hwrm_func_qcaps_output {
__le16 error_code;
__le16 req_type;
@@ -1126,6 +1135,9 @@ struct hwrm_func_qcaps_output {
#define FUNC_QCAPS_RESP_FLAGS_ERR_RECOVER_RELOAD 0x2000000UL
#define FUNC_QCAPS_RESP_FLAGS_NOTIFY_VF_DEF_VNIC_CHNG_SUPPORTED 0x4000000UL
#define FUNC_QCAPS_RESP_FLAGS_VLAN_ACCELERATION_TX_DISABLED 0x8000000UL
+ #define FUNC_QCAPS_RESP_FLAGS_COREDUMP_CMD_SUPPORTED 0x10000000UL
+ #define FUNC_QCAPS_RESP_FLAGS_CRASHDUMP_CMD_SUPPORTED 0x20000000UL
+ #define FUNC_QCAPS_RESP_FLAGS_PFC_WD_STATS_SUPPORTED 0x40000000UL
u8 mac_address[6];
__le16 max_rsscos_ctx;
__le16 max_cmpl_rings;
@@ -1146,7 +1158,11 @@ struct hwrm_func_qcaps_output {
__le32 max_flow_id;
__le32 max_hw_ring_grps;
__le16 max_sp_tx_rings;
- u8 unused_0;
+ u8 unused_0[2];
+ __le32 flags_ext;
+ #define FUNC_QCAPS_RESP_FLAGS_EXT_ECN_MARK_SUPPORTED 0x1UL
+ #define FUNC_QCAPS_RESP_FLAGS_EXT_ECN_STATS_SUPPORTED 0x2UL
+ u8 unused_1[3];
u8 valid;
};
@@ -1161,7 +1177,7 @@ struct hwrm_func_qcfg_input {
u8 unused_0[6];
};
-/* hwrm_func_qcfg_output (size:704b/88B) */
+/* hwrm_func_qcfg_output (size:768b/96B) */
struct hwrm_func_qcfg_output {
__le16 error_code;
__le16 req_type;
@@ -1267,7 +1283,11 @@ struct hwrm_func_qcfg_output {
u8 always_1;
__le32 reset_addr_poll;
__le16 legacy_l2_db_size_kb;
- u8 unused_2[1];
+ __le16 svif_info;
+ #define FUNC_QCFG_RESP_SVIF_INFO_SVIF_MASK 0x7fffUL
+ #define FUNC_QCFG_RESP_SVIF_INFO_SVIF_SFT 0
+ #define FUNC_QCFG_RESP_SVIF_INFO_SVIF_VALID 0x8000UL
+ u8 unused_2[7];
u8 valid;
};
@@ -1808,7 +1828,7 @@ struct hwrm_func_backing_store_qcaps_output {
u8 ctx_kind_initializer;
__le32 rsvd;
__le16 rsvd1;
- u8 rsvd2;
+ u8 tqm_fp_rings_count;
u8 valid;
};
@@ -2231,7 +2251,17 @@ struct hwrm_error_recovery_qcfg_output {
#define ERROR_RECOVERY_QCFG_RESP_RESET_REG_ADDR_SFT 2
__le32 reset_reg_val[16];
u8 delay_after_reset[16];
- u8 unused_1[7];
+ __le32 err_recovery_cnt_reg;
+ #define ERROR_RECOVERY_QCFG_RESP_ERR_RECOVERY_CNT_REG_ADDR_SPACE_MASK 0x3UL
+ #define ERROR_RECOVERY_QCFG_RESP_ERR_RECOVERY_CNT_REG_ADDR_SPACE_SFT 0
+ #define ERROR_RECOVERY_QCFG_RESP_ERR_RECOVERY_CNT_REG_ADDR_SPACE_PCIE_CFG 0x0UL
+ #define ERROR_RECOVERY_QCFG_RESP_ERR_RECOVERY_CNT_REG_ADDR_SPACE_GRC 0x1UL
+ #define ERROR_RECOVERY_QCFG_RESP_ERR_RECOVERY_CNT_REG_ADDR_SPACE_BAR0 0x2UL
+ #define ERROR_RECOVERY_QCFG_RESP_ERR_RECOVERY_CNT_REG_ADDR_SPACE_BAR1 0x3UL
+ #define ERROR_RECOVERY_QCFG_RESP_ERR_RECOVERY_CNT_REG_ADDR_SPACE_LAST ERROR_RECOVERY_QCFG_RESP_ERR_RECOVERY_CNT_REG_ADDR_SPACE_BAR1
+ #define ERROR_RECOVERY_QCFG_RESP_ERR_RECOVERY_CNT_REG_ADDR_MASK 0xfffffffcUL
+ #define ERROR_RECOVERY_QCFG_RESP_ERR_RECOVERY_CNT_REG_ADDR_SFT 2
+ u8 unused_1[3];
u8 valid;
};
@@ -3048,6 +3078,90 @@ struct rx_port_stats_ext {
__le64 rx_discard_packets_cos7;
};
+/* rx_port_stats_ext_pfc_wd (size:5120b/640B) */
+struct rx_port_stats_ext_pfc_wd {
+ __le64 rx_pfc_watchdog_storms_detected_pri0;
+ __le64 rx_pfc_watchdog_storms_detected_pri1;
+ __le64 rx_pfc_watchdog_storms_detected_pri2;
+ __le64 rx_pfc_watchdog_storms_detected_pri3;
+ __le64 rx_pfc_watchdog_storms_detected_pri4;
+ __le64 rx_pfc_watchdog_storms_detected_pri5;
+ __le64 rx_pfc_watchdog_storms_detected_pri6;
+ __le64 rx_pfc_watchdog_storms_detected_pri7;
+ __le64 rx_pfc_watchdog_storms_reverted_pri0;
+ __le64 rx_pfc_watchdog_storms_reverted_pri1;
+ __le64 rx_pfc_watchdog_storms_reverted_pri2;
+ __le64 rx_pfc_watchdog_storms_reverted_pri3;
+ __le64 rx_pfc_watchdog_storms_reverted_pri4;
+ __le64 rx_pfc_watchdog_storms_reverted_pri5;
+ __le64 rx_pfc_watchdog_storms_reverted_pri6;
+ __le64 rx_pfc_watchdog_storms_reverted_pri7;
+ __le64 rx_pfc_watchdog_storms_rx_packets_pri0;
+ __le64 rx_pfc_watchdog_storms_rx_packets_pri1;
+ __le64 rx_pfc_watchdog_storms_rx_packets_pri2;
+ __le64 rx_pfc_watchdog_storms_rx_packets_pri3;
+ __le64 rx_pfc_watchdog_storms_rx_packets_pri4;
+ __le64 rx_pfc_watchdog_storms_rx_packets_pri5;
+ __le64 rx_pfc_watchdog_storms_rx_packets_pri6;
+ __le64 rx_pfc_watchdog_storms_rx_packets_pri7;
+ __le64 rx_pfc_watchdog_storms_rx_bytes_pri0;
+ __le64 rx_pfc_watchdog_storms_rx_bytes_pri1;
+ __le64 rx_pfc_watchdog_storms_rx_bytes_pri2;
+ __le64 rx_pfc_watchdog_storms_rx_bytes_pri3;
+ __le64 rx_pfc_watchdog_storms_rx_bytes_pri4;
+ __le64 rx_pfc_watchdog_storms_rx_bytes_pri5;
+ __le64 rx_pfc_watchdog_storms_rx_bytes_pri6;
+ __le64 rx_pfc_watchdog_storms_rx_bytes_pri7;
+ __le64 rx_pfc_watchdog_storms_rx_packets_dropped_pri0;
+ __le64 rx_pfc_watchdog_storms_rx_packets_dropped_pri1;
+ __le64 rx_pfc_watchdog_storms_rx_packets_dropped_pri2;
+ __le64 rx_pfc_watchdog_storms_rx_packets_dropped_pri3;
+ __le64 rx_pfc_watchdog_storms_rx_packets_dropped_pri4;
+ __le64 rx_pfc_watchdog_storms_rx_packets_dropped_pri5;
+ __le64 rx_pfc_watchdog_storms_rx_packets_dropped_pri6;
+ __le64 rx_pfc_watchdog_storms_rx_packets_dropped_pri7;
+ __le64 rx_pfc_watchdog_storms_rx_bytes_dropped_pri0;
+ __le64 rx_pfc_watchdog_storms_rx_bytes_dropped_pri1;
+ __le64 rx_pfc_watchdog_storms_rx_bytes_dropped_pri2;
+ __le64 rx_pfc_watchdog_storms_rx_bytes_dropped_pri3;
+ __le64 rx_pfc_watchdog_storms_rx_bytes_dropped_pri4;
+ __le64 rx_pfc_watchdog_storms_rx_bytes_dropped_pri5;
+ __le64 rx_pfc_watchdog_storms_rx_bytes_dropped_pri6;
+ __le64 rx_pfc_watchdog_storms_rx_bytes_dropped_pri7;
+ __le64 rx_pfc_watchdog_last_storm_rx_packets_pri0;
+ __le64 rx_pfc_watchdog_last_storm_rx_packets_pri1;
+ __le64 rx_pfc_watchdog_last_storm_rx_packets_pri2;
+ __le64 rx_pfc_watchdog_last_storm_rx_packets_pri3;
+ __le64 rx_pfc_watchdog_last_storm_rx_packets_pri4;
+ __le64 rx_pfc_watchdog_last_storm_rx_packets_pri5;
+ __le64 rx_pfc_watchdog_last_storm_rx_packets_pri6;
+ __le64 rx_pfc_watchdog_last_storm_rx_packets_pri7;
+ __le64 rx_pfc_watchdog_last_storm_rx_bytes_pri0;
+ __le64 rx_pfc_watchdog_last_storm_rx_bytes_pri1;
+ __le64 rx_pfc_watchdog_last_storm_rx_bytes_pri2;
+ __le64 rx_pfc_watchdog_last_storm_rx_bytes_pri3;
+ __le64 rx_pfc_watchdog_last_storm_rx_bytes_pri4;
+ __le64 rx_pfc_watchdog_last_storm_rx_bytes_pri5;
+ __le64 rx_pfc_watchdog_last_storm_rx_bytes_pri6;
+ __le64 rx_pfc_watchdog_last_storm_rx_bytes_pri7;
+ __le64 rx_pfc_watchdog_last_storm_rx_packets_dropped_pri0;
+ __le64 rx_pfc_watchdog_last_storm_rx_packets_dropped_pri1;
+ __le64 rx_pfc_watchdog_last_storm_rx_packets_dropped_pri2;
+ __le64 rx_pfc_watchdog_last_storm_rx_packets_dropped_pri3;
+ __le64 rx_pfc_watchdog_last_storm_rx_packets_dropped_pri4;
+ __le64 rx_pfc_watchdog_last_storm_rx_packets_dropped_pri5;
+ __le64 rx_pfc_watchdog_last_storm_rx_packets_dropped_pri6;
+ __le64 rx_pfc_watchdog_last_storm_rx_packets_dropped_pri7;
+ __le64 rx_pfc_watchdog_last_storm_rx_bytes_dropped_pri0;
+ __le64 rx_pfc_watchdog_last_storm_rx_bytes_dropped_pri1;
+ __le64 rx_pfc_watchdog_last_storm_rx_bytes_dropped_pri2;
+ __le64 rx_pfc_watchdog_last_storm_rx_bytes_dropped_pri3;
+ __le64 rx_pfc_watchdog_last_storm_rx_bytes_dropped_pri4;
+ __le64 rx_pfc_watchdog_last_storm_rx_bytes_dropped_pri5;
+ __le64 rx_pfc_watchdog_last_storm_rx_bytes_dropped_pri6;
+ __le64 rx_pfc_watchdog_last_storm_rx_bytes_dropped_pri7;
+};
+
/* hwrm_port_qstats_ext_input (size:320b/40B) */
struct hwrm_port_qstats_ext_input {
__le16 req_type;
@@ -3077,6 +3191,31 @@ struct hwrm_port_qstats_ext_output {
u8 valid;
};
+/* hwrm_port_qstats_ext_pfc_wd_input (size:256b/32B) */
+struct hwrm_port_qstats_ext_pfc_wd_input {
+ __le16 req_type;
+ __le16 cmpl_ring;
+ __le16 seq_id;
+ __le16 target_id;
+ __le64 resp_addr;
+ __le16 port_id;
+ __le16 pfc_wd_stat_size;
+ u8 unused_0[4];
+ __le64 pfc_wd_stat_host_addr;
+};
+
+/* hwrm_port_qstats_ext_pfc_wd_output (size:128b/16B) */
+struct hwrm_port_qstats_ext_pfc_wd_output {
+ __le16 error_code;
+ __le16 req_type;
+ __le16 seq_id;
+ __le16 resp_len;
+ __le16 pfc_wd_stat_size;
+ u8 flags;
+ u8 valid;
+ u8 unused_0[4];
+};
+
/* hwrm_port_lpbk_qstats_input (size:128b/16B) */
struct hwrm_port_lpbk_qstats_input {
__le16 req_type;
@@ -3106,6 +3245,36 @@ struct hwrm_port_lpbk_qstats_output {
u8 valid;
};
+/* hwrm_port_ecn_qstats_input (size:192b/24B) */
+struct hwrm_port_ecn_qstats_input {
+ __le16 req_type;
+ __le16 cmpl_ring;
+ __le16 seq_id;
+ __le16 target_id;
+ __le64 resp_addr;
+ __le16 port_id;
+ u8 unused_0[6];
+};
+
+/* hwrm_port_ecn_qstats_output (size:384b/48B) */
+struct hwrm_port_ecn_qstats_output {
+ __le16 error_code;
+ __le16 req_type;
+ __le16 seq_id;
+ __le16 resp_len;
+ __le32 mark_cnt_cos0;
+ __le32 mark_cnt_cos1;
+ __le32 mark_cnt_cos2;
+ __le32 mark_cnt_cos3;
+ __le32 mark_cnt_cos4;
+ __le32 mark_cnt_cos5;
+ __le32 mark_cnt_cos6;
+ __le32 mark_cnt_cos7;
+ u8 mark_en;
+ u8 unused_0[6];
+ u8 valid;
+};
+
/* hwrm_port_clr_stats_input (size:192b/24B) */
struct hwrm_port_clr_stats_input {
__le16 req_type;
@@ -3840,14 +4009,22 @@ struct hwrm_queue_pfcenable_qcfg_output {
__le16 seq_id;
__le16 resp_len;
__le32 flags;
- #define QUEUE_PFCENABLE_QCFG_RESP_FLAGS_PRI0_PFC_ENABLED 0x1UL
- #define QUEUE_PFCENABLE_QCFG_RESP_FLAGS_PRI1_PFC_ENABLED 0x2UL
- #define QUEUE_PFCENABLE_QCFG_RESP_FLAGS_PRI2_PFC_ENABLED 0x4UL
- #define QUEUE_PFCENABLE_QCFG_RESP_FLAGS_PRI3_PFC_ENABLED 0x8UL
- #define QUEUE_PFCENABLE_QCFG_RESP_FLAGS_PRI4_PFC_ENABLED 0x10UL
- #define QUEUE_PFCENABLE_QCFG_RESP_FLAGS_PRI5_PFC_ENABLED 0x20UL
- #define QUEUE_PFCENABLE_QCFG_RESP_FLAGS_PRI6_PFC_ENABLED 0x40UL
- #define QUEUE_PFCENABLE_QCFG_RESP_FLAGS_PRI7_PFC_ENABLED 0x80UL
+ #define QUEUE_PFCENABLE_QCFG_RESP_FLAGS_PRI0_PFC_ENABLED 0x1UL
+ #define QUEUE_PFCENABLE_QCFG_RESP_FLAGS_PRI1_PFC_ENABLED 0x2UL
+ #define QUEUE_PFCENABLE_QCFG_RESP_FLAGS_PRI2_PFC_ENABLED 0x4UL
+ #define QUEUE_PFCENABLE_QCFG_RESP_FLAGS_PRI3_PFC_ENABLED 0x8UL
+ #define QUEUE_PFCENABLE_QCFG_RESP_FLAGS_PRI4_PFC_ENABLED 0x10UL
+ #define QUEUE_PFCENABLE_QCFG_RESP_FLAGS_PRI5_PFC_ENABLED 0x20UL
+ #define QUEUE_PFCENABLE_QCFG_RESP_FLAGS_PRI6_PFC_ENABLED 0x40UL
+ #define QUEUE_PFCENABLE_QCFG_RESP_FLAGS_PRI7_PFC_ENABLED 0x80UL
+ #define QUEUE_PFCENABLE_QCFG_RESP_FLAGS_PRI0_PFC_WATCHDOG_ENABLED 0x100UL
+ #define QUEUE_PFCENABLE_QCFG_RESP_FLAGS_PRI1_PFC_WATCHDOG_ENABLED 0x200UL
+ #define QUEUE_PFCENABLE_QCFG_RESP_FLAGS_PRI2_PFC_WATCHDOG_ENABLED 0x400UL
+ #define QUEUE_PFCENABLE_QCFG_RESP_FLAGS_PRI3_PFC_WATCHDOG_ENABLED 0x800UL
+ #define QUEUE_PFCENABLE_QCFG_RESP_FLAGS_PRI4_PFC_WATCHDOG_ENABLED 0x1000UL
+ #define QUEUE_PFCENABLE_QCFG_RESP_FLAGS_PRI5_PFC_WATCHDOG_ENABLED 0x2000UL
+ #define QUEUE_PFCENABLE_QCFG_RESP_FLAGS_PRI6_PFC_WATCHDOG_ENABLED 0x4000UL
+ #define QUEUE_PFCENABLE_QCFG_RESP_FLAGS_PRI7_PFC_WATCHDOG_ENABLED 0x8000UL
u8 unused_0[3];
u8 valid;
};
@@ -3860,14 +4037,22 @@ struct hwrm_queue_pfcenable_cfg_input {
__le16 target_id;
__le64 resp_addr;
__le32 flags;
- #define QUEUE_PFCENABLE_CFG_REQ_FLAGS_PRI0_PFC_ENABLED 0x1UL
- #define QUEUE_PFCENABLE_CFG_REQ_FLAGS_PRI1_PFC_ENABLED 0x2UL
- #define QUEUE_PFCENABLE_CFG_REQ_FLAGS_PRI2_PFC_ENABLED 0x4UL
- #define QUEUE_PFCENABLE_CFG_REQ_FLAGS_PRI3_PFC_ENABLED 0x8UL
- #define QUEUE_PFCENABLE_CFG_REQ_FLAGS_PRI4_PFC_ENABLED 0x10UL
- #define QUEUE_PFCENABLE_CFG_REQ_FLAGS_PRI5_PFC_ENABLED 0x20UL
- #define QUEUE_PFCENABLE_CFG_REQ_FLAGS_PRI6_PFC_ENABLED 0x40UL
- #define QUEUE_PFCENABLE_CFG_REQ_FLAGS_PRI7_PFC_ENABLED 0x80UL
+ #define QUEUE_PFCENABLE_CFG_REQ_FLAGS_PRI0_PFC_ENABLED 0x1UL
+ #define QUEUE_PFCENABLE_CFG_REQ_FLAGS_PRI1_PFC_ENABLED 0x2UL
+ #define QUEUE_PFCENABLE_CFG_REQ_FLAGS_PRI2_PFC_ENABLED 0x4UL
+ #define QUEUE_PFCENABLE_CFG_REQ_FLAGS_PRI3_PFC_ENABLED 0x8UL
+ #define QUEUE_PFCENABLE_CFG_REQ_FLAGS_PRI4_PFC_ENABLED 0x10UL
+ #define QUEUE_PFCENABLE_CFG_REQ_FLAGS_PRI5_PFC_ENABLED 0x20UL
+ #define QUEUE_PFCENABLE_CFG_REQ_FLAGS_PRI6_PFC_ENABLED 0x40UL
+ #define QUEUE_PFCENABLE_CFG_REQ_FLAGS_PRI7_PFC_ENABLED 0x80UL
+ #define QUEUE_PFCENABLE_CFG_REQ_FLAGS_PRI0_PFC_WATCHDOG_ENABLED 0x100UL
+ #define QUEUE_PFCENABLE_CFG_REQ_FLAGS_PRI1_PFC_WATCHDOG_ENABLED 0x200UL
+ #define QUEUE_PFCENABLE_CFG_REQ_FLAGS_PRI2_PFC_WATCHDOG_ENABLED 0x400UL
+ #define QUEUE_PFCENABLE_CFG_REQ_FLAGS_PRI3_PFC_WATCHDOG_ENABLED 0x800UL
+ #define QUEUE_PFCENABLE_CFG_REQ_FLAGS_PRI4_PFC_WATCHDOG_ENABLED 0x1000UL
+ #define QUEUE_PFCENABLE_CFG_REQ_FLAGS_PRI5_PFC_WATCHDOG_ENABLED 0x2000UL
+ #define QUEUE_PFCENABLE_CFG_REQ_FLAGS_PRI6_PFC_WATCHDOG_ENABLED 0x4000UL
+ #define QUEUE_PFCENABLE_CFG_REQ_FLAGS_PRI7_PFC_WATCHDOG_ENABLED 0x8000UL
__le16 port_id;
u8 unused_0[2];
};
@@ -7222,6 +7407,49 @@ struct hwrm_temp_monitor_query_output {
u8 valid;
};
+/* hwrm_fw_ecn_cfg_input (size:192b/24B) */
+struct hwrm_fw_ecn_cfg_input {
+ __le16 req_type;
+ __le16 cmpl_ring;
+ __le16 seq_id;
+ __le16 target_id;
+ __le64 resp_addr;
+ __le16 flags;
+ #define FW_ECN_CFG_REQ_FLAGS_ENABLE_ECN 0x1UL
+ u8 unused_0[6];
+};
+
+/* hwrm_fw_ecn_cfg_output (size:128b/16B) */
+struct hwrm_fw_ecn_cfg_output {
+ __le16 error_code;
+ __le16 req_type;
+ __le16 seq_id;
+ __le16 resp_len;
+ u8 unused_0[7];
+ u8 valid;
+};
+
+/* hwrm_fw_ecn_qcfg_input (size:128b/16B) */
+struct hwrm_fw_ecn_qcfg_input {
+ __le16 req_type;
+ __le16 cmpl_ring;
+ __le16 seq_id;
+ __le16 target_id;
+ __le64 resp_addr;
+};
+
+/* hwrm_fw_ecn_qcfg_output (size:128b/16B) */
+struct hwrm_fw_ecn_qcfg_output {
+ __le16 error_code;
+ __le16 req_type;
+ __le16 seq_id;
+ __le16 resp_len;
+ __le16 flags;
+ #define FW_ECN_QCFG_RESP_FLAGS_ENABLE_ECN 0x1UL
+ u8 unused_0[5];
+ u8 valid;
+};
+
/* hwrm_wol_filter_alloc_input (size:512b/64B) */
struct hwrm_wol_filter_alloc_input {
__le16 req_type;
@@ -7501,6 +7729,35 @@ struct hwrm_dbg_ring_info_get_output {
u8 valid;
};
+/* hwrm_dbg_drv_trace_input (size:1024b/128B) */
+struct hwrm_dbg_drv_trace_input {
+ __le16 req_type;
+ __le16 cmpl_ring;
+ __le16 seq_id;
+ __le16 target_id;
+ __le64 resp_addr;
+ u8 severity;
+ #define DBG_DRV_TRACE_REQ_SEVERITY_TRACE_LEVEL_FATAL 0x0UL
+ #define DBG_DRV_TRACE_REQ_SEVERITY_TRACE_LEVEL_ERROR 0x1UL
+ #define DBG_DRV_TRACE_REQ_SEVERITY_TRACE_LEVEL_WARNING 0x2UL
+ #define DBG_DRV_TRACE_REQ_SEVERITY_TRACE_LEVEL_INFO 0x3UL
+ #define DBG_DRV_TRACE_REQ_SEVERITY_TRACE_LEVEL_DEBUG 0x4UL
+ #define DBG_DRV_TRACE_REQ_SEVERITY_LAST DBG_DRV_TRACE_REQ_SEVERITY_TRACE_LEVEL_DEBUG
+ u8 write_len;
+ u8 unused_0[6];
+ char trace_data[104];
+};
+
+/* hwrm_dbg_drv_trace_output (size:128b/16B) */
+struct hwrm_dbg_drv_trace_output {
+ __le16 error_code;
+ __le16 req_type;
+ __le16 seq_id;
+ __le16 resp_len;
+ u8 unused_0[7];
+ u8 valid;
+};
+
/* hwrm_nvm_read_input (size:320b/40B) */
struct hwrm_nvm_read_input {
__le16 req_type;
--
1.8.3.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH net-next 11/11] bnxt_en: Use "enable_ecn" devlink param
2020-03-17 15:17 [PATCH net-next 07/11] bnxt_en: Read partno and serialno of the board from VPD Vasundhara Volam
` (2 preceding siblings ...)
2020-03-17 15:17 ` [PATCH net-next 10/11] bnxt_en: Update firmware interface spec to 1.10.1.26 Vasundhara Volam
@ 2020-03-17 15:17 ` Vasundhara Volam
3 siblings, 0 replies; 9+ messages in thread
From: Vasundhara Volam @ 2020-03-17 15:17 UTC (permalink / raw)
To: davem; +Cc: netdev, Pavan Chebbi, Vasundhara Volam, Michael Chan
From: Pavan Chebbi <pavan.chebbi@broadcom.com>
Add support for "enable_ecn" devlink parameter with configuration
mode as permanent and runtime. Also update bnxt.rst documentation
file.
Signed-off-by: Pavan Chebbi <pavan.chebbi@broadcom.com>
Signed-off-by: Vasundhara Volam <vasundhara-v.volam@broadcom.com>
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
---
Documentation/networking/devlink/bnxt.rst | 2 +
drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c | 81 ++++++++++++++++++++---
drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.h | 1 +
3 files changed, 73 insertions(+), 11 deletions(-)
diff --git a/Documentation/networking/devlink/bnxt.rst b/Documentation/networking/devlink/bnxt.rst
index 17b6522..5541826 100644
--- a/Documentation/networking/devlink/bnxt.rst
+++ b/Documentation/networking/devlink/bnxt.rst
@@ -22,6 +22,8 @@ Parameters
- Permanent
* - ``msix_vec_per_pf_min``
- Permanent
+ * - ``enable_ecn``
+ - Permanent, runtime
The ``bnxt`` driver also implements the following driver-specific
parameters.
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c
index 6065602..53274be 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c
@@ -312,6 +312,8 @@ enum bnxt_dl_param_id {
NVM_OFF_MSIX_VEC_PER_PF_MAX, BNXT_NVM_SHARED_CFG, 10, 4},
{DEVLINK_PARAM_GENERIC_ID_MSIX_VEC_PER_PF_MIN,
NVM_OFF_MSIX_VEC_PER_PF_MIN, BNXT_NVM_SHARED_CFG, 7, 4},
+ {DEVLINK_PARAM_GENERIC_ID_ENABLE_ECN, NVM_OFF_ENABLE_ECN,
+ BNXT_NVM_SHARED_CFG, 1, 1},
{BNXT_DEVLINK_PARAM_ID_GRE_VER_CHECK, NVM_OFF_DIS_GRE_VER_CHECK,
BNXT_NVM_SHARED_CFG, 1, 1},
};
@@ -626,15 +628,42 @@ static int bnxt_hwrm_nvm_req(struct bnxt *bp, u32 param_id, void *msg,
static int bnxt_dl_nvm_param_get(struct devlink *dl, u32 id,
struct devlink_param_gset_ctx *ctx)
{
- struct hwrm_nvm_get_variable_input req = {0};
struct bnxt *bp = bnxt_get_bp_from_dl(dl);
int rc;
- bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_NVM_GET_VARIABLE, -1, -1);
- rc = bnxt_hwrm_nvm_req(bp, id, &req, sizeof(req), &ctx->val);
- if (!rc)
- if (id == BNXT_DEVLINK_PARAM_ID_GRE_VER_CHECK)
- ctx->val.vbool = !ctx->val.vbool;
+ if (ctx->cmode == DEVLINK_PARAM_CMODE_PERMANENT) {
+ struct hwrm_nvm_get_variable_input req = {0};
+
+ bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_NVM_GET_VARIABLE, -1, -1);
+ rc = bnxt_hwrm_nvm_req(bp, id, &req, sizeof(req), &ctx->val);
+ if (!rc)
+ if (id == BNXT_DEVLINK_PARAM_ID_GRE_VER_CHECK)
+ ctx->val.vbool = !ctx->val.vbool;
+ } else if (ctx->cmode == DEVLINK_PARAM_CMODE_RUNTIME) {
+ switch (id) {
+ case DEVLINK_PARAM_GENERIC_ID_ENABLE_ECN:
+ {
+ struct hwrm_fw_ecn_qcfg_input req = {0};
+ struct hwrm_fw_ecn_qcfg_output *resp =
+ bp->hwrm_cmd_resp_addr;
+
+ bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_FW_ECN_QCFG,
+ -1, -1);
+ rc = hwrm_send_message(bp, &req, sizeof(req),
+ HWRM_CMD_TIMEOUT);
+ if (!rc) {
+ if (resp->flags &
+ FW_ECN_QCFG_RESP_FLAGS_ENABLE_ECN)
+ ctx->val.vbool = true;
+ }
+ break;
+ }
+ default:
+ netdev_err(bp->dev, "Unsupported devlink parameter\n");
+ rc = -EOPNOTSUPP;
+ break;
+ }
+ }
return rc;
}
@@ -642,15 +671,40 @@ static int bnxt_dl_nvm_param_get(struct devlink *dl, u32 id,
static int bnxt_dl_nvm_param_set(struct devlink *dl, u32 id,
struct devlink_param_gset_ctx *ctx)
{
- struct hwrm_nvm_set_variable_input req = {0};
struct bnxt *bp = bnxt_get_bp_from_dl(dl);
+ int rc;
- bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_NVM_SET_VARIABLE, -1, -1);
+ if (ctx->cmode == DEVLINK_PARAM_CMODE_PERMANENT) {
+ struct hwrm_nvm_set_variable_input req = {0};
- if (id == BNXT_DEVLINK_PARAM_ID_GRE_VER_CHECK)
- ctx->val.vbool = !ctx->val.vbool;
+ if (id == BNXT_DEVLINK_PARAM_ID_GRE_VER_CHECK)
+ ctx->val.vbool = !ctx->val.vbool;
- return bnxt_hwrm_nvm_req(bp, id, &req, sizeof(req), &ctx->val);
+ bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_NVM_SET_VARIABLE, -1, -1);
+ rc = bnxt_hwrm_nvm_req(bp, id, &req, sizeof(req), &ctx->val);
+ } else if (ctx->cmode == DEVLINK_PARAM_CMODE_RUNTIME) {
+ switch (id) {
+ case DEVLINK_PARAM_GENERIC_ID_ENABLE_ECN:
+ {
+ struct hwrm_fw_ecn_cfg_input req = {0};
+
+ bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_FW_ECN_CFG,
+ -1, -1);
+ if (ctx->val.vbool)
+ req.flags =
+ cpu_to_le32(FW_ECN_CFG_REQ_FLAGS_ENABLE_ECN);
+ rc = hwrm_send_message(bp, &req, sizeof(req),
+ HWRM_CMD_TIMEOUT);
+ break;
+ }
+ default:
+ netdev_err(bp->dev, "Unsupported devlink parameter\n");
+ rc = -EOPNOTSUPP;
+ break;
+ }
+ }
+
+ return rc;
}
static int bnxt_dl_msix_validate(struct devlink *dl, u32 id,
@@ -690,6 +744,11 @@ static int bnxt_dl_msix_validate(struct devlink *dl, u32 id,
BIT(DEVLINK_PARAM_CMODE_PERMANENT),
bnxt_dl_nvm_param_get, bnxt_dl_nvm_param_set,
bnxt_dl_msix_validate),
+ DEVLINK_PARAM_GENERIC(ENABLE_ECN,
+ BIT(DEVLINK_PARAM_CMODE_PERMANENT) |
+ BIT(DEVLINK_PARAM_CMODE_RUNTIME),
+ bnxt_dl_nvm_param_get, bnxt_dl_nvm_param_set,
+ NULL),
DEVLINK_PARAM_DRIVER(BNXT_DEVLINK_PARAM_ID_GRE_VER_CHECK,
"gre_ver_check", DEVLINK_PARAM_TYPE_BOOL,
BIT(DEVLINK_PARAM_CMODE_PERMANENT),
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.h b/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.h
index e720b1d..71ba65a 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.h
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.h
@@ -38,6 +38,7 @@ static inline void bnxt_link_bp_to_dl(struct bnxt *bp, struct devlink *dl)
#define NVM_OFF_MSIX_VEC_PER_PF_MIN 114
#define NVM_OFF_IGNORE_ARI 164
#define NVM_OFF_DIS_GRE_VER_CHECK 171
+#define NVM_OFF_ENABLE_ECN 173
#define NVM_OFF_ENABLE_SRIOV 401
#define NVM_OFF_NVM_CFG_VER 602
--
1.8.3.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH net-next 08/11] bnxt_en: Add partno and serialno to devlink info_get cb
2020-03-17 15:17 ` [PATCH net-next 08/11] bnxt_en: Add partno and serialno to devlink info_get cb Vasundhara Volam
@ 2020-03-17 17:51 ` Jakub Kicinski
0 siblings, 0 replies; 9+ messages in thread
From: Jakub Kicinski @ 2020-03-17 17:51 UTC (permalink / raw)
To: Vasundhara Volam; +Cc: davem, netdev, Michael Chan
On Tue, 17 Mar 2020 20:47:23 +0530 Vasundhara Volam wrote:
> Add part number and serial number info from the vital product data
> to info_get command via devlink tool.
>
> Some of the broadcom devices support both PCI extended config space
> for device serial number and VPD serial number. With this patch, both
> the information will be displayed via info_get cb.
>
> Update bnxt.rst documentation as well.
>
> Example display:
>
> $ devlink dev info pci/0000:3b:00.1
> pci/0000:3b:00.1:
> driver bnxt_en
> serial_number B0-26-28-FF-FE-C8-85-20
> versions:
> fixed:
> board.id BCM957508-P2100G
> asic.id 1750
> asic.rev 1
> vpd.serialno P2100pm01920A0032CQ
This looks like it's a concatenation of multiple things. Isn't it?
> running:
> drv.spec 1.10.1.12
> hw.addr b0:26:28:c8:85:21
> hw.mh_base_addr b0:26:28:c8:85:20
> fw 216.0.286.0
> fw.psid 0.0.6
> fw.app 216.0.251.0
>
> Signed-off-by: Vasundhara Volam <vasundhara-v.volam@broadcom.com>
> Signed-off-by: Michael Chan <michael.chan@broadcom.com>
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH net-next 09/11] devlink: Add new enable_ecn generic device param
2020-03-17 15:17 ` [PATCH net-next 09/11] devlink: Add new enable_ecn generic device param Vasundhara Volam
@ 2020-03-17 17:52 ` Jakub Kicinski
2020-03-18 5:26 ` Pavan Chebbi
0 siblings, 1 reply; 9+ messages in thread
From: Jakub Kicinski @ 2020-03-17 17:52 UTC (permalink / raw)
To: Vasundhara Volam; +Cc: davem, netdev, Pavan Chebbi, Jiri Pirko, Michael Chan
On Tue, 17 Mar 2020 20:47:24 +0530 Vasundhara Volam wrote:
> From: Pavan Chebbi <pavan.chebbi@broadcom.com>
>
> Add new device parameter to enable/disable handling of Explicit
> Congestion Notification(ECN) in the device.
>
> This patch also addresses comments from Jiri Pirko, to update the
> devlink-info.rst documentation.
>
> Cc: Jiri Pirko <jiri@mellanox.com>
> Signed-off-by: Pavan Chebbi <pavan.chebbi@broadcom.com>
> Signed-off-by: Vasundhara Volam <vasundhara-v.volam@broadcom.com>
> Signed-off-by: Michael Chan <michael.chan@broadcom.com>
Nacked-by: Jakub Kicinski <kuba@kernel.org>
We've been over this multiple times. Devlink is not for configuring
forwarding features. Use qdisc offload.
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH net-next 09/11] devlink: Add new enable_ecn generic device param
2020-03-17 17:52 ` Jakub Kicinski
@ 2020-03-18 5:26 ` Pavan Chebbi
2020-03-18 20:15 ` Jakub Kicinski
0 siblings, 1 reply; 9+ messages in thread
From: Pavan Chebbi @ 2020-03-18 5:26 UTC (permalink / raw)
To: Jakub Kicinski; +Cc: Vasundhara Volam, davem, netdev, Jiri Pirko, Michael Chan
On Tue, Mar 17, 2020 at 11:22 PM Jakub Kicinski <kuba@kernel.org> wrote:
>
> On Tue, 17 Mar 2020 20:47:24 +0530 Vasundhara Volam wrote:
> > From: Pavan Chebbi <pavan.chebbi@broadcom.com>
> >
> > Add new device parameter to enable/disable handling of Explicit
> > Congestion Notification(ECN) in the device.
> >
> > This patch also addresses comments from Jiri Pirko, to update the
> > devlink-info.rst documentation.
> >
> > Cc: Jiri Pirko <jiri@mellanox.com>
> > Signed-off-by: Pavan Chebbi <pavan.chebbi@broadcom.com>
> > Signed-off-by: Vasundhara Volam <vasundhara-v.volam@broadcom.com>
> > Signed-off-by: Michael Chan <michael.chan@broadcom.com>
>
> Nacked-by: Jakub Kicinski <kuba@kernel.org>
>
> We've been over this multiple times. Devlink is not for configuring
> forwarding features. Use qdisc offload.
This is just a config option like enable_sriov and enable_roce.
This will only enable the capability in the device and not configure any rules.
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH net-next 09/11] devlink: Add new enable_ecn generic device param
2020-03-18 5:26 ` Pavan Chebbi
@ 2020-03-18 20:15 ` Jakub Kicinski
0 siblings, 0 replies; 9+ messages in thread
From: Jakub Kicinski @ 2020-03-18 20:15 UTC (permalink / raw)
To: Pavan Chebbi; +Cc: Vasundhara Volam, davem, netdev, Jiri Pirko, Michael Chan
On Wed, 18 Mar 2020 10:56:52 +0530 Pavan Chebbi wrote:
> On Tue, Mar 17, 2020 at 11:22 PM Jakub Kicinski <kuba@kernel.org> wrote:
> >
> > On Tue, 17 Mar 2020 20:47:24 +0530 Vasundhara Volam wrote:
> > > From: Pavan Chebbi <pavan.chebbi@broadcom.com>
> > >
> > > Add new device parameter to enable/disable handling of Explicit
> > > Congestion Notification(ECN) in the device.
> > >
> > > This patch also addresses comments from Jiri Pirko, to update the
> > > devlink-info.rst documentation.
> > >
> > > Cc: Jiri Pirko <jiri@mellanox.com>
> > > Signed-off-by: Pavan Chebbi <pavan.chebbi@broadcom.com>
> > > Signed-off-by: Vasundhara Volam <vasundhara-v.volam@broadcom.com>
> > > Signed-off-by: Michael Chan <michael.chan@broadcom.com>
> >
> > Nacked-by: Jakub Kicinski <kuba@kernel.org>
> >
> > We've been over this multiple times. Devlink is not for configuring
> > forwarding features. Use qdisc offload.
>
> This is just a config option like enable_sriov and enable_roce.
> This will only enable the capability in the device and not configure any rules.
Not what the documentation added by the patch says. But I'm sure the
reality^W documentation can be bent as needed.
If you really "just enable the capability like SR-IOV", please come
back with this patch once you implement an API to make use of such
capability.
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2020-03-18 20:15 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-03-17 15:17 [PATCH net-next 07/11] bnxt_en: Read partno and serialno of the board from VPD Vasundhara Volam
2020-03-17 15:17 ` [PATCH net-next 08/11] bnxt_en: Add partno and serialno to devlink info_get cb Vasundhara Volam
2020-03-17 17:51 ` Jakub Kicinski
2020-03-17 15:17 ` [PATCH net-next 09/11] devlink: Add new enable_ecn generic device param Vasundhara Volam
2020-03-17 17:52 ` Jakub Kicinski
2020-03-18 5:26 ` Pavan Chebbi
2020-03-18 20:15 ` Jakub Kicinski
2020-03-17 15:17 ` [PATCH net-next 10/11] bnxt_en: Update firmware interface spec to 1.10.1.26 Vasundhara Volam
2020-03-17 15:17 ` [PATCH net-next 11/11] bnxt_en: Use "enable_ecn" devlink param Vasundhara Volam
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).