#define MLX5E_LOG_INDIR_RQT_SIZE       0x7
 #define MLX5E_INDIR_RQT_SIZE           BIT(MLX5E_LOG_INDIR_RQT_SIZE)
 #define MLX5E_MIN_NUM_CHANNELS         0x1
-#define MLX5E_MAX_NUM_CHANNELS         (MLX5E_INDIR_RQT_SIZE >> 1)
+#define MLX5E_MAX_NUM_CHANNELS         MLX5E_INDIR_RQT_SIZE
 #define MLX5E_MAX_NUM_SQS              (MLX5E_MAX_NUM_CHANNELS * MLX5E_MAX_NUM_TC)
 #define MLX5E_TX_CQ_POLL_BUDGET        128
 #define MLX5E_TX_XSK_POLL_BUDGET       64
 void mlx5e_detach_netdev(struct mlx5e_priv *priv);
 void mlx5e_destroy_netdev(struct mlx5e_priv *priv);
 void mlx5e_set_netdev_mtu_boundaries(struct mlx5e_priv *priv);
-void mlx5e_build_nic_params(struct mlx5_core_dev *mdev,
+void mlx5e_build_nic_params(struct mlx5e_priv *priv,
                            struct mlx5e_xsk *xsk,
                            struct mlx5e_rss_params *rss_params,
                            struct mlx5e_params *params,
-                           u16 max_channels, u16 mtu);
+                           u16 mtu);
 void mlx5e_build_rq_params(struct mlx5_core_dev *mdev,
                           struct mlx5e_params *params);
 void mlx5e_build_rss_params(struct mlx5e_rss_params *rss_params,
 
                        tirc_default_config[tt].rx_hash_fields;
 }
 
-void mlx5e_build_nic_params(struct mlx5_core_dev *mdev,
+void mlx5e_build_nic_params(struct mlx5e_priv *priv,
                            struct mlx5e_xsk *xsk,
                            struct mlx5e_rss_params *rss_params,
                            struct mlx5e_params *params,
-                           u16 max_channels, u16 mtu)
+                           u16 mtu)
 {
+       struct mlx5_core_dev *mdev = priv->mdev;
        u8 rx_cq_period_mode;
 
        params->sw_mtu = mtu;
        params->hard_mtu = MLX5E_ETH_HARD_MTU;
-       params->num_channels = max_channels;
+       params->num_channels = min_t(unsigned int, MLX5E_MAX_NUM_CHANNELS / 2,
+                                    priv->max_nch);
        params->num_tc       = 1;
 
        /* SQ */
        if (err)
                return err;
 
-       mlx5e_build_nic_params(mdev, &priv->xsk, rss, &priv->channels.params,
-                              priv->max_nch, netdev->mtu);
+       mlx5e_build_nic_params(priv, &priv->xsk, rss, &priv->channels.params,
+                              netdev->mtu);
 
        mlx5e_timestamp_init(priv);
 
 
        mlx5e_set_netdev_mtu_boundaries(priv);
        netdev->mtu = netdev->max_mtu;
 
-       mlx5e_build_nic_params(mdev, NULL, &priv->rss_params, &priv->channels.params,
-                              priv->max_nch, netdev->mtu);
+       mlx5e_build_nic_params(priv, NULL, &priv->rss_params, &priv->channels.params,
+                              netdev->mtu);
        mlx5i_build_nic_params(mdev, &priv->channels.params);
 
        mlx5e_timestamp_init(priv);