On Mon, 14 Oct 2024 15:06:32 +0530
Gagandeep Singh <g.si...@nxp.com> wrote:

> @@ -551,7 +485,7 @@ fsl_qdma_reg_init(struct fsl_qdma_engine *fsl_qdma)
>  
>               /* Initialize the status queue mode. */
>               reg = FSL_QDMA_BSQMR_EN;
> -             val = ilog2(fsl_qdma->status[j]->n_cq) - 6;
> +             val = ilog2_qsize(temp_stat->n_cq);
>               reg |= FSL_QDMA_BSQMR_CQ_SIZE(val);
>               qdma_writel(reg, block + FSL_QDMA_BSQMR);
>       }
> @@ -563,158 +497,389 @@ fsl_qdma_reg_init(struct fsl_qdma_engine *fsl_qdma)
>       return 0;
>  }
>  
> -static void *
> -fsl_qdma_prep_memcpy(void *fsl_chan, dma_addr_t dst,
> -                        dma_addr_t src, size_t len,
> -                        void *call_back,
> -                        void *param)
> +static uint16_t
> +dpaa_qdma_block_dequeue(struct fsl_qdma_engine *fsl_qdma,
> +     uint8_t block_id)
>  {
> -     struct fsl_qdma_comp *fsl_comp;
> +     struct fsl_qdma_status_queue *stat_queue;
> +     struct fsl_qdma_queue *cmd_queue;
> +     struct fsl_qdma_comp_cmd_desc *cq;
> +     uint16_t start, count = 0;
> +     uint8_t qid = 0;
> +     uint32_t reg;
> +     int ret;
> +     uint8_t *block;
> +     uint16_t *dq_complete;
> +     struct fsl_qdma_desc *desc[FSL_QDMA_SG_MAX_ENTRY];
>  
> -     fsl_comp =
> -     fsl_qdma_request_enqueue_desc((struct fsl_qdma_chan *)fsl_chan);
> -     if (!fsl_comp)
> -             return NULL;
> +     stat_queue = &fsl_qdma->stat_queues[block_id];
> +     cq = stat_queue->cq;
> +     start = stat_queue->complete;
> +
> +     block = fsl_qdma->block_base +
> +             FSL_QDMA_BLOCK_BASE_OFFSET(fsl_qdma, block_id);
>  
> -     fsl_comp->qchan = fsl_chan;
> -     fsl_comp->call_back_func = call_back;
> -     fsl_comp->params = param;
> +     do {
> +             reg = qdma_readl_be(block + FSL_QDMA_BSQSR);
> +             if (reg & FSL_QDMA_BSQSR_QE_BE)
> +                     break;
>  
> -     fsl_qdma_comp_fill_memcpy(fsl_comp, dst, src, len);
> -     return (void *)fsl_comp;
> +             qdma_writel_be(FSL_QDMA_BSQMR_DI, block + FSL_QDMA_BSQMR);
> +             ret = qdma_ccdf_get_queue(&cq[start], &qid);
> +             if (ret == true) {
> +                     cmd_queue = &fsl_qdma->cmd_queues[block_id][qid];
> +
> +                     ret = rte_ring_dequeue(cmd_queue->complete_burst,
> +                             (void **)&dq_complete);
> +                     if (ret)
> +                             rte_panic("DQ desc number failed!\n");

Please don't panic here, either recover, log an error or take the device
offline. Killing the whole application is not acceptable.

Reply via email to