@@ -288,12 +288,12 @@ cnxk_dmadev_start(struct rte_dma_dev *dev)
int i, j, rc = 0;
void *chunk;
+ dpivf->total_pnum_words = 0;
+
for (i = 0; i < dpivf->num_vchans; i++) {
dpi_conf = &dpivf->conf[i];
dpi_conf->c_desc.head = 0;
dpi_conf->c_desc.tail = 0;
- dpi_conf->pnum_words = 0;
- dpi_conf->pending = 0;
dpi_conf->desc_idx = 0;
for (j = 0; j < dpi_conf->c_desc.max_cnt + 1; j++)
dpi_conf->c_desc.compl_ptr[j * CNXK_DPI_COMPL_OFFSET] = CNXK_DPI_REQ_CDATA;
@@ -442,8 +442,7 @@ cnxk_damdev_burst_capacity(const void *dev_private, uint16_t vchan)
uint16_t burst_cap;
burst_cap = dpi_conf->c_desc.max_cnt -
- ((dpi_conf->stats.submitted - dpi_conf->stats.completed) + dpi_conf->pending) +
- 1;
+ (dpi_conf->stats.submitted - dpi_conf->stats.completed) + 1;
return burst_cap;
}
@@ -452,18 +451,16 @@ static int
cnxk_dmadev_submit(void *dev_private, uint16_t vchan)
{
struct cnxk_dpi_vf_s *dpivf = dev_private;
- struct cnxk_dpi_conf *dpi_conf = &dpivf->conf[vchan];
- uint32_t num_words = dpi_conf->pnum_words;
+ uint32_t num_words = dpivf->total_pnum_words;
+ RTE_SET_USED(vchan);
- if (!dpi_conf->pnum_words)
+ if (!num_words)
return 0;
rte_wmb();
plt_write64(num_words, dpivf->rdpi.rbase + DPI_VDMA_DBELL);
- dpi_conf->stats.submitted += dpi_conf->pending;
- dpi_conf->pnum_words = 0;
- dpi_conf->pending = 0;
+ dpivf->total_pnum_words = 0;
return 0;
}
@@ -98,8 +98,6 @@ struct cnxk_dpi_cdesc_data_s {
struct cnxk_dpi_conf {
union cnxk_dpi_instr_cmd cmd;
struct cnxk_dpi_cdesc_data_s c_desc;
- uint16_t pnum_words;
- uint16_t pending;
uint16_t desc_idx;
struct rte_dma_stats stats;
uint64_t completed_offset;
@@ -111,6 +109,7 @@ struct cnxk_dpi_vf_s {
uint64_t *chunk_base;
uint16_t chunk_head;
uint16_t chunk_size_m1;
+ uint16_t total_pnum_words;
struct rte_mempool *chunk_pool;
struct cnxk_dpi_conf conf[CNXK_DPI_MAX_VCHANS_PER_QUEUE];
RTE_ATOMIC(rte_mcslock_t *) mcs_lock;
@@ -281,16 +281,15 @@ cnxk_dmadev_copy(void *dev_private, uint16_t vchan, rte_iova_t src, rte_iova_t d
if (flags & RTE_DMA_OP_FLAG_SUBMIT) {
rte_wmb();
- plt_write64(dpi_conf->pnum_words + CNXK_DPI_DW_PER_SINGLE_CMD,
+ plt_write64(dpivf->total_pnum_words + CNXK_DPI_DW_PER_SINGLE_CMD,
dpivf->rdpi.rbase + DPI_VDMA_DBELL);
- dpi_conf->stats.submitted += dpi_conf->pending + 1;
- dpi_conf->pnum_words = 0;
- dpi_conf->pending = 0;
+ dpivf->total_pnum_words = 0;
} else {
- dpi_conf->pnum_words += CNXK_DPI_DW_PER_SINGLE_CMD;
- dpi_conf->pending++;
+ dpivf->total_pnum_words += CNXK_DPI_DW_PER_SINGLE_CMD;
}
+ dpi_conf->stats.submitted += 1;
+
return dpi_conf->desc_idx++;
}
@@ -337,16 +336,15 @@ cnxk_dmadev_copy_sg(void *dev_private, uint16_t vchan, const struct rte_dma_sge
if (flags & RTE_DMA_OP_FLAG_SUBMIT) {
rte_wmb();
- plt_write64(dpi_conf->pnum_words + CNXK_DPI_CMD_LEN(nb_src, nb_dst),
+ plt_write64(dpivf->total_pnum_words + CNXK_DPI_CMD_LEN(nb_src, nb_dst),
dpivf->rdpi.rbase + DPI_VDMA_DBELL);
- dpi_conf->stats.submitted += dpi_conf->pending + 1;
- dpi_conf->pnum_words = 0;
- dpi_conf->pending = 0;
+ dpivf->total_pnum_words = 0;
} else {
- dpi_conf->pnum_words += CNXK_DPI_CMD_LEN(nb_src, nb_dst);
- dpi_conf->pending++;
+ dpivf->total_pnum_words += CNXK_DPI_CMD_LEN(nb_src, nb_dst);
}
+ dpi_conf->stats.submitted += 1;
+
return dpi_conf->desc_idx++;
}
@@ -383,16 +381,15 @@ cn10k_dmadev_copy(void *dev_private, uint16_t vchan, rte_iova_t src, rte_iova_t
if (flags & RTE_DMA_OP_FLAG_SUBMIT) {
rte_wmb();
- plt_write64(dpi_conf->pnum_words + CNXK_DPI_DW_PER_SINGLE_CMD,
+ plt_write64(dpivf->total_pnum_words + CNXK_DPI_DW_PER_SINGLE_CMD,
dpivf->rdpi.rbase + DPI_VDMA_DBELL);
- dpi_conf->stats.submitted += dpi_conf->pending + 1;
- dpi_conf->pnum_words = 0;
- dpi_conf->pending = 0;
+ dpivf->total_pnum_words = 0;
} else {
- dpi_conf->pnum_words += 8;
- dpi_conf->pending++;
+ dpivf->total_pnum_words += CNXK_DPI_DW_PER_SINGLE_CMD;
}
+ dpi_conf->stats.submitted += 1;
+
return dpi_conf->desc_idx++;
}
@@ -426,16 +423,15 @@ cn10k_dmadev_copy_sg(void *dev_private, uint16_t vchan, const struct rte_dma_sge
if (flags & RTE_DMA_OP_FLAG_SUBMIT) {
rte_wmb();
- plt_write64(dpi_conf->pnum_words + CNXK_DPI_CMD_LEN(nb_src, nb_dst),
+ plt_write64(dpivf->total_pnum_words + CNXK_DPI_CMD_LEN(nb_src, nb_dst),
dpivf->rdpi.rbase + DPI_VDMA_DBELL);
- dpi_conf->stats.submitted += dpi_conf->pending + 1;
- dpi_conf->pnum_words = 0;
- dpi_conf->pending = 0;
+ dpivf->total_pnum_words = 0;
} else {
- dpi_conf->pnum_words += CNXK_DPI_CMD_LEN(nb_src, nb_dst);
- dpi_conf->pending++;
+ dpivf->total_pnum_words += CNXK_DPI_CMD_LEN(nb_src, nb_dst);
}
+ dpi_conf->stats.submitted += 1;
+
return dpi_conf->desc_idx++;
}
@@ -495,15 +491,13 @@ cn10k_dma_adapter_enqueue(void *ws, struct rte_event ev[], uint16_t nb_events)
if (op->flags & RTE_DMA_OP_FLAG_SUBMIT) {
rte_wmb();
- plt_write64(dpi_conf->pnum_words + CNXK_DPI_CMD_LEN(nb_src, nb_dst),
+ plt_write64(dpivf->total_pnum_words + CNXK_DPI_CMD_LEN(nb_src, nb_dst),
dpivf->rdpi.rbase + DPI_VDMA_DBELL);
- dpi_conf->stats.submitted += dpi_conf->pending + 1;
- dpi_conf->pnum_words = 0;
- dpi_conf->pending = 0;
+ dpivf->total_pnum_words = 0;
} else {
- dpi_conf->pnum_words += CNXK_DPI_CMD_LEN(nb_src, nb_dst);
- dpi_conf->pending++;
+ dpivf->total_pnum_words += CNXK_DPI_CMD_LEN(nb_src, nb_dst);
}
+ dpi_conf->stats.submitted += 1;
rte_mcslock_unlock(&dpivf->mcs_lock, &mcs_lock_me);
}
@@ -567,15 +561,13 @@ cn9k_dma_adapter_dual_enqueue(void *ws, struct rte_event ev[], uint16_t nb_event
if (op->flags & RTE_DMA_OP_FLAG_SUBMIT) {
rte_wmb();
- plt_write64(dpi_conf->pnum_words + CNXK_DPI_CMD_LEN(nb_src, nb_dst),
+ plt_write64(dpivf->total_pnum_words + CNXK_DPI_CMD_LEN(nb_src, nb_dst),
dpivf->rdpi.rbase + DPI_VDMA_DBELL);
- dpi_conf->stats.submitted += dpi_conf->pending + 1;
- dpi_conf->pnum_words = 0;
- dpi_conf->pending = 0;
+ dpivf->total_pnum_words = 0;
} else {
- dpi_conf->pnum_words += CNXK_DPI_CMD_LEN(nb_src, nb_dst);
- dpi_conf->pending++;
+ dpivf->total_pnum_words += CNXK_DPI_CMD_LEN(nb_src, nb_dst);
}
+ dpi_conf->stats.submitted += 1;
rte_mcslock_unlock(&dpivf->mcs_lock, &mcs_lock_me);
}
@@ -636,15 +628,13 @@ cn9k_dma_adapter_enqueue(void *ws, struct rte_event ev[], uint16_t nb_events)
if (op->flags & RTE_DMA_OP_FLAG_SUBMIT) {
rte_wmb();
- plt_write64(dpi_conf->pnum_words + CNXK_DPI_CMD_LEN(nb_src, nb_dst),
+ plt_write64(dpivf->total_pnum_words + CNXK_DPI_CMD_LEN(nb_src, nb_dst),
dpivf->rdpi.rbase + DPI_VDMA_DBELL);
- dpi_conf->stats.submitted += dpi_conf->pending + 1;
- dpi_conf->pnum_words = 0;
- dpi_conf->pending = 0;
+ dpivf->total_pnum_words = 0;
} else {
- dpi_conf->pnum_words += CNXK_DPI_CMD_LEN(nb_src, nb_dst);
- dpi_conf->pending++;
+ dpivf->total_pnum_words += CNXK_DPI_CMD_LEN(nb_src, nb_dst);
}
+ dpi_conf->stats.submitted += 1;
rte_mcslock_unlock(&dpivf->mcs_lock, &mcs_lock_me);
}