public inbox for netdev@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH net 0/4] bnxt_en: Bug fixes
@ 2026-05-04  8:36 Pavan Chebbi
  2026-05-04  8:36 ` [PATCH net 1/4] bnxt_en: Delay for 5 seconds after AER DPC for all chips Pavan Chebbi
                   ` (3 more replies)
  0 siblings, 4 replies; 6+ messages in thread
From: Pavan Chebbi @ 2026-05-04  8:36 UTC (permalink / raw)
  To: davem, kuba
  Cc: andrew+netdev, andrew.gospodarek, edumazet, michael.chan, netdev,
	pabeni, pavan.chebbi

This patchset adds the following fixes for bnxt:

Patch #1 fixes DPC AER handling to make it more reliable

Patch #2 fixes incorrect capping bp->max_tpa based on what the FW
supports

Patch #3 fixes ignoring of VNIC configuration result when RDMA
driver is loading

Patch #4 fixes logic to make phase adjustment on the PPS OUT signal

Kalesh AP (1):
  bnxt_en: Check return value of bnxt_hwrm_vnic_cfg

Michael Chan (2):
  bnxt_en: Delay for 5 seconds after AER DPC for all chips
  bnxt_en: Set bp->max_tpa according to what the FW supports

Pavan Chebbi (1):
  bnxt_en: Use absolute target ns from ptp_clock_request

 drivers/net/ethernet/broadcom/bnxt/bnxt.c     | 16 +++++++---
 drivers/net/ethernet/broadcom/bnxt/bnxt_ptp.c | 29 ++++---------------
 drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c | 10 +++++--
 3 files changed, 25 insertions(+), 30 deletions(-)

-- 
2.52.0


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

* [PATCH net 1/4] bnxt_en: Delay for 5 seconds after AER DPC for all chips
  2026-05-04  8:36 [PATCH net 0/4] bnxt_en: Bug fixes Pavan Chebbi
@ 2026-05-04  8:36 ` Pavan Chebbi
  2026-05-04  8:36 ` [PATCH net 2/4] bnxt_en: Set bp->max_tpa according to what the FW supports Pavan Chebbi
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 6+ messages in thread
From: Pavan Chebbi @ 2026-05-04  8:36 UTC (permalink / raw)
  To: davem, kuba
  Cc: andrew+netdev, andrew.gospodarek, edumazet, michael.chan, netdev,
	pabeni, pavan.chebbi, Kalesh AP

From: Michael Chan <michael.chan@broadcom.com>

The FW on all chips is requiring a 5-second delay after Downstream
Port Containment (DPC) AER.  The previously added 900 msec delay was
not long enough in all cases because the chip's CRS (Configuration
Request Retry Status) mechanism is not always reliable.

Fixes: d5ab32e9b02d ("bnxt_en: Add delay to handle Downstream Port Containment (DPC) AER")
Reviewed-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
Signed-off-by: Pavan Chebbi <pavan.chebbi@broadcom.com>
---
 drivers/net/ethernet/broadcom/bnxt/bnxt.c | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
index 8c55874f44ca..3db951d0c690 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
@@ -17360,9 +17360,14 @@ static pci_ers_result_t bnxt_io_slot_reset(struct pci_dev *pdev)
 
 	netdev_info(bp->dev, "PCI Slot Reset\n");
 
-	if (!(bp->flags & BNXT_FLAG_CHIP_P5_PLUS) &&
-	    test_bit(BNXT_STATE_PCI_CHANNEL_IO_FROZEN, &bp->state))
-		msleep(900);
+	if (test_bit(BNXT_STATE_PCI_CHANNEL_IO_FROZEN, &bp->state)) {
+		/* After DPC, the chip should return CRS when the vendor ID
+		 * config register is read until it is ready.  On all chips,
+		 * this is not happening reliably so add a 5-second delay as a
+		 * workaround.
+		 */
+		msleep(5000);
+	}
 
 	netdev_lock(netdev);
 
-- 
2.52.0


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

