octeontx2-af: optimize cpt pf identification
authorSrujana Challa <schalla@marvell.com>
Wed, 18 Jan 2023 12:03:51 +0000 (17:33 +0530)
committerDavid S. Miller <davem@davemloft.net>
Fri, 20 Jan 2023 09:00:08 +0000 (09:00 +0000)
Optimize CPT PF identification in mbox handling for faster
mbox response by doing it at AF driver probe instead of
every mbox message.

Signed-off-by: Srujana Challa <schalla@marvell.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/marvell/octeontx2/af/rvu.c
drivers/net/ethernet/marvell/octeontx2/af/rvu.h
drivers/net/ethernet/marvell/octeontx2/af/rvu_cpt.c

index 3f5e09b77d4bd680510593a6571483dbaa332c02..8683ce57ed3fbdfbdb6beca11b128dcc57babebf 100644 (file)
@@ -1164,8 +1164,16 @@ cpt:
                goto nix_err;
        }
 
+       err = rvu_cpt_init(rvu);
+       if (err) {
+               dev_err(rvu->dev, "%s: Failed to initialize cpt\n", __func__);
+               goto mcs_err;
+       }
+
        return 0;
 
+mcs_err:
+       rvu_mcs_exit(rvu);
 nix_err:
        rvu_nix_freemem(rvu);
 npa_err:
index 20c75d7c962ef120a122df1d06d96347368d18d5..2f480c73ef553644b6d085e41ff57f422bf3b73c 100644 (file)
@@ -511,6 +511,7 @@ struct rvu {
        struct ptp              *ptp;
 
        int                     mcs_blk_cnt;
+       int                     cpt_pf_num;
 
 #ifdef CONFIG_DEBUG_FS
        struct rvu_debugfs      rvu_dbg;
@@ -877,6 +878,7 @@ void rvu_cpt_unregister_interrupts(struct rvu *rvu);
 int rvu_cpt_lf_teardown(struct rvu *rvu, u16 pcifunc, int blkaddr, int lf,
                        int slot);
 int rvu_cpt_ctx_flush(struct rvu *rvu, u16 pcifunc);
+int rvu_cpt_init(struct rvu *rvu);
 
 /* CN10K RVU */
 int rvu_set_channels_base(struct rvu *rvu);
index e8973294c4f88a7ba1c6161ad35e361614d12b3e..f970cb9b0bff3f9aa24299b4332287903b8c1046 100644 (file)
@@ -340,7 +340,7 @@ static int get_cpt_pf_num(struct rvu *rvu)
 
 static bool is_cpt_pf(struct rvu *rvu, u16 pcifunc)
 {
-       int cpt_pf_num = get_cpt_pf_num(rvu);
+       int cpt_pf_num = rvu->cpt_pf_num;
 
        if (rvu_get_pf(pcifunc) != cpt_pf_num)
                return false;
@@ -352,7 +352,7 @@ static bool is_cpt_pf(struct rvu *rvu, u16 pcifunc)
 
 static bool is_cpt_vf(struct rvu *rvu, u16 pcifunc)
 {
-       int cpt_pf_num = get_cpt_pf_num(rvu);
+       int cpt_pf_num = rvu->cpt_pf_num;
 
        if (rvu_get_pf(pcifunc) != cpt_pf_num)
                return false;
@@ -1015,7 +1015,7 @@ int rvu_cpt_lf_teardown(struct rvu *rvu, u16 pcifunc, int blkaddr, int lf, int s
 static int cpt_inline_inb_lf_cmd_send(struct rvu *rvu, int blkaddr,
                                      int nix_blkaddr)
 {
-       int cpt_pf_num = get_cpt_pf_num(rvu);
+       int cpt_pf_num = rvu->cpt_pf_num;
        struct cpt_inst_lmtst_req *req;
        dma_addr_t res_daddr;
        int timeout = 3000;
@@ -1159,3 +1159,10 @@ unlock:
 
        return 0;
 }
+
+int rvu_cpt_init(struct rvu *rvu)
+{
+       /* Retrieve CPT PF number */
+       rvu->cpt_pf_num = get_cpt_pf_num(rvu);
+       return 0;
+}