netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH net-next 0/9] bnxt_en: Update for net-next
@ 2024-07-13 23:43 Michael Chan
  2024-07-13 23:43 ` [PATCH net-next 1/9] bnxt_en: add support for storing crash dump into host memory Michael Chan
                   ` (8 more replies)
  0 siblings, 9 replies; 27+ messages in thread
From: Michael Chan @ 2024-07-13 23:43 UTC (permalink / raw)
  To: davem; +Cc: netdev, edumazet, kuba, pabeni, pavan.chebbi, andrew.gospodarek

[-- Attachment #1: Type: text/plain, Size: 1603 bytes --]

This series starts with 2 patches to support firmware crash dump.  The
driver allocates the required DMA memory ahead of time for firmware to
store the crash dump if and when it crashes.  Patch 3 adds priority and
TPID for the .ndo_set_vf_vlan() callback.  Note that this was rejected
and reverted last year and it is being re-submitted after recent changes
in the guidelines.  The remaining patches are MSIX related.  Legacy
interrupt is no longer supported by firmware so we remove the support
in the driver.  We then convert to use the newer kernel APIs to
allocate and enable MSIX vectors.  The last patch adds support for
dynamic MSIX.

Michael Chan (6):
  bnxt_en: Deprecate support for legacy INTX mode
  bnxt_en: Remove BNXT_FLAG_USING_MSIX flag
  bnxt_en: Remove register mapping to support INTX
  bnxt_en: Replace deprecated PCI MSIX APIs
  bnxt_en: Allocate the max bp->irq_tbl size for dynamic msix allocation
  bnxt_en: Support dynamic MSIX

Sreekanth Reddy (1):
  bnxt_en: Support QOS and TPID settings for the SRIOV VLAN

Vikas Gupta (2):
  bnxt_en: add support for storing crash dump into host memory
  bnxt_en: add support for retrieving crash dump using ethtool

 drivers/net/ethernet/broadcom/bnxt/bnxt.c     | 329 ++++++++++--------
 drivers/net/ethernet/broadcom/bnxt/bnxt.h     |   8 +-
 .../ethernet/broadcom/bnxt/bnxt_coredump.c    | 101 +++++-
 .../ethernet/broadcom/bnxt/bnxt_coredump.h    |   8 +
 .../net/ethernet/broadcom/bnxt/bnxt_ethtool.c |  13 +-
 .../net/ethernet/broadcom/bnxt/bnxt_sriov.c   |  29 +-
 6 files changed, 302 insertions(+), 186 deletions(-)

-- 
2.30.1


[-- Attachment #2: S/MIME Cryptographic Signature --]
[-- Type: application/pkcs7-signature, Size: 4209 bytes --]

^ permalink raw reply	[flat|nested] 27+ messages in thread

* [PATCH net-next 1/9] bnxt_en: add support for storing crash dump into host memory
  2024-07-13 23:43 [PATCH net-next 0/9] bnxt_en: Update for net-next Michael Chan
@ 2024-07-13 23:43 ` Michael Chan
  2024-07-15  9:28   ` Simon Horman
  2024-07-13 23:43 ` [PATCH net-next 2/9] bnxt_en: add support for retrieving crash dump using ethtool Michael Chan
                   ` (7 subsequent siblings)
  8 siblings, 1 reply; 27+ messages in thread
From: Michael Chan @ 2024-07-13 23:43 UTC (permalink / raw)
  To: davem
  Cc: netdev, edumazet, kuba, pabeni, pavan.chebbi, andrew.gospodarek,
	Vikas Gupta, Somnath Kotur

[-- Attachment #1: Type: text/plain, Size: 8155 bytes --]

From: Vikas Gupta <vikas.gupta@broadcom.com>

Newer firmware supports automatic DMA of crash dump to host memory
when it crashes.  If the feature is supported, allocate the required
memory using the existing context memory infrastructure.  Communicate
the page table containing the DMA addresses to the firmware.

Reviewed-by: Somnath Kotur <somnath.kotur@broadcom.com>
Reviewed-by: Pavan Chebbi <pavan.chebbi@broadcom.com>
Reviewed-by: Andy Gospodarek <andrew.gospodarek@broadcom.com>
Signed-off-by: Vikas Gupta <vikas.gupta@broadcom.com>
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
---
 drivers/net/ethernet/broadcom/bnxt/bnxt.c     | 93 +++++++++++++++++++
 drivers/net/ethernet/broadcom/bnxt/bnxt.h     |  3 +
 .../ethernet/broadcom/bnxt/bnxt_coredump.c    | 18 +++-
 .../ethernet/broadcom/bnxt/bnxt_coredump.h    |  8 ++
 4 files changed, 117 insertions(+), 5 deletions(-)

diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
index bb3be33c1bbd..37da16b39f77 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
@@ -69,6 +69,7 @@
 #include "bnxt_tc.h"
 #include "bnxt_devlink.h"
 #include "bnxt_debugfs.h"
+#include "bnxt_coredump.h"
 #include "bnxt_hwmon.h"
 
 #define BNXT_TX_TIMEOUT		(5 * HZ)
@@ -8939,6 +8940,82 @@ static int bnxt_alloc_ctx_mem(struct bnxt *bp)
 	return 0;
 }
 
+#define BNXT_SET_CRASHDUMP_PAGE_ATTR(attr)				\
+do {									\
+	if (BNXT_PAGE_SIZE == 0x2000)					\
+		attr = DBG_CRASHDUMP_MEDIUM_CFG_REQ_PG_SIZE_PG_8K;	\
+	else if (BNXT_PAGE_SIZE == 0x10000)				\
+		attr = DBG_CRASHDUMP_MEDIUM_CFG_REQ_PG_SIZE_PG_64K;	\
+	else								\
+		attr = DBG_CRASHDUMP_MEDIUM_CFG_REQ_PG_SIZE_PG_4K;	\
+} while (0)
+
+static int bnxt_hwrm_crash_dump_mem_cfg(struct bnxt *bp)
+{
+	struct hwrm_dbg_crashdump_medium_cfg_input *req;
+	u16 page_attr = 0;
+	int rc;
+
+	if (!(bp->fw_dbg_cap & DBG_QCAPS_RESP_FLAGS_CRASHDUMP_HOST_DDR))
+		return 0;
+
+	rc = hwrm_req_init(bp, req, HWRM_DBG_CRASHDUMP_MEDIUM_CFG);
+	if (rc)
+		return rc;
+
+	BNXT_SET_CRASHDUMP_PAGE_ATTR(page_attr);
+	req->pg_size_lvl = cpu_to_le16(page_attr |
+				       bp->fw_crash_mem->ring_mem.depth);
+	req->pbl = cpu_to_le64(bp->fw_crash_mem->ring_mem.pg_tbl_map);
+	req->size = cpu_to_le32(bp->fw_crash_len);
+	req->output_dest_flags = cpu_to_le16(BNXT_DBG_CR_DUMP_MDM_CFG_DDR);
+	return hwrm_req_send(bp, req);
+}
+
+static void bnxt_free_crash_dump_mem(struct bnxt *bp)
+{
+	if (bp->fw_crash_mem) {
+		bnxt_free_ctx_pg_tbls(bp, bp->fw_crash_mem);
+		kfree(bp->fw_crash_mem);
+		bp->fw_crash_len = 0;
+		bp->fw_crash_mem = NULL;
+	}
+}
+
+static int bnxt_alloc_crash_dump_mem(struct bnxt *bp)
+{
+	u32 mem_size = 0;
+	int rc;
+
+	if (!(bp->fw_dbg_cap & DBG_QCAPS_RESP_FLAGS_CRASHDUMP_HOST_DDR))
+		return 0;
+
+	rc = bnxt_hwrm_get_dump_len(bp, BNXT_DUMP_CRASH, &mem_size);
+	if (rc)
+		return rc;
+
+	mem_size = round_up(mem_size, 4);
+
+	if (bp->fw_crash_mem && mem_size == bp->fw_crash_len)
+		return 0;
+
+	bnxt_free_crash_dump_mem(bp);
+
+	bp->fw_crash_mem = kzalloc(sizeof(*bp->fw_crash_mem), GFP_KERNEL);
+	if (!bp->fw_crash_mem)
+		return -ENOMEM;
+
+	rc = bnxt_alloc_ctx_pg_tbls(bp, bp->fw_crash_mem, mem_size, 1, NULL);
+	if (rc) {
+		bnxt_free_crash_dump_mem(bp);
+		return rc;
+	}
+
+	bp->fw_crash_len = mem_size;
+
+	return 0;
+}
+
 int bnxt_hwrm_func_resc_qcaps(struct bnxt *bp, bool all)
 {
 	struct hwrm_func_resource_qcaps_output *resp;
@@ -13959,6 +14036,19 @@ static int bnxt_fw_init_one_p2(struct bnxt *bp)
 	if (rc)
 		return -ENODEV;
 
+	rc = bnxt_alloc_crash_dump_mem(bp);
+	if (rc)
+		netdev_warn(bp->dev, "crash dump mem alloc failure rc: %d\n",
+			    rc);
+	if (!rc) {
+		rc = bnxt_hwrm_crash_dump_mem_cfg(bp);
+		if (rc) {
+			bnxt_free_crash_dump_mem(bp);
+			netdev_warn(bp->dev,
+				    "hwrm crash dump mem failure rc: %d\n", rc);
+		}
+	}
+
 	if (bnxt_fw_pre_resv_vnics(bp))
 		bp->fw_cap |= BNXT_FW_CAP_PRE_RESV_VNICS;
 
@@ -15237,6 +15327,7 @@ static void bnxt_remove_one(struct pci_dev *pdev)
 	bp->fw_health = NULL;
 	bnxt_cleanup_pci(bp);
 	bnxt_free_ctx_mem(bp);
+	bnxt_free_crash_dump_mem(bp);
 	kfree(bp->rss_indir_tbl);
 	bp->rss_indir_tbl = NULL;
 	bnxt_free_port_stats(bp);
@@ -15875,6 +15966,7 @@ static int bnxt_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
 	bp->fw_health = NULL;
 	bnxt_cleanup_pci(bp);
 	bnxt_free_ctx_mem(bp);
+	bnxt_free_crash_dump_mem(bp);
 	kfree(bp->rss_indir_tbl);
 	bp->rss_indir_tbl = NULL;
 
@@ -15928,6 +16020,7 @@ static int bnxt_suspend(struct device *device)
 	bnxt_hwrm_func_drv_unrgtr(bp);
 	pci_disable_device(bp->pdev);
 	bnxt_free_ctx_mem(bp);
+	bnxt_free_crash_dump_mem(bp);
 	rtnl_unlock();
 	return rc;
 }
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.h b/drivers/net/ethernet/broadcom/bnxt/bnxt.h
index 6bbdc718c3a7..77bd36812293 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.h
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.h
@@ -2644,6 +2644,9 @@ struct bnxt {
 #endif
 	u32			thermal_threshold_type;
 	enum board_idx		board_idx;
+
+	struct bnxt_ctx_pg_info	*fw_crash_mem;
+	u32			fw_crash_len;
 };
 
 #define BNXT_NUM_RX_RING_STATS			8
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_coredump.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_coredump.c
index c06789882036..ebbad9ccab6a 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt_coredump.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_coredump.c
@@ -385,7 +385,7 @@ int bnxt_get_coredump(struct bnxt *bp, u16 dump_type, void *buf, u32 *dump_len)
 	}
 }
 
-static int bnxt_hwrm_get_dump_len(struct bnxt *bp, u16 dump_type, u32 *dump_len)
+int bnxt_hwrm_get_dump_len(struct bnxt *bp, u16 dump_type, u32 *dump_len)
 {
 	struct hwrm_dbg_qcfg_output *resp;
 	struct hwrm_dbg_qcfg_input *req;
@@ -395,7 +395,8 @@ static int bnxt_hwrm_get_dump_len(struct bnxt *bp, u16 dump_type, u32 *dump_len)
 		return -EOPNOTSUPP;
 
 	if (dump_type == BNXT_DUMP_CRASH &&
-	    !(bp->fw_dbg_cap & DBG_QCAPS_RESP_FLAGS_CRASHDUMP_SOC_DDR))
+	    !(bp->fw_dbg_cap & DBG_QCAPS_RESP_FLAGS_CRASHDUMP_SOC_DDR ||
+	     (bp->fw_dbg_cap & DBG_QCAPS_RESP_FLAGS_CRASHDUMP_HOST_DDR)))
 		return -EOPNOTSUPP;
 
 	rc = hwrm_req_init(bp, req, HWRM_DBG_QCFG);
@@ -403,8 +404,12 @@ static int bnxt_hwrm_get_dump_len(struct bnxt *bp, u16 dump_type, u32 *dump_len)
 		return rc;
 
 	req->fid = cpu_to_le16(0xffff);
-	if (dump_type == BNXT_DUMP_CRASH)
-		req->flags = cpu_to_le16(DBG_QCFG_REQ_FLAGS_CRASHDUMP_SIZE_FOR_DEST_DEST_SOC_DDR);
+	if (dump_type == BNXT_DUMP_CRASH) {
+		if (bp->fw_dbg_cap & DBG_QCAPS_RESP_FLAGS_CRASHDUMP_SOC_DDR)
+			req->flags = cpu_to_le16(BNXT_DBG_FL_CR_DUMP_SIZE_SOC);
+		else
+			req->flags = cpu_to_le16(BNXT_DBG_FL_CR_DUMP_SIZE_HOST);
+	}
 
 	resp = hwrm_req_hold(bp, req);
 	rc = hwrm_req_send(bp, req);