* [PATCH net 2/4] bnxt_en: Set bp->max_tpa according to what the FW supports
  2026-05-04  8:36 [PATCH net 0/4] bnxt_en: Bug fixes Pavan Chebbi
  2026-05-04  8:36 ` [PATCH net 1/4] bnxt_en: Delay for 5 seconds after AER DPC for all chips Pavan Chebbi
@ 2026-05-04  8:36 ` Pavan Chebbi
  2026-05-04  8:36 ` [PATCH net 3/4] bnxt_en: Check return value of bnxt_hwrm_vnic_cfg Pavan Chebbi
  2026-05-04  8:36 ` [PATCH net 4/4] bnxt_en: Use absolute target ns from ptp_clock_request Pavan Chebbi
  3 siblings, 0 replies; 6+ messages in thread
From: Pavan Chebbi @ 2026-05-04  8:36 UTC (permalink / raw)
  To: davem, kuba
  Cc: andrew+netdev, andrew.gospodarek, edumazet, michael.chan, netdev,
	pabeni, pavan.chebbi, Kalesh AP, Colin Winegarden,
	Rukhsana Ansari

From: Michael Chan <michael.chan@broadcom.com>

Fix the logic to set bp->max_tpa no higher than what the FW supports.
On P5 chips, some older FW sets max_tpa very low so we override it to
prevent performance regressions with the older FW.

Fixes: 79632e9ba386 ("bnxt_en: Expand bnxt_tpa_info struct to support 57500 chips.")
Reviewed-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
Reviewed-by: Colin Winegarden <colin.winegarden@broadcom.com>
Reviewed-by: Rukhsana Ansari <rukhsana.ansari@broadcom.com>
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
Signed-off-by: Pavan Chebbi <pavan.chebbi@broadcom.com>
---
 drivers/net/ethernet/broadcom/bnxt/bnxt.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
