event/dlb2: add v2.5 start domain
[dpdk.git] / drivers / crypto / octeontx / otx_cryptodev_hw_access.c
index eba6293..5229e7c 100644 (file)
@@ -386,6 +386,12 @@ otx_cpt_hw_init(struct cpt_vf *cptvf, void *pdev, void *reg_base, char *name)
                return -1;
        }
 
+       /* Gets device type */
+       if (otx_cpt_get_dev_type(cptvf)) {
+               CPT_LOG_ERR("Failed to get device type");
+               return -1;
+       }
+
        return 0;
 }
 
@@ -406,24 +412,41 @@ otx_cpt_metabuf_mempool_create(const struct rte_cryptodev *dev,
                               int nb_elements)
 {
        char mempool_name[RTE_MEMPOOL_NAMESIZE];
-       int sg_mlen, lb_mlen, max_mlen, ret;
        struct cpt_qp_meta_info *meta_info;
        struct rte_mempool *pool;
+       int max_mlen = 0;
+       int sg_mlen = 0;
+       int lb_mlen = 0;
+       int ret;
+
+       /*
+        * Calculate metabuf length required. The 'crypto_octeontx' device
+        * would be either SYMMETRIC or ASYMMETRIC.
+        */
+
+       if (dev->feature_flags & RTE_CRYPTODEV_FF_SYMMETRIC_CRYPTO) {
 
-       /* Get meta len for scatter gather mode */
-       sg_mlen = cpt_pmd_ops_helper_get_mlen_sg_mode();
+               /* Get meta len for scatter gather mode */
+               sg_mlen = cpt_pmd_ops_helper_get_mlen_sg_mode();
 
-       /* Extra 32B saved for future considerations */
-       sg_mlen += 4 * sizeof(uint64_t);
+               /* Extra 32B saved for future considerations */
+               sg_mlen += 4 * sizeof(uint64_t);
 
-       /* Get meta len for linear buffer (direct) mode */
-       lb_mlen = cpt_pmd_ops_helper_get_mlen_direct_mode();
+               /* Get meta len for linear buffer (direct) mode */
+               lb_mlen = cpt_pmd_ops_helper_get_mlen_direct_mode();
 
-       /* Extra 32B saved for future considerations */
-       lb_mlen += 4 * sizeof(uint64_t);
+               /* Extra 32B saved for future considerations */
+               lb_mlen += 4 * sizeof(uint64_t);
 
-       /* Check max requirement for meta buffer */
-       max_mlen = RTE_MAX(lb_mlen, sg_mlen);
+               /* Check max requirement for meta buffer */
+               max_mlen = RTE_MAX(lb_mlen, sg_mlen);
+       } else {
+
+               /* Asymmetric device */
+
+               /* Get meta len for asymmetric operations */
+               max_mlen = cpt_pmd_ops_helper_asym_get_mlen();
+       }
 
        /* Allocate mempool */
 
@@ -512,7 +535,7 @@ otx_cpt_get_resource(const struct rte_cryptodev *dev, uint8_t group,
        len = chunks * RTE_ALIGN(sizeof(struct command_chunk), 8);
 
        /* For pending queue */
-       len += qlen * RTE_ALIGN(sizeof(struct rid), 8);
+       len += qlen * sizeof(uintptr_t);
 
        /* So that instruction queues start as pg size aligned */
        len = RTE_ALIGN(len, pg_sz);
@@ -533,7 +556,7 @@ otx_cpt_get_resource(const struct rte_cryptodev *dev, uint8_t group,
        }
 
        mem = rz->addr;
-       dma_addr = rz->phys_addr;
+       dma_addr = rz->iova;
        alloc_len = len;
 
        memset(mem, 0, len);
@@ -547,14 +570,14 @@ otx_cpt_get_resource(const struct rte_cryptodev *dev, uint8_t group,
        }
 
        /* Pending queue setup */
-       cptvf->pqueue.rid_queue = (struct rid *)mem;
+       cptvf->pqueue.req_queue = (uintptr_t *)mem;
        cptvf->pqueue.enq_tail = 0;
        cptvf->pqueue.deq_head = 0;
        cptvf->pqueue.pending_count = 0;
 
-       mem +=  qlen * RTE_ALIGN(sizeof(struct rid), 8);
-       len -=  qlen * RTE_ALIGN(sizeof(struct rid), 8);
-       dma_addr += qlen * RTE_ALIGN(sizeof(struct rid), 8);
+       mem +=  qlen * sizeof(uintptr_t);
+       len -=  qlen * sizeof(uintptr_t);
+       dma_addr += qlen * sizeof(uintptr_t);
 
        /* Alignment wastage */
        used_len = alloc_len - len;
@@ -653,12 +676,6 @@ otx_cpt_start_device(void *dev)
                return -EFAULT;
        }
 
-       if ((cptvf->vftype != SE_TYPE) && (cptvf->vftype != AE_TYPE)) {
-               CPT_LOG_ERR("Fatal error, unexpected vf type %u, for CPT VF "
-                           "device %s", cptvf->vftype, cptvf->dev_name);
-               return -ENOENT;
-       }
-
        return 0;
 }