Some drivers (idpf, cpfl) report RSS support even if lacking HW support.
On the other hand, some driver do have support but do not advertise it
(either in dev_info, or in the documentation).

Fixes: 70675bcc3a57 ("net/idpf: support RSS")
Fixes: cfbc66551a14 ("net/cpfl: support RSS")
Fixes: 5fb899f4b225 ("net/xsc: support RSS configuration")
Fixes: ff8db3711b29 ("net/nbl: support infos query")

Signed-off-by: David Marchand <[email protected]>
---
 doc/guides/nics/features/failsafe.ini     | 1 +
 doc/guides/nics/features/nbl.ini          | 1 +
 doc/guides/nics/features/netvsc.ini       | 1 +
 drivers/net/intel/cpfl/cpfl_ethdev.c      | 3 ++-
 drivers/net/intel/cpfl/cpfl_representor.c | 4 +++-
 drivers/net/intel/idpf/idpf_ethdev.c      | 3 ++-
 drivers/net/xsc/xsc_ethdev.c              | 2 ++
 7 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/doc/guides/nics/features/failsafe.ini 
b/doc/guides/nics/features/failsafe.ini
index 09afdc1963..b778a40be6 100644
--- a/doc/guides/nics/features/failsafe.ini
+++ b/doc/guides/nics/features/failsafe.ini
@@ -18,6 +18,7 @@ Multicast MAC filter = Y
 VLAN filter          = Y
 Flow control         = Y
 Packet type parsing  = Y
+RSS hash             = P
 Stats per queue      = Y
 ARMv7                = Y
 ARMv8                = Y
diff --git a/doc/guides/nics/features/nbl.ini b/doc/guides/nics/features/nbl.ini
index 5935092a49..e799840e40 100644
--- a/doc/guides/nics/features/nbl.ini
+++ b/doc/guides/nics/features/nbl.ini
@@ -9,6 +9,7 @@ MTU update           = Y
 Scattered Rx         = Y
 Promiscuous mode     = Y
 Unicast MAC filter   = Y
+RSS hash             = Y
 VLAN offload         = P
 Extended stats       = Y
 Stats per queue      = Y
diff --git a/doc/guides/nics/features/netvsc.ini 
b/doc/guides/nics/features/netvsc.ini
index fa8c2ac132..7bc7148f95 100644
--- a/doc/guides/nics/features/netvsc.ini
+++ b/doc/guides/nics/features/netvsc.ini
@@ -8,6 +8,7 @@ Speed capabilities   = P
 Free Tx mbuf on demand = Y
 Scattered Rx         = Y
 Promiscuous mode     = Y
+RSS hash             = Y
 Allmulticast mode    = Y
 Stats per queue      = Y
 Extended stats       = Y
diff --git a/drivers/net/intel/cpfl/cpfl_ethdev.c 
b/drivers/net/intel/cpfl/cpfl_ethdev.c
index 32e0f81d99..0863043a2e 100644
--- a/drivers/net/intel/cpfl/cpfl_ethdev.c
+++ b/drivers/net/intel/cpfl/cpfl_ethdev.c
@@ -212,7 +212,8 @@ cpfl_dev_info_get(struct rte_eth_dev *dev, struct 
rte_eth_dev_info *dev_info)
        dev_info->hash_key_size = vport->rss_key_size;
        dev_info->reta_size = vport->rss_lut_size;
 
-       dev_info->flow_type_rss_offloads = CPFL_RSS_OFFLOAD_ALL;
+       if (base->caps.rss_caps != 0)
+               dev_info->flow_type_rss_offloads = CPFL_RSS_OFFLOAD_ALL;
 
        dev_info->rx_offload_capa =
                RTE_ETH_RX_OFFLOAD_IPV4_CKSUM           |
diff --git a/drivers/net/intel/cpfl/cpfl_representor.c 
b/drivers/net/intel/cpfl/cpfl_representor.c
index 60b72b5ec1..bb28c0b989 100644
--- a/drivers/net/intel/cpfl/cpfl_representor.c
+++ b/drivers/net/intel/cpfl/cpfl_representor.c
@@ -195,6 +195,7 @@ cpfl_repr_dev_info_get(struct rte_eth_dev *ethdev,
                       struct rte_eth_dev_info *dev_info)
 {
        struct cpfl_repr *repr = CPFL_DEV_TO_REPR(ethdev);
+       struct cpfl_adapter_ext *adapter = repr->itf.adapter;
 
        dev_info->device = ethdev->device;
        dev_info->max_mac_addrs = 1;
@@ -203,7 +204,8 @@ cpfl_repr_dev_info_get(struct rte_eth_dev *ethdev,
        dev_info->min_rx_bufsize = CPFL_MIN_BUF_SIZE;
        dev_info->max_rx_pktlen = CPFL_MAX_FRAME_SIZE;
 
-       dev_info->flow_type_rss_offloads = CPFL_RSS_OFFLOAD_ALL;
+       if (adapter->base.caps.rss_caps != 0)
+               dev_info->flow_type_rss_offloads = CPFL_RSS_OFFLOAD_ALL;
 
        dev_info->rx_offload_capa =
                RTE_ETH_RX_OFFLOAD_VLAN_STRIP           |
diff --git a/drivers/net/intel/idpf/idpf_ethdev.c 
b/drivers/net/intel/idpf/idpf_ethdev.c
index e9e9781fdd..5a8c783013 100644
--- a/drivers/net/intel/idpf/idpf_ethdev.c
+++ b/drivers/net/intel/idpf/idpf_ethdev.c
@@ -169,7 +169,8 @@ idpf_dev_info_get(struct rte_eth_dev *dev, struct 
rte_eth_dev_info *dev_info)
        dev_info->hash_key_size = vport->rss_key_size;
        dev_info->reta_size = vport->rss_lut_size;
 
-       dev_info->flow_type_rss_offloads = IDPF_RSS_OFFLOAD_ALL;
+       if (adapter->caps.rss_caps != 0)
+               dev_info->flow_type_rss_offloads = IDPF_RSS_OFFLOAD_ALL;
 
        dev_info->rx_offload_capa =
                RTE_ETH_RX_OFFLOAD_IPV4_CKSUM           |
diff --git a/drivers/net/xsc/xsc_ethdev.c b/drivers/net/xsc/xsc_ethdev.c
index 5fbe68782e..8ac7fecd3a 100644
--- a/drivers/net/xsc/xsc_ethdev.c
+++ b/drivers/net/xsc/xsc_ethdev.c
@@ -469,6 +469,8 @@ xsc_ethdev_infos_get(struct rte_eth_dev *dev, struct 
rte_eth_dev_info *info)
        info->if_index = priv->ifindex;
        info->speed_capa = priv->xdev->link_speed_capa;
        info->hash_key_size = XSC_RSS_HASH_KEY_LEN;
+       info->flow_type_rss_offloads = RTE_ETH_RSS_IP | RTE_ETH_RSS_UDP |
+               RTE_ETH_RSS_TCP;
        info->tx_desc_lim.nb_seg_max = 8;
        info->tx_desc_lim.nb_mtu_seg_max = 8;
        info->switch_info.name = dev->data->name;
-- 
2.54.0

Reply via email to