index 3db951d0c690..008c34cff7b4 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
@@ -3825,7 +3825,10 @@ static int bnxt_alloc_tpa_info(struct bnxt *bp)
 	if (bp->flags & BNXT_FLAG_CHIP_P5_PLUS) {
 		if (!bp->max_tpa_v2)
 			return 0;
-		bp->max_tpa = max_t(u16, bp->max_tpa_v2, MAX_TPA_P5);
+		bp->max_tpa = min_t(u16, bp->max_tpa_v2, MAX_TPA_P5);
+		/* Older P5 FW sets max_tpa_v2 low by mistake except NPAR */
+		if (bp->max_tpa <= 32 && BNXT_CHIP_P5(bp) && !BNXT_NPAR(bp))
+			bp->max_tpa = MAX_TPA_P5;
 	}
 
 	for (i = 0; i < bp->rx_nr_rings; i++) {
-- 
2.52.0


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

* [PATCH net 3/4] bnxt_en: Check return value of bnxt_hwrm_vnic_cfg
  2026-05-04  8:36 [PATCH net 0/4] bnxt_en: Bug fixes Pavan Chebbi
  2026-05-04  8:36 ` [PATCH net 1/4] bnxt_en: Delay for 5 seconds after AER DPC for all chips Pavan Chebbi
  2026-05-04  8:36 ` [PATCH net 2/4] bnxt_en: Set bp->max_tpa according to what the FW supports Pavan Chebbi
@ 2026-05-04  8:36 ` Pavan Chebbi
  2026-05-04  8:36 ` [PATCH net 4/4] bnxt_en: Use absolute target ns from ptp_clock_request Pavan Chebbi
  3 siblings, 0 replies; 6+ messages in thread
From: Pavan Chebbi @ 2026-05-04  8:36 UTC (permalink / raw)
  To: davem, kuba
  Cc: andrew+netdev, andrew.gospodarek, edumazet, michael.chan, netdev,
	pabeni, pavan.chebbi, Kalesh AP

From: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>

When the bnxt RDMA driver is loaded, it calls bnxt_register_dev().
As part of this, driver sends HWRM_VNIC_CFG firmware command
to configure the VNIC to operate in dual VNIC mode. Currently
the driver ignores the result of this firmware command. The RDMA
driver must know the result since it affects its functioning.

Check return value of call to bnxt_hwrm_vnic_cfg() in
bnxt_register_dev() and return failure on error.

Fixes: a588e4580a7e ("bnxt_en: Add interface to support RDMA driver.")
Reviewed-by: Michael Chan <michael.chan@broadcom.com>
Signed-off-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
Signed-off-by: Pavan Chebbi <pavan.chebbi@broadcom.com>
---
 drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c
index 052bf69cfa4c..5c751933da6a 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c
@@ -175,8 +175,14 @@ int bnxt_register_dev(struct bnxt_en_dev *edev,
 	ulp->handle = handle;
 	rcu_assign_pointer(ulp->ulp_ops, ulp_ops);
 
-	if (test_bit(BNXT_STATE_OPEN, &bp->state))
-		bnxt_hwrm_vnic_cfg(bp, &bp->vnic_info[BNXT_VNIC_DEFAULT]);
+	if (test_bit(BNXT_STATE_OPEN, &bp->state)) {
+		rc = bnxt_hwrm_vnic_cfg(bp, &bp->vnic_info[BNXT_VNIC_DEFAULT]);
+		if (rc) {
+			netdev_err(dev, "Failed to configure dual VNIC mode\n");
+			RCU_INIT_POINTER(ulp->ulp_ops, NULL);
+			goto exit;
+		}
+	}
 
 	edev->ulp_tbl->msix_requested = bnxt_get_ulp_msix_num(bp);
 
-- 
2.52.0


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

* [PATCH net 4/4] bnxt_en: Use absolute target ns from ptp_clock_request
  2026-05-04  8:36 [PATCH net 0/4] bnxt_en: Bug fixes Pavan Chebbi
                   ` (2 preceding siblings ...)
  2026-05-04  8:36 ` [PATCH net 3/4] bnxt_en: Check return value of bnxt_hwrm_vnic_cfg Pavan Chebbi
@ 2026-05-04  8:36 ` Pavan Chebbi
  2026-05-05 14:39   ` Vadim Fedorenko
  3 siblings, 1 reply; 6+ messages in thread
From: Pavan Chebbi @ 2026-05-04  8:36 UTC (permalink / raw)
  To: davem, kuba
  Cc: andrew+netdev, andrew.gospodarek, edumazet, michael.chan, netdev,
	pabeni, pavan.chebbi, Kalesh AP, Richard Cochran

There is no need to calculate the target PHC cycles required
to make phase adjustment on the PPS OUT signal. This is because
the application supplies absolute n_sec value in the future and
is already the actual desired target value.

Remove the unnecessary code.

Fixes: 9e518f25802c ("bnxt_en: 1PPS functions to configure TSIO pins")
Reviewed-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
Cc: Richard Cochran <richardcochran@gmail.com>
Signed-off-by: Pavan Chebbi <pavan.chebbi@broadcom.com>
---
 drivers/net/ethernet/broadcom/bnxt/bnxt_ptp.c | 29 ++++---------------
 1 file changed, 5 insertions(+), 24 deletions(-)

diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_ptp.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_ptp.c
index 53f336db4fcc..5d41dc1bc782 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt_ptp.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_ptp.c
@@ -419,31 +419,13 @@ void bnxt_ptp_reapply_pps(struct bnxt *bp)
 	}
 }
 
