common/cnxk: add lmtline initialization
authorAnoob Joseph <anoobj@marvell.com>
Fri, 25 Jun 2021 05:36:45 +0000 (11:06 +0530)
committerAkhil Goyal <gakhil@marvell.com>
Wed, 7 Jul 2021 19:15:08 +0000 (21:15 +0200)
Add routine to initialize LMTLINE which facilitates instruction
submission to CPT. Add common macros required in the enqueue
operations.

Signed-off-by: Anoob Joseph <anoobj@marvell.com>
Signed-off-by: Ankur Dwivedi <adwivedi@marvell.com>
Acked-by: Akhil Goyal <gakhil@marvell.com>
drivers/common/cnxk/roc_cpt.c
drivers/common/cnxk/roc_cpt.h
drivers/common/cnxk/version.map

index 81e8b15..788b28a 100644 (file)
@@ -806,3 +806,23 @@ roc_cpt_iq_disable(struct roc_cpt_lf *lf)
        lf_inprog.s.eena = 0x0;
        plt_write64(lf_inprog.u, lf->rbase + CPT_LF_INPROG);
 }
+
+int
+roc_cpt_lmtline_init(struct roc_cpt *roc_cpt, struct roc_cpt_lmtline *lmtline,
+                    int lf_id)
+{
+       struct roc_cpt_lf *lf;
+
+       lf = roc_cpt->lf[lf_id];
+       if (lf == NULL)
+               return -ENOTSUP;
+
+       lmtline->io_addr = lf->io_addr;
+       if (roc_model_is_cn10k())
+               lmtline->io_addr |= ROC_CN10K_CPT_INST_DW_M1 << 4;
+
+       lmtline->fc_addr = lf->fc_addr;
+       lmtline->lmt_base = lf->lmt_base;
+
+       return 0;
+}
index 5577fea..8dd2b5e 100644 (file)
 #define ROC_CPT_DFLT_ENG_GRP_AE           2UL
 
 #define ROC_CPT_MAX_LFS 64
+#define ROC_CN10K_CPT_INST_DW_M1                                               \
+       ((uint64_t)(((sizeof(struct cpt_inst_s) / 16) - 1) & 0x7))
+#define ROC_CN10K_TWO_CPT_INST_DW_M1                                           \
+       ((uint64_t)(((sizeof(struct cpt_inst_s) * 2 / 16) - 1) & 0x7))
+
+/* Vector of sizes in the burst of 16 CPT inst except first in 63:19 of
+ * APT_LMT_ARG_S
+ */
+#define ROC_CN10K_CPT_LMT_ARG                                                  \
+       (ROC_CN10K_CPT_INST_DW_M1 << (19 + 3 * 0) |                            \
+        ROC_CN10K_CPT_INST_DW_M1 << (19 + 3 * 1) |                            \
+        ROC_CN10K_CPT_INST_DW_M1 << (19 + 3 * 2) |                            \
+        ROC_CN10K_CPT_INST_DW_M1 << (19 + 3 * 3) |                            \
+        ROC_CN10K_CPT_INST_DW_M1 << (19 + 3 * 4) |                            \
+        ROC_CN10K_CPT_INST_DW_M1 << (19 + 3 * 5) |                            \
+        ROC_CN10K_CPT_INST_DW_M1 << (19 + 3 * 6) |                            \
+        ROC_CN10K_CPT_INST_DW_M1 << (19 + 3 * 7) |                            \
+        ROC_CN10K_CPT_INST_DW_M1 << (19 + 3 * 8) |                            \
+        ROC_CN10K_CPT_INST_DW_M1 << (19 + 3 * 9) |                            \
+        ROC_CN10K_CPT_INST_DW_M1 << (19 + 3 * 10) |                           \
+        ROC_CN10K_CPT_INST_DW_M1 << (19 + 3 * 11) |                           \
+        ROC_CN10K_CPT_INST_DW_M1 << (19 + 3 * 12) |                           \
+        ROC_CN10K_CPT_INST_DW_M1 << (19 + 3 * 13) |                           \
+        ROC_CN10K_CPT_INST_DW_M1 << (19 + 3 * 14))
 
 /* CPT helper macros */
 #define ROC_CPT_AH_HDR_LEN      12
 #define ROC_CPT_TUNNEL_IPV4_HDR_LEN 20
 #define ROC_CPT_TUNNEL_IPV6_HDR_LEN 40
 
+struct roc_cpt_lmtline {
+       uint64_t io_addr;
+       uint64_t *fc_addr;
+       uintptr_t lmt_base;
+};
+
 struct roc_cpt_lf {
        /* Input parameters */
        uint16_t lf_id;
@@ -109,5 +139,7 @@ int __roc_api roc_cpt_inline_ipsec_inb_cfg(struct roc_cpt *roc_cpt,
 int __roc_api roc_cpt_afs_print(struct roc_cpt *roc_cpt);
 int __roc_api roc_cpt_lfs_print(struct roc_cpt *roc_cpt);
 void __roc_api roc_cpt_iq_disable(struct roc_cpt_lf *lf);
+int __roc_api roc_cpt_lmtline_init(struct roc_cpt *roc_cpt,
+                                  struct roc_cpt_lmtline *lmtline, int lf_id);
 
 #endif /* _ROC_CPT_H_ */
index faa8eb4..7faa5d3 100644 (file)
@@ -46,6 +46,7 @@ INTERNAL {
        roc_cpt_lf_init;
        roc_cpt_lf_fini;
        roc_cpt_lfs_print;
+       roc_cpt_lmtline_init;
        roc_cpt_rxc_time_cfg;
        roc_error_msg_get;
        roc_idev_cpt_get;