The original functions of promiscuous mode can't process the
representor port rightly, revise the logic to do that.

Fixes: e1124c4f8a45 ("net/nfp: add flower representor framework")

Signed-off-by: Chaoyong He <chaoyong...@corigine.com>
---
 drivers/net/nfp/flower/nfp_flower.h             |  2 ++
 drivers/net/nfp/flower/nfp_flower_representor.c | 47 +++----------------------
 drivers/net/nfp/flower/nfp_flower_representor.h |  2 ++
 drivers/net/nfp/nfp_common.c                    | 10 +++++-
 4 files changed, 17 insertions(+), 44 deletions(-)

diff --git a/drivers/net/nfp/flower/nfp_flower.h 
b/drivers/net/nfp/flower/nfp_flower.h
index 12a0fb5..f199741 100644
--- a/drivers/net/nfp/flower/nfp_flower.h
+++ b/drivers/net/nfp/flower/nfp_flower.h
@@ -6,6 +6,8 @@
 #ifndef _NFP_FLOWER_H_
 #define _NFP_FLOWER_H_
 
+#include "../nfp_common.h"
+
 /*
  * Flower fallback and ctrl path always adds and removes
  * 8 bytes of prepended data. Tx descriptors must point
diff --git a/drivers/net/nfp/flower/nfp_flower_representor.c 
b/drivers/net/nfp/flower/nfp_flower_representor.c
index f1cd298..5809c83 100644
--- a/drivers/net/nfp/flower/nfp_flower_representor.c
+++ b/drivers/net/nfp/flower/nfp_flower_representor.c
@@ -414,45 +414,6 @@
 }
 
 static int
-nfp_flower_repr_promiscuous_enable(struct rte_eth_dev *dev)
-{
-       struct nfp_net_hw *pf_hw;
-       struct nfp_flower_representor *repr;
-
-       repr = (struct nfp_flower_representor *)dev->data->dev_private;
-       pf_hw = repr->app_fw_flower->pf_hw;
-
-       if (!(pf_hw->cap & NFP_NET_CFG_CTRL_PROMISC)) {
-               PMD_DRV_LOG(INFO, "Promiscuous mode not supported");
-               return -ENOTSUP;
-       }
-
-       if (pf_hw->ctrl & NFP_NET_CFG_CTRL_PROMISC) {
-               PMD_DRV_LOG(INFO, "Promiscuous mode already enabled");
-               return 0;
-       }
-
-       return nfp_net_promisc_enable(pf_hw->eth_dev);
-}
-
-static int
-nfp_flower_repr_promiscuous_disable(struct rte_eth_dev *dev)
-{
-       struct nfp_net_hw *pf_hw;
-       struct nfp_flower_representor *repr;
-
-       repr = (struct nfp_flower_representor *)dev->data->dev_private;
-       pf_hw = repr->app_fw_flower->pf_hw;
-
-       if ((pf_hw->ctrl & NFP_NET_CFG_CTRL_PROMISC) == 0) {
-               PMD_DRV_LOG(INFO, "Promiscuous mode already disabled");
-               return 0;
-       }
-
-       return nfp_net_promisc_disable(pf_hw->eth_dev);
-}
-
-static int
 nfp_flower_repr_mac_addr_set(struct rte_eth_dev *ethdev,
                struct rte_ether_addr *mac_addr)
 {
@@ -566,8 +527,8 @@
        .stats_get            = nfp_flower_repr_stats_get,
        .stats_reset          = nfp_flower_repr_stats_reset,
 
-       .promiscuous_enable   = nfp_flower_repr_promiscuous_enable,
-       .promiscuous_disable  = nfp_flower_repr_promiscuous_disable,
+       .promiscuous_enable   = nfp_net_promisc_enable,
+       .promiscuous_disable  = nfp_net_promisc_enable,
 
        .mac_addr_set         = nfp_flower_repr_mac_addr_set,
 };
@@ -587,8 +548,8 @@
        .stats_get            = nfp_flower_repr_stats_get,
        .stats_reset          = nfp_flower_repr_stats_reset,
 
-       .promiscuous_enable   = nfp_flower_repr_promiscuous_enable,
-       .promiscuous_disable  = nfp_flower_repr_promiscuous_disable,
+       .promiscuous_enable   = nfp_net_promisc_enable,
+       .promiscuous_disable  = nfp_net_promisc_enable,
 
        .mac_addr_set         = nfp_flower_repr_mac_addr_set,
 
diff --git a/drivers/net/nfp/flower/nfp_flower_representor.h 
b/drivers/net/nfp/flower/nfp_flower_representor.h
index af44ef3..685cbe4 100644
--- a/drivers/net/nfp/flower/nfp_flower_representor.h
+++ b/drivers/net/nfp/flower/nfp_flower_representor.h
@@ -6,6 +6,8 @@
 #ifndef _NFP_FLOWER_REPRESENTOR_H_
 #define _NFP_FLOWER_REPRESENTOR_H_
 
+#include "nfp_flower.h"
+
 /*
  * enum nfp_repr_type - type of representor
  * @NFP_REPR_TYPE_PHYS_PORT:   external NIC port
diff --git a/drivers/net/nfp/nfp_common.c b/drivers/net/nfp/nfp_common.c
index 277ea23..463eb64 100644
--- a/drivers/net/nfp/nfp_common.c
+++ b/drivers/net/nfp/nfp_common.c
@@ -37,6 +37,8 @@
 #include "nfpcore/nfp_rtsym.h"
 #include "nfpcore/nfp_nsp.h"
 
+#include "flower/nfp_flower_representor.h"
+
 #include "nfp_common.h"
 #include "nfp_ctrl.h"
 #include "nfp_rxtx.h"
@@ -412,10 +414,16 @@
        uint32_t new_ctrl, update = 0;
        struct nfp_net_hw *hw;
        int ret;
+       struct nfp_flower_representor *repr;
 
        PMD_DRV_LOG(DEBUG, "Promiscuous mode enable");
 
-       hw = NFP_NET_DEV_PRIVATE_TO_HW(dev->data->dev_private);
+       if ((dev->data->dev_flags & RTE_ETH_DEV_REPRESENTOR) != 0) {
+               repr = dev->data->dev_private;
+               hw = repr->app_fw_flower->pf_hw;
+       } else {
+               hw = NFP_NET_DEV_PRIVATE_TO_HW(dev->data->dev_private);
+       }
 
        if (!(hw->cap & NFP_NET_CFG_CTRL_PROMISC)) {
                PMD_INIT_LOG(INFO, "Promiscuous mode not supported");
-- 
1.8.3.1

Reply via email to