On Thu, Jun 18, 2020 at 1:40 PM Devendra Singh Rawat <dsinghra...@marvell.com> wrote: > > After enabling promiscuous mode all packets whose destination MAC address > is a multicast address were being dropped. This fix configures H/W to > receive all traffic in promiscuous mode. Promiscuous mode also overrides > allmulticast mode on/off status. > > Fixes: 40e9f6fc1558 ("net/qede: enable VF-VF traffic with unmatched dest > address") > Cc: sta...@dpdk.org > > Signed-off-by: Devendra Singh Rawat <dsinghra...@marvell.com> > Signed-off-by: Igor Russkikh <irussk...@marvell.com> > Signed-off-by: Rasesh Mody <rm...@marvell.com>
Applied to dpdk-next-net-mrvl/master. Thanks > --- > drivers/net/qede/qede_ethdev.c | 25 +++++++++---------------- > 1 file changed, 9 insertions(+), 16 deletions(-) > > diff --git a/drivers/net/qede/qede_ethdev.c b/drivers/net/qede/qede_ethdev.c > index c4f8f12..84d2d2c 100644 > --- a/drivers/net/qede/qede_ethdev.c > +++ b/drivers/net/qede/qede_ethdev.c > @@ -625,17 +625,16 @@ int qede_enable_tpa(struct rte_eth_dev *eth_dev, bool > flg) > ECORE_ACCEPT_BCAST; > > if (type == QED_FILTER_RX_MODE_TYPE_PROMISC) { > - flags.rx_accept_filter |= ECORE_ACCEPT_UCAST_UNMATCHED; > + flags.rx_accept_filter |= (ECORE_ACCEPT_UCAST_UNMATCHED | > + ECORE_ACCEPT_MCAST_UNMATCHED); > if (IS_VF(edev)) { > - flags.tx_accept_filter |= > ECORE_ACCEPT_UCAST_UNMATCHED; > - DP_INFO(edev, "Enabling Tx unmatched flag for VF\n"); > + flags.tx_accept_filter |= > + (ECORE_ACCEPT_UCAST_UNMATCHED > | > + > ECORE_ACCEPT_MCAST_UNMATCHED); > + DP_INFO(edev, "Enabling Tx unmatched flags for VF\n"); > } > } else if (type == QED_FILTER_RX_MODE_TYPE_MULTI_PROMISC) { > flags.rx_accept_filter |= ECORE_ACCEPT_MCAST_UNMATCHED; > - } else if (type == (QED_FILTER_RX_MODE_TYPE_MULTI_PROMISC | > - QED_FILTER_RX_MODE_TYPE_PROMISC)) { > - flags.rx_accept_filter |= ECORE_ACCEPT_UCAST_UNMATCHED | > - ECORE_ACCEPT_MCAST_UNMATCHED; > } > > return ecore_filter_accept_cmd(edev, 0, flags, false, false, > @@ -1502,16 +1501,13 @@ static int qede_dev_configure(struct rte_eth_dev > *eth_dev) > > static int qede_promiscuous_enable(struct rte_eth_dev *eth_dev) > { > - struct qede_dev *qdev = eth_dev->data->dev_private; > - struct ecore_dev *edev = &qdev->edev; > - enum qed_filter_rx_mode_type type = QED_FILTER_RX_MODE_TYPE_PROMISC; > enum _ecore_status_t ecore_status; > + struct qede_dev *qdev = QEDE_INIT_QDEV(eth_dev); > + struct ecore_dev *edev = QEDE_INIT_EDEV(qdev); > + enum qed_filter_rx_mode_type type = QED_FILTER_RX_MODE_TYPE_PROMISC; > > PMD_INIT_FUNC_TRACE(edev); > > - if (rte_eth_allmulticast_get(eth_dev->data->port_id) == 1) > - type |= QED_FILTER_RX_MODE_TYPE_MULTI_PROMISC; > - > ecore_status = qed_configure_filter_rx_mode(eth_dev, type); > > return ecore_status >= ECORE_SUCCESS ? 0 : -EAGAIN; > @@ -1885,9 +1881,6 @@ static int qede_allmulticast_enable(struct rte_eth_dev > *eth_dev) > QED_FILTER_RX_MODE_TYPE_MULTI_PROMISC; > enum _ecore_status_t ecore_status; > > - if (rte_eth_promiscuous_get(eth_dev->data->port_id) == 1) > - type |= QED_FILTER_RX_MODE_TYPE_PROMISC; > - > ecore_status = qed_configure_filter_rx_mode(eth_dev, type); > > return ecore_status >= ECORE_SUCCESS ? 0 : -EAGAIN; > -- > 1.8.3.1 >