@@ -412,7 +417,10 @@ static int bnxt_hwrm_get_dump_len(struct bnxt *bp, u16 dump_type, u32 *dump_len)
 		goto get_dump_len_exit;
 
 	if (dump_type == BNXT_DUMP_CRASH) {
-		*dump_len = le32_to_cpu(resp->crashdump_size);
+		if (bp->fw_dbg_cap & DBG_QCAPS_RESP_FLAGS_CRASHDUMP_SOC_DDR)
+			*dump_len = BNXT_CRASH_DUMP_LEN;
+		else
+			*dump_len = le32_to_cpu(resp->crashdump_size);
 	} else {
 		/* Driver adds coredump header and "HWRM_VER_GET response"
 		 * segment additionally to coredump.
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_coredump.h b/drivers/net/ethernet/broadcom/bnxt/bnxt_coredump.h
index b1a1b2fffb19..a76d5c281413 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt_coredump.h
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_coredump.h
@@ -111,7 +111,15 @@ struct hwrm_dbg_cmn_output {
 	#define HWRM_DBG_CMN_FLAGS_MORE	1
 };
 
+#define BNXT_DBG_FL_CR_DUMP_SIZE_SOC	\
+	DBG_QCFG_REQ_FLAGS_CRASHDUMP_SIZE_FOR_DEST_DEST_SOC_DDR
+#define BNXT_DBG_FL_CR_DUMP_SIZE_HOST	\
+	DBG_QCFG_REQ_FLAGS_CRASHDUMP_SIZE_FOR_DEST_DEST_HOST_DDR
+#define BNXT_DBG_CR_DUMP_MDM_CFG_DDR	\
+	DBG_CRASHDUMP_MEDIUM_CFG_REQ_TYPE_DDR
+
 int bnxt_get_coredump(struct bnxt *bp, u16 dump_type, void *buf, u32 *dump_len);
+int bnxt_hwrm_get_dump_len(struct bnxt *bp, u16 dump_type, u32 *dump_len);
 u32 bnxt_get_coredump_length(struct bnxt *bp, u16 dump_type);
 
 #endif
-- 
2.30.1


[-- Attachment #2: S/MIME Cryptographic Signature --]
[-- Type: application/pkcs7-signature, Size: 4209 bytes --]

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH net-next 2/9] bnxt_en: add support for retrieving crash dump using ethtool
  2024-07-13 23:43 [PATCH net-next 0/9] bnxt_en: Update for net-next Michael Chan
  2024-07-13 23:43 ` [PATCH net-next 1/9] bnxt_en: add support for storing crash dump into host memory Michael Chan
@ 2024-07-13 23:43 ` Michael Chan
  2024-07-15  9:28   ` Simon Horman
  2024-07-13 23:43 ` [PATCH net-next 3/9] bnxt_en: Support QOS and TPID settings for the SRIOV VLAN Michael Chan
                   ` (6 subsequent siblings)
  8 siblings, 1 reply; 27+ messages in thread
From: Michael Chan @ 2024-07-13 23:43 UTC (permalink / raw)
  To: davem
  Cc: netdev, edumazet, kuba, pabeni, pavan.chebbi, andrew.gospodarek,
	Vikas Gupta, Somnath Kotur

[-- Attachment #1: Type: text/plain, Size: 4544 bytes --]

From: Vikas Gupta <vikas.gupta@broadcom.com>

Add support for retrieving crash dump using ethtool -w on the
supported interface.

Reviewed-by: Somnath Kotur <somnath.kotur@broadcom.com>
Reviewed-by: Pavan Chebbi <pavan.chebbi@broadcom.com>
Reviewed-by: Andy Gospodarek <andrew.gospodarek@broadcom.com>
Signed-off-by: Vikas Gupta <vikas.gupta@broadcom.com>
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
---
 .../ethernet/broadcom/bnxt/bnxt_coredump.c    | 83 +++++++++++++++++--
 .../net/ethernet/broadcom/bnxt/bnxt_ethtool.c | 13 ++-
 2 files changed, 87 insertions(+), 9 deletions(-)

diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_coredump.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_coredump.c
index ebbad9ccab6a..9ed915e4c618 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt_coredump.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_coredump.c
@@ -372,14 +372,78 @@ static int __bnxt_get_coredump(struct bnxt *bp, void *buf, u32 *dump_len)
 	return rc;
 }
 
+static u32 bnxt_copy_crash_data(struct bnxt_ring_mem_info *rmem, void *buf,
+				u32 dump_len)
+{
+	u32 data_copied = 0;
+	u32 data_len;
+	int i;
+
+	for (i = 0; i < rmem->nr_pages; i++) {
+		data_len = rmem->page_size;
+		if (data_copied + data_len > dump_len)
+			data_len = dump_len - data_copied;
+		memcpy(buf + data_copied, rmem->pg_arr[i], data_len);
+		data_copied += data_len;
+		if (data_copied >= dump_len)
+			break;
+	}
+	return data_copied;
+}
+
+static int bnxt_copy_crash_dump(struct bnxt *bp, void *buf, u32 dump_len)
+{
+	struct bnxt_ring_mem_info *rmem;
+	u32 offset = 0;
+
+	if (!bp->fw_crash_mem)
+		return -EEXIST;
+
+	rmem = &bp->fw_crash_mem->ring_mem;
+
+	if (rmem->depth > 1) {
+		int i;
+
+		for (i = 0; i < rmem->nr_pages; i++) {
+			struct bnxt_ctx_pg_info *pg_tbl;
+
+			pg_tbl = bp->fw_crash_mem->ctx_pg_tbl[i];
+			offset += bnxt_copy_crash_data(&pg_tbl->ring_mem,
+						       buf + offset,
+						       dump_len - offset);
+			if (offset >= dump_len)
+				break;
+		}
+	} else {
+		bnxt_copy_crash_data(rmem, buf, dump_len);
+	}
+
+	return 0;
+}
+
+static bool bnxt_crash_dump_avail(struct bnxt *bp)
+{
+	u32 sig = 0;
+
+	/* First 4 bytes(signature) of crash dump is always non-zero */
+	bnxt_copy_crash_dump(bp, &sig, sizeof(u32));
+	if (!sig)
+		return false;
+
+	return true;
+}
+
 int bnxt_get_coredump(struct bnxt *bp, u16 dump_type, void *buf, u32 *dump_len)
 {
 	if (dump_type == BNXT_DUMP_CRASH) {
+		if (bp->fw_dbg_cap & DBG_QCAPS_RESP_FLAGS_CRASHDUMP_HOST_DDR)
+			return bnxt_copy_crash_dump(bp, buf, *dump_len);
 #ifdef CONFIG_TEE_BNXT_FW
-		return tee_bnxt_copy_coredump(buf, 0, *dump_len);
-#else
-		return -EOPNOTSUPP;
+		else if (bp->fw_dbg_cap & DBG_QCAPS_RESP_FLAGS_CRASHDUMP_SOC_DDR)
+			return tee_bnxt_copy_coredump(buf, 0, *dump_len);
 #endif
+		else
+			return -EOPNOTSUPP;
 	} else {
 		return __bnxt_get_coredump(bp, buf, dump_len);
 	}
@@ -442,10 +506,17 @@ u32 bnxt_get_coredump_length(struct bnxt *bp, u16 dump_type)
 {
 	u32 len = 0;
 
+	if (dump_type == BNXT_DUMP_CRASH &&
+	    bp->fw_dbg_cap & DBG_QCAPS_RESP_FLAGS_CRASHDUMP_HOST_DDR &&
+	    bp->fw_crash_mem) {
+		if (!bnxt_crash_dump_avail(bp))
+			return 0;
+
+		return bp->fw_crash_len;
+	}
+
 	if (bnxt_hwrm_get_dump_len(bp, dump_type, &len)) {
-		if (dump_type == BNXT_DUMP_CRASH)
-			len = BNXT_CRASH_DUMP_LEN;
-		else
+		if (dump_type != BNXT_DUMP_CRASH)
 			__bnxt_get_coredump(bp, NULL, &len);
 	}
 	return len;
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c
index f121a5e9691f..1e720aa69568 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c
@@ -4983,9 +4983,16 @@ static int bnxt_set_dump(struct net_device *dev, struct ethtool_dump *dump)
 		return -EINVAL;
 	}
 
-	if (!IS_ENABLED(CONFIG_TEE_BNXT_FW) && dump->flag == BNXT_DUMP_CRASH) {
-		netdev_info(dev, "Cannot collect crash dump as TEE_BNXT_FW config option is not enabled.\n");
-		return -EOPNOTSUPP;
+	if (dump->flag == BNXT_DUMP_CRASH) {
+		if (bp->fw_dbg_cap & DBG_QCAPS_RESP_FLAGS_CRASHDUMP_SOC_DDR &&
+		    (!IS_ENABLED(CONFIG_TEE_BNXT_FW))) {
+			netdev_info(dev,
+				    "Cannot collect crash dump as TEE_BNXT_FW config option is not enabled.\n");
+			return -EOPNOTSUPP;
+		} else if (!(bp->fw_dbg_cap & DBG_QCAPS_RESP_FLAGS_CRASHDUMP_HOST_DDR)) {
+			netdev_info(dev, "Crash dump collection from host memory is not supported on this interface.\n");
+			return -EOPNOTSUPP;
+		}
 	}
 
 	bp->dump_flag = dump->flag;
-- 
2.30.1


[-- Attachment #2: S/MIME Cryptographic Signature --]
[-- Type: application/pkcs7-signature, Size: 4209 bytes --]

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH net-next 3/9] bnxt_en: Support QOS and TPID settings for the SRIOV VLAN
  2024-07-13 23:43 [PATCH net-next 0/9] bnxt_en: Update for net-next Michael Chan
  2024-07-13 23:43 ` [PATCH net-next 1/9] bnxt_en: add support for storing crash dump into host memory Michael Chan
  2024-07-13 23:43 ` [PATCH net-next 2/9] bnxt_en: add support for retrieving crash dump using ethtool Michael Chan
@ 2024-07-13 23:43 ` Michael Chan
  2024-07-15  9:17   ` Simon Horman
  2024-07-13 23:43 ` [PATCH net-next 4/9] bnxt_en: Deprecate support for legacy INTX mode Michael Chan
                   ` (5 subsequent siblings)
  8 siblings, 1 reply; 27+ messages in thread
From: Michael Chan @ 2024-07-13 23:43 UTC (permalink / raw)
  To: davem
  Cc: netdev, edumazet, kuba, pabeni, pavan.chebbi, andrew.gospodarek,
	Sreekanth Reddy

[-- Attachment #1: Type: text/plain, Size: 4340 bytes --]

From: Sreekanth Reddy <sreekanth.reddy@broadcom.com>

With recent changes in the .ndo_set_vf_*() guidelines, resubmitting
this patch that was reverted eariler in 2023:

c27153682eac ("Revert "bnxt_en: Support QOS and TPID settings for the SRIOV VLAN")

Add these missing settings in the .ndo_set_vf_vlan() method.
Older firmware does not support the TPID setting so check for
proper support.

Remove the unused BNXT_VF_QOS flag.

Signed-off-by: Sreekanth Reddy <sreekanth.reddy@broadcom.com>
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
---
 drivers/net/ethernet/broadcom/bnxt/bnxt.c     |  2 ++
 drivers/net/ethernet/broadcom/bnxt/bnxt.h     |  1 -
 .../net/ethernet/broadcom/bnxt/bnxt_sriov.c   | 24 ++++++++++---------
 3 files changed, 15 insertions(+), 12 deletions(-)

diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
index 37da16b39f77..4f9d9a1d9c88 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
@@ -9191,6 +9191,8 @@ static int __bnxt_hwrm_func_qcaps(struct bnxt *bp)
 		bp->fw_cap |= BNXT_FW_CAP_HOT_RESET_IF;
 	if (BNXT_PF(bp) && (flags_ext & FUNC_QCAPS_RESP_FLAGS_EXT_FW_LIVEPATCH_SUPPORTED))
 		bp->fw_cap |= BNXT_FW_CAP_LIVEPATCH;
+	if (BNXT_PF(bp) && (flags_ext & FUNC_QCAPS_RESP_FLAGS_EXT_DFLT_VLAN_TPID_PCP_SUPPORTED))
+		bp->fw_cap |= BNXT_FW_CAP_DFLT_VLAN_TPID_PCP;
 	if (flags_ext & FUNC_QCAPS_RESP_FLAGS_EXT_BS_V2_SUPPORTED)
 		bp->fw_cap |= BNXT_FW_CAP_BACKING_STORE_V2;
 	if (flags_ext & FUNC_QCAPS_RESP_FLAGS_EXT_TX_COAL_CMPL_CAP)
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.h b/drivers/net/ethernet/broadcom/bnxt/bnxt.h
index 77bd36812293..af4d9bb947b3 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.h
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.h
@@ -1355,7 +1355,6 @@ struct bnxt_vf_info {
 	u16	vlan;
 	u16	func_qcfg_flags;
 	u32	flags;
-#define BNXT_VF_QOS		0x1
 #define BNXT_VF_SPOOFCHK	0x2
 #define BNXT_VF_LINK_FORCED	0x4
 #define BNXT_VF_LINK_UP		0x8
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c
index 22898d3d088b..58bd84b59f0e 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c
@@ -15,6 +15,7 @@
 #include <linux/if_vlan.h>
 #include <linux/interrupt.h>
 #include <linux/etherdevice.h>
+#include <net/dcbnl.h>
 #include "bnxt_hsi.h"
 #include "bnxt.h"
 #include "bnxt_hwrm.h"
@@ -196,11 +197,8 @@ int bnxt_get_vf_config(struct net_device *dev, int vf_id,
 		memcpy(&ivi->mac, vf->vf_mac_addr, ETH_ALEN);
 	ivi->max_tx_rate = vf->max_tx_rate;
 	ivi->min_tx_rate = vf->min_tx_rate;
-	ivi->vlan = vf->vlan;
-	if (vf->flags & BNXT_VF_QOS)
-		ivi->qos = vf->vlan >> VLAN_PRIO_SHIFT;
-	else
-		ivi->qos = 0;
+	ivi->vlan = vf->vlan & VLAN_VID_MASK;
+	ivi->qos = vf->vlan >> VLAN_PRIO_SHIFT;
 	ivi->spoofchk = !!(vf->flags & BNXT_VF_SPOOFCHK);
 	ivi->trusted = bnxt_is_trusted_vf(bp, vf);
 	if (!(vf->flags & BNXT_VF_LINK_FORCED))
@@ -256,21 +254,21 @@ int bnxt_set_vf_vlan(struct net_device *dev, int vf_id, u16 vlan_id, u8 qos,
 	if (bp->hwrm_spec_code < 0x10201)
 		return -ENOTSUPP;
 
-	if (vlan_proto != htons(ETH_P_8021Q))
+	if (vlan_proto != htons(ETH_P_8021Q) &&
+	    (vlan_proto != htons(ETH_P_8021AD) ||
+	     !(bp->fw_cap & BNXT_FW_CAP_DFLT_VLAN_TPID_PCP)))
 		return -EPROTONOSUPPORT;
 
 	rc = bnxt_vf_ndo_prep(bp, vf_id);
 	if (rc)
 		return rc;
 
-	/* TODO: needed to implement proper handling of user priority,
-	 * currently fail the command if there is valid priority
-	 */
-	if (vlan_id > 4095 || qos)
+	if (vlan_id >= VLAN_N_VID || qos >= IEEE_8021Q_MAX_PRIORITIES ||
+	    (!vlan_id && qos))
 		return -EINVAL;
 
 	vf = &bp->pf.vf[vf_id];
-	vlan_tag = vlan_id;
+	vlan_tag = vlan_id | (u16)qos << VLAN_PRIO_SHIFT;
 	if (vlan_tag == vf->vlan)
 		return 0;
 
@@ -279,6 +277,10 @@ int bnxt_set_vf_vlan(struct net_device *dev, int vf_id, u16 vlan_id, u8 qos,
 		req->fid = cpu_to_le16(vf->fw_fid);
 		req->dflt_vlan = cpu_to_le16(vlan_tag);
 		req->enables = cpu_to_le32(FUNC_CFG_REQ_ENABLES_DFLT_VLAN);
+		if (bp->fw_cap & BNXT_FW_CAP_DFLT_VLAN_TPID_PCP) {
+			req->enables |= cpu_to_le32(FUNC_CFG_REQ_ENABLES_TPID);
+			req->tpid = vlan_proto;
+		}
 		rc = hwrm_req_send(bp, req);
 		if (!rc)
 			vf->vlan = vlan_tag;
-- 
2.30.1


[-- Attachment #2: S/MIME Cryptographic Signature --]
[-- Type: application/pkcs7-signature, Size: 4209 bytes --]

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH net-next 4/9] bnxt_en: Deprecate support for legacy INTX mode
  2024-07-13 23:43 [PATCH net-next 0/9] bnxt_en: Update for net-next Michael Chan
                   ` (2 preceding siblings ...)
  2024-07-13 23:43 ` [PATCH net-next 3/9] bnxt_en: Support QOS and TPID settings for the SRIOV VLAN Michael Chan
@ 2024-07-13 23:43 ` Michael Chan
  2024-07-15  9:28   ` Simon Horman
  2024-07-16 16:57   ` Dan Carpenter
  2024-07-13 23:43 ` [PATCH net-next 5/9] bnxt_en: Remove BNXT_FLAG_USING_MSIX flag Michael Chan
                   ` (4 subsequent siblings)
  8 siblings, 2 replies; 27+ messages in thread
From: Michael Chan @ 2024-07-13 23:43 UTC (permalink / raw)
  To: davem
  Cc: netdev, edumazet, kuba, pabeni, pavan.chebbi, andrew.gospodarek,
	Hongguang Gao, Kalesh AP, Somnath Kotur

[-- Attachment #1: Type: text/plain, Size: 3476 bytes --]

Firmware has deprecated support for legacy INTX in 2022 and INTX hasn't
been tested for many years before that.  If MSIX capability is not
found in probe, abort.

Reviewed-by: Hongguang Gao <hongguang.gao@broadcom.com>
Reviewed-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
Reviewed-by: Somnath Kotur <somnath.kotur@broadcom.com>
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
---
 drivers/net/ethernet/broadcom/bnxt/bnxt.c | 41 ++++-------------------
 drivers/net/ethernet/broadcom/bnxt/bnxt.h |  1 -
 2 files changed, 7 insertions(+), 35 deletions(-)

diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
index 4f9d9a1d9c88..7599fc3f8e27 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
@@ -10745,7 +10745,7 @@ static int bnxt_get_num_msix(struct bnxt *bp)
 	return bnxt_nq_rings_in_use(bp);
 }
 
-static int bnxt_init_msix(struct bnxt *bp)
+static int bnxt_init_int_mode(struct bnxt *bp)
 {
 	int i, total_vecs, max, rc = 0, min = 1, ulp_msix, tx_cp;
 	struct msix_entry *msix_ent;
@@ -10803,7 +10803,7 @@ static int bnxt_init_msix(struct bnxt *bp)
 	return 0;
 
 msix_setup_exit:
-	netdev_err(bp->dev, "bnxt_init_msix err: %x\n", rc);
+	netdev_err(bp->dev, "bnxt_init_int_mode err: %x\n", rc);
 	kfree(bp->irq_tbl);
 	bp->irq_tbl = NULL;
 	pci_disable_msix(bp->pdev);
@@ -10811,35 +10811,6 @@ static int bnxt_init_msix(struct bnxt *bp)
 	return rc;
 }
 
-static int bnxt_init_inta(struct bnxt *bp)
-{
-	bp->irq_tbl = kzalloc(sizeof(struct bnxt_irq), GFP_KERNEL);
-	if (!bp->irq_tbl)
-		return -ENOMEM;
-
-	bp->total_irqs = 1;
-	bp->rx_nr_rings = 1;
-	bp->tx_nr_rings = 1;
-	bp->cp_nr_rings = 1;
-	bp->flags |= BNXT_FLAG_SHARED_RINGS;
-	bp->irq_tbl[0].vector = bp->pdev->irq;
-	return 0;
-}
-
-static int bnxt_init_int_mode(struct bnxt *bp)
-{
-	int rc = -ENODEV;
-
-	if (bp->flags & BNXT_FLAG_MSIX_CAP)
-		rc = bnxt_init_msix(bp);
-
-	if (!(bp->flags & BNXT_FLAG_USING_MSIX) && BNXT_PF(bp)) {
-		/* fallback to INTA */
-		rc = bnxt_init_inta(bp);
-	}
-	return rc;
-}
-
 static void bnxt_clear_int_mode(struct bnxt *bp)
 {
 	if (bp->flags & BNXT_FLAG_USING_MSIX)
@@ -12885,7 +12856,7 @@ bool bnxt_rfs_capable(struct bnxt *bp, bool new_rss_ctx)
 	    !BNXT_SUPPORTS_NTUPLE_VNIC(bp))
 		return bnxt_rfs_supported(bp);
 
-	if (!(bp->flags & BNXT_FLAG_MSIX_CAP) || !bnxt_can_reserve_rings(bp) || !bp->rx_nr_rings)
+	if (!bnxt_can_reserve_rings(bp) || !bp->rx_nr_rings)
 		return false;
 
 	hwr.grp = bp->rx_nr_rings;
@@ -15743,8 +15714,10 @@ static int bnxt_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
 	if (BNXT_PF(bp))
 		SET_NETDEV_DEVLINK_PORT(dev, &bp->dl_port);
 
-	if (pdev->msix_cap)
-		bp->flags |= BNXT_FLAG_MSIX_CAP;
+	if (!pdev->msix_cap) {
+		dev_err(&pdev->dev, "MSIX capability not found, aborting\n");
+		return -ENODEV;
+	}
 
 	rc = bnxt_init_board(pdev, dev);
 	if (rc < 0)
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.h b/drivers/net/ethernet/broadcom/bnxt/bnxt.h
index af4d9bb947b3..06030244d740 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.h
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.h
@@ -2199,7 +2199,6 @@ struct bnxt {
 	#define BNXT_FLAG_AGG_RINGS	(BNXT_FLAG_JUMBO | BNXT_FLAG_GRO | \
 					 BNXT_FLAG_LRO)
 	#define BNXT_FLAG_USING_MSIX	0x40
-	#define BNXT_FLAG_MSIX_CAP	0x80
 	#define BNXT_FLAG_RFS		0x100
 	#define BNXT_FLAG_SHARED_RINGS	0x200
 	#define BNXT_FLAG_PORT_STATS	0x400
-- 
2.30.1


[-- Attachment #2: S/MIME Cryptographic Signature --]
[-- Type: application/pkcs7-signature, Size: 4209 bytes --]

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH net-next 5/9] bnxt_en: Remove BNXT_FLAG_USING_MSIX flag
  2024-07-13 23:43 [PATCH net-next 0/9] bnxt_en: Update for net-next Michael Chan
                   ` (3 preceding siblings ...)
  2024-07-13 23:43 ` [PATCH net-next 4/9] bnxt_en: Deprecate support for legacy INTX mode Michael Chan
@ 2024-07-13 23:43 ` Michael Chan
  2024-07-15  9:29   ` Simon Horman
  2024-07-15 17:32   ` Bjorn Helgaas
  2024-07-13 23:43 ` [PATCH net-next 6/9] bnxt_en: Remove register mapping to support INTX Michael Chan
                   ` (3 subsequent siblings)
  8 siblings, 2 replies; 27+ messages in thread
From: Michael Chan @ 2024-07-13 23:43 UTC (permalink / raw)
  To: davem
  Cc: netdev, edumazet, kuba, pabeni, pavan.chebbi, andrew.gospodarek,
	Kalesh AP, Somnath Kotur, Hongguang Gao

[-- Attachment #1: Type: text/plain, Size: 7184 bytes --]

Now that we only support MSIX, the BNXT_FLAG_USING_MSIX is always true.
Remove it and any if conditions checking for it.  Remove the INTX
handler and associated logic.

Reviewed-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
Reviewed-by: Somnath Kotur <somnath.kotur@broadcom.com>
Reviewed-by: Hongguang Gao <hongguang.gao@broadcom.com>
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
---
 drivers/net/ethernet/broadcom/bnxt/bnxt.c     | 99 ++++---------------
 drivers/net/ethernet/broadcom/bnxt/bnxt.h     |  1 -
 .../net/ethernet/broadcom/bnxt/bnxt_sriov.c   |  5 -
 3 files changed, 17 insertions(+), 88 deletions(-)

diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
index 7599fc3f8e27..39407b7c8958 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
@@ -2854,34 +2854,6 @@ static inline int bnxt_has_work(struct bnxt *bp, struct bnxt_cp_ring_info *cpr)
 	return TX_CMP_VALID(txcmp, raw_cons);
 }
 
-static irqreturn_t bnxt_inta(int irq, void *dev_instance)
-{
-	struct bnxt_napi *bnapi = dev_instance;
-	struct bnxt *bp = bnapi->bp;
-	struct bnxt_cp_ring_info *cpr = &bnapi->cp_ring;
-	u32 cons = RING_CMP(cpr->cp_raw_cons);
-	u32 int_status;
-
-	prefetch(&cpr->cp_desc_ring[CP_RING(cons)][CP_IDX(cons)]);
-
-	if (!bnxt_has_work(bp, cpr)) {
-		int_status = readl(bp->bar0 + BNXT_CAG_REG_LEGACY_INT_STATUS);
-		/* return if erroneous interrupt */
-		if (!(int_status & (0x10000 << cpr->cp_ring_struct.fw_ring_id)))
-			return IRQ_NONE;
-	}
-
-	/* disable ring IRQ */
-	BNXT_CP_DB_IRQ_DIS(cpr->cp_db.doorbell);
-
-	/* Return here if interrupt is shared and is disabled. */
-	if (unlikely(atomic_read(&bp->intr_sem) != 0))
-		return IRQ_HANDLED;
-
-	napi_schedule(&bnapi->napi);
-	return IRQ_HANDLED;
-}
-
 static int __bnxt_poll_work(struct bnxt *bp, struct bnxt_cp_ring_info *cpr,
 			    int budget)
 {
@@ -6872,15 +6844,14 @@ static int hwrm_ring_alloc_send_msg(struct bnxt *bp,
 			req->cq_handle = cpu_to_le64(ring->handle);
 			req->enables |= cpu_to_le32(
 				RING_ALLOC_REQ_ENABLES_NQ_RING_ID_VALID);
-		} else if (bp->flags & BNXT_FLAG_USING_MSIX) {
+		} else {
 			req->int_mode = RING_ALLOC_REQ_INT_MODE_MSIX;
 		}
 		break;
 	case HWRM_RING_ALLOC_NQ:
 		req->ring_type = RING_ALLOC_REQ_RING_TYPE_NQ;
 		req->length = cpu_to_le32(bp->cp_ring_mask + 1);
-		if (bp->flags & BNXT_FLAG_USING_MSIX)
-			req->int_mode = RING_ALLOC_REQ_INT_MODE_MSIX;
+		req->int_mode = RING_ALLOC_REQ_INT_MODE_MSIX;
 		break;
 	default:
 		netdev_err(bp->dev, "hwrm alloc invalid ring type %d\n",
@@ -10628,20 +10599,6 @@ static void bnxt_setup_msix(struct bnxt *bp)
 	}
 }
 
-static void bnxt_setup_inta(struct bnxt *bp)
-{
-	const int len = sizeof(bp->irq_tbl[0].name);
-
-	if (bp->num_tc) {
-		netdev_reset_tc(bp->dev);
-		bp->num_tc = 0;
-	}
-
-	snprintf(bp->irq_tbl[0].name, len, "%s-%s-%d", bp->dev->name, "TxRx",
-		 0);
-	bp->irq_tbl[0].handler = bnxt_inta;
-}
-
 static int bnxt_init_int_mode(struct bnxt *bp);
 
 static int bnxt_setup_int_mode(struct bnxt *bp)
@@ -10654,10 +10611,7 @@ static int bnxt_setup_int_mode(struct bnxt *bp)
 			return rc ?: -ENODEV;
 	}
 
-	if (bp->flags & BNXT_FLAG_USING_MSIX)
-		bnxt_setup_msix(bp);
-	else
-		bnxt_setup_inta(bp);
+	bnxt_setup_msix(bp);
 
 	rc = bnxt_set_real_num_queues(bp);
 	return rc;
@@ -10798,7 +10752,6 @@ static int bnxt_init_int_mode(struct bnxt *bp)
 		rc = -ENOMEM;
 		goto msix_setup_exit;
 	}
-	bp->flags |= BNXT_FLAG_USING_MSIX;
 	kfree(msix_ent);
 	return 0;
 
@@ -10813,12 +10766,10 @@ static int bnxt_init_int_mode(struct bnxt *bp)
 
 static void bnxt_clear_int_mode(struct bnxt *bp)
 {
-	if (bp->flags & BNXT_FLAG_USING_MSIX)
-		pci_disable_msix(bp->pdev);
+	pci_disable_msix(bp->pdev);
 
 	kfree(bp->irq_tbl);
 	bp->irq_tbl = NULL;
-	bp->flags &= ~BNXT_FLAG_USING_MSIX;
 }
 
 int bnxt_reserve_rings(struct bnxt *bp, bool irq_re_init)
@@ -10916,9 +10867,6 @@ static int bnxt_request_irq(struct bnxt *bp)
 #ifdef CONFIG_RFS_ACCEL
 	rmap = bp->dev->rx_cpu_rmap;
 #endif
-	if (!(bp->flags & BNXT_FLAG_USING_MSIX))
-		flags = IRQF_SHARED;
-
 	for (i = 0, j = 0; i < bp->cp_nr_rings; i++) {
 		int map_idx = bnxt_cp_num_to_irq_num(bp, i);
 		struct bnxt_irq *irq = &bp->irq_tbl[map_idx];
@@ -10983,29 +10931,22 @@ static void bnxt_del_napi(struct bnxt *bp)
 
 static void bnxt_init_napi(struct bnxt *bp)
 {
-	int i;
+	int (*poll_fn)(struct napi_struct *, int) = bnxt_poll;
 	unsigned int cp_nr_rings = bp->cp_nr_rings;
 	struct bnxt_napi *bnapi;
+	int i;
 
-	if (bp->flags & BNXT_FLAG_USING_MSIX) {
-		int (*poll_fn)(struct napi_struct *, int) = bnxt_poll;
-
-		if (bp->flags & BNXT_FLAG_CHIP_P5_PLUS)
-			poll_fn = bnxt_poll_p5;
-		else if (BNXT_CHIP_TYPE_NITRO_A0(bp))
-			cp_nr_rings--;
-		for (i = 0; i < cp_nr_rings; i++) {
-			bnapi = bp->bnapi[i];
-			netif_napi_add(bp->dev, &bnapi->napi, poll_fn);
-		}
-		if (BNXT_CHIP_TYPE_NITRO_A0(bp)) {
-			bnapi = bp->bnapi[cp_nr_rings];
-			netif_napi_add(bp->dev, &bnapi->napi,
-				       bnxt_poll_nitroa0);
-		}
-	} else {
-		bnapi = bp->bnapi[0];
-		netif_napi_add(bp->dev, &bnapi->napi, bnxt_poll);
+	if (bp->flags & BNXT_FLAG_CHIP_P5_PLUS)
+		poll_fn = bnxt_poll_p5;
+	else if (BNXT_CHIP_TYPE_NITRO_A0(bp))
+		cp_nr_rings--;
+	for (i = 0; i < cp_nr_rings; i++) {
+		bnapi = bp->bnapi[i];
+		netif_napi_add(bp->dev, &bnapi->napi, poll_fn);
+	}
+	if (BNXT_CHIP_TYPE_NITRO_A0(bp)) {
+		bnapi = bp->bnapi[cp_nr_rings];
+		netif_napi_add(bp->dev, &bnapi->napi, bnxt_poll_nitroa0);
 	}
 }
 
@@ -12124,12 +12065,6 @@ static int __bnxt_open_nic(struct bnxt *bp, bool irq_re_init, bool link_re_init)
 	rc = bnxt_reserve_rings(bp, irq_re_init);
 	if (rc)
 		return rc;
-	if ((bp->flags & BNXT_FLAG_RFS) &&
-	    !(bp->flags & BNXT_FLAG_USING_MSIX)) {
-		/* disable RFS if falling back to INTA */
-		bp->dev->hw_features &= ~NETIF_F_NTUPLE;
-		bp->flags &= ~BNXT_FLAG_RFS;
-	}
 
 	rc = bnxt_alloc_mem(bp, irq_re_init);
 	if (rc) {
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.h b/drivers/net/ethernet/broadcom/bnxt/bnxt.h
index 06030244d740..10e642abacf1 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.h
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.h
@@ -2198,7 +2198,6 @@ struct bnxt {
 	#define BNXT_FLAG_STRIP_VLAN	0x20
 	#define BNXT_FLAG_AGG_RINGS	(BNXT_FLAG_JUMBO | BNXT_FLAG_GRO | \
 					 BNXT_FLAG_LRO)
-	#define BNXT_FLAG_USING_MSIX	0x40
 	#define BNXT_FLAG_RFS		0x100
 	#define BNXT_FLAG_SHARED_RINGS	0x200
 	#define BNXT_FLAG_PORT_STATS	0x400
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c
index 58bd84b59f0e..7bb8a5d74430 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c
@@ -902,11 +902,6 @@ int bnxt_sriov_configure(struct pci_dev *pdev, int num_vfs)
 	struct net_device *dev = pci_get_drvdata(pdev);
 	struct bnxt *bp = netdev_priv(dev);
 
-	if (!(bp->flags & BNXT_FLAG_USING_MSIX)) {
-		netdev_warn(dev, "Not allow SRIOV if the irq mode is not MSIX\n");
-		return 0;
-	}
-
 	rtnl_lock();
 	if (!netif_running(dev)) {
 		netdev_warn(dev, "Reject SRIOV config request since if is down!\n");
-- 
2.30.1


[-- Attachment #2: S/MIME Cryptographic Signature --]
[-- Type: application/pkcs7-signature, Size: 4209 bytes --]

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH net-next 6/9] bnxt_en: Remove register mapping to support INTX
  2024-07-13 23:43 [PATCH net-next 0/9] bnxt_en: Update for net-next Michael Chan
                   ` (4 preceding siblings ...)
  2024-07-13 23:43 ` [PATCH net-next 5/9] bnxt_en: Remove BNXT_FLAG_USING_MSIX flag Michael Chan
@ 2024-07-13 23:43 ` Michael Chan
  2024-07-15  9:30   ` Simon Horman
  2024-07-15 17:27   ` Bjorn Helgaas
  2024-07-13 23:43 ` [PATCH net-next 7/9] bnxt_en: Replace deprecated PCI MSIX APIs Michael Chan
                   ` (2 subsequent siblings)
  8 siblings, 2 replies; 27+ messages in thread
From: Michael Chan @ 2024-07-13 23:43 UTC (permalink / raw)
  To: davem
  Cc: netdev, edumazet, kuba, pabeni, pavan.chebbi, andrew.gospodarek,
	Somnath Kotur, Hongguang Gao

[-- Attachment #1: Type: text/plain, Size: 2669 bytes --]

In legacy INTX mode, a register is mapped so that the INTX handler can
read it to determine if the NIC is the source of the interrupt.  This
and all the related macros are no longer needed.

Reviewed-by: Somnath Kotur <somnath.kotur@broadcom.com>
Reviewed-by: Hongguang Gao <hongguang.gao@broadcom.com>
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
---
 drivers/net/ethernet/broadcom/bnxt/bnxt.c | 19 -------------------
 drivers/net/ethernet/broadcom/bnxt/bnxt.h |  2 --
 2 files changed, 21 deletions(-)

diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
index 39407b7c8958..085dffcbe6f2 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
@@ -302,10 +302,6 @@ static bool bnxt_vf_pciid(enum board_idx idx)
 
 #define DB_CP_REARM_FLAGS	(DB_KEY_CP | DB_IDX_VALID)
 #define DB_CP_FLAGS		(DB_KEY_CP | DB_IDX_VALID | DB_IRQ_DIS)
-#define DB_CP_IRQ_DIS_FLAGS	(DB_KEY_CP | DB_IRQ_DIS)
-
-#define BNXT_CP_DB_IRQ_DIS(db)						\
-		writel(DB_CP_IRQ_DIS_FLAGS, db)
 
 #define BNXT_DB_CQ(db, idx)						\
 	writel(DB_CP_FLAGS | DB_RING_IDX(db, idx), (db)->doorbell)
@@ -11934,20 +11930,6 @@ static int bnxt_update_phy_setting(struct bnxt *bp)
 	return rc;
 }
 
-/* Common routine to pre-map certain register block to different GRC window.
- * A PF has 16 4K windows and a VF has 4 4K windows. However, only 15 windows
- * in PF and 3 windows in VF that can be customized to map in different
- * register blocks.
- */
-static void bnxt_preset_reg_win(struct bnxt *bp)
-{
-	if (BNXT_PF(bp)) {
-		/* CAG registers map to GRC window #4 */
-		writel(BNXT_CAG_REG_BASE,
-		       bp->bar0 + BNXT_GRCPF_REG_WINDOW_BASE_OUT + 12);
-	}
-}
-
 static int bnxt_init_dflt_ring_mode(struct bnxt *bp);
 
 static int bnxt_reinit_after_abort(struct bnxt *bp)
@@ -12052,7 +12034,6 @@ static int __bnxt_open_nic(struct bnxt *bp, bool irq_re_init, bool link_re_init)
 {
 	int rc = 0;
 
-	bnxt_preset_reg_win(bp);
 	netif_carrier_off(bp->dev);
 	if (irq_re_init) {
 		/* Reserve rings now if none were reserved at driver probe. */
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.h b/drivers/net/ethernet/broadcom/bnxt/bnxt.h
index 10e642abacf1..6598c8ef9ccb 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.h
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.h
@@ -1754,8 +1754,6 @@ struct bnxt_test_info {
 #define BNXT_GRCPF_REG_CHIMP_COMM		0x0
 #define BNXT_GRCPF_REG_CHIMP_COMM_TRIGGER	0x100
 #define BNXT_GRCPF_REG_WINDOW_BASE_OUT		0x400
-#define BNXT_CAG_REG_LEGACY_INT_STATUS		0x4014
-#define BNXT_CAG_REG_BASE			0x300000
 
 #define BNXT_GRC_REG_STATUS_P5			0x520
 
-- 
2.30.1


[-- Attachment #2: S/MIME Cryptographic Signature --]
[-- Type: application/pkcs7-signature, Size: 4209 bytes --]

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH net-next 7/9] bnxt_en: Replace deprecated PCI MSIX APIs
  2024-07-13 23:43 [PATCH net-next 0/9] bnxt_en: Update for net-next Michael Chan
                   ` (5 preceding siblings ...)
  2024-07-13 23:43 ` [PATCH net-next 6/9] bnxt_en: Remove register mapping to support INTX Michael Chan
@ 2024-07-13 23:43 ` Michael Chan
  2024-07-15  9:30   ` Simon Horman
  2024-07-13 23:43 ` [PATCH net-next 8/9] bnxt_en: Allocate the max bp->irq_tbl size for dynamic msix allocation Michael Chan
  2024-07-13 23:43 ` [PATCH net-next 9/9] bnxt_en: Support dynamic MSIX Michael Chan
  8 siblings, 1 reply; 27+ messages in thread
From: Michael Chan @ 2024-07-13 23:43 UTC (permalink / raw)
  To: davem
  Cc: netdev, edumazet, kuba, pabeni, pavan.chebbi, andrew.gospodarek,
	Somnath Kotur

[-- Attachment #1: Type: text/plain, Size: 2540 bytes --]

Use the new pci_alloc_irq_vectors() and pci_free_irq_vectors() to
replace the deprecated pci_enable_msix_range() and pci_disable_msix().

Reviewed-by: Somnath Kotur <somnath.kotur@broadcom.com>
Reviewed-by: Pavan Chebbi <pavan.chebbi@broadcom.com>
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
---
 drivers/net/ethernet/broadcom/bnxt/bnxt.c | 21 +++++----------------
 1 file changed, 5 insertions(+), 16 deletions(-)

diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
index 085dffcbe6f2..c0695a06744d 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
@@ -10698,7 +10698,6 @@ static int bnxt_get_num_msix(struct bnxt *bp)
 static int bnxt_init_int_mode(struct bnxt *bp)
 {
 	int i, total_vecs, max, rc = 0, min = 1, ulp_msix, tx_cp;
-	struct msix_entry *msix_ent;
 
 	total_vecs = bnxt_get_num_msix(bp);
 	max = bnxt_get_max_func_irqs(bp);
@@ -10708,19 +10707,11 @@ static int bnxt_init_int_mode(struct bnxt *bp)
 	if (!total_vecs)
 		return 0;
 
-	msix_ent = kcalloc(total_vecs, sizeof(struct msix_entry), GFP_KERNEL);
-	if (!msix_ent)
-		return -ENOMEM;
-
-	for (i = 0; i < total_vecs; i++) {
-		msix_ent[i].entry = i;
-		msix_ent[i].vector = 0;
-	}
-
 	if (!(bp->flags & BNXT_FLAG_SHARED_RINGS))
 		min = 2;
 
-	total_vecs = pci_enable_msix_range(bp->pdev, msix_ent, min, total_vecs);
+	total_vecs = pci_alloc_irq_vectors(bp->pdev, min, total_vecs,
+					   PCI_IRQ_MSIX);
 	ulp_msix = bnxt_get_ulp_msix_num(bp);
 	if (total_vecs < 0 || total_vecs < ulp_msix) {
 		rc = -ENODEV;
@@ -10730,7 +10721,7 @@ static int bnxt_init_int_mode(struct bnxt *bp)
 	bp->irq_tbl = kcalloc(total_vecs, sizeof(struct bnxt_irq), GFP_KERNEL);
 	if (bp->irq_tbl) {
 		for (i = 0; i < total_vecs; i++)
-			bp->irq_tbl[i].vector = msix_ent[i].vector;
+			bp->irq_tbl[i].vector = pci_irq_vector(bp->pdev, i);
 
 		bp->total_irqs = total_vecs;
 		/* Trim rings based upon num of vectors allocated */
@@ -10748,21 +10739,19 @@ static int bnxt_init_int_mode(struct bnxt *bp)
 		rc = -ENOMEM;
 		goto msix_setup_exit;
 	}
-	kfree(msix_ent);
 	return 0;
 
 msix_setup_exit:
 	netdev_err(bp->dev, "bnxt_init_int_mode err: %x\n", rc);
 	kfree(bp->irq_tbl);
 	bp->irq_tbl = NULL;
-	pci_disable_msix(bp->pdev);
-	kfree(msix_ent);
+	pci_free_irq_vectors(bp->pdev);
 	return rc;
 }
 
 static void bnxt_clear_int_mode(struct bnxt *bp)
 {
-	pci_disable_msix(bp->pdev);
+	pci_free_irq_vectors(bp->pdev);
 
 	kfree(bp->irq_tbl);
 	bp->irq_tbl = NULL;
-- 
2.30.1


[-- Attachment #2: S/MIME Cryptographic Signature --]
[-- Type: application/pkcs7-signature, Size: 4209 bytes --]

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH net-next 8/9] bnxt_en: Allocate the max bp->irq_tbl size for dynamic msix allocation
  2024-07-13 23:43 [PATCH net-next 0/9] bnxt_en: Update for net-next Michael Chan
                   ` (6 preceding siblings ...)
  2024-07-13 23:43 ` [PATCH net-next 7/9] bnxt_en: Replace deprecated PCI MSIX APIs Michael Chan
@ 2024-07-13 23:43 ` Michael Chan
  2024-07-15  9:30   ` Simon Horman
  2024-07-15 17:33   ` Bjorn Helgaas
  2024-07-13 23:43 ` [PATCH net-next 9/9] bnxt_en: Support dynamic MSIX Michael Chan
  8 siblings, 2 replies; 27+ messages in thread
From: Michael Chan @ 2024-07-13 23:43 UTC (permalink / raw)
  To: davem
  Cc: netdev, edumazet, kuba, pabeni, pavan.chebbi, andrew.gospodarek,
	Hongguang Gao, Somnath Kotur

[-- Attachment #1: Type: text/plain, Size: 1561 bytes --]

If dynamic MSIX allocation is supported, additional MSIX can be
allocated at run-time without reinitializing the existing MSIX entries.
The first step to support this dynamic scheme is to alloacte a large
enough bp->irq_tbl if dynamic allocation is supported.

Reviewed-by: Hongguang Gao <hongguang.gao@broadcom.com>
Reviewed-by: Somnath Kotur <somnath.kotur@broadcom.com>
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
---
 drivers/net/ethernet/broadcom/bnxt/bnxt.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
index c0695a06744d..7483ea246c9d 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
@@ -10697,7 +10697,7 @@ static int bnxt_get_num_msix(struct bnxt *bp)
 
 static int bnxt_init_int_mode(struct bnxt *bp)
 {
-	int i, total_vecs, max, rc = 0, min = 1, ulp_msix, tx_cp;
+	int i, total_vecs, max, rc = 0, min = 1, ulp_msix, tx_cp, tbl_size;
 
 	total_vecs = bnxt_get_num_msix(bp);
 	max = bnxt_get_max_func_irqs(bp);
@@ -10718,7 +10718,10 @@ static int bnxt_init_int_mode(struct bnxt *bp)
 		goto msix_setup_exit;
 	}
 
-	bp->irq_tbl = kcalloc(total_vecs, sizeof(struct bnxt_irq), GFP_KERNEL);
+	tbl_size = total_vecs;
+	if (pci_msix_can_alloc_dyn(bp->pdev))
+		tbl_size = max;
+	bp->irq_tbl = kcalloc(tbl_size, sizeof(struct bnxt_irq), GFP_KERNEL);
 	if (bp->irq_tbl) {
 		for (i = 0; i < total_vecs; i++)
 			bp->irq_tbl[i].vector = pci_irq_vector(bp->pdev, i);
-- 
2.30.1


[-- Attachment #2: S/MIME Cryptographic Signature --]
[-- Type: application/pkcs7-signature, Size: 4209 bytes --]

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH net-next 9/9] bnxt_en: Support dynamic MSIX
  2024-07-13 23:43 [PATCH net-next 0/9] bnxt_en: Update for net-next Michael Chan
                   ` (7 preceding siblings ...)
  2024-07-13 23:43 ` [PATCH net-next 8/9] bnxt_en: Allocate the max bp->irq_tbl size for dynamic msix allocation Michael Chan
@ 2024-07-13 23:43 ` Michael Chan
  2024-07-15  9:31   ` Simon Horman
  2024-07-15 17:34   ` Bjorn Helgaas
  8 siblings, 2 replies; 27+ messages in thread
From: Michael Chan @ 2024-07-13 23:43 UTC (permalink / raw)
  To: davem
  Cc: netdev, edumazet, kuba, pabeni, pavan.chebbi, andrew.gospodarek,
	Hongguang Gao, Somnath Kotur

[-- Attachment #1: Type: text/plain, Size: 3071 bytes --]

A range of MSIX vectors are allocated at initializtion for the number
needed for RocE and L2.  During run-time, if the user increases or
decreases the number of L2 rings, all the MSIX vectors have to be
freed and a new range has to be allocated.  This is not optimal and
causes disruptions to RoCE traffic every time there is a change in L2
MSIX.

If the system supports dynamic MSIX allocations, use dynamic
allocation to add new L2 MSIX vectors or free unneeded L2 MSIX
vectors.  RoCE traffic is not affected using this scheme.

Reviewed-by: Hongguang Gao <hongguang.gao@broadcom.com>
Reviewed-by: Somnath Kotur <somnath.kotur@broadcom.com>
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
---
 drivers/net/ethernet/broadcom/bnxt/bnxt.c | 57 +++++++++++++++++++++--
 1 file changed, 54 insertions(+), 3 deletions(-)

diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
index 7483ea246c9d..c987a9dd969c 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
@@ -10597,6 +10597,43 @@ static void bnxt_setup_msix(struct bnxt *bp)
 
 static int bnxt_init_int_mode(struct bnxt *bp);
 
+static int bnxt_add_msix(struct bnxt *bp, int total)
+{
+	int i;
+
+	if (bp->total_irqs >= total)
+		return total;
+
+	for (i = bp->total_irqs; i < total; i++) {
+		struct msi_map map;
+
+		map = pci_msix_alloc_irq_at(bp->pdev, i, NULL);
+		if (map.index < 0)
+			break;
+		bp->irq_tbl[i].vector = map.virq;
+		bp->total_irqs++;
+	}
+	return bp->total_irqs;
+}
+
+static int bnxt_trim_msix(struct bnxt *bp, int total)
+{
+	int i;
+
+	if (bp->total_irqs <= total)
+		return total;
+
+	for (i = bp->total_irqs; i > total; i--) {
+		struct msi_map map;
+
+		map.index = i - 1;
+		map.virq = bp->irq_tbl[i - 1].vector;
+		pci_msix_free_irq(bp->pdev, map);
+		bp->total_irqs--;
+	}
+	return bp->total_irqs;
+}
+
 static int bnxt_setup_int_mode(struct bnxt *bp)
 {
 	int rc;
@@ -10763,6 +10800,7 @@ static void bnxt_clear_int_mode(struct bnxt *bp)
 int bnxt_reserve_rings(struct bnxt *bp, bool irq_re_init)
 {
 	bool irq_cleared = false;
+	bool irq_change = false;
 	int tcs = bp->num_tc;
 	int irqs_required;
 	int rc;
@@ -10781,15 +10819,28 @@ int bnxt_reserve_rings(struct bnxt *bp, bool irq_re_init)
 	}
 
 	if (irq_re_init && BNXT_NEW_RM(bp) && irqs_required != bp->total_irqs) {
-		bnxt_ulp_irq_stop(bp);
-		bnxt_clear_int_mode(bp);
-		irq_cleared = true;
+		irq_change = true;
+		if (!pci_msix_can_alloc_dyn(bp->pdev)) {
+			bnxt_ulp_irq_stop(bp);
+			bnxt_clear_int_mode(bp);
+			irq_cleared = true;
+		}
 	}
 	rc = __bnxt_reserve_rings(bp);
 	if (irq_cleared) {
 		if (!rc)
 			rc = bnxt_init_int_mode(bp);
 		bnxt_ulp_irq_restart(bp, rc);
+	} else if (irq_change && !rc) {
+		int total;
+
+		if (irqs_required > bp->total_irqs)
+			total = bnxt_add_msix(bp, irqs_required);
+		else
+			total = bnxt_trim_msix(bp, irqs_required);
+
+		if (total != irqs_required)
+			rc = -ENOSPC;
 	}
 	if (rc) {
 		netdev_err(bp->dev, "ring reservation/IRQ init failure rc: %d\n", rc);
-- 
2.30.1


[-- Attachment #2: S/MIME Cryptographic Signature --]
[-- Type: application/pkcs7-signature, Size: 4209 bytes --]

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* Re: [PATCH net-next 3/9] bnxt_en: Support QOS and TPID settings for the SRIOV VLAN
  2024-07-13 23:43 ` [PATCH net-next 3/9] bnxt_en: Support QOS and TPID settings for the SRIOV VLAN Michael Chan
@ 2024-07-15  9:17   ` Simon Horman
  0 siblings, 0 replies; 27+ messages in thread
From: Simon Horman @ 2024-07-15  9:17 UTC (permalink / raw)
  To: Michael Chan
  Cc: davem, netdev, edumazet, kuba, pabeni, pavan.chebbi,
	andrew.gospodarek, Sreekanth Reddy

On Sat, Jul 13, 2024 at 04:43:33PM -0700, Michael Chan wrote:
> From: Sreekanth Reddy <sreekanth.reddy@broadcom.com>
> 
> With recent changes in the .ndo_set_vf_*() guidelines, resubmitting
> this patch that was reverted eariler in 2023:
> 
> c27153682eac ("Revert "bnxt_en: Support QOS and TPID settings for the SRIOV VLAN")

I acknowledge there was a policy change and thus
this feature can now be accepted.

- [net-next,v2] docs: net: document guidance of implementing the SR-IOV NDOs
  https://git.kernel.org/netdev/net-next/c/4558645d139c

> 
> Add these missing settings in the .ndo_set_vf_vlan() method.
> Older firmware does not support the TPID setting so check for
> proper support.
> 
> Remove the unused BNXT_VF_QOS flag.
> 
> Signed-off-by: Sreekanth Reddy <sreekanth.reddy@broadcom.com>
> Signed-off-by: Michael Chan <michael.chan@broadcom.com>

Reviewed-by: Simon Horman <horms@kernel.org>

...

> diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c

...

> @@ -256,21 +254,21 @@ int bnxt_set_vf_vlan(struct net_device *dev, int vf_id, u16 vlan_id, u8 qos,
>  	if (bp->hwrm_spec_code < 0x10201)
>  		return -ENOTSUPP;
>  
> -	if (vlan_proto != htons(ETH_P_8021Q))
> +	if (vlan_proto != htons(ETH_P_8021Q) &&
> +	    (vlan_proto != htons(ETH_P_8021AD) ||

nit: As a follow-up this could be updated to use eth_type_vlan()

> +	     !(bp->fw_cap & BNXT_FW_CAP_DFLT_VLAN_TPID_PCP)))
>  		return -EPROTONOSUPPORT;
>  
>  	rc = bnxt_vf_ndo_prep(bp, vf_id);
>  	if (rc)
>  		return rc;

...


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH net-next 4/9] bnxt_en: Deprecate support for legacy INTX mode
  2024-07-13 23:43 ` [PATCH net-next 4/9] bnxt_en: Deprecate support for legacy INTX mode Michael Chan
@ 2024-07-15  9:28   ` Simon Horman
  2024-07-15 16:24     ` Michael Chan
  2024-07-16 16:57   ` Dan Carpenter
  1 sibling, 1 reply; 27+ messages in thread
From: Simon Horman @ 2024-07-15  9:28 UTC (permalink / raw)
  To: Michael Chan
  Cc: davem, netdev, edumazet, kuba, pabeni, pavan.chebbi,
	andrew.gospodarek, Hongguang Gao, Kalesh AP, Somnath Kotur

On Sat, Jul 13, 2024 at 04:43:34PM -0700, Michael Chan wrote:
> Firmware has deprecated support for legacy INTX in 2022 and INTX hasn't
> been tested for many years before that.  If MSIX capability is not
> found in probe, abort.
> 
> Reviewed-by: Hongguang Gao <hongguang.gao@broadcom.com>
> Reviewed-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
> Reviewed-by: Somnath Kotur <somnath.kotur@broadcom.com>
> Signed-off-by: Michael Chan <michael.chan@broadcom.com>

Hi Hongguang Gao, all,

The minor problem flagged below not withstanding,

Reviewed-by: Simon Horman <horms@kernel.org>

> diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c

...

> @@ -15743,8 +15714,10 @@ static int bnxt_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
>  	if (BNXT_PF(bp))
>  		SET_NETDEV_DEVLINK_PORT(dev, &bp->dl_port);
>  
> -	if (pdev->msix_cap)
> -		bp->flags |= BNXT_FLAG_MSIX_CAP;
> +	if (!pdev->msix_cap) {
> +		dev_err(&pdev->dev, "MSIX capability not found, aborting\n");
> +		return -ENODEV;
> +	}

Given where we are in the release cycle, perhaps this can be addressed
as a follow-up. But it appears that the above leaks dev.

Flagged by Smatch

>  
>  	rc = bnxt_init_board(pdev, dev);
>  	if (rc < 0)


...


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH net-next 1/9] bnxt_en: add support for storing crash dump into host memory
  2024-07-13 23:43 ` [PATCH net-next 1/9] bnxt_en: add support for storing crash dump into host memory Michael Chan
@ 2024-07-15  9:28   ` Simon Horman
  0 siblings, 0 replies; 27+ messages in thread
From: Simon Horman @ 2024-07-15  9:28 UTC (permalink / raw)
  To: Michael Chan
  Cc: davem, netdev, edumazet, kuba, pabeni, pavan.chebbi,
	andrew.gospodarek, Vikas Gupta, Somnath Kotur

On Sat, Jul 13, 2024 at 04:43:31PM -0700, Michael Chan wrote:
> From: Vikas Gupta <vikas.gupta@broadcom.com>
> 
> Newer firmware supports automatic DMA of crash dump to host memory
> when it crashes.  If the feature is supported, allocate the required
> memory using the existing context memory infrastructure.  Communicate
> the page table containing the DMA addresses to the firmware.
> 
> Reviewed-by: Somnath Kotur <somnath.kotur@broadcom.com>
> Reviewed-by: Pavan Chebbi <pavan.chebbi@broadcom.com>
> Reviewed-by: Andy Gospodarek <andrew.gospodarek@broadcom.com>
> Signed-off-by: Vikas Gupta <vikas.gupta@broadcom.com>
> Signed-off-by: Michael Chan <michael.chan@broadcom.com>

Reviewed-by: Simon Horman <horms@kernel.org>



^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH net-next 2/9] bnxt_en: add support for retrieving crash dump using ethtool
  2024-07-13 23:43 ` [PATCH net-next 2/9] bnxt_en: add support for retrieving crash dump using ethtool Michael Chan
@ 2024-07-15  9:28   ` Simon Horman
  0 siblings, 0 replies; 27+ messages in thread
From: Simon Horman @ 2024-07-15  9:28 UTC (permalink / raw)
  To: Michael Chan
  Cc: davem, netdev, edumazet, kuba, pabeni, pavan.chebbi,
	andrew.gospodarek, Vikas Gupta, Somnath Kotur

On Sat, Jul 13, 2024 at 04:43:32PM -0700, Michael Chan wrote:
> From: Vikas Gupta <vikas.gupta@broadcom.com>
> 
> Add support for retrieving crash dump using ethtool -w on the
> supported interface.
> 
> Reviewed-by: Somnath Kotur <somnath.kotur@broadcom.com>
> Reviewed-by: Pavan Chebbi <pavan.chebbi@broadcom.com>
> Reviewed-by: Andy Gospodarek <andrew.gospodarek@broadcom.com>
> Signed-off-by: Vikas Gupta <vikas.gupta@broadcom.com>
> Signed-off-by: Michael Chan <michael.chan@broadcom.com>

Reviewed-by: Simon Horman <horms@kernel.org>



^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH net-next 5/9] bnxt_en: Remove BNXT_FLAG_USING_MSIX flag
  2024-07-13 23:43 ` [PATCH net-next 5/9] bnxt_en: Remove BNXT_FLAG_USING_MSIX flag Michael Chan
@ 2024-07-15  9:29   ` Simon Horman
  2024-07-15 17:32   ` Bjorn Helgaas
  1 sibling, 0 replies; 27+ messages in thread
From: Simon Horman @ 2024-07-15  9:29 UTC (permalink / raw)
  To: Michael Chan
  Cc: davem, netdev, edumazet, kuba, pabeni, pavan.chebbi,
	andrew.gospodarek, Kalesh AP, Somnath Kotur, Hongguang Gao

On Sat, Jul 13, 2024 at 04:43:35PM -0700, Michael Chan wrote:
> Now that we only support MSIX, the BNXT_FLAG_USING_MSIX is always true.
> Remove it and any if conditions checking for it.  Remove the INTX
> handler and associated logic.
> 
> Reviewed-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
> Reviewed-by: Somnath Kotur <somnath.kotur@broadcom.com>
> Reviewed-by: Hongguang Gao <hongguang.gao@broadcom.com>
> Signed-off-by: Michael Chan <michael.chan@broadcom.com>

Reviewed-by: Simon Horman <horms@kernel.org>



^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH net-next 6/9] bnxt_en: Remove register mapping to support INTX
  2024-07-13 23:43 ` [PATCH net-next 6/9] bnxt_en: Remove register mapping to support INTX Michael Chan
@ 2024-07-15  9:30   ` Simon Horman
  2024-07-15 17:27   ` Bjorn Helgaas
  1 sibling, 0 replies; 27+ messages in thread
From: Simon Horman @ 2024-07-15  9:30 UTC (permalink / raw)
  To: Michael Chan
  Cc: davem, netdev, edumazet, kuba, pabeni, pavan.chebbi,
	andrew.gospodarek, Somnath Kotur, Hongguang Gao

On Sat, Jul 13, 2024 at 04:43:36PM -0700, Michael Chan wrote:
> In legacy INTX mode, a register is mapped so that the INTX handler can
> read it to determine if the NIC is the source of the interrupt.  This
> and all the related macros are no longer needed.
> 
> Reviewed-by: Somnath Kotur <somnath.kotur@broadcom.com>
> Reviewed-by: Hongguang Gao <hongguang.gao@broadcom.com>
> Signed-off-by: Michael Chan <michael.chan@broadcom.com>

Reviewed-by: Simon Horman <horms@kernel.org>



^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH net-next 7/9] bnxt_en: Replace deprecated PCI MSIX APIs
  2024-07-13 23:43 ` [PATCH net-next 7/9] bnxt_en: Replace deprecated PCI MSIX APIs Michael Chan
@ 2024-07-15  9:30   ` Simon Horman
  0 siblings, 0 replies; 27+ messages in thread
From: Simon Horman @ 2024-07-15  9:30 UTC (permalink / raw)
  To: Michael Chan
  Cc: davem, netdev, edumazet, kuba, pabeni, pavan.chebbi,
	andrew.gospodarek, Somnath Kotur

On Sat, Jul 13, 2024 at 04:43:37PM -0700, Michael Chan wrote:
> Use the new pci_alloc_irq_vectors() and pci_free_irq_vectors() to
> replace the deprecated pci_enable_msix_range() and pci_disable_msix().
> 
> Reviewed-by: Somnath Kotur <somnath.kotur@broadcom.com>
> Reviewed-by: Pavan Chebbi <pavan.chebbi@broadcom.com>
> Signed-off-by: Michael Chan <michael.chan@broadcom.com>

Reviewed-by: Simon Horman <horms@kernel.org>


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH net-next 8/9] bnxt_en: Allocate the max bp->irq_tbl size for dynamic msix allocation
  2024-07-13 23:43 ` [PATCH net-next 8/9] bnxt_en: Allocate the max bp->irq_tbl size for dynamic msix allocation Michael Chan
@ 2024-07-15  9:30   ` Simon Horman
  2024-07-15 17:33   ` Bjorn Helgaas
  1 sibling, 0 replies; 27+ messages in thread
From: Simon Horman @ 2024-07-15  9:30 UTC (permalink / raw)
  To: Michael Chan
  Cc: davem, netdev, edumazet, kuba, pabeni, pavan.chebbi,
	andrew.gospodarek, Hongguang Gao, Somnath Kotur

On Sat, Jul 13, 2024 at 04:43:38PM -0700, Michael Chan wrote:
> If dynamic MSIX allocation is supported, additional MSIX can be
> allocated at run-time without reinitializing the existing MSIX entries.
> The first step to support this dynamic scheme is to alloacte a large
> enough bp->irq_tbl if dynamic allocation is supported.
> 
> Reviewed-by: Hongguang Gao <hongguang.gao@broadcom.com>
> Reviewed-by: Somnath Kotur <somnath.kotur@broadcom.com>
> Signed-off-by: Michael Chan <michael.chan@broadcom.com>

Reviewed-by: Simon Horman <horms@kernel.org>



^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH net-next 9/9] bnxt_en: Support dynamic MSIX
  2024-07-13 23:43 ` [PATCH net-next 9/9] bnxt_en: Support dynamic MSIX Michael Chan
@ 2024-07-15  9:31   ` Simon Horman
  2024-07-15 17:34   ` Bjorn Helgaas
  1 sibling, 0 replies; 27+ messages in thread
From: Simon Horman @ 2024-07-15  9:31 UTC (permalink / raw)
  To: Michael Chan
  Cc: davem, netdev, edumazet, kuba, pabeni, pavan.chebbi,
	andrew.gospodarek, Hongguang Gao, Somnath Kotur

On Sat, Jul 13, 2024 at 04:43:39PM -0700, Michael Chan wrote:
> A range of MSIX vectors are allocated at initializtion for the number
> needed for RocE and L2.  During run-time, if the user increases or
> decreases the number of L2 rings, all the MSIX vectors have to be
> freed and a new range has to be allocated.  This is not optimal and
> causes disruptions to RoCE traffic every time there is a change in L2
> MSIX.
> 
> If the system supports dynamic MSIX allocations, use dynamic
> allocation to add new L2 MSIX vectors or free unneeded L2 MSIX
> vectors.  RoCE traffic is not affected using this scheme.
> 
> Reviewed-by: Hongguang Gao <hongguang.gao@broadcom.com>
> Reviewed-by: Somnath Kotur <somnath.kotur@broadcom.com>
> Signed-off-by: Michael Chan <michael.chan@broadcom.com>

Reviewed-by: Simon Horman <horms@kernel.org>



^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH net-next 4/9] bnxt_en: Deprecate support for legacy INTX mode
  2024-07-15  9:28   ` Simon Horman
@ 2024-07-15 16:24     ` Michael Chan
  0 siblings, 0 replies; 27+ messages in thread
From: Michael Chan @ 2024-07-15 16:24 UTC (permalink / raw)
  To: Simon Horman
  Cc: davem, netdev, edumazet, kuba, pabeni, pavan.chebbi,
	andrew.gospodarek, Hongguang Gao, Kalesh AP, Somnath Kotur

[-- Attachment #1: Type: text/plain, Size: 1179 bytes --]

On Mon, Jul 15, 2024 at 2:28 AM Simon Horman <horms@kernel.org> wrote:
>
> On Sat, Jul 13, 2024 at 04:43:34PM -0700, Michael Chan wrote:
> The minor problem flagged below not withstanding,
>
> Reviewed-by: Simon Horman <horms@kernel.org>
>
> > diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
>
> ...
>
> > @@ -15743,8 +15714,10 @@ static int bnxt_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
> >       if (BNXT_PF(bp))
> >               SET_NETDEV_DEVLINK_PORT(dev, &bp->dl_port);
> >
> > -     if (pdev->msix_cap)
> > -             bp->flags |= BNXT_FLAG_MSIX_CAP;
> > +     if (!pdev->msix_cap) {
> > +             dev_err(&pdev->dev, "MSIX capability not found, aborting\n");
> > +             return -ENODEV;
> > +     }
>
> Given where we are in the release cycle, perhaps this can be addressed
> as a follow-up. But it appears that the above leaks dev.
>
> Flagged by Smatch

Simon, thanks for the review.  You are absolutely right about leaking
dev.  I will not send out v2 since net-next is already closed.  Yes, I
will follow up with a fix if the patchset is applied.

[-- Attachment #2: S/MIME Cryptographic Signature --]
[-- Type: application/pkcs7-signature, Size: 4209 bytes --]

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH net-next 6/9] bnxt_en: Remove register mapping to support INTX
  2024-07-13 23:43 ` [PATCH net-next 6/9] bnxt_en: Remove register mapping to support INTX Michael Chan
  2024-07-15  9:30   ` Simon Horman
@ 2024-07-15 17:27   ` Bjorn Helgaas
  1 sibling, 0 replies; 27+ messages in thread
From: Bjorn Helgaas @ 2024-07-15 17:27 UTC (permalink / raw)
  To: Michael Chan
  Cc: davem, netdev, edumazet, kuba, pabeni, pavan.chebbi,
	andrew.gospodarek, Somnath Kotur, Hongguang Gao

On Sat, Jul 13, 2024 at 04:43:36PM -0700, Michael Chan wrote:
> In legacy INTX mode, a register is mapped so that the INTX handler can
> read it to determine if the NIC is the source of the interrupt.  This
> and all the related macros are no longer needed.

This commit log only makes sense if you already know INTx support has
been removed.  Ideally a commit log would make sense by itself,
without having to extract all the preceding history.

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH net-next 5/9] bnxt_en: Remove BNXT_FLAG_USING_MSIX flag
  2024-07-13 23:43 ` [PATCH net-next 5/9] bnxt_en: Remove BNXT_FLAG_USING_MSIX flag Michael Chan
  2024-07-15  9:29   ` Simon Horman
@ 2024-07-15 17:32   ` Bjorn Helgaas
  2024-07-15 18:00     ` Michael Chan
  1 sibling, 1 reply; 27+ messages in thread
From: Bjorn Helgaas @ 2024-07-15 17:32 UTC (permalink / raw)
  To: Michael Chan
  Cc: davem, netdev, edumazet, kuba, pabeni, pavan.chebbi,
	andrew.gospodarek, Kalesh AP, Somnath Kotur, Hongguang Gao

On Sat, Jul 13, 2024 at 04:43:35PM -0700, Michael Chan wrote:
> Now that we only support MSIX, the BNXT_FLAG_USING_MSIX is always true.
> Remove it and any if conditions checking for it.  Remove the INTX
> handler and associated logic.

The cover letter says new firmware (the revision isn't mentioned)
doesn't support INTx.  I guess it's OK if the new driver without INTx
support runs on adapters with old firmware that still supports INTx?
So the INTx support was never a real benefit?  I assume this driver
change won't force a simultaneous firmware update?  The old driver
might work in a "pci=nomsi" situation, but the new one probably won't?
Just checking to be sure these are all acceptable consequences.

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH net-next 8/9] bnxt_en: Allocate the max bp->irq_tbl size for dynamic msix allocation
  2024-07-13 23:43 ` [PATCH net-next 8/9] bnxt_en: Allocate the max bp->irq_tbl size for dynamic msix allocation Michael Chan
  2024-07-15  9:30   ` Simon Horman
@ 2024-07-15 17:33   ` Bjorn Helgaas
  1 sibling, 0 replies; 27+ messages in thread
From: Bjorn Helgaas @ 2024-07-15 17:33 UTC (permalink / raw)
  To: Michael Chan
  Cc: davem, netdev, edumazet, kuba, pabeni, pavan.chebbi,
	andrew.gospodarek, Hongguang Gao, Somnath Kotur

On Sat, Jul 13, 2024 at 04:43:38PM -0700, Michael Chan wrote:
> If dynamic MSIX allocation is supported, additional MSIX can be
> allocated at run-time without reinitializing the existing MSIX entries.
> The first step to support this dynamic scheme is to alloacte a large

s/alloacte/allocate/

> enough bp->irq_tbl if dynamic allocation is supported.

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH net-next 9/9] bnxt_en: Support dynamic MSIX
  2024-07-13 23:43 ` [PATCH net-next 9/9] bnxt_en: Support dynamic MSIX Michael Chan
  2024-07-15  9:31   ` Simon Horman
@ 2024-07-15 17:34   ` Bjorn Helgaas
  1 sibling, 0 replies; 27+ messages in thread
From: Bjorn Helgaas @ 2024-07-15 17:34 UTC (permalink / raw)
  To: Michael Chan
  Cc: davem, netdev, edumazet, kuba, pabeni, pavan.chebbi,
	andrew.gospodarek, Hongguang Gao, Somnath Kotur

On Sat, Jul 13, 2024 at 04:43:39PM -0700, Michael Chan wrote:
> A range of MSIX vectors are allocated at initializtion for the number

s/initializtion/initialization/

> needed for RocE and L2.  During run-time, if the user increases or
> decreases the number of L2 rings, all the MSIX vectors have to be
> freed and a new range has to be allocated.  This is not optimal and
> causes disruptions to RoCE traffic every time there is a change in L2
> MSIX.
> 
> If the system supports dynamic MSIX allocations, use dynamic
> allocation to add new L2 MSIX vectors or free unneeded L2 MSIX
> vectors.  RoCE traffic is not affected using this scheme.

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH net-next 5/9] bnxt_en: Remove BNXT_FLAG_USING_MSIX flag
  2024-07-15 17:32   ` Bjorn Helgaas
@ 2024-07-15 18:00     ` Michael Chan
  0 siblings, 0 replies; 27+ messages in thread
From: Michael Chan @ 2024-07-15 18:00 UTC (permalink / raw)
  To: Bjorn Helgaas
  Cc: davem, netdev, edumazet, kuba, pabeni, pavan.chebbi,
	andrew.gospodarek, Kalesh AP, Somnath Kotur, Hongguang Gao

[-- Attachment #1: Type: text/plain, Size: 1260 bytes --]

On Mon, Jul 15, 2024 at 10:32 AM Bjorn Helgaas <helgaas@kernel.org> wrote:
>
> On Sat, Jul 13, 2024 at 04:43:35PM -0700, Michael Chan wrote:
> > Now that we only support MSIX, the BNXT_FLAG_USING_MSIX is always true.
> > Remove it and any if conditions checking for it.  Remove the INTX
> > handler and associated logic.
>
> The cover letter says new firmware (the revision isn't mentioned)
> doesn't support INTx.  I guess it's OK if the new driver without INTx
> support runs on adapters with old firmware that still supports INTx?
> So the INTx support was never a real benefit?  I assume this driver
> change won't force a simultaneous firmware update?  The old driver
> might work in a "pci=nomsi" situation, but the new one probably won't?
> Just checking to be sure these are all acceptable consequences.

INTx was used as a fall-back mechanism in case MSIX wasn't available.

A new driver running on a NIC with older FW will work fine in MSIX
mode.  MSIX is always supported on any version of FW.  A new driver
obviously will not work in INTx mode even if the FW supports it.  But
INTx hasn't been tested for so many years that I won't be surprised if
it doesn't work using all older components that should support it.
Thanks.

[-- Attachment #2: S/MIME Cryptographic Signature --]
[-- Type: application/pkcs7-signature, Size: 4209 bytes --]

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH net-next 4/9] bnxt_en: Deprecate support for legacy INTX mode
  2024-07-13 23:43 ` [PATCH net-next 4/9] bnxt_en: Deprecate support for legacy INTX mode Michael Chan
  2024-07-15  9:28   ` Simon Horman
@ 2024-07-16 16:57   ` Dan Carpenter
  2024-07-16 17:28     ` Michael Chan
  1 sibling, 1 reply; 27+ messages in thread
From: Dan Carpenter @ 2024-07-16 16:57 UTC (permalink / raw)
  To: oe-kbuild, Michael Chan, davem
  Cc: lkp, oe-kbuild-all, netdev, edumazet, kuba, pabeni, pavan.chebbi,
	andrew.gospodarek, Hongguang Gao, Kalesh AP, Somnath Kotur

Hi Michael,

kernel test robot noticed the following build warnings:

url:    https://github.com/intel-lab-lkp/linux/commits/Michael-Chan/bnxt_en-add-support-for-storing-crash-dump-into-host-memory/20240714-074731
base:   net-next/main
patch link:    https://lore.kernel.org/r/20240713234339.70293-5-michael.chan%40broadcom.com
patch subject: [PATCH net-next 4/9] bnxt_en: Deprecate support for legacy INTX mode
config: i386-randconfig-141-20240716 (https://download.01.org/0day-ci/archive/20240716/202407162324.caSQMdc3-lkp@intel.com/config)
compiler: gcc-13 (Ubuntu 13.2.0-4ubuntu3) 13.2.0

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Reported-by: Dan Carpenter <dan.carpenter@linaro.org>
| Closes: https://lore.kernel.org/r/202407162324.caSQMdc3-lkp@intel.com/

New smatch warnings:
drivers/net/ethernet/broadcom/bnxt/bnxt.c:15950 bnxt_init_one() warn: 'dev' from register_netdev() not released on lines: 15719.

Old smatch warnings:
drivers/net/ethernet/broadcom/bnxt/bnxt.c:769 bnxt_start_xmit() error: we previously assumed 'ptp' could be null (see line 514)

vim +/dev +15950 drivers/net/ethernet/broadcom/bnxt/bnxt.c

c0c050c58d84099 Michael Chan        2015-10-22  15681  static int bnxt_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
c0c050c58d84099 Michael Chan        2015-10-22  15682  {
f42822f22b1c5f7 Michael Chan        2024-02-05  15683  	struct bnxt_hw_resc *hw_resc;
c0c050c58d84099 Michael Chan        2015-10-22  15684  	struct net_device *dev;
c0c050c58d84099 Michael Chan        2015-10-22  15685  	struct bnxt *bp;
6e6c5a57fbe1c77 Michael Chan        2016-01-02  15686  	int rc, max_irqs;
c0c050c58d84099 Michael Chan        2015-10-22  15687  
4e00338a61998de Ray Jui             2017-02-20  15688  	if (pci_is_bridge(pdev))
fa853dda19a1878 Prashant Sreedharan 2016-07-18  15689  		return -ENODEV;
fa853dda19a1878 Prashant Sreedharan 2016-07-18  15690  
8743db4a9acfd51 Vasundhara Volam    2020-02-20  15691  	/* Clear any pending DMA transactions from crash kernel
8743db4a9acfd51 Vasundhara Volam    2020-02-20  15692  	 * while loading driver in capture kernel.
8743db4a9acfd51 Vasundhara Volam    2020-02-20  15693  	 */
8743db4a9acfd51 Vasundhara Volam    2020-02-20  15694  	if (is_kdump_kernel()) {
8743db4a9acfd51 Vasundhara Volam    2020-02-20  15695  		pci_clear_master(pdev);
8743db4a9acfd51 Vasundhara Volam    2020-02-20  15696  		pcie_flr(pdev);
8743db4a9acfd51 Vasundhara Volam    2020-02-20  15697  	}
8743db4a9acfd51 Vasundhara Volam    2020-02-20  15698  
c0c050c58d84099 Michael Chan        2015-10-22  15699  	max_irqs = bnxt_get_max_irq(pdev);
ba098017791eb8a Michael Chan        2023-11-13  15700  	dev = alloc_etherdev_mqs(sizeof(*bp), max_irqs * BNXT_MAX_QUEUE,
ba098017791eb8a Michael Chan        2023-11-13  15701  				 max_irqs);
c0c050c58d84099 Michael Chan        2015-10-22  15702  	if (!dev)
c0c050c58d84099 Michael Chan        2015-10-22  15703  		return -ENOMEM;
c0c050c58d84099 Michael Chan        2015-10-22  15704  
c0c050c58d84099 Michael Chan        2015-10-22  15705  	bp = netdev_priv(dev);
c7dd4a5b0a155c4 Edwin Peer          2021-10-29  15706  	bp->board_idx = ent->driver_data;
8fb35cd302f74e6 Michael Chan        2020-10-12  15707  	bp->msg_enable = BNXT_DEF_MSG_ENABLE;
9c1fabdf424f273 Michael Chan        2018-10-14  15708  	bnxt_set_max_func_irqs(bp, max_irqs);
c0c050c58d84099 Michael Chan        2015-10-22  15709  
c7dd4a5b0a155c4 Edwin Peer          2021-10-29  15710  	if (bnxt_vf_pciid(bp->board_idx))
c0c050c58d84099 Michael Chan        2015-10-22  15711  		bp->flags |= BNXT_FLAG_VF;
c0c050c58d84099 Michael Chan        2015-10-22  15712  
0020ae2a4aa81be Vikas Gupta         2022-12-26  15713  	/* No devlink port registration in case of a VF */
0020ae2a4aa81be Vikas Gupta         2022-12-26  15714  	if (BNXT_PF(bp))
0020ae2a4aa81be Vikas Gupta         2022-12-26  15715  		SET_NETDEV_DEVLINK_PORT(dev, &bp->dl_port);
0020ae2a4aa81be Vikas Gupta         2022-12-26  15716  
5c11f6d07a2994d Michael Chan        2024-07-13  15717  	if (!pdev->msix_cap) {
5c11f6d07a2994d Michael Chan        2024-07-13  15718  		dev_err(&pdev->dev, "MSIX capability not found, aborting\n");
5c11f6d07a2994d Michael Chan        2024-07-13  15719  		return -ENODEV;


	rc = -ENODEV;
	goto init_err_free;

5c11f6d07a2994d Michael Chan        2024-07-13  15720  	}
c0c050c58d84099 Michael Chan        2015-10-22  15721  
c0c050c58d84099 Michael Chan        2015-10-22  15722  	rc = bnxt_init_board(pdev, dev);
c0c050c58d84099 Michael Chan        2015-10-22  15723  	if (rc < 0)
c0c050c58d84099 Michael Chan        2015-10-22  15724  		goto init_err_free;
c0c050c58d84099 Michael Chan        2015-10-22  15725  
c0c050c58d84099 Michael Chan        2015-10-22  15726  	dev->netdev_ops = &bnxt_netdev_ops;
af7b3b4adda592c Jakub Kicinski      2024-03-06  15727  	dev->stat_ops = &bnxt_stat_ops;
c0c050c58d84099 Michael Chan        2015-10-22  15728  	dev->watchdog_timeo = BNXT_TX_TIMEOUT;
c0c050c58d84099 Michael Chan        2015-10-22  15729  	dev->ethtool_ops = &bnxt_ethtool_ops;
2d694c27d32efc9 David Wei           2024-06-18  15730  	dev->queue_mgmt_ops = &bnxt_queue_mgmt_ops;
c0c050c58d84099 Michael Chan        2015-10-22  15731  	pci_set_drvdata(pdev, dev);
c0c050c58d84099 Michael Chan        2015-10-22  15732  
3e8060fa837630f Prashant Sreedharan 2016-07-18  15733  	rc = bnxt_alloc_hwrm_resources(bp);
3e8060fa837630f Prashant Sreedharan 2016-07-18  15734  	if (rc)
17086399c113d93 Sathya Perla        2017-02-20  15735  		goto init_err_pci_clean;
3e8060fa837630f Prashant Sreedharan 2016-07-18  15736  
3e8060fa837630f Prashant Sreedharan 2016-07-18  15737  	mutex_init(&bp->hwrm_cmd_lock);
ba642ab773db97c Michael Chan        2019-08-29  15738  	mutex_init(&bp->link_lock);
3e8060fa837630f Prashant Sreedharan 2016-07-18  15739  
7c3809181468a21 Michael Chan        2019-07-29  15740  	rc = bnxt_fw_init_one_p1(bp);
e605db801bdeb9d Deepak Khungar      2017-05-29  15741  	if (rc)
e605db801bdeb9d Deepak Khungar      2017-05-29  15742  		goto init_err_pci_clean;
e605db801bdeb9d Deepak Khungar      2017-05-29  15743  
3e3c09b0e999f51 Vasundhara Volam    2021-01-25  15744  	if (BNXT_PF(bp))
3e3c09b0e999f51 Vasundhara Volam    2021-01-25  15745  		bnxt_vpd_read_info(bp);
3e3c09b0e999f51 Vasundhara Volam    2021-01-25  15746  
1c7fd6ee2fe4ec6 Randy Schacher      2023-11-20  15747  	if (BNXT_CHIP_P5_PLUS(bp)) {
1c7fd6ee2fe4ec6 Randy Schacher      2023-11-20  15748  		bp->flags |= BNXT_FLAG_CHIP_P5_PLUS;
a432a45bdba4387 Michael Chan        2023-12-01  15749  		if (BNXT_CHIP_P7(bp))
a432a45bdba4387 Michael Chan        2023-12-01  15750  			bp->flags |= BNXT_FLAG_CHIP_P7;
9d6b648c3112012 Michael Chan        2020-09-27  15751  	}
e38287b72ec5455 Michael Chan        2018-10-14  15752  
46e457a454de1d9 Jakub Kicinski      2024-07-11  15753  	rc = bnxt_alloc_rss_indir_tbl(bp);
5fa65524f6e0b95 Edwin Peer          2020-08-26  15754  	if (rc)
5fa65524f6e0b95 Edwin Peer          2020-08-26  15755  		goto init_err_pci_clean;
5fa65524f6e0b95 Edwin Peer          2020-08-26  15756  
7c3809181468a21 Michael Chan        2019-07-29  15757  	rc = bnxt_fw_init_one_p2(bp);
3c2217a675bac22 Michael Chan        2017-03-08  15758  	if (rc)
3c2217a675bac22 Michael Chan        2017-03-08  15759  		goto init_err_pci_clean;
3c2217a675bac22 Michael Chan        2017-03-08  15760  
8ae2473842bdbb9 Michael Chan        2020-05-04  15761  	rc = bnxt_map_db_bar(bp);
8ae2473842bdbb9 Michael Chan        2020-05-04  15762  	if (rc) {
8ae2473842bdbb9 Michael Chan        2020-05-04  15763  		dev_err(&pdev->dev, "Cannot map doorbell BAR rc = %d, aborting\n",
8ae2473842bdbb9 Michael Chan        2020-05-04  15764  			rc);
8ae2473842bdbb9 Michael Chan        2020-05-04  15765  		goto init_err_pci_clean;
8ae2473842bdbb9 Michael Chan        2020-05-04  15766  	}
8ae2473842bdbb9 Michael Chan        2020-05-04  15767  
c0c050c58d84099 Michael Chan        2015-10-22  15768  	dev->hw_features = NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM | NETIF_F_SG |
c0c050c58d84099 Michael Chan        2015-10-22  15769  			   NETIF_F_TSO | NETIF_F_TSO6 |
c0c050c58d84099 Michael Chan        2015-10-22  15770  			   NETIF_F_GSO_UDP_TUNNEL | NETIF_F_GSO_GRE |
7e13318daa4a67b Tom Herbert         2016-05-18  15771  			   NETIF_F_GSO_IPXIP4 |
152971ee75fddbc Alexander Duyck     2016-05-02  15772  			   NETIF_F_GSO_UDP_TUNNEL_CSUM | NETIF_F_GSO_GRE_CSUM |
152971ee75fddbc Alexander Duyck     2016-05-02  15773  			   NETIF_F_GSO_PARTIAL | NETIF_F_RXHASH |
3e8060fa837630f Prashant Sreedharan 2016-07-18  15774  			   NETIF_F_RXCSUM | NETIF_F_GRO;
feeef68f6f3d21a Michael Chan        2023-12-11  15775  	if (bp->flags & BNXT_FLAG_UDP_GSO_CAP)
feeef68f6f3d21a Michael Chan        2023-12-11  15776  		dev->hw_features |= NETIF_F_GSO_UDP_L4;
3e8060fa837630f Prashant Sreedharan 2016-07-18  15777  
e38287b72ec5455 Michael Chan        2018-10-14  15778  	if (BNXT_SUPPORTS_TPA(bp))
3e8060fa837630f Prashant Sreedharan 2016-07-18  15779  		dev->hw_features |= NETIF_F_LRO;
c0c050c58d84099 Michael Chan        2015-10-22  15780  
c0c050c58d84099 Michael Chan        2015-10-22  15781  	dev->hw_enc_features =
c0c050c58d84099 Michael Chan        2015-10-22  15782  			NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM | NETIF_F_SG |
c0c050c58d84099 Michael Chan        2015-10-22  15783  			NETIF_F_TSO | NETIF_F_TSO6 |
c0c050c58d84099 Michael Chan        2015-10-22  15784  			NETIF_F_GSO_UDP_TUNNEL | NETIF_F_GSO_GRE |
152971ee75fddbc Alexander Duyck     2016-05-02  15785  			NETIF_F_GSO_UDP_TUNNEL_CSUM | NETIF_F_GSO_GRE_CSUM |
7e13318daa4a67b Tom Herbert         2016-05-18  15786  			NETIF_F_GSO_IPXIP4 | NETIF_F_GSO_PARTIAL;
feeef68f6f3d21a Michael Chan        2023-12-11  15787  	if (bp->flags & BNXT_FLAG_UDP_GSO_CAP)
feeef68f6f3d21a Michael Chan        2023-12-11  15788  		dev->hw_enc_features |= NETIF_F_GSO_UDP_L4;
77b0fff55dcd34b Michael Chan        2023-12-11  15789  	if (bp->flags & BNXT_FLAG_CHIP_P7)
77b0fff55dcd34b Michael Chan        2023-12-11  15790  		dev->udp_tunnel_nic_info = &bnxt_udp_tunnels_p7;
77b0fff55dcd34b Michael Chan        2023-12-11  15791  	else
442a35a5a7aa727 Jakub Kicinski      2020-07-09  15792  		dev->udp_tunnel_nic_info = &bnxt_udp_tunnels;
442a35a5a7aa727 Jakub Kicinski      2020-07-09  15793  
152971ee75fddbc Alexander Duyck     2016-05-02  15794  	dev->gso_partial_features = NETIF_F_GSO_UDP_TUNNEL_CSUM |
152971ee75fddbc Alexander Duyck     2016-05-02  15795  				    NETIF_F_GSO_GRE_CSUM;
c0c050c58d84099 Michael Chan        2015-10-22  15796  	dev->vlan_features = dev->hw_features | NETIF_F_HIGHDMA;
1da63ddd0e15527 Edwin Peer          2020-07-08  15797  	if (bp->fw_cap & BNXT_FW_CAP_VLAN_RX_STRIP)
1da63ddd0e15527 Edwin Peer          2020-07-08  15798  		dev->hw_features |= BNXT_HW_FEATURE_VLAN_ALL_RX;
1da63ddd0e15527 Edwin Peer          2020-07-08  15799  	if (bp->fw_cap & BNXT_FW_CAP_VLAN_TX_INSERT)
1da63ddd0e15527 Edwin Peer          2020-07-08  15800  		dev->hw_features |= BNXT_HW_FEATURE_VLAN_ALL_TX;
e38287b72ec5455 Michael Chan        2018-10-14  15801  	if (BNXT_SUPPORTS_TPA(bp))
1054aee82321483 Michael Chan        2017-12-16  15802  		dev->hw_features |= NETIF_F_GRO_HW;
c0c050c58d84099 Michael Chan        2015-10-22  15803  	dev->features |= dev->hw_features | NETIF_F_HIGHDMA;
1054aee82321483 Michael Chan        2017-12-16  15804  	if (dev->features & NETIF_F_GRO_HW)
1054aee82321483 Michael Chan        2017-12-16  15805  		dev->features &= ~NETIF_F_LRO;
c0c050c58d84099 Michael Chan        2015-10-22  15806  	dev->priv_flags |= IFF_UNICAST_FLT;
c0c050c58d84099 Michael Chan        2015-10-22  15807  
b6488b161ab2972 Coco Li             2022-12-10  15808  	netif_set_tso_max_size(dev, GSO_MAX_SIZE);
b7bfcb4c7ce44fd Michael Chan        2024-06-18  15809  	if (bp->tso_max_segs)
b7bfcb4c7ce44fd Michael Chan        2024-06-18  15810  		netif_set_tso_max_segs(dev, bp->tso_max_segs);
b6488b161ab2972 Coco Li             2022-12-10  15811  
66c0e13ad236c74 Marek Majtyka       2023-02-01  15812  	dev->xdp_features = NETDEV_XDP_ACT_BASIC | NETDEV_XDP_ACT_REDIRECT |
66c0e13ad236c74 Marek Majtyka       2023-02-01  15813  			    NETDEV_XDP_ACT_RX_SG;
66c0e13ad236c74 Marek Majtyka       2023-02-01  15814  
c0c050c58d84099 Michael Chan        2015-10-22  15815  #ifdef CONFIG_BNXT_SRIOV
c0c050c58d84099 Michael Chan        2015-10-22  15816  	init_waitqueue_head(&bp->sriov_cfg_wait);
c0c050c58d84099 Michael Chan        2015-10-22  15817  #endif
e38287b72ec5455 Michael Chan        2018-10-14  15818  	if (BNXT_SUPPORTS_TPA(bp)) {
309369c9b3f6a86 Michael Chan        2016-06-13  15819  		bp->gro_func = bnxt_gro_func_5730x;
67912c366d4bb0a Michael Chan        2019-07-29  15820  		if (BNXT_CHIP_P4(bp))
94758f8de037cf5 Michael Chan        2016-06-13  15821  			bp->gro_func = bnxt_gro_func_5731x;
1c7fd6ee2fe4ec6 Randy Schacher      2023-11-20  15822  		else if (BNXT_CHIP_P5_PLUS(bp))
67912c366d4bb0a Michael Chan        2019-07-29  15823  			bp->gro_func = bnxt_gro_func_5750x;
e38287b72ec5455 Michael Chan        2018-10-14  15824  	}
e38287b72ec5455 Michael Chan        2018-10-14  15825  	if (!BNXT_CHIP_P4_PLUS(bp))
434c975a8fe2f70 Michael Chan        2017-05-29  15826  		bp->flags |= BNXT_FLAG_DOUBLE_DB;
309369c9b3f6a86 Michael Chan        2016-06-13  15827  
a22a6ac2ff8080c Michael Chan        2017-08-23  15828  	rc = bnxt_init_mac_addr(bp);
a22a6ac2ff8080c Michael Chan        2017-08-23  15829  	if (rc) {
a22a6ac2ff8080c Michael Chan        2017-08-23  15830  		dev_err(&pdev->dev, "Unable to initialize mac address.\n");
a22a6ac2ff8080c Michael Chan        2017-08-23  15831  		rc = -EADDRNOTAVAIL;
a22a6ac2ff8080c Michael Chan        2017-08-23  15832  		goto init_err_pci_clean;
a22a6ac2ff8080c Michael Chan        2017-08-23  15833  	}
c0c050c58d84099 Michael Chan        2015-10-22  15834  
2e9217d1e8b72dd Vasundhara Volam    2019-05-22  15835  	if (BNXT_PF(bp)) {
03213a996531e50 Jiri Pirko          2019-04-03  15836  		/* Read the adapter's DSN to use as the eswitch switch_id */
b014232f7f56f6d Vasundhara Volam    2020-01-27  15837  		rc = bnxt_pcie_dsn_get(bp, bp->dsn);
2e9217d1e8b72dd Vasundhara Volam    2019-05-22  15838  	}
567b2abe6855178 Satish Baddipadige  2016-06-13  15839  
7eb9bb3a0c7c297 Michael Chan        2017-10-26  15840  	/* MTU range: 60 - FW defined max */
7eb9bb3a0c7c297 Michael Chan        2017-10-26  15841  	dev->min_mtu = ETH_ZLEN;
7eb9bb3a0c7c297 Michael Chan        2017-10-26  15842  	dev->max_mtu = bp->max_mtu;
7eb9bb3a0c7c297 Michael Chan        2017-10-26  15843  
ba642ab773db97c Michael Chan        2019-08-29  15844  	rc = bnxt_probe_phy(bp, true);
d5430d31ca72ec3 Michael Chan        2017-08-28  15845  	if (rc)
d5430d31ca72ec3 Michael Chan        2017-08-28  15846  		goto init_err_pci_clean;
d5430d31ca72ec3 Michael Chan        2017-08-28  15847  
f42822f22b1c5f7 Michael Chan        2024-02-05  15848  	hw_resc = &bp->hw_resc;
f42822f22b1c5f7 Michael Chan        2024-02-05  15849  	bp->max_fltr = hw_resc->max_rx_em_flows + hw_resc->max_rx_wm_flows +
f42822f22b1c5f7 Michael Chan        2024-02-05  15850  		       BNXT_L2_FLTR_MAX_FLTR;
f42822f22b1c5f7 Michael Chan        2024-02-05  15851  	/* Older firmware may not report these filters properly */
f42822f22b1c5f7 Michael Chan        2024-02-05  15852  	if (bp->max_fltr < BNXT_MAX_FLTR)
f42822f22b1c5f7 Michael Chan        2024-02-05  15853  		bp->max_fltr = BNXT_MAX_FLTR;
1f6e77cb9b328f2 Michael Chan        2023-12-22  15854  	bnxt_init_l2_fltr_tbl(bp);
c61fb99cae51958 Michael Chan        2017-02-06  15855  	bnxt_set_rx_skb_mode(bp, false);
c0c050c58d84099 Michael Chan        2015-10-22  15856  	bnxt_set_tpa_flags(bp);
c0c050c58d84099 Michael Chan        2015-10-22  15857  	bnxt_set_ring_params(bp);
2e4592dc9bee5ca Vikas Gupta         2024-04-09  15858  	bnxt_rdma_aux_device_init(bp);
702c221ca64060b Michael Chan        2017-05-29  15859  	rc = bnxt_set_dflt_rings(bp, true);
bdbd1eb59c565c5 Michael Chan        2016-12-29  15860  	if (rc) {
662c9b22f5b568f Edwin Peer          2022-01-09  15861  		if (BNXT_VF(bp) && rc == -ENODEV) {
662c9b22f5b568f Edwin Peer          2022-01-09  15862  			netdev_err(bp->dev, "Cannot configure VF rings while PF is unavailable.\n");
662c9b22f5b568f Edwin Peer          2022-01-09  15863  		} else {
bdbd1eb59c565c5 Michael Chan        2016-12-29  15864  			netdev_err(bp->dev, "Not enough rings available.\n");
bdbd1eb59c565c5 Michael Chan        2016-12-29  15865  			rc = -ENOMEM;
662c9b22f5b568f Edwin Peer          2022-01-09  15866  		}
17086399c113d93 Sathya Perla        2017-02-20  15867  		goto init_err_pci_clean;
bdbd1eb59c565c5 Michael Chan        2016-12-29  15868  	}
c0c050c58d84099 Michael Chan        2015-10-22  15869  
ba642ab773db97c Michael Chan        2019-08-29  15870  	bnxt_fw_init_one_p3(bp);
2bcfa6f6e7cf867 Michael Chan        2015-12-27  15871  
df78ea22460b6c6 Michael Chan        2021-12-27  15872  	bnxt_init_dflt_coal(bp);
df78ea22460b6c6 Michael Chan        2021-12-27  15873  
a196e96bb68fbc7 Edwin Peer          2020-07-08  15874  	if (dev->hw_features & BNXT_HW_FEATURE_VLAN_ALL_RX)
c0c050c58d84099 Michael Chan        2015-10-22  15875  		bp->flags |= BNXT_FLAG_STRIP_VLAN;
c0c050c58d84099 Michael Chan        2015-10-22  15876  
7809592d3e2ec79 Michael Chan        2016-12-07  15877  	rc = bnxt_init_int_mode(bp);
c0c050c58d84099 Michael Chan        2015-10-22  15878  	if (rc)
17086399c113d93 Sathya Perla        2017-02-20  15879  		goto init_err_pci_clean;
c0c050c58d84099 Michael Chan        2015-10-22  15880  
832aed16ce7af2a Michael Chan        2018-03-09  15881  	/* No TC has been set yet and rings may have been trimmed due to
832aed16ce7af2a Michael Chan        2018-03-09  15882  	 * limited MSIX, so we re-initialize the TX rings per TC.
832aed16ce7af2a Michael Chan        2018-03-09  15883  	 */
832aed16ce7af2a Michael Chan        2018-03-09  15884  	bp->tx_nr_rings_per_tc = bp->tx_nr_rings;
832aed16ce7af2a Michael Chan        2018-03-09  15885  
c213eae8d3cd4c0 Michael Chan        2017-10-13  15886  	if (BNXT_PF(bp)) {
c213eae8d3cd4c0 Michael Chan        2017-10-13  15887  		if (!bnxt_pf_wq) {
c213eae8d3cd4c0 Michael Chan        2017-10-13  15888  			bnxt_pf_wq =
c213eae8d3cd4c0 Michael Chan        2017-10-13  15889  				create_singlethread_workqueue("bnxt_pf_wq");
c213eae8d3cd4c0 Michael Chan        2017-10-13  15890  			if (!bnxt_pf_wq) {
c213eae8d3cd4c0 Michael Chan        2017-10-13  15891  				dev_err(&pdev->dev, "Unable to create workqueue.\n");
b5f796b62c98cd8 Zhang Changzhong    2020-11-18  15892  				rc = -ENOMEM;
c213eae8d3cd4c0 Michael Chan        2017-10-13  15893  				goto init_err_pci_clean;
c213eae8d3cd4c0 Michael Chan        2017-10-13  15894  			}
c213eae8d3cd4c0 Michael Chan        2017-10-13  15895  		}
18c7015cc65ab62 Jakub Kicinski      2020-07-17  15896  		rc = bnxt_init_tc(bp);
18c7015cc65ab62 Jakub Kicinski      2020-07-17  15897  		if (rc)
18c7015cc65ab62 Jakub Kicinski      2020-07-17  15898  			netdev_err(dev, "Failed to initialize TC flower offload, err = %d.\n",
18c7015cc65ab62 Jakub Kicinski      2020-07-17  15899  				   rc);
c213eae8d3cd4c0 Michael Chan        2017-10-13  15900  	}
2ae7408fedfee97 Sathya Perla        2017-08-28  15901  
190eda1a9dbc474 Vasundhara Volam    2021-04-11  15902  	bnxt_inv_fw_health_reg(bp);
e624c70e1131e14 Leon Romanovsky     2021-09-23  15903  	rc = bnxt_dl_register(bp);
e624c70e1131e14 Leon Romanovsky     2021-09-23  15904  	if (rc)
e624c70e1131e14 Leon Romanovsky     2021-09-23  15905  		goto init_err_dl;
cda2cab07711839 Vasundhara Volam    2020-01-27  15906  
8336a974f37df3c Pavan Chebbi        2024-02-05  15907  	INIT_LIST_HEAD(&bp->usr_fltr_list);
8336a974f37df3c Pavan Chebbi        2024-02-05  15908  
fea41bd766342a7 Pavan Chebbi        2024-03-25  15909  	if (BNXT_SUPPORTS_NTUPLE_VNIC(bp))
20c8ad72eb7f151 Jakub Kicinski      2024-07-11  15910  		bp->rss_cap |= BNXT_RSS_CAP_MULTI_RSS_CTX;
194fad5b27815ca Vikas Gupta         2024-04-09  15911  
7809592d3e2ec79 Michael Chan        2016-12-07  15912  	rc = register_netdev(dev);
7809592d3e2ec79 Michael Chan        2016-12-07  15913  	if (rc)
cda2cab07711839 Vasundhara Volam    2020-01-27  15914  		goto init_err_cleanup;
7809592d3e2ec79 Michael Chan        2016-12-07  15915  
937f188c1f4f89b Vasundhara Volam    2019-12-10  15916  	bnxt_dl_fw_reporters_create(bp);
4ab0c6a8ffd7d25 Sathya Perla        2017-07-24  15917  
194fad5b27815ca Vikas Gupta         2024-04-09  15918  	bnxt_rdma_aux_device_add(bp);
d80d88b0dfff582 Ajit Khaparde       2022-03-06  15919  
c7dd4a5b0a155c4 Edwin Peer          2021-10-29  15920  	bnxt_print_device_info(bp);
90c4f788f6c08aa Ajit Khaparde       2016-05-15  15921  
df3875ec5503969 Vasundhara Volam    2020-08-26  15922  	pci_save_state(pdev);
c0c050c58d84099 Michael Chan        2015-10-22  15923  
d80d88b0dfff582 Ajit Khaparde       2022-03-06  15924  	return 0;
cda2cab07711839 Vasundhara Volam    2020-01-27  15925  init_err_cleanup:
194fad5b27815ca Vikas Gupta         2024-04-09  15926  	bnxt_rdma_aux_device_uninit(bp);
cda2cab07711839 Vasundhara Volam    2020-01-27  15927  	bnxt_dl_unregister(bp);
e624c70e1131e14 Leon Romanovsky     2021-09-23  15928  init_err_dl:
2ae7408fedfee97 Sathya Perla        2017-08-28  15929  	bnxt_shutdown_tc(bp);
7809592d3e2ec79 Michael Chan        2016-12-07  15930  	bnxt_clear_int_mode(bp);
7809592d3e2ec79 Michael Chan        2016-12-07  15931  
17086399c113d93 Sathya Perla        2017-02-20  15932  init_err_pci_clean:
bdb3860236b3ec8 Vasundhara Volam    2019-11-23  15933  	bnxt_hwrm_func_drv_unrgtr(bp);
a2bf74f4e1b8239 Venkat Duvvuru      2018-10-05  15934  	bnxt_free_hwrm_resources(bp);
6ad71984aa6bb29 Kalesh AP           2023-09-26  15935  	bnxt_hwmon_uninit(bp);
03400aaa69f916a Somnath Kotur       2021-06-18  15936  	bnxt_ethtool_free(bp);
a521c8a01d267bc Michael Chan        2021-07-28  15937  	bnxt_ptp_clear(bp);
ae5c42f0b92ca0a Michael Chan        2021-06-27  15938  	kfree(bp->ptp_cfg);
ae5c42f0b92ca0a Michael Chan        2021-06-27  15939  	bp->ptp_cfg = NULL;
07f83d72d238f5d Michael Chan        2019-08-29  15940  	kfree(bp->fw_health);
07f83d72d238f5d Michael Chan        2019-08-29  15941  	bp->fw_health = NULL;
17086399c113d93 Sathya Perla        2017-02-20  15942  	bnxt_cleanup_pci(bp);
62bfb932a51f6d0 Michael Chan        2020-03-22  15943  	bnxt_free_ctx_mem(bp);
b440eb65fe73aa6 Vikas Gupta         2024-07-13  15944  	bnxt_free_crash_dump_mem(bp);
1667cbf6a4ebe09 Michael Chan        2020-07-08  15945  	kfree(bp->rss_indir_tbl);
1667cbf6a4ebe09 Michael Chan        2020-07-08  15946  	bp->rss_indir_tbl = NULL;
c0c050c58d84099 Michael Chan        2015-10-22  15947  
c0c050c58d84099 Michael Chan        2015-10-22  15948  init_err_free:
c0c050c58d84099 Michael Chan        2015-10-22  15949  	free_netdev(dev);
c0c050c58d84099 Michael Chan        2015-10-22 @15950  	return rc;
c0c050c58d84099 Michael Chan        2015-10-22  15951  }

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH net-next 4/9] bnxt_en: Deprecate support for legacy INTX mode
  2024-07-16 16:57   ` Dan Carpenter
@ 2024-07-16 17:28     ` Michael Chan
  0 siblings, 0 replies; 27+ messages in thread
From: Michael Chan @ 2024-07-16 17:28 UTC (permalink / raw)
  To: Dan Carpenter
  Cc: oe-kbuild, davem, lkp, oe-kbuild-all, netdev, edumazet, kuba,
	pabeni, pavan.chebbi, andrew.gospodarek, Hongguang Gao, Kalesh AP,
	Somnath Kotur

[-- Attachment #1: Type: text/plain, Size: 359 bytes --]

On Tue, Jul 16, 2024 at 9:57 AM Dan Carpenter <dan.carpenter@linaro.org> wrote:
> New smatch warnings:
> drivers/net/ethernet/broadcom/bnxt/bnxt.c:15950 bnxt_init_one() warn: 'dev' from register_netdev() not released on lines: 15719.
>

Thanks for the report.  Simon also reported the same issue earlier.  I
will fix this when I resubmit in 2 weeks.

[-- Attachment #2: S/MIME Cryptographic Signature --]
[-- Type: application/pkcs7-signature, Size: 4209 bytes --]

^ permalink raw reply	[flat|nested] 27+ messages in thread

end of thread, other threads:[~2024-07-16 17:28 UTC | newest]

Thread overview: 27+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-07-13 23:43 [PATCH net-next 0/9] bnxt_en: Update for net-next Michael Chan
2024-07-13 23:43 ` [PATCH net-next 1/9] bnxt_en: add support for storing crash dump into host memory Michael Chan
2024-07-15  9:28   ` Simon Horman
2024-07-13 23:43 ` [PATCH net-next 2/9] bnxt_en: add support for retrieving crash dump using ethtool Michael Chan
2024-07-15  9:28   ` Simon Horman
2024-07-13 23:43 ` [PATCH net-next 3/9] bnxt_en: Support QOS and TPID settings for the SRIOV VLAN Michael Chan
2024-07-15  9:17   ` Simon Horman
2024-07-13 23:43 ` [PATCH net-next 4/9] bnxt_en: Deprecate support for legacy INTX mode Michael Chan
2024-07-15  9:28   ` Simon Horman
2024-07-15 16:24     ` Michael Chan
2024-07-16 16:57   ` Dan Carpenter
2024-07-16 17:28     ` Michael Chan
2024-07-13 23:43 ` [PATCH net-next 5/9] bnxt_en: Remove BNXT_FLAG_USING_MSIX flag Michael Chan
2024-07-15  9:29   ` Simon Horman
2024-07-15 17:32   ` Bjorn Helgaas
2024-07-15 18:00     ` Michael Chan
2024-07-13 23:43 ` [PATCH net-next 6/9] bnxt_en: Remove register mapping to support INTX Michael Chan
2024-07-15  9:30   ` Simon Horman
2024-07-15 17:27   ` Bjorn Helgaas
2024-07-13 23:43 ` [PATCH net-next 7/9] bnxt_en: Replace deprecated PCI MSIX APIs Michael Chan
2024-07-15  9:30   ` Simon Horman
2024-07-13 23:43 ` [PATCH net-next 8/9] bnxt_en: Allocate the max bp->irq_tbl size for dynamic msix allocation Michael Chan
2024-07-15  9:30   ` Simon Horman
2024-07-15 17:33   ` Bjorn Helgaas
2024-07-13 23:43 ` [PATCH net-next 9/9] bnxt_en: Support dynamic MSIX Michael Chan
2024-07-15  9:31   ` Simon Horman
2024-07-15 17:34   ` Bjorn Helgaas

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).