return -EINVAL;
        }
 
+       if (max_tx_rate == 0) {
+               /* unbind VF to to any Traffic Class */
+               fw_pfvf =
+                   (FW_PARAMS_MNEM_V(FW_PARAMS_MNEM_PFVF) |
+                    FW_PARAMS_PARAM_X_V(FW_PARAMS_PARAM_PFVF_SCHEDCLASS_ETH));
+               fw_class = 0xffffffff;
+               ret = t4_set_params(adap, adap->mbox, adap->pf, vf + 1, 1,
+                                   &fw_pfvf, &fw_class);
+               if (ret) {
+                       dev_err(adap->pdev_dev,
+                               "Err %d in unbinding PF %d VF %d from TX Rate Limiting\n",
+                               ret, adap->pf, vf);
+                       return -EINVAL;
+               }
+               dev_info(adap->pdev_dev,
+                        "PF %d VF %d is unbound from TX Rate Limiting\n",
+                        adap->pf, vf);
+               adap->vfinfo[vf].tx_rate = 0;
+               return 0;
+       }
+
        ret = t4_get_link_params(pi, &link_ok, &speed, &mtu);
        if (ret != FW_SUCCESS) {
                dev_err(adap->pdev_dev,
                            &fw_class);
        if (ret) {
                dev_err(adap->pdev_dev,
-                       "Err %d in binding VF %d to Traffic Class %d\n",
-                       ret, vf, class_id);
+                       "Err %d in binding PF %d VF %d to Traffic Class %d\n",
+                       ret, adap->pf, vf, class_id);
                return -EINVAL;
        }
        dev_info(adap->pdev_dev, "PF %d VF %d is bound to Class %d\n",