-static int bnxt_get_target_cycles(struct bnxt_ptp_cfg *ptp, u64 target_ns,
-				  u64 *cycles_delta)
-{
-	u64 cycles_now;
-	u64 nsec_now, nsec_delta;
-	int rc;
-
-	rc = bnxt_refclk_read(ptp->bp, NULL, &cycles_now);
-	if (rc)
-		return rc;
-
-	nsec_now = bnxt_timecounter_cyc2time(ptp, cycles_now);
-
-	nsec_delta = target_ns - nsec_now;
-	*cycles_delta = div64_u64(nsec_delta << ptp->cc.shift, ptp->cc.mult);
-	return 0;
-}
-
 static int bnxt_ptp_perout_cfg(struct bnxt_ptp_cfg *ptp,
 			       struct ptp_clock_request *rq)
 {
 	struct hwrm_func_ptp_cfg_input *req;
 	struct bnxt *bp = ptp->bp;
 	struct timespec64 ts;
-	u64 target_ns, delta;
+	u64 target_ns;
 	u16 enables;
 	int rc;
 
@@ -451,10 +433,6 @@ static int bnxt_ptp_perout_cfg(struct bnxt_ptp_cfg *ptp,
 	ts.tv_nsec = rq->perout.start.nsec;
 	target_ns = timespec64_to_ns(&ts);
 
-	rc = bnxt_get_target_cycles(ptp, target_ns, &delta);
-	if (rc)
-		return rc;
-
 	rc = hwrm_req_init(bp, req, HWRM_FUNC_PTP_CFG);
 	if (rc)
 		return rc;
@@ -468,7 +446,10 @@ static int bnxt_ptp_perout_cfg(struct bnxt_ptp_cfg *ptp,
 	req->ptp_freq_adj_dll_phase = 0;
 	req->ptp_freq_adj_ext_period = cpu_to_le32(NSEC_PER_SEC);
 	req->ptp_freq_adj_ext_up = 0;
-	req->ptp_freq_adj_ext_phase_lower = cpu_to_le32(delta);
+	req->ptp_freq_adj_ext_phase_lower =
+		cpu_to_le32(lower_32_bits(target_ns));
+	req->ptp_freq_adj_ext_phase_upper =
+		cpu_to_le32(upper_32_bits(target_ns));
 
 	return hwrm_req_send(bp, req);
 }
-- 
2.52.0


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

* Re: [PATCH net 4/4] bnxt_en: Use absolute target ns from ptp_clock_request
  2026-05-04  8:36 ` [PATCH net 4/4] bnxt_en: Use absolute target ns from ptp_clock_request Pavan Chebbi
@ 2026-05-05 14:39   ` Vadim Fedorenko
  0 siblings, 0 replies; 6+ messages in thread
From: Vadim Fedorenko @ 2026-05-05 14:39 UTC (permalink / raw)
  To: Pavan Chebbi, davem, kuba
  Cc: andrew+netdev, andrew.gospodarek, edumazet, michael.chan, netdev,
	pabeni, Kalesh AP, Richard Cochran

On 04/05/2026 09:36, Pavan Chebbi wrote:
> There is no need to calculate the target PHC cycles required
> to make phase adjustment on the PPS OUT signal. This is because
> the application supplies absolute n_sec value in the future and
> is already the actual desired target value.
> 
> Remove the unnecessary code.
> 
> Fixes: 9e518f25802c ("bnxt_en: 1PPS functions to configure TSIO pins")
> Reviewed-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
> Cc: Richard Cochran <richardcochran@gmail.com>
> Signed-off-by: Pavan Chebbi <pavan.chebbi@broadcom.com>
> ---
>   drivers/net/ethernet/broadcom/bnxt/bnxt_ptp.c | 29 ++++---------------
>   1 file changed, 5 insertions(+), 24 deletions(-)
> 

Reviewed-by: Vadim Fedorenko <vadim.fedorenko@linux.dev>
Tested-by: Vadim Fedorenko <vadim.fedorenko@linux.dev>

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

end of thread, other threads:[~2026-05-05 14:39 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-05-04  8:36 [PATCH net 0/4] bnxt_en: Bug fixes Pavan Chebbi
2026-05-04  8:36 ` [PATCH net 1/4] bnxt_en: Delay for 5 seconds after AER DPC for all chips Pavan Chebbi
2026-05-04  8:36 ` [PATCH net 2/4] bnxt_en: Set bp->max_tpa according to what the FW supports Pavan Chebbi
2026-05-04  8:36 ` [PATCH net 3/4] bnxt_en: Check return value of bnxt_hwrm_vnic_cfg Pavan Chebbi
2026-05-04  8:36 ` [PATCH net 4/4] bnxt_en: Use absolute target ns from ptp_clock_request Pavan Chebbi
2026-05-05 14:39   ` Vadim Fedorenko

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox