case CQE_TX_VPORT_IDX_OUT_OF_RANGE:
                case CQE_TX_VPORT_DISABLED:
                case CQE_TX_VLAN_TAGGING_VIOLATION:
-                       WARN_ONCE(1, "TX: CQE error %d: ignored.\n",
-                                 cqe_oob->cqe_hdr.cqe_type);
+                       if (net_ratelimit())
+                               netdev_err(ndev, "TX: CQE error %d\n",
+                                          cqe_oob->cqe_hdr.cqe_type);
+
                        apc->eth_stats.tx_cqe_err++;
                        break;
 
                default:
-                       /* If the CQE type is unexpected, log an error, assert,
-                        * and go through the error path.
+                       /* If the CQE type is unknown, log an error,
+                        * and still free the SKB, update tail, etc.
                         */
-                       WARN_ONCE(1, "TX: Unexpected CQE type %d: HW BUG?\n",
-                                 cqe_oob->cqe_hdr.cqe_type);
+                       if (net_ratelimit())
+                               netdev_err(ndev, "TX: unknown CQE type %d\n",
+                                          cqe_oob->cqe_hdr.cqe_type);
+
                        apc->eth_stats.tx_cqe_unknown_type++;
-                       return;
+                       break;
                }
 
                if (WARN_ON_ONCE(txq->gdma_txq_id != completions[i].wq_num))