* [PATCH net-next 1/7] bnxt_en: Enhance TX pri counters
2025-11-26 21:56 [PATCH net-next 0/7] bnxt_en: Updates for net-next Michael Chan
@ 2025-11-26 21:56 ` Michael Chan
2025-11-26 21:56 ` [PATCH net-next 2/7] bnxt_en: Enhance log message in bnxt_get_module_status() Michael Chan
` (6 subsequent siblings)
7 siblings, 0 replies; 13+ messages in thread
From: Michael Chan @ 2025-11-26 21:56 UTC (permalink / raw)
To: davem
Cc: netdev, edumazet, kuba, pabeni, andrew+netdev, pavan.chebbi,
andrew.gospodarek
The priority packet and byte counters in ethtool -S are returned by
the driver based on the pri2cos mapping. The assumption is that each
priority is mapped to one and only one hardware CoS queue. In a
special RoCE configuration, the FW uses combined CoS queue 0 and CoS
queue 1 for the priority mapped to CoS queue 0. In this special
case, we need to add the CoS queue 0 and CoS queue 1 counters for
the priority packet and byte counters.
Reviewed-by: Andy Gospodarek <andrew.gospodarek@broadcom.com>
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
---
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 5 +++++
drivers/net/ethernet/broadcom/bnxt/bnxt.h | 1 +
drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c | 14 ++++++++++----
3 files changed, 16 insertions(+), 4 deletions(-)
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
index a625e7c311dd..148db3fe8fc2 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
@@ -8506,6 +8506,11 @@ static int bnxt_hwrm_func_qcfg(struct bnxt *bp)
if (flags & FUNC_QCFG_RESP_FLAGS_ENABLE_RDMA_SRIOV)
bp->fw_cap |= BNXT_FW_CAP_ENABLE_RDMA_SRIOV;
+ if (resp->roce_bidi_opt_mode &
+ FUNC_QCFG_RESP_ROCE_BIDI_OPT_MODE_DEDICATED)
+ bp->cos0_cos1_shared = 1;
+ else
+ bp->cos0_cos1_shared = 0;
switch (resp->port_partition_type) {
case FUNC_QCFG_RESP_PORT_PARTITION_TYPE_NPAR1_0:
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.h b/drivers/net/ethernet/broadcom/bnxt/bnxt.h
index 3613a172483a..aedb059f4ce5 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.h
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.h
@@ -2424,6 +2424,7 @@ struct bnxt {
u8 tc_to_qidx[BNXT_MAX_QUEUE];
u8 q_ids[BNXT_MAX_QUEUE];
u8 max_q;
+ u8 cos0_cos1_shared;
u8 num_tc;
u16 max_pfcwd_tmo_ms;
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c
index 41686a6f84b5..baac639f9c94 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c
@@ -688,16 +688,22 @@ static void bnxt_get_ethtool_stats(struct net_device *dev,
buf[j] = *(rx_port_stats_ext + n);
}
for (i = 0; i < 8; i++, j++) {
- long n = bnxt_tx_bytes_pri_arr[i].base_off +
- bp->pri2cos_idx[i];
+ u8 cos_idx = bp->pri2cos_idx[i];
+ long n;
+ n = bnxt_tx_bytes_pri_arr[i].base_off + cos_idx;
buf[j] = *(tx_port_stats_ext + n);
+ if (bp->cos0_cos1_shared && !cos_idx)
+ buf[j] += *(tx_port_stats_ext + n + 1);
}
for (i = 0; i < 8; i++, j++) {
- long n = bnxt_tx_pkts_pri_arr[i].base_off +
- bp->pri2cos_idx[i];
+ u8 cos_idx = bp->pri2cos_idx[i];
+ long n;
+ n = bnxt_tx_pkts_pri_arr[i].base_off + cos_idx;
buf[j] = *(tx_port_stats_ext + n);
+ if (bp->cos0_cos1_shared && !cos_idx)
+ buf[j] += *(tx_port_stats_ext + n + 1);
}
}
}
--
2.51.0
^ permalink raw reply related [flat|nested] 13+ messages in thread* [PATCH net-next 2/7] bnxt_en: Enhance log message in bnxt_get_module_status()
2025-11-26 21:56 [PATCH net-next 0/7] bnxt_en: Updates for net-next Michael Chan
2025-11-26 21:56 ` [PATCH net-next 1/7] bnxt_en: Enhance TX pri counters Michael Chan
@ 2025-11-26 21:56 ` Michael Chan
2025-11-26 21:56 ` [PATCH net-next 3/7] bnxt_en: Remove the redundant BNXT_EN_FLAG_MSIX_REQUESTED flag Michael Chan
` (5 subsequent siblings)
7 siblings, 0 replies; 13+ messages in thread
From: Michael Chan @ 2025-11-26 21:56 UTC (permalink / raw)
To: davem
Cc: netdev, edumazet, kuba, pabeni, andrew+netdev, pavan.chebbi,
andrew.gospodarek, Gautam R A, Somnath Kotur
From: Gautam R A <gautam-r.a@broadcom.com>
Rturn early with -EOPNOTSUPP and an extack message if the PHY type is
BaseT since module status is not available for BaseT.
Reviewed-by: Somnath Kotur <somnath.kotur@broadcom.com>
Signed-off-by: Gautam R A <gautam-r.a@broadcom.com>
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
---
drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c
index baac639f9c94..efb9bf20e66b 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c
@@ -4623,6 +4623,11 @@ static int bnxt_get_module_status(struct bnxt *bp, struct netlink_ext_ack *extac
PORT_PHY_QCFG_RESP_MODULE_STATUS_WARNINGMSG)
return 0;
+ if (bp->link_info.phy_type == PORT_PHY_QCFG_RESP_PHY_TYPE_BASET ||
+ bp->link_info.phy_type == PORT_PHY_QCFG_RESP_PHY_TYPE_BASETE){
+ NL_SET_ERR_MSG_MOD(extack, "Operation not supported as PHY type is Base-T");
+ return -EOPNOTSUPP;
+ }
switch (bp->link_info.module_status) {
case PORT_PHY_QCFG_RESP_MODULE_STATUS_PWRDOWN:
NL_SET_ERR_MSG_MOD(extack, "Transceiver module is powering down");
--
2.51.0
^ permalink raw reply related [flat|nested] 13+ messages in thread* [PATCH net-next 3/7] bnxt_en: Remove the redundant BNXT_EN_FLAG_MSIX_REQUESTED flag
2025-11-26 21:56 [PATCH net-next 0/7] bnxt_en: Updates for net-next Michael Chan
2025-11-26 21:56 ` [PATCH net-next 1/7] bnxt_en: Enhance TX pri counters Michael Chan
2025-11-26 21:56 ` [PATCH net-next 2/7] bnxt_en: Enhance log message in bnxt_get_module_status() Michael Chan
@ 2025-11-26 21:56 ` Michael Chan
2025-11-26 21:56 ` [PATCH net-next 4/7] bnxt_en: Add CQ ring dump to bnxt_dump_cp_sw_state() Michael Chan
` (4 subsequent siblings)
7 siblings, 0 replies; 13+ messages in thread
From: Michael Chan @ 2025-11-26 21:56 UTC (permalink / raw)
To: davem
Cc: netdev, edumazet, kuba, pabeni, andrew+netdev, pavan.chebbi,
andrew.gospodarek, Kalesh AP, Somnath Kotur
From: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
MSIX is always requested when the RoCE driver calls bnxt_register_dev().
We already check bnxt_ulp_registered(), so checking the flag is
redundant. It was a left-over flag after converting to auxbus, so
remove it.
Reviewed-by: Pavan Chebbi <pavan.chebbi@broadcom.com>
Reviewed-by: Somnath Kotur <somnath.kotur@broadcom.com>
Signed-off-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
---
drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c | 7 ++-----
drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.h | 1 -
2 files changed, 2 insertions(+), 6 deletions(-)
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c
index f8c2c72b382d..927971c362f1 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c
@@ -142,7 +142,6 @@ int bnxt_register_dev(struct bnxt_en_dev *edev,
edev->ulp_tbl->msix_requested = bnxt_get_ulp_msix_num(bp);
bnxt_fill_msix_vecs(bp, bp->edev->msix_entries);
- edev->flags |= BNXT_EN_FLAG_MSIX_REQUESTED;
exit:
mutex_unlock(&edev->en_dev_lock);
netdev_unlock(dev);
@@ -159,8 +158,6 @@ void bnxt_unregister_dev(struct bnxt_en_dev *edev)
ulp = edev->ulp_tbl;
netdev_lock(dev);
mutex_lock(&edev->en_dev_lock);
- if (ulp->msix_requested)
- edev->flags &= ~BNXT_EN_FLAG_MSIX_REQUESTED;
edev->ulp_tbl->msix_requested = 0;
if (ulp->max_async_event_id)
@@ -298,7 +295,7 @@ void bnxt_ulp_irq_stop(struct bnxt *bp)
struct bnxt_ulp_ops *ops;
bool reset = false;
- if (!edev || !(edev->flags & BNXT_EN_FLAG_MSIX_REQUESTED))
+ if (!edev)
return;
if (bnxt_ulp_registered(bp->edev)) {
@@ -321,7 +318,7 @@ void bnxt_ulp_irq_restart(struct bnxt *bp, int err)
struct bnxt_en_dev *edev = bp->edev;
struct bnxt_ulp_ops *ops;
- if (!edev || !(edev->flags & BNXT_EN_FLAG_MSIX_REQUESTED))
+ if (!edev)
return;
if (bnxt_ulp_registered(bp->edev)) {
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.h b/drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.h
index 7b9dd8ebe4bc..3c5b8a53f715 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.h
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.h
@@ -58,7 +58,6 @@ struct bnxt_en_dev {
#define BNXT_EN_FLAG_ROCEV2_CAP 0x2
#define BNXT_EN_FLAG_ROCE_CAP (BNXT_EN_FLAG_ROCEV1_CAP | \
BNXT_EN_FLAG_ROCEV2_CAP)
- #define BNXT_EN_FLAG_MSIX_REQUESTED 0x4
#define BNXT_EN_FLAG_ULP_STOPPED 0x8
#define BNXT_EN_FLAG_VF 0x10
#define BNXT_EN_VF(edev) ((edev)->flags & BNXT_EN_FLAG_VF)
--
2.51.0
^ permalink raw reply related [flat|nested] 13+ messages in thread* [PATCH net-next 4/7] bnxt_en: Add CQ ring dump to bnxt_dump_cp_sw_state()
2025-11-26 21:56 [PATCH net-next 0/7] bnxt_en: Updates for net-next Michael Chan
` (2 preceding siblings ...)
2025-11-26 21:56 ` [PATCH net-next 3/7] bnxt_en: Remove the redundant BNXT_EN_FLAG_MSIX_REQUESTED flag Michael Chan
@ 2025-11-26 21:56 ` Michael Chan
2025-11-26 21:56 ` [PATCH net-next 5/7] bnxt_en: Do not set EOP on RX AGG BDs on 5760X chips Michael Chan
` (3 subsequent siblings)
7 siblings, 0 replies; 13+ messages in thread
From: Michael Chan @ 2025-11-26 21:56 UTC (permalink / raw)
To: davem
Cc: netdev, edumazet, kuba, pabeni, andrew+netdev, pavan.chebbi,
andrew.gospodarek
On newer chips that use NQs and CQs, add the CQ ring dump to
bnxt_dump_cp_sw_state() to make it more complete.
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
---
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
index 148db3fe8fc2..7df30019c5b1 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
@@ -14025,11 +14025,19 @@ static void bnxt_dump_rx_sw_state(struct bnxt_napi *bnapi)
static void bnxt_dump_cp_sw_state(struct bnxt_napi *bnapi)
{
- struct bnxt_cp_ring_info *cpr = &bnapi->cp_ring;
- int i = bnapi->index;
+ struct bnxt_cp_ring_info *cpr = &bnapi->cp_ring, *cpr2;
+ int i = bnapi->index, j;
netdev_info(bnapi->bp->dev, "[%d]: cp{fw_ring: %d raw_cons: %x}\n",
i, cpr->cp_ring_struct.fw_ring_id, cpr->cp_raw_cons);
+ for (j = 0; j < cpr->cp_ring_count; j++) {
+ cpr2 = &cpr->cp_ring_arr[j];
+ if (!cpr2->bnapi)
+ continue;
+ netdev_info(bnapi->bp->dev, "[%d.%d]: cp{fw_ring: %d raw_cons: %x}\n",
+ i, j, cpr2->cp_ring_struct.fw_ring_id,
+ cpr2->cp_raw_cons);
+ }
}
static void bnxt_dbg_dump_states(struct bnxt *bp)
--
2.51.0
^ permalink raw reply related [flat|nested] 13+ messages in thread* [PATCH net-next 5/7] bnxt_en: Do not set EOP on RX AGG BDs on 5760X chips
2025-11-26 21:56 [PATCH net-next 0/7] bnxt_en: Updates for net-next Michael Chan
` (3 preceding siblings ...)
2025-11-26 21:56 ` [PATCH net-next 4/7] bnxt_en: Add CQ ring dump to bnxt_dump_cp_sw_state() Michael Chan
@ 2025-11-26 21:56 ` Michael Chan
2025-11-26 21:56 ` [PATCH net-next 6/7] bnxt_en: Add Virtual Admin Link State Support for VFs Michael Chan
` (2 subsequent siblings)
7 siblings, 0 replies; 13+ messages in thread
From: Michael Chan @ 2025-11-26 21:56 UTC (permalink / raw)
To: davem
Cc: netdev, edumazet, kuba, pabeni, andrew+netdev, pavan.chebbi,
andrew.gospodarek, Somnath Kotur
With End-of-Packet padding (EOP) set, the chip will disable Relaxed
Ordering (RO) of TPA data packets. A TPA segment with EOP set will be
padded to the next cache boundary and can potentially overwrite the
beginning bytes of the next TPA segment when RO is enabled on 5760X.
To prevent that, the chip disables RO for TPA when EOP is set.
To take advantge of RO and higher performance, do not set EOP on
5760X chips when TPA is enabled. Define a proper RX_BD_FLAGS_AGG_EOP
constant to make it clear that we are setting EOP.
Reviewed-by: Andy Gospodarek <andrew.gospodarek@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 | 9 ++++++++-
drivers/net/ethernet/broadcom/bnxt/bnxt.h | 1 +
2 files changed, 9 insertions(+), 1 deletion(-)
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
index 7df30019c5b1..4222e1bd172a 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
@@ -4479,7 +4479,14 @@ static void bnxt_init_one_rx_agg_ring_rxbd(struct bnxt *bp,
ring->fw_ring_id = INVALID_HW_RING_ID;
if ((bp->flags & BNXT_FLAG_AGG_RINGS)) {
type = ((u32)BNXT_RX_PAGE_SIZE << RX_BD_LEN_SHIFT) |
- RX_BD_TYPE_RX_AGG_BD | RX_BD_FLAGS_SOP;
+ RX_BD_TYPE_RX_AGG_BD;
+
+ /* On P7, setting EOP will cause the chip to disable
+ * Relaxed Ordering (RO) for TPA data. Disable EOP for
+ * potentially higher performance with RO.
+ */
+ if (BNXT_CHIP_P5_AND_MINUS(bp) || !(bp->flags & BNXT_FLAG_TPA))
+ type |= RX_BD_FLAGS_AGG_EOP;
bnxt_init_rxbd_pages(ring, type);
}
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.h b/drivers/net/ethernet/broadcom/bnxt/bnxt.h
index aedb059f4ce5..bb12cebd40e1 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.h
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.h
@@ -131,6 +131,7 @@ struct rx_bd {
#define RX_BD_TYPE_48B_BD_SIZE (2 << 4)
#define RX_BD_TYPE_64B_BD_SIZE (3 << 4)
#define RX_BD_FLAGS_SOP (1 << 6)
+ #define RX_BD_FLAGS_AGG_EOP (1 << 6)
#define RX_BD_FLAGS_EOP (1 << 7)
#define RX_BD_FLAGS_BUFFERS (3 << 8)
#define RX_BD_FLAGS_1_BUFFER_PACKET (0 << 8)
--
2.51.0
^ permalink raw reply related [flat|nested] 13+ messages in thread* [PATCH net-next 6/7] bnxt_en: Add Virtual Admin Link State Support for VFs
2025-11-26 21:56 [PATCH net-next 0/7] bnxt_en: Updates for net-next Michael Chan
` (4 preceding siblings ...)
2025-11-26 21:56 ` [PATCH net-next 5/7] bnxt_en: Do not set EOP on RX AGG BDs on 5760X chips Michael Chan
@ 2025-11-26 21:56 ` Michael Chan
2025-11-26 21:56 ` [PATCH net-next 7/7] bnxt_en: Add PTP .getcrosststamp() interface to get device/host times Michael Chan
2025-11-27 4:09 ` [PATCH net-next 0/7] bnxt_en: Updates for net-next Jakub Kicinski
7 siblings, 0 replies; 13+ messages in thread
From: Michael Chan @ 2025-11-26 21:56 UTC (permalink / raw)
To: davem
Cc: netdev, edumazet, kuba, pabeni, andrew+netdev, pavan.chebbi,
andrew.gospodarek, Rob Miller, Kalesh AP, Mohammad Shuab Siddique
From: Rob Miller <rmiller@broadcom.com>
The firmware can now cache the virtual link admin state (auto/on/off) of
all VFs and as such, the PF driver no longer has to intercept the VF
driver's port_phy_qcfg() call and then provide the link admin state.
If the FW does not have this capability, fall back to the existing
interception method.
The initial default link admin state (auto) is also set initially when
the VFs are created.
Reviewed-by: Pavan Chebbi <pavan.chebbi@broadcom.com>
Reviewed-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
Reviewed-by: Mohammad Shuab Siddique <mohammad-shuab.siddique@broadcom.com>
Signed-off-by: Rob Miller <rmiller@broadcom.com>
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
---
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 6 ++
drivers/net/ethernet/broadcom/bnxt/bnxt.h | 1 +
.../net/ethernet/broadcom/bnxt/bnxt_sriov.c | 55 +++++++++++++++++--
3 files changed, 57 insertions(+), 5 deletions(-)
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
index 4222e1bd172a..1dddd388d2d6 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
@@ -5695,6 +5695,10 @@ int bnxt_hwrm_func_drv_rgtr(struct bnxt *bp, unsigned long *bmap, int bmap_size,
u16 cmd = bnxt_vf_req_snif[i];
unsigned int bit, idx;
+ if ((bp->fw_cap & BNXT_FW_CAP_LINK_ADMIN) &&
+ cmd == HWRM_PORT_PHY_QCFG)
+ continue;
+
idx = cmd / 32;
bit = cmd % 32;
data[idx] |= 1 << bit;
@@ -9665,6 +9669,8 @@ static int __bnxt_hwrm_func_qcaps(struct bnxt *bp)
bp->flags |= BNXT_FLAG_ROCEV1_CAP;
if (flags & FUNC_QCAPS_RESP_FLAGS_ROCE_V2_SUPPORTED)
bp->flags |= BNXT_FLAG_ROCEV2_CAP;
+ if (flags & FUNC_QCAPS_RESP_FLAGS_LINK_ADMIN_STATUS_SUPPORTED)
+ bp->fw_cap |= BNXT_FW_CAP_LINK_ADMIN;
if (flags & FUNC_QCAPS_RESP_FLAGS_PCIE_STATS_SUPPORTED)
bp->fw_cap |= BNXT_FW_CAP_PCIE_STATS_SUPPORTED;
if (flags & FUNC_QCAPS_RESP_FLAGS_HOT_RESET_CAPABLE)
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.h b/drivers/net/ethernet/broadcom/bnxt/bnxt.h
index bb12cebd40e1..f5f07a7e6b29 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.h
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.h
@@ -2484,6 +2484,7 @@ struct bnxt {
#define BNXT_FW_CAP_ROCE_VF_RESC_MGMT_SUPPORTED BIT_ULL(6)
#define BNXT_FW_CAP_KONG_MB_CHNL BIT_ULL(7)
#define BNXT_FW_CAP_ROCE_VF_DYN_ALLOC_SUPPORT BIT_ULL(8)
+ #define BNXT_FW_CAP_LINK_ADMIN BIT_ULL(9)
#define BNXT_FW_CAP_OVS_64BIT_HANDLE BIT_ULL(10)
#define BNXT_FW_CAP_TRUSTED_VF BIT_ULL(11)
#define BNXT_FW_CAP_ERROR_RECOVERY BIT_ULL(13)
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c
index 80fed2c07b9e..be7deb9cc410 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c
@@ -332,6 +332,38 @@ int bnxt_set_vf_bw(struct net_device *dev, int vf_id, int min_tx_rate,
return rc;
}
+static int bnxt_set_vf_link_admin_state(struct bnxt *bp, int vf_id)
+{
+ struct hwrm_func_cfg_input *req;
+ struct bnxt_vf_info *vf;
+ int rc;
+
+ if (!(bp->fw_cap & BNXT_FW_CAP_LINK_ADMIN))
+ return 0;
+
+ vf = &bp->pf.vf[vf_id];
+
+ rc = bnxt_hwrm_func_cfg_short_req_init(bp, &req);
+ if (rc)
+ return rc;
+
+ req->fid = cpu_to_le16(vf->fw_fid);
+ switch (vf->flags & (BNXT_VF_LINK_FORCED | BNXT_VF_LINK_UP)) {
+ case BNXT_VF_LINK_FORCED:
+ req->options =
+ FUNC_CFG_REQ_OPTIONS_LINK_ADMIN_STATE_FORCED_DOWN;
+ break;
+ case (BNXT_VF_LINK_FORCED | BNXT_VF_LINK_UP):
+ req->options = FUNC_CFG_REQ_OPTIONS_LINK_ADMIN_STATE_FORCED_UP;
+ break;
+ default:
+ req->options = FUNC_CFG_REQ_OPTIONS_LINK_ADMIN_STATE_AUTO;
+ break;
+ }
+ req->enables = cpu_to_le32(FUNC_CFG_REQ_ENABLES_ADMIN_LINK_STATE);
+ return hwrm_req_send(bp, req);
+}
+
int bnxt_set_vf_link_state(struct net_device *dev, int vf_id, int link)
{
struct bnxt *bp = netdev_priv(dev);
@@ -357,10 +389,11 @@ int bnxt_set_vf_link_state(struct net_device *dev, int vf_id, int link)
break;
default:
netdev_err(bp->dev, "Invalid link option\n");
- rc = -EINVAL;
- break;
+ return -EINVAL;
}
- if (vf->flags & (BNXT_VF_LINK_UP | BNXT_VF_LINK_FORCED))
+ if (bp->fw_cap & BNXT_FW_CAP_LINK_ADMIN)
+ rc = bnxt_set_vf_link_admin_state(bp, vf_id);
+ else if (vf->flags & (BNXT_VF_LINK_UP | BNXT_VF_LINK_FORCED))
rc = bnxt_hwrm_fwd_async_event_cmpl(bp, vf,
ASYNC_EVENT_CMPL_EVENT_ID_LINK_STATUS_CHANGE);
return rc;
@@ -666,15 +699,21 @@ static int bnxt_hwrm_func_vf_resc_cfg(struct bnxt *bp, int num_vfs, bool reset)
hwrm_req_hold(bp, req);
for (i = 0; i < num_vfs; i++) {
+ struct bnxt_vf_info *vf = &pf->vf[i];
+
+ vf->fw_fid = pf->first_vf_id + i;
+ rc = bnxt_set_vf_link_admin_state(bp, i);
+ if (rc)
+ break;
+
if (reset)
__bnxt_set_vf_params(bp, i);
- req->vf_id = cpu_to_le16(pf->first_vf_id + i);
+ req->vf_id = cpu_to_le16(vf->fw_fid);
rc = hwrm_req_send(bp, req);
if (rc)
break;
pf->active_vfs = i + 1;
- pf->vf[i].fw_fid = pf->first_vf_id + i;
}
if (pf->active_vfs) {
@@ -741,6 +780,12 @@ static int bnxt_hwrm_func_cfg(struct bnxt *bp, int num_vfs)
FUNC_CFG_REQ_ENABLES_NUM_VNICS |
FUNC_CFG_REQ_ENABLES_NUM_HW_RING_GRPS);
+ if (bp->fw_cap & BNXT_FW_CAP_LINK_ADMIN) {
+ req->options = FUNC_CFG_REQ_OPTIONS_LINK_ADMIN_STATE_AUTO;
+ req->enables |=
+ cpu_to_le32(FUNC_CFG_REQ_ENABLES_ADMIN_LINK_STATE);
+ }
+
mtu = bp->dev->mtu + VLAN_ETH_HLEN;
req->mru = cpu_to_le16(mtu);
req->admin_mtu = cpu_to_le16(mtu);
--
2.51.0
^ permalink raw reply related [flat|nested] 13+ messages in thread* [PATCH net-next 7/7] bnxt_en: Add PTP .getcrosststamp() interface to get device/host times
2025-11-26 21:56 [PATCH net-next 0/7] bnxt_en: Updates for net-next Michael Chan
` (5 preceding siblings ...)
2025-11-26 21:56 ` [PATCH net-next 6/7] bnxt_en: Add Virtual Admin Link State Support for VFs Michael Chan
@ 2025-11-26 21:56 ` Michael Chan
2025-11-28 2:59 ` Jakub Kicinski
2025-12-02 22:21 ` Vadim Fedorenko
2025-11-27 4:09 ` [PATCH net-next 0/7] bnxt_en: Updates for net-next Jakub Kicinski
7 siblings, 2 replies; 13+ messages in thread
From: Michael Chan @ 2025-11-26 21:56 UTC (permalink / raw)
To: davem
Cc: netdev, edumazet, kuba, pabeni, andrew+netdev, pavan.chebbi,
andrew.gospodarek, Somnath Kotur
From: Pavan Chebbi <pavan.chebbi@broadcom.com>
.getcrosststamp() helps the applications to obtain a snapshot of
device and host time almost taken at the same time. This function
will report PCIe PTM device and host times to any application using
the ioctl PTP_SYS_OFFSET_PRECISE. The device time from the HW is
48-bit and needs to be converted to 64-bit.
Reviewed-by: Somnath Kotur <somnath.kotur@broadcom.com>
Signed-off-by: Pavan Chebbi <pavan.chebbi@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 +
drivers/net/ethernet/broadcom/bnxt/bnxt_ptp.c | 46 +++++++++++++++++++
3 files changed, 49 insertions(+)
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
index 1dddd388d2d6..aa079c8aa935 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
@@ -9691,6 +9691,8 @@ static int __bnxt_hwrm_func_qcaps(struct bnxt *bp)
bp->fw_cap |= BNXT_FW_CAP_EXT_HW_STATS_SUPPORTED;
if (BNXT_PF(bp) && (flags_ext & FUNC_QCAPS_RESP_FLAGS_EXT_PTP_PPS_SUPPORTED))
bp->fw_cap |= BNXT_FW_CAP_PTP_PPS;
+ if (flags_ext & FUNC_QCAPS_RESP_FLAGS_EXT_PTP_PTM_SUPPORTED)
+ bp->fw_cap |= BNXT_FW_CAP_PTP_PTM;
if (flags_ext & FUNC_QCAPS_RESP_FLAGS_EXT_PTP_64BIT_RTC_SUPPORTED)
bp->fw_cap |= BNXT_FW_CAP_PTP_RTC;
if (BNXT_PF(bp) && (flags_ext & FUNC_QCAPS_RESP_FLAGS_EXT_HOT_RESET_IF_SUPPORT))
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.h b/drivers/net/ethernet/broadcom/bnxt/bnxt.h
index f5f07a7e6b29..08d9adf52ec6 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.h
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.h
@@ -2518,6 +2518,7 @@ struct bnxt {
#define BNXT_FW_CAP_SW_MAX_RESOURCE_LIMITS BIT_ULL(41)
#define BNXT_FW_CAP_NPAR_1_2 BIT_ULL(42)
#define BNXT_FW_CAP_MIRROR_ON_ROCE BIT_ULL(43)
+ #define BNXT_FW_CAP_PTP_PTM BIT_ULL(44)
u32 fw_dbg_cap;
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_ptp.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_ptp.c
index a8a74f07bb54..2ac231c991b4 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt_ptp.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_ptp.c
@@ -882,6 +882,51 @@ void bnxt_tx_ts_cmp(struct bnxt *bp, struct bnxt_napi *bnapi,
}
}
+static int bnxt_phc_get_syncdevicetime(ktime_t *device,
+ struct system_counterval_t *system,
+ void *ctx)
+{
+ struct bnxt_ptp_cfg *ptp = (struct bnxt_ptp_cfg *)ctx;
+ struct hwrm_func_ptp_ts_query_output *resp;
+ struct hwrm_func_ptp_ts_query_input *req;
+ struct bnxt *bp = ptp->bp;
+ u64 ptm_local_ts;
+ int rc;
+
+ rc = hwrm_req_init(bp, req, HWRM_FUNC_PTP_TS_QUERY);
+ if (rc)
+ return rc;
+ req->flags = cpu_to_le32(FUNC_PTP_TS_QUERY_REQ_FLAGS_PTM_TIME);
+ resp = hwrm_req_hold(bp, req);
+ rc = hwrm_req_send(bp, req);
+ if (rc) {
+ hwrm_req_drop(bp, req);
+ return rc;
+ }
+ ptm_local_ts = le64_to_cpu(resp->ptm_local_ts);
+ *device = ns_to_ktime(bnxt_timecounter_cyc2time(ptp, ptm_local_ts));
+ /* ptm_system_ts is 64-bit */
+ system->cycles = le64_to_cpu(resp->ptm_system_ts);
+ system->cs_id = CSID_X86_ART;
+ system->use_nsecs = true;
+
+ hwrm_req_drop(bp, req);
+
+ return 0;
+}
+
+static int bnxt_ptp_getcrosststamp(struct ptp_clock_info *ptp_info,
+ struct system_device_crosststamp *xtstamp)
+{
+ struct bnxt_ptp_cfg *ptp = container_of(ptp_info, struct bnxt_ptp_cfg,
+ ptp_info);
+
+ if (!(ptp->bp->fw_cap & BNXT_FW_CAP_PTP_PTM))
+ return -EOPNOTSUPP;
+ return get_device_system_crosststamp(bnxt_phc_get_syncdevicetime,
+ ptp, NULL, xtstamp);
+}
+
static const struct ptp_clock_info bnxt_ptp_caps = {
.owner = THIS_MODULE,
.name = "bnxt clock",
@@ -897,6 +942,7 @@ static const struct ptp_clock_info bnxt_ptp_caps = {
.gettimex64 = bnxt_ptp_gettimex,
.settime64 = bnxt_ptp_settime,
.enable = bnxt_ptp_enable,
+ .getcrosststamp = bnxt_ptp_getcrosststamp,
};
static int bnxt_ptp_verify(struct ptp_clock_info *ptp_info, unsigned int pin,
--
2.51.0
^ permalink raw reply related [flat|nested] 13+ messages in thread* Re: [PATCH net-next 7/7] bnxt_en: Add PTP .getcrosststamp() interface to get device/host times
2025-11-26 21:56 ` [PATCH net-next 7/7] bnxt_en: Add PTP .getcrosststamp() interface to get device/host times Michael Chan
@ 2025-11-28 2:59 ` Jakub Kicinski
2025-12-02 22:18 ` Vadim Fedorenko
2025-12-02 22:21 ` Vadim Fedorenko
1 sibling, 1 reply; 13+ messages in thread
From: Jakub Kicinski @ 2025-11-28 2:59 UTC (permalink / raw)
To: Michael Chan
Cc: davem, netdev, edumazet, pabeni, andrew+netdev, pavan.chebbi,
andrew.gospodarek, Somnath Kotur
On Wed, 26 Nov 2025 13:56:48 -0800 Michael Chan wrote:
> + ptm_local_ts = le64_to_cpu(resp->ptm_local_ts);
> + *device = ns_to_ktime(bnxt_timecounter_cyc2time(ptp, ptm_local_ts));
> + /* ptm_system_ts is 64-bit */
> + system->cycles = le64_to_cpu(resp->ptm_system_ts);
> + system->cs_id = CSID_X86_ART;
> + system->use_nsecs = true;
Non-x86 hosts exist? Also, I'd like to give Vadim F a chance to TAL
and he's out for the rest of the week. So perhaps we can hold this
one off until after the MW?
I'll apply up to this point in the meantime.
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH net-next 7/7] bnxt_en: Add PTP .getcrosststamp() interface to get device/host times
2025-11-28 2:59 ` Jakub Kicinski
@ 2025-12-02 22:18 ` Vadim Fedorenko
0 siblings, 0 replies; 13+ messages in thread
From: Vadim Fedorenko @ 2025-12-02 22:18 UTC (permalink / raw)
To: Jakub Kicinski, Michael Chan
Cc: davem, netdev, edumazet, pabeni, andrew+netdev, pavan.chebbi,
andrew.gospodarek, Somnath Kotur
On 28/11/2025 02:59, Jakub Kicinski wrote:
> On Wed, 26 Nov 2025 13:56:48 -0800 Michael Chan wrote:
>> + ptm_local_ts = le64_to_cpu(resp->ptm_local_ts);
>> + *device = ns_to_ktime(bnxt_timecounter_cyc2time(ptp, ptm_local_ts));
>> + /* ptm_system_ts is 64-bit */
>> + system->cycles = le64_to_cpu(resp->ptm_system_ts);
>> + system->cs_id = CSID_X86_ART;
>> + system->use_nsecs = true;
>
> Non-x86 hosts exist? Also, I'd like to give Vadim F a chance to TAL
> and he's out for the rest of the week. So perhaps we can hold this
> one off until after the MW?
>
> I'll apply up to this point in the meantime.
I did test this code, but only on x86 platform, unfortunately.
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH net-next 7/7] bnxt_en: Add PTP .getcrosststamp() interface to get device/host times
2025-11-26 21:56 ` [PATCH net-next 7/7] bnxt_en: Add PTP .getcrosststamp() interface to get device/host times Michael Chan
2025-11-28 2:59 ` Jakub Kicinski
@ 2025-12-02 22:21 ` Vadim Fedorenko
2025-12-04 0:44 ` Jacob Keller
1 sibling, 1 reply; 13+ messages in thread
From: Vadim Fedorenko @ 2025-12-02 22:21 UTC (permalink / raw)
To: Michael Chan, davem
Cc: netdev, edumazet, kuba, pabeni, andrew+netdev, pavan.chebbi,
andrew.gospodarek, Somnath Kotur
On 26/11/2025 21:56, Michael Chan wrote:
[...]
> +static int bnxt_ptp_getcrosststamp(struct ptp_clock_info *ptp_info,
> + struct system_device_crosststamp *xtstamp)
> +{
> + struct bnxt_ptp_cfg *ptp = container_of(ptp_info, struct bnxt_ptp_cfg,
> + ptp_info);
> +
> + if (!(ptp->bp->fw_cap & BNXT_FW_CAP_PTP_PTM))
> + return -EOPNOTSUPP;
to have it enabled for x86-only (as the only supported platform as of
now), additional check is needed:
if (pcie_ptm_enabled(ptp->bp->pdev) && boot_cpu_has(X86_FEATURE_ART))
return -EOPNOTSUPP;
> + return get_device_system_crosststamp(bnxt_phc_get_syncdevicetime,
> + ptp, NULL, xtstamp);
> +}
> +
^ permalink raw reply [flat|nested] 13+ messages in thread* Re: [PATCH net-next 7/7] bnxt_en: Add PTP .getcrosststamp() interface to get device/host times
2025-12-02 22:21 ` Vadim Fedorenko
@ 2025-12-04 0:44 ` Jacob Keller
0 siblings, 0 replies; 13+ messages in thread
From: Jacob Keller @ 2025-12-04 0:44 UTC (permalink / raw)
To: Vadim Fedorenko, Michael Chan, davem
Cc: netdev, edumazet, kuba, pabeni, andrew+netdev, pavan.chebbi,
andrew.gospodarek, Somnath Kotur
[-- Attachment #1.1: Type: text/plain, Size: 954 bytes --]
On 12/2/2025 2:21 PM, Vadim Fedorenko wrote:
> On 26/11/2025 21:56, Michael Chan wrote:
>
> [...]
>
>> +static int bnxt_ptp_getcrosststamp(struct ptp_clock_info *ptp_info,
>> + struct system_device_crosststamp *xtstamp)
>> +{
>> + struct bnxt_ptp_cfg *ptp = container_of(ptp_info, struct bnxt_ptp_cfg,
>> + ptp_info);
>> +
>> + if (!(ptp->bp->fw_cap & BNXT_FW_CAP_PTP_PTM))
>> + return -EOPNOTSUPP;
>
> to have it enabled for x86-only (as the only supported platform as of
> now), additional check is needed:
>
> if (pcie_ptm_enabled(ptp->bp->pdev) && boot_cpu_has(X86_FEATURE_ART))
> return -EOPNOTSUPP;
>
Yep. This is the right way to check for the support, assuming its
standard PCIe PTM and not a custom implementation (as happened on a few
Intel LOMs in the past before standardization of PTM). You definitely
need to check for X86_FEATURE_ART since you're using the ART conversions.
Thanks,
Jake
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 236 bytes --]
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH net-next 0/7] bnxt_en: Updates for net-next
2025-11-26 21:56 [PATCH net-next 0/7] bnxt_en: Updates for net-next Michael Chan
` (6 preceding siblings ...)
2025-11-26 21:56 ` [PATCH net-next 7/7] bnxt_en: Add PTP .getcrosststamp() interface to get device/host times Michael Chan
@ 2025-11-27 4:09 ` Jakub Kicinski
7 siblings, 0 replies; 13+ messages in thread
From: Jakub Kicinski @ 2025-11-27 4:09 UTC (permalink / raw)
To: Michael Chan, Bhargava Marreddy
Cc: davem, netdev, edumazet, pabeni, andrew+netdev, pavan.chebbi,
andrew.gospodarek
On Wed, 26 Nov 2025 13:56:41 -0800 Michael Chan wrote:
> This series includes an enhnacement to the priority TX counters,
> an enhancement to a PHY module error extack message, cleanup of
> unneeded MSIX logic in bnxt_ulp.c, adding CQ dump during TX timeout,
> LRO/HW_GRO performance improvement by enabling Relaxed Ordering,
> improved SRIOV admin link state support, and PTP .getcrosststamp()
> support.
Hi Michael, Bhargava,
in the interest of fairness it'd be good if you could coordinate
to make sure there's never >15 patches outstanding in patchwork
for bng_en + bnxt.
^ permalink raw reply [flat|nested] 13+ messages in thread