if (!bp->num_tests || !BNXT_PF(bp))
                return;
+
+       if (etest->flags & ETH_TEST_FL_OFFLINE &&
+           bnxt_ulp_registered(bp->edev)) {
+               etest->flags |= ETH_TEST_FL_FAILED;
+               netdev_warn(dev, "Offline tests cannot be run with RoCE driver loaded\n");
+               return;
+       }
+
        memset(buf, 0, sizeof(u64) * bp->num_tests);
        if (!netif_running(dev)) {
                etest->flags |= ETH_TEST_FL_FAILED;
        if (!offline) {
                bnxt_run_fw_tests(bp, test_mask, &test_results);
        } else {
-               bnxt_ulp_stop(bp);
                bnxt_close_nic(bp, true, false);
                bnxt_run_fw_tests(bp, test_mask, &test_results);
 
                if (rc) {
                        bnxt_hwrm_mac_loopback(bp, false);
                        etest->flags |= ETH_TEST_FL_FAILED;
-                       bnxt_ulp_start(bp, rc);
                        return;
                }
                if (bnxt_run_loopback(bp))
                bnxt_hwrm_phy_loopback(bp, false, false);
                bnxt_half_close_nic(bp);
                rc = bnxt_open_nic(bp, true, true);
-               bnxt_ulp_start(bp, rc);
        }
        if (rc || bnxt_test_irq(bp)) {
                buf[BNXT_IRQ_TEST_IDX] = 1;