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,909件の閲覧回数
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,814件の閲覧回数
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,814件の閲覧回数
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,814件の閲覧回数
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 件の賞賛
返信