]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
bnxt_en: Skip PHY loopback ethtool selftest if unsupported by FW
authorMichael Chan <michael.chan@broadcom.com>
Tue, 17 Dec 2024 18:26:17 +0000 (10:26 -0800)
committerJakub Kicinski <kuba@kernel.org>
Fri, 20 Dec 2024 01:30:00 +0000 (17:30 -0800)
Skip PHY loopback selftest if firmware advertises that it is unsupported
in the HWRM_PORT_PHY_QCAPS call.  Only show PHY loopback test result to
be 0 if the test has run and passes.  Do the same for external loopback
to be consistent.

Reviewed-by: Pavan Chebbi <pavan.chebbi@broadcom.com>
Reviewed-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
Link: https://patch.msgid.link/20241217182620.2454075-4-michael.chan@broadcom.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c

index 28f2c471652c4b10e2cdfdfee114fbc61dfa5274..8001849af879f3cecc1b1f5d5a1ada59ed5759a7 100644 (file)
@@ -4914,20 +4914,26 @@ static void bnxt_self_test(struct net_device *dev, struct ethtool_test *etest,
                        buf[BNXT_MACLPBK_TEST_IDX] = 0;
 
                bnxt_hwrm_mac_loopback(bp, false);
+               buf[BNXT_PHYLPBK_TEST_IDX] = 1;
+               if (bp->phy_flags & BNXT_PHY_FL_NO_PHY_LPBK)
+                       goto skip_phy_loopback;
+
                bnxt_hwrm_phy_loopback(bp, true, false);
                msleep(1000);
-               if (bnxt_run_loopback(bp)) {
-                       buf[BNXT_PHYLPBK_TEST_IDX] = 1;
+               if (bnxt_run_loopback(bp))
                        etest->flags |= ETH_TEST_FL_FAILED;
-               }
+               else
+                       buf[BNXT_PHYLPBK_TEST_IDX] = 0;
+skip_phy_loopback:
+               buf[BNXT_EXTLPBK_TEST_IDX] = 1;
                if (do_ext_lpbk) {
                        etest->flags |= ETH_TEST_FL_EXTERNAL_LB_DONE;
                        bnxt_hwrm_phy_loopback(bp, true, true);
                        msleep(1000);
-                       if (bnxt_run_loopback(bp)) {
-                               buf[BNXT_EXTLPBK_TEST_IDX] = 1;
+                       if (bnxt_run_loopback(bp))
                                etest->flags |= ETH_TEST_FL_FAILED;
-                       }
+                       else
+                               buf[BNXT_EXTLPBK_TEST_IDX] = 0;
                }
                bnxt_hwrm_phy_loopback(bp, false, false);
                bnxt_half_close_nic(bp);