diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c b/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
index 438128dde187d7ec58892c2879c6037f807f576f..1182fba3edbb8cf7bd59557b7ece18765c704186 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
@@ -1828,8 +1828,8 @@ enc_opts_is_dont_care_or_full_match(struct mlx5e_priv *priv,
 				       opt->length * 4)) {
 				NL_SET_ERR_MSG(extack,
 					       "Partial match of tunnel options in chain > 0 isn't supported");
-				netdev_warn(priv->netdev,
-					    "Partial match of tunnel options in chain > 0 isn't supported");
+				netdev_warn_once(priv->netdev,
+						 "Partial match of tunnel options in chain > 0 isn't supported");
 				return -EOPNOTSUPP;
 			}
 		}
@@ -1988,8 +1988,8 @@ static int parse_tunnel_attr(struct mlx5e_priv *priv,
 	    !mlx5_eswitch_reg_c1_loopback_enabled(esw)) {
 		NL_SET_ERR_MSG(extack,
 			       "Chains on tunnel devices isn't supported without register loopback support");
-		netdev_warn(priv->netdev,
-			    "Chains on tunnel devices isn't supported without register loopback support");
+		netdev_warn_once(priv->netdev,
+				 "Chains on tunnel devices isn't supported without register loopback support");
 		return -EOPNOTSUPP;
 	}
 
@@ -2133,8 +2133,8 @@ static int __parse_cls_flower(struct mlx5e_priv *priv,
 	      BIT(FLOW_DISSECTOR_KEY_ENC_IP) |
 	      BIT(FLOW_DISSECTOR_KEY_ENC_OPTS))) {
 		NL_SET_ERR_MSG_MOD(extack, "Unsupported key");
-		netdev_warn(priv->netdev, "Unsupported key used: 0x%x\n",
-			    dissector->used_keys);
+		netdev_warn_once(priv->netdev, "Unsupported key used: 0x%x\n",
+				 dissector->used_keys);
 		return -EOPNOTSUPP;
 	}
 
@@ -2484,8 +2484,8 @@ static int parse_cls_flower(struct mlx5e_priv *priv,
 		    esw->offloads.inline_mode < non_tunnel_match_level)) {
 			NL_SET_ERR_MSG_MOD(extack,
 					   "Flow is not offloaded due to min inline setting");
-			netdev_warn(priv->netdev,
-				    "Flow is not offloaded due to min inline setting, required %d actual %d\n",
+			netdev_warn_once(priv->netdev,
+					 "Flow is not offloaded due to min inline setting, required %d actual %d\n",
 				    non_tunnel_match_level, esw->offloads.inline_mode);
 			return -EOPNOTSUPP;
 		}
@@ -2885,7 +2885,9 @@ static int alloc_tc_pedit_action(struct mlx5e_priv *priv, int namespace,
 		if (memcmp(cmd_masks, &zero_masks, sizeof(zero_masks))) {
 			NL_SET_ERR_MSG_MOD(extack,
 					   "attempt to offload an unsupported field");
-			netdev_warn(priv->netdev, "attempt to offload an unsupported field (cmd %d)\n", cmd);
+			netdev_warn_once(priv->netdev,
+					 "attempt to offload an unsupported field (cmd %d)\n",
+					 cmd);
 			print_hex_dump(KERN_WARNING, "mask: ", DUMP_PREFIX_ADDRESS,
 				       16, 1, cmd_masks, sizeof(zero_masks), true);
 			err = -EOPNOTSUPP;
@@ -2912,17 +2914,17 @@ static bool csum_offload_supported(struct mlx5e_priv *priv,
 	if (!(action & MLX5_FLOW_CONTEXT_ACTION_MOD_HDR)) {
 		NL_SET_ERR_MSG_MOD(extack,
 				   "TC csum action is only offloaded with pedit");
-		netdev_warn(priv->netdev,
-			    "TC csum action is only offloaded with pedit\n");
+		netdev_warn_once(priv->netdev,
+				 "TC csum action is only offloaded with pedit\n");
 		return false;
 	}
 
 	if (update_flags & ~prot_flags) {
 		NL_SET_ERR_MSG_MOD(extack,
 				   "can't offload TC csum action for some header/s");
-		netdev_warn(priv->netdev,
-			    "can't offload TC csum action for some header/s - flags %#x\n",
-			    update_flags);
+		netdev_warn_once(priv->netdev,
+				 "can't offload TC csum action for some header/s - flags %#x\n",
+				 update_flags);
 		return false;
 	}
 
@@ -3224,8 +3226,9 @@ static int parse_tc_nic_actions(struct mlx5e_priv *priv,
 			} else {
 				NL_SET_ERR_MSG_MOD(extack,
 						   "device is not on same HW, can't offload");
-				netdev_warn(priv->netdev, "device %s not on same HW, can't offload\n",
-					    peer_dev->name);
+				netdev_warn_once(priv->netdev,
+						 "device %s not on same HW, can't offload\n",
+						 peer_dev->name);
 				return -EINVAL;
 			}
 			}
@@ -3754,9 +3757,9 @@ static int parse_tc_fdb_actions(struct mlx5e_priv *priv,
 			if (attr->out_count >= MLX5_MAX_FLOW_FWD_VPORTS) {
 				NL_SET_ERR_MSG_MOD(extack,
 						   "can't support more output ports, can't offload forwarding");
-				netdev_warn(priv->netdev,
-					    "can't support more than %d output ports, can't offload forwarding\n",
-					    attr->out_count);
+				netdev_warn_once(priv->netdev,
+						 "can't support more than %d output ports, can't offload forwarding\n",
+						 attr->out_count);
 				return -EOPNOTSUPP;
 			}
 
@@ -3821,10 +3824,10 @@ static int parse_tc_fdb_actions(struct mlx5e_priv *priv,
 				if (!mlx5e_is_valid_eswitch_fwd_dev(priv, out_dev)) {
 					NL_SET_ERR_MSG_MOD(extack,
 							   "devices are not on same switch HW, can't offload forwarding");
-					netdev_warn(priv->netdev,
-						    "devices %s %s not on same switch HW, can't offload forwarding\n",
-						    priv->netdev->name,
-						    out_dev->name);
+					netdev_warn_once(priv->netdev,
+							 "devices %s %s not on same switch HW, can't offload forwarding\n",
+							 priv->netdev->name,
+							 out_dev->name);
 					return -EOPNOTSUPP;
 				}
 
@@ -3843,10 +3846,10 @@ static int parse_tc_fdb_actions(struct mlx5e_priv *priv,
 			} else {
 				NL_SET_ERR_MSG_MOD(extack,
 						   "devices are not on same switch HW, can't offload forwarding");
-				netdev_warn(priv->netdev,
-					    "devices %s %s not on same switch HW, can't offload forwarding\n",
-					    priv->netdev->name,
-					    out_dev->name);
+				netdev_warn_once(priv->netdev,
+						 "devices %s %s not on same switch HW, can't offload forwarding\n",
+						 priv->netdev->name,
+						 out_dev->name);
 				return -EINVAL;
 			}
 			}
@@ -3959,8 +3962,8 @@ static int parse_tc_fdb_actions(struct mlx5e_priv *priv,
 
 			NL_SET_ERR_MSG(extack,
 				       "Decap with goto isn't supported");
-			netdev_warn(priv->netdev,
-				    "Decap with goto isn't supported");
+			netdev_warn_once(priv->netdev,
+					 "Decap with goto isn't supported");
 			return -EOPNOTSUPP;
 		}
 
