On Wed, Oct 21, 2026 at 12:30:19PM +0200, David Marchand wrote:
> Some PF drivers (dpaa, dpaa2) and VF drivers (ixgbe, ngbe, txgbe)
> are announcing some VMDq capability though this support is not documented,
> and no action is taken if the feature is requested.
>
> fm10k announces capability for VF device, but rejects it at configure
> time.
>
> failsafe may support VMDq, as it only passes the requests to the ports
> attached to it, hence mark it as partial support.
>
> Fixes: fe3a45fd4104 ("ixgbe: add VMDq support")
> Fixes: 7e72cbfa320b ("fm10k: add reta query/update")
> Fixes: 799db4568c76 ("net/dpaa: support device info and speed capability")
> Fixes: 762b275f20f8 ("net/dpaa2: add missing device info fields")
> Fixes: c01c748e4ae6 ("net/ipn3ke: add new driver")
> Fixes: 5dec0169554b ("net/txgbe: support VF get information")
> Fixes: 66070ca419c1 ("net/ngbe: add hardware configuration for VF device")
>
> Signed-off-by: David Marchand <[email protected]>
> ---
> Changes since v1:
> - moved net/atlantic and net/cxgbe changes where needed (later in this
> series),
> - added comment on failsafe in commitlog,
> - fixed ipn3ke,
>
> ---
For the intel driver changes:
Acked-by: Bruce Richardson <[email protected]>
> doc/guides/nics/features/failsafe.ini | 1 +
> doc/guides/nics/features/ipn3ke.ini | 1 -
> drivers/net/dpaa/dpaa_ethdev.c | 1 -
> drivers/net/dpaa2/dpaa2_ethdev.c | 1 -
> drivers/net/intel/fm10k/fm10k_ethdev.c | 9 ++-------
> drivers/net/intel/ixgbe/ixgbe_ethdev.c | 4 ----
> drivers/net/ngbe/ngbe_ethdev_vf.c | 1 -
> drivers/net/txgbe/txgbe_ethdev_vf.c | 1 -
> 8 files changed, 3 insertions(+), 16 deletions(-)
>
> diff --git a/doc/guides/nics/features/failsafe.ini
> b/doc/guides/nics/features/failsafe.ini
> index c7c696fbbd..09afdc1963 100644
> --- a/doc/guides/nics/features/failsafe.ini
> +++ b/doc/guides/nics/features/failsafe.ini
> @@ -13,6 +13,7 @@ MTU update = Y
> Promiscuous mode = Y
> Allmulticast mode = Y
> Unicast MAC filter = Y
> +VMDq = P
> Multicast MAC filter = Y
> VLAN filter = Y
> Flow control = Y
> diff --git a/doc/guides/nics/features/ipn3ke.ini
> b/doc/guides/nics/features/ipn3ke.ini
> index 29f40a5b11..ba43b9d91c 100644
> --- a/doc/guides/nics/features/ipn3ke.ini
> +++ b/doc/guides/nics/features/ipn3ke.ini
> @@ -18,7 +18,6 @@ Multicast MAC filter = Y
> RSS hash = Y
> RSS key update = Y
> RSS reta update = Y
> -VMDq = Y
> SR-IOV = Y
> DCB = Y
> VLAN filter = Y
> diff --git a/drivers/net/dpaa/dpaa_ethdev.c b/drivers/net/dpaa/dpaa_ethdev.c
> index 1aaf97f175..7d45386a9d 100644
> --- a/drivers/net/dpaa/dpaa_ethdev.c
> +++ b/drivers/net/dpaa/dpaa_ethdev.c
> @@ -662,7 +662,6 @@ static int dpaa_eth_dev_info(struct rte_eth_dev *dev,
> dev_info->max_mac_addrs = DPAA_MAX_MAC_FILTER;
> dev_info->max_hash_mac_addrs = 0;
> dev_info->max_vfs = 0;
> - dev_info->max_vmdq_pools = RTE_ETH_16_POOLS;
> dev_info->flow_type_rss_offloads = DPAA_RSS_OFFLOAD_ALL;
>
> if (fif->mac_type == fman_mac_1g) {
> diff --git a/drivers/net/dpaa2/dpaa2_ethdev.c
> b/drivers/net/dpaa2/dpaa2_ethdev.c
> index 8ae4fd89c5..07e89d5c39 100644
> --- a/drivers/net/dpaa2/dpaa2_ethdev.c
> +++ b/drivers/net/dpaa2/dpaa2_ethdev.c
> @@ -452,7 +452,6 @@ dpaa2_dev_info_get(struct rte_eth_dev *dev,
>
> dev_info->max_hash_mac_addrs = 0;
> dev_info->max_vfs = 0;
> - dev_info->max_vmdq_pools = RTE_ETH_16_POOLS;
> dev_info->flow_type_rss_offloads = DPAA2_RSS_OFFLOAD_ALL;
> /* DPAA2 has no software-visible indirection table: incoming packets are
> * dispatched to FQs via 'queue_id = hash % dist_size'. We expose the
> diff --git a/drivers/net/intel/fm10k/fm10k_ethdev.c
> b/drivers/net/intel/fm10k/fm10k_ethdev.c
> index 3b2daba79e..9b123c0b2c 100644
> --- a/drivers/net/intel/fm10k/fm10k_ethdev.c
> +++ b/drivers/net/intel/fm10k/fm10k_ethdev.c
> @@ -411,7 +411,6 @@ static int
> fm10k_check_mq_mode(struct rte_eth_dev *dev)
> {
> enum rte_eth_rx_mq_mode rx_mq_mode = dev->data->dev_conf.rxmode.mq_mode;
> - struct fm10k_hw *hw = FM10K_DEV_PRIVATE_TO_HW(dev->data->dev_private);
> struct rte_eth_vmdq_rx_conf *vmdq_conf;
> uint16_t nb_rx_q = dev->data->nb_rx_queues;
>
> @@ -425,11 +424,6 @@ fm10k_check_mq_mode(struct rte_eth_dev *dev)
> if (!(rx_mq_mode & RTE_ETH_MQ_RX_VMDQ_FLAG))
> return 0;
>
> - if (hw->mac.type == fm10k_mac_vf) {
> - PMD_INIT_LOG(ERR, "VMDQ mode is not supported in VF.");
> - return -EINVAL;
> - }
> -
> /* Check VMDQ queue pool number */
> if (vmdq_conf->nb_queue_pools >
> sizeof(vmdq_conf->pool_map[0].pools) * CHAR_BIT ||
> @@ -1386,7 +1380,8 @@ fm10k_dev_infos_get(struct rte_eth_dev *dev,
> dev_info->max_vfs = pdev->max_vfs;
> dev_info->vmdq_pool_base = 0;
> dev_info->vmdq_queue_base = 0;
> - dev_info->max_vmdq_pools = RTE_ETH_32_POOLS;
> + if (hw->mac.type != fm10k_mac_vf)
> + dev_info->max_vmdq_pools = RTE_ETH_32_POOLS;
> dev_info->vmdq_queue_num = FM10K_MAX_QUEUES_PF;
> dev_info->rx_queue_offload_capa = fm10k_get_rx_queue_offloads_capa(dev);
> dev_info->rx_offload_capa = fm10k_get_rx_port_offloads_capa(dev) |
> diff --git a/drivers/net/intel/ixgbe/ixgbe_ethdev.c
> b/drivers/net/intel/ixgbe/ixgbe_ethdev.c
> index 44eb932058..50e44484b1 100644
> --- a/drivers/net/intel/ixgbe/ixgbe_ethdev.c
> +++ b/drivers/net/intel/ixgbe/ixgbe_ethdev.c
> @@ -4076,10 +4076,6 @@ ixgbevf_dev_info_get(struct rte_eth_dev *dev,
> dev_info->max_mac_addrs = hw->mac.num_rar_entries;
> dev_info->max_hash_mac_addrs = IXGBE_VMDQ_NUM_UC_MAC;
> dev_info->max_vfs = pci_dev->max_vfs;
> - if (hw->mac.type == ixgbe_mac_82598EB)
> - dev_info->max_vmdq_pools = RTE_ETH_16_POOLS;
> - else
> - dev_info->max_vmdq_pools = RTE_ETH_64_POOLS;
> dev_info->rx_queue_offload_capa = ixgbe_get_rx_queue_offloads(dev);
> dev_info->rx_offload_capa = (ixgbe_get_rx_port_offloads(dev) |
> dev_info->rx_queue_offload_capa);
> diff --git a/drivers/net/ngbe/ngbe_ethdev_vf.c
> b/drivers/net/ngbe/ngbe_ethdev_vf.c
> index c440e02369..55cbffaf2c 100644
> --- a/drivers/net/ngbe/ngbe_ethdev_vf.c
> +++ b/drivers/net/ngbe/ngbe_ethdev_vf.c
> @@ -475,7 +475,6 @@ ngbevf_dev_info_get(struct rte_eth_dev *dev,
> dev_info->max_mac_addrs = hw->mac.num_rar_entries;
> dev_info->max_hash_mac_addrs = NGBE_VMDQ_NUM_UC_MAC;
> dev_info->max_vfs = pci_dev->max_vfs;
> - dev_info->max_vmdq_pools = RTE_ETH_64_POOLS;
> dev_info->rx_queue_offload_capa = ngbe_get_rx_queue_offloads(dev);
> dev_info->rx_offload_capa = (ngbe_get_rx_port_offloads(dev) |
> dev_info->rx_queue_offload_capa);
> diff --git a/drivers/net/txgbe/txgbe_ethdev_vf.c
> b/drivers/net/txgbe/txgbe_ethdev_vf.c
> index 341f62bc75..3cf33a8bd6 100644
> --- a/drivers/net/txgbe/txgbe_ethdev_vf.c
> +++ b/drivers/net/txgbe/txgbe_ethdev_vf.c
> @@ -575,7 +575,6 @@ txgbevf_dev_info_get(struct rte_eth_dev *dev,
> dev_info->max_mac_addrs = hw->mac.num_rar_entries;
> dev_info->max_hash_mac_addrs = TXGBE_VMDQ_NUM_UC_MAC;
> dev_info->max_vfs = pci_dev->max_vfs;
> - dev_info->max_vmdq_pools = RTE_ETH_64_POOLS;
> dev_info->dev_capa &= ~RTE_ETH_DEV_CAPA_FLOW_RULE_KEEP;
> dev_info->rx_queue_offload_capa = txgbe_get_rx_queue_offloads(dev);
> dev_info->rx_offload_capa = (txgbe_get_rx_port_offloads(dev) |
> --
> 2.54.0
>