octeontx2-af: Invoke exact match functions if supported
authorRatheesh Kannoth <rkannoth@marvell.com>
Wed, 6 Jul 2022 03:44:40 +0000 (09:14 +0530)
committerDavid S. Miller <davem@davemloft.net>
Wed, 6 Jul 2022 07:16:48 +0000 (08:16 +0100)
If exact match table is suppoted, call functions to add/del/update
entries in exact match table instead of RPM dmac filters

Signed-off-by: Ratheesh Kannoth <rkannoth@marvell.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/marvell/octeontx2/af/rvu_cgx.c
drivers/net/ethernet/marvell/octeontx2/af/rvu_nix.c

index 0d86f3e..5090ddc 100644 (file)
@@ -475,6 +475,11 @@ void rvu_cgx_disable_dmac_entries(struct rvu *rvu, u16 pcifunc)
        if (!is_cgx_config_permitted(rvu, pcifunc))
                return;
 
+       if (rvu_npc_exact_has_match_table(rvu)) {
+               rvu_npc_exact_reset(rvu, pcifunc);
+               return;
+       }
+
        rvu_get_cgx_lmac_id(rvu->pf2cgxlmac_map[pf], &cgx_id, &lmac_id);
        cgx_dev = cgx_get_pdata(cgx_id);
        lmac_count = cgx_get_lmac_cnt(cgx_dev);
@@ -585,6 +590,9 @@ int rvu_mbox_handler_cgx_mac_addr_set(struct rvu *rvu,
        if (!is_cgx_config_permitted(rvu, req->hdr.pcifunc))
                return -EPERM;
 
+       if (rvu_npc_exact_has_match_table(rvu))
+               return rvu_npc_exact_mac_addr_set(rvu, req, rsp);
+
        rvu_get_cgx_lmac_id(rvu->pf2cgxlmac_map[pf], &cgx_id, &lmac_id);
 
        cgx_lmac_addr_set(cgx_id, lmac_id, req->mac_addr);
@@ -603,6 +611,9 @@ int rvu_mbox_handler_cgx_mac_addr_add(struct rvu *rvu,
        if (!is_cgx_config_permitted(rvu, req->hdr.pcifunc))
                return -EPERM;
 
+       if (rvu_npc_exact_has_match_table(rvu))
+               return rvu_npc_exact_mac_addr_add(rvu, req, rsp);
+
        rvu_get_cgx_lmac_id(rvu->pf2cgxlmac_map[pf], &cgx_id, &lmac_id);
        rc = cgx_lmac_addr_add(cgx_id, lmac_id, req->mac_addr);
        if (rc >= 0) {
@@ -623,6 +634,9 @@ int rvu_mbox_handler_cgx_mac_addr_del(struct rvu *rvu,
        if (!is_cgx_config_permitted(rvu, req->hdr.pcifunc))
                return -EPERM;
 
+       if (rvu_npc_exact_has_match_table(rvu))
+               return rvu_npc_exact_mac_addr_del(rvu, req, rsp);
+
        rvu_get_cgx_lmac_id(rvu->pf2cgxlmac_map[pf], &cgx_id, &lmac_id);
        return cgx_lmac_addr_del(cgx_id, lmac_id, req->index);
 }
@@ -644,6 +658,11 @@ int rvu_mbox_handler_cgx_mac_max_entries_get(struct rvu *rvu,
                return 0;
        }
 
+       if (rvu_npc_exact_has_match_table(rvu)) {
+               rsp->max_dmac_filters = rvu_npc_exact_get_max_entries(rvu);
+               return 0;
+       }
+
        rvu_get_cgx_lmac_id(rvu->pf2cgxlmac_map[pf], &cgx_id, &lmac_id);
        rsp->max_dmac_filters = cgx_lmac_addr_max_entries_get(cgx_id, lmac_id);
        return 0;
@@ -681,6 +700,10 @@ int rvu_mbox_handler_cgx_promisc_enable(struct rvu *rvu, struct msg_req *req,
        if (!is_cgx_config_permitted(rvu, req->hdr.pcifunc))
                return -EPERM;
 
+       /* Disable drop on non hit rule */
+       if (rvu_npc_exact_has_match_table(rvu))
+               return rvu_npc_exact_promisc_enable(rvu, req->hdr.pcifunc);
+
        rvu_get_cgx_lmac_id(rvu->pf2cgxlmac_map[pf], &cgx_id, &lmac_id);
 
        cgx_lmac_promisc_config(cgx_id, lmac_id, true);
@@ -696,6 +719,10 @@ int rvu_mbox_handler_cgx_promisc_disable(struct rvu *rvu, struct msg_req *req,
        if (!is_cgx_config_permitted(rvu, req->hdr.pcifunc))
                return -EPERM;
 
+       /* Disable drop on non hit rule */
+       if (rvu_npc_exact_has_match_table(rvu))
+               return rvu_npc_exact_promisc_disable(rvu, req->hdr.pcifunc);
+
        rvu_get_cgx_lmac_id(rvu->pf2cgxlmac_map[pf], &cgx_id, &lmac_id);
 
        cgx_lmac_promisc_config(cgx_id, lmac_id, false);
@@ -1099,6 +1126,10 @@ int rvu_mbox_handler_cgx_mac_addr_reset(struct rvu *rvu, struct cgx_mac_addr_res
                return LMAC_AF_ERR_PERM_DENIED;
 
        rvu_get_cgx_lmac_id(rvu->pf2cgxlmac_map[pf], &cgx_id, &lmac_id);
+
+       if (rvu_npc_exact_has_match_table(rvu))
+               return rvu_npc_exact_mac_addr_reset(rvu, req, rsp);
+
        return cgx_lmac_addr_reset(cgx_id, lmac_id);
 }
 
@@ -1112,6 +1143,9 @@ int rvu_mbox_handler_cgx_mac_addr_update(struct rvu *rvu,
        if (!is_cgx_config_permitted(rvu, req->hdr.pcifunc))
                return LMAC_AF_ERR_PERM_DENIED;
 
+       if (rvu_npc_exact_has_match_table(rvu))
+               return rvu_npc_exact_mac_addr_update(rvu, req, rsp);
+
        rvu_get_cgx_lmac_id(rvu->pf2cgxlmac_map[pf], &cgx_id, &lmac_id);
        return cgx_lmac_addr_update(cgx_id, lmac_id, req->mac_addr, req->index);
 }
index 0fa625e..1d3323d 100644 (file)
@@ -14,6 +14,7 @@
 #include "npc.h"
 #include "cgx.h"
 #include "lmac_common.h"
+#include "rvu_npc_hash.h"
 
 static void nix_free_tx_vtag_entries(struct rvu *rvu, u16 pcifunc);
 static int rvu_nix_get_bpid(struct rvu *rvu, struct nix_bp_cfg_req *req,
@@ -3792,9 +3793,15 @@ int rvu_mbox_handler_nix_set_rx_mode(struct rvu *rvu, struct nix_rx_mode *req,
                rvu_npc_install_promisc_entry(rvu, pcifunc, nixlf,
                                              pfvf->rx_chan_base,
                                              pfvf->rx_chan_cnt);
+
+               if (rvu_npc_exact_has_match_table(rvu))
+                       rvu_npc_exact_promisc_enable(rvu, pcifunc);
        } else {
                if (!nix_rx_multicast)
                        rvu_npc_enable_promisc_entry(rvu, pcifunc, nixlf, false);
+
+               if (rvu_npc_exact_has_match_table(rvu))
+                       rvu_npc_exact_promisc_disable(rvu, pcifunc);
        }
 
        return 0;