bnxt: Defer PTP initialization to after querying function caps
authorPavan Chebbi <pavan.chebbi@broadcom.com>
Tue, 21 Mar 2023 14:44:48 +0000 (07:44 -0700)
committerJakub Kicinski <kuba@kernel.org>
Thu, 23 Mar 2023 03:43:22 +0000 (20:43 -0700)
Driver uses the flag BNXT_FLAG_MULTI_HOST to determine whether
to use non-realtime mode PHC when running on a multi host NIC.
However when ptp initializes on a NIC with shared PHC, we still
don't have this flag set yet because HWRM_FUNC_QCFG is issued
much later.

Move the ptp initialization code after we have issued func_qcfg.
The next patch will use the BNXT_FLAG_MULTI_HOST flag during PTP
initialization.

Signed-off-by: Pavan Chebbi <pavan.chebbi@broadcom.com>
Reviewed-by: Michael Chan <michael.chan@broadcom.com>
Acked-by: Vadim Fedorenko <vadim.fedorenko@linux.dev>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/broadcom/bnxt/bnxt.c
drivers/net/ethernet/broadcom/bnxt/bnxt.h

index f533a8f4621758e1b030f341ed5ac64796154751..656a28ac2ff0c735802e477db003481386af86aa 100644 (file)
@@ -7769,7 +7769,7 @@ static int __bnxt_hwrm_func_qcaps(struct bnxt *bp)
                if (flags & FUNC_QCAPS_RESP_FLAGS_WOL_MAGICPKT_SUPPORTED)
                        bp->flags |= BNXT_FLAG_WOL_CAP;
                if (flags & FUNC_QCAPS_RESP_FLAGS_PTP_SUPPORTED) {
-                       __bnxt_hwrm_ptp_qcfg(bp);
+                       bp->fw_cap |= BNXT_FW_CAP_PTP;
                } else {
                        bnxt_ptp_clear(bp);
                        kfree(bp->ptp_cfg);
@@ -12298,6 +12298,8 @@ static int bnxt_fw_init_one_p2(struct bnxt *bp)
        bnxt_hwrm_vnic_qcaps(bp);
        bnxt_hwrm_port_led_qcaps(bp);
        bnxt_ethtool_init(bp);
+       if (bp->fw_cap & BNXT_FW_CAP_PTP)
+               __bnxt_hwrm_ptp_qcfg(bp);
        bnxt_dcb_init(bp);
        return 0;
 }
index d7eb0d244f42f884d78921ec34a825abf3daa3cc..0eeaed95a4ac900d4bd2a14409fd74dad02dfd5b 100644 (file)
@@ -1996,6 +1996,7 @@ struct bnxt {
        #define BNXT_FW_CAP_HOT_RESET_IF                BIT_ULL(29)
        #define BNXT_FW_CAP_RING_MONITOR                BIT_ULL(30)
        #define BNXT_FW_CAP_DBG_QCAPS                   BIT_ULL(31)
+       #define BNXT_FW_CAP_PTP                         BIT_ULL(32)
 
        u32                     fw_dbg_cap;