]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/commitdiff
octeontx2-af: Support for setting MAC address
authorSunil Goutham <sgoutham@marvell.com>
Mon, 22 Oct 2018 17:56:03 +0000 (23:26 +0530)
committerDavid S. Miller <davem@davemloft.net>
Tue, 23 Oct 2018 03:15:38 +0000 (20:15 -0700)
Added a new mailbox message for a PF/VF to set/update
it's NIXLF's MAC address. Also updates unicast NPC
MCAM entry with this address as matching DMAC.

Signed-off-by: Sunil Goutham <sgoutham@marvell.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/marvell/octeontx2/af/mbox.h
drivers/net/ethernet/marvell/octeontx2/af/rvu.h
drivers/net/ethernet/marvell/octeontx2/af/rvu_nix.c

index 32d70bf25023bef4a36e8d346c728834b1083170..afa2ead929a987fc3e91121e36b3461000fcdf10 100644 (file)
@@ -158,7 +158,8 @@ M(NIX_TXSCH_FREE,   0x8005, nix_txsch_free_req, msg_rsp)            \
 M(NIX_TXSCHQ_CFG,      0x8006, nix_txschq_config, msg_rsp)             \
 M(NIX_STATS_RST,       0x8007, msg_req, msg_rsp)                       \
 M(NIX_VTAG_CFG,        0x8008, nix_vtag_config, msg_rsp)               \
-M(NIX_RSS_FLOWKEY_CFG,  0x8009, nix_rss_flowkey_cfg, msg_rsp)
+M(NIX_RSS_FLOWKEY_CFG,  0x8009, nix_rss_flowkey_cfg, msg_rsp)          \
+M(NIX_SET_MAC_ADDR,    0x800a, nix_set_mac_addr, msg_rsp)
 
 /* Messages initiated by AF (range 0xC00 - 0xDFF) */
 #define MBOX_UP_CGX_MESSAGES                                           \
@@ -507,4 +508,9 @@ struct nix_rss_flowkey_cfg {
        u8      group;       /* RSS context or group */
 };
 
+struct nix_set_mac_addr {
+       struct mbox_msghdr hdr;
+       u8 mac_addr[ETH_ALEN]; /* MAC address to be set for this pcifunc */
+};
+
 #endif /* MBOX_H */
index b169657605695b4119d8e1e91ea62b2ad27f540b..93e68915a63c8d0c490e99e98a167f718e008e96 100644 (file)
@@ -344,6 +344,9 @@ int rvu_mbox_handler_NIX_VTAG_CFG(struct rvu *rvu,
 int rvu_mbox_handler_NIX_RSS_FLOWKEY_CFG(struct rvu *rvu,
                                         struct nix_rss_flowkey_cfg *req,
                                         struct msg_rsp *rsp);
+int rvu_mbox_handler_NIX_SET_MAC_ADDR(struct rvu *rvu,
+                                     struct nix_set_mac_addr *req,
+                                     struct msg_rsp *rsp);
 
 /* NPC APIs */
 int rvu_npc_init(struct rvu *rvu);
index d4dcdbba5645f2ab312aeb221b99b5e2078ceb51..3caf81bbf2f25b34a6848209214a89dc070f8790 100644 (file)
@@ -1720,6 +1720,31 @@ static void nix_rx_flowkey_alg_cfg(struct rvu *rvu, int blkaddr)
        }
 }
 
+int rvu_mbox_handler_NIX_SET_MAC_ADDR(struct rvu *rvu,
+                                     struct nix_set_mac_addr *req,
+                                     struct msg_rsp *rsp)
+{
+       struct rvu_hwinfo *hw = rvu->hw;
+       u16 pcifunc = req->hdr.pcifunc;
+       struct rvu_pfvf *pfvf;
+       int blkaddr, nixlf;
+
+       pfvf = rvu_get_pfvf(rvu, pcifunc);
+       blkaddr = rvu_get_blkaddr(rvu, BLKTYPE_NIX, pcifunc);
+       if (!pfvf->nixlf || blkaddr < 0)
+               return NIX_AF_ERR_AF_LF_INVALID;
+
+       nixlf = rvu_get_lf(rvu, &hw->block[blkaddr], pcifunc, 0);
+       if (nixlf < 0)
+               return NIX_AF_ERR_AF_LF_INVALID;
+
+       ether_addr_copy(pfvf->mac_addr, req->mac_addr);
+
+       rvu_npc_install_ucast_entry(rvu, pcifunc, nixlf,
+                                   pfvf->rx_chan_base, req->mac_addr);
+       return 0;
+}
+
 static int nix_calibrate_x2p(struct rvu *rvu, int blkaddr)
 {
        int idx, err;