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

取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 

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

1,250 次查看
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?

标记 (5)
0 项奖励
回复
3 回复数

1,155 次查看
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 项奖励
回复

1,155 次查看
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 项奖励
回复

1,155 次查看
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 项奖励
回复