|
@@ -2139,6 +2139,14 @@ static int set_feature_tc_num_filters(struct net_device *netdev, bool enable)
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+static int set_feature_rx_all(struct net_device *netdev, bool enable)
|
|
|
|
+{
|
|
|
|
+ struct mlx5e_priv *priv = netdev_priv(netdev);
|
|
|
|
+ struct mlx5_core_dev *mdev = priv->mdev;
|
|
|
|
+
|
|
|
|
+ return mlx5_set_port_fcs(mdev, !enable);
|
|
|
|
+}
|
|
|
|
+
|
|
static int mlx5e_handle_feature(struct net_device *netdev,
|
|
static int mlx5e_handle_feature(struct net_device *netdev,
|
|
netdev_features_t wanted_features,
|
|
netdev_features_t wanted_features,
|
|
netdev_features_t feature,
|
|
netdev_features_t feature,
|
|
@@ -2174,6 +2182,8 @@ static int mlx5e_set_features(struct net_device *netdev,
|
|
set_feature_vlan_filter);
|
|
set_feature_vlan_filter);
|
|
err |= mlx5e_handle_feature(netdev, features, NETIF_F_HW_TC,
|
|
err |= mlx5e_handle_feature(netdev, features, NETIF_F_HW_TC,
|
|
set_feature_tc_num_filters);
|
|
set_feature_tc_num_filters);
|
|
|
|
+ err |= mlx5e_handle_feature(netdev, features, NETIF_F_RXALL,
|
|
|
|
+ set_feature_rx_all);
|
|
|
|
|
|
return err ? -EINVAL : 0;
|
|
return err ? -EINVAL : 0;
|
|
}
|
|
}
|
|
@@ -2564,6 +2574,8 @@ static void mlx5e_build_netdev(struct net_device *netdev)
|
|
{
|
|
{
|
|
struct mlx5e_priv *priv = netdev_priv(netdev);
|
|
struct mlx5e_priv *priv = netdev_priv(netdev);
|
|
struct mlx5_core_dev *mdev = priv->mdev;
|
|
struct mlx5_core_dev *mdev = priv->mdev;
|
|
|
|
+ bool fcs_supported;
|
|
|
|
+ bool fcs_enabled;
|
|
|
|
|
|
SET_NETDEV_DEV(netdev, &mdev->pdev->dev);
|
|
SET_NETDEV_DEV(netdev, &mdev->pdev->dev);
|
|
|
|
|
|
@@ -2607,10 +2619,18 @@ static void mlx5e_build_netdev(struct net_device *netdev)
|
|
netdev->hw_enc_features |= NETIF_F_GSO_UDP_TUNNEL;
|
|
netdev->hw_enc_features |= NETIF_F_GSO_UDP_TUNNEL;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ mlx5_query_port_fcs(mdev, &fcs_supported, &fcs_enabled);
|
|
|
|
+
|
|
|
|
+ if (fcs_supported)
|
|
|
|
+ netdev->hw_features |= NETIF_F_RXALL;
|
|
|
|
+
|
|
netdev->features = netdev->hw_features;
|
|
netdev->features = netdev->hw_features;
|
|
if (!priv->params.lro_en)
|
|
if (!priv->params.lro_en)
|
|
netdev->features &= ~NETIF_F_LRO;
|
|
netdev->features &= ~NETIF_F_LRO;
|
|
|
|
|
|
|
|
+ if (fcs_enabled)
|
|
|
|
+ netdev->features &= ~NETIF_F_RXALL;
|
|
|
|
+
|
|
#define FT_CAP(f) MLX5_CAP_FLOWTABLE(mdev, flow_table_properties_nic_receive.f)
|
|
#define FT_CAP(f) MLX5_CAP_FLOWTABLE(mdev, flow_table_properties_nic_receive.f)
|
|
if (FT_CAP(flow_modify_en) &&
|
|
if (FT_CAP(flow_modify_en) &&
|
|
FT_CAP(modify_root) &&
|
|
FT_CAP(modify_root) &&
|