octeontx2-af: Add LMAC channel info to NIXLF_ALLOC response
authorStanislaw Kardach <skardach@marvell.com>
Mon, 22 Oct 2018 17:55:59 +0000 (23:25 +0530)
committerDavid S. Miller <davem@davemloft.net>
Tue, 23 Oct 2018 03:15:38 +0000 (20:15 -0700)
Add LMAC channel info like Rx/Tx channel base and count to
NIXLF_ALLOC mailbox message response. This info is used by
NIXLF attached RVU PF/VF to configure SQ's default channel,
TL3_TL2_LINKX_CFG and to install MCAM rules in NPC based
on matching ingress channel number.

Signed-off-by: Stanislaw Kardach <skardach@marvell.com>
Signed-off-by: Tomasz Duszynski <tduszynski@marvell.com>
Signed-off-by: Sunil Goutham <sgoutham@marvell.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/marvell/octeontx2/af/common.h
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 e438f926e32a79e07b7ad70dd39a7deb6f37efd8..6c8150db1c41b272bc7832e1de2aa2242856d541 100644 (file)
@@ -169,6 +169,7 @@ enum nix_scheduler {
 
 #define MAX_LMAC_PKIND                 12
 #define NIX_LINK_CGX_LMAC(a, b)                (0 + 4 * (a) + (b))
+#define NIX_CHAN_CGX_LMAC_CHX(a, b, c) (0x800 + 0x100 * (a) + 0x10 * (b) + (c))
 
 /* NIX LSO format indices.
  * As of now TSO is the only one using, so statically assigning indices.
index b60ac9de2235ecb762bf3004b9fce8971f55720a..0e2552c717374482a4331d3697bf89271c86a0b6 100644 (file)
@@ -382,6 +382,10 @@ struct nix_lf_alloc_req {
 struct nix_lf_alloc_rsp {
        struct mbox_msghdr hdr;
        u16     sqb_size;
+       u16     rx_chan_base;
+       u16     tx_chan_base;
+       u8      rx_chan_cnt; /* total number of RX channels */
+       u8      tx_chan_cnt; /* total number of TX channels */
        u8      lso_tsov4_idx;
        u8      lso_tsov6_idx;
        u8      mac_addr[ETH_ALEN];
index 9fa5183226ebf0049edaa71871328736083a538e..12391d204b718700256a829626c38e34d07054c8 100644 (file)
@@ -118,6 +118,11 @@ struct rvu_pfvf {
        unsigned long   *rq_bmap;
        unsigned long   *cq_bmap;
 
+       u16             rx_chan_base;
+       u16             tx_chan_base;
+       u8              rx_chan_cnt; /* total number of RX channels */
+       u8              tx_chan_cnt; /* total number of TX channels */
+
        u8              mac_addr[ETH_ALEN]; /* MAC address of this PF/VF */
 
        /* Broadcast pkt replication info */
index 55075e7cb749dc8e5d696298eefbb7c30f596cf2..86b1e9b2fcf8cc066ecadeba8aa78fa31939343f 100644 (file)
@@ -140,6 +140,10 @@ static int nix_interface_init(struct rvu *rvu, u16 pcifunc, int type, int nixlf)
                                "PF_Func 0x%x: Invalid pkind\n", pcifunc);
                        return -EINVAL;
                }
+               pfvf->rx_chan_base = NIX_CHAN_CGX_LMAC_CHX(cgx_id, lmac_id, 0);
+               pfvf->tx_chan_base = pfvf->rx_chan_base;
+               pfvf->rx_chan_cnt = 1;
+               pfvf->tx_chan_cnt = 1;
                cgx_set_pkind(rvu_cgx_pdata(cgx_id, rvu), lmac_id, pkind);
                rvu_npc_set_pkind(rvu, pkind, pfvf);
                break;
@@ -799,6 +803,10 @@ exit:
        /* set SQB size info */
        cfg = rvu_read64(rvu, blkaddr, NIX_AF_SQ_CONST);
        rsp->sqb_size = (cfg >> 34) & 0xFFFF;
+       rsp->rx_chan_base = pfvf->rx_chan_base;
+       rsp->tx_chan_base = pfvf->tx_chan_base;
+       rsp->rx_chan_cnt = pfvf->rx_chan_cnt;
+       rsp->tx_chan_cnt = pfvf->tx_chan_cnt;
        rsp->lso_tsov4_idx = NIX_LSO_FORMAT_IDX_TSOV4;
        rsp->lso_tsov6_idx = NIX_LSO_FORMAT_IDX_TSOV6;
        return rc;