dpaa2_io_service_enqueue_fq() always triggers an error interrupt with RERR_ISR[IESI] bit is set

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

dpaa2_io_service_enqueue_fq() always triggers an error interrupt with RERR_ISR[IESI] bit is set

980 Views
minghu_du
Contributor III
int dpaa2_io_service_enqueue_fq(struct dpaa2_io *d,u32 fqid,const struct dpaa2_fd *fd) 
{  
    struct qbman_eq_desc ed;   
    d = service_select(d);  
    if (!d)   
        return -ENODEV;  
    qbman_eq_desc_clear(&ed);  
    qbman_eq_desc_set_no_orp(&ed, 0); 
    qbman_eq_desc_set_fq(&ed, fqid);   
    return qbman_swp_enqueue(d->swp, &ed, fd); 
}

Using this API always triggers an error interrupt with RERR_ISR[IESI] bit is set. Is it because NO-ORP is set?

0 Kudos
3 Replies

885 Views
yipingwang
NXP TechSupport
NXP TechSupport

The dpio service component provides queuing, notification and buffers management services to DPAA2 drivers. A system will typically allocate 1 DPIO object per CPU to allow queuing operations to happen simultaneously across all CPUs.

Please refer to API dpaa2_io_service_enqueue_fq usage in function dpaa2_caam_enqueue in Linux Kernel source.

int dpaa2_caam_enqueue(struct device *dev, struct caam_request *req)
{
struct dpaa2_fd fd;
struct dpaa2_caam_priv *priv = dev_get_drvdata(dev);
struct dpaa2_caam_priv_per_cpu *ppriv;

......

memset(&fd, 0, sizeof(fd));
dpaa2_fd_set_format(&fd, dpaa2_fd_list);
dpaa2_fd_set_addr(&fd, req->fd_flt_dma);
dpaa2_fd_set_len(&fd, dpaa2_fl_get_len(&req->fd_flt[1]));
dpaa2_fd_set_flc(&fd, req->flc_dma);

ppriv = this_cpu_ptr(priv->ppriv);
for (i = 0; i < (priv->dpseci_attr.num_tx_queues << 1); i++) {
err = dpaa2_io_service_enqueue_fq(ppriv->dpio, ppriv->req_fqid,
&fd);
if (err != -EBUSY)
break;

cpu_relax();
}

Thanks,

Yiping

0 Kudos

885 Views
minghu_du
Contributor III

Thanks for your reply.

My case is to copy memory to memory through QDMA.

The data can be copied to destination address from source, but with this RERR_ISR[IESI] interrupt triggered. I don't know why it's an error interrupt.

0 Kudos

885 Views
yipingwang
NXP TechSupport
NXP TechSupport

The error is IESI means that either the FQ or the ORP was not initialized when the enqueue was attempted.

0 Kudos