bus/fslmc: fix random portal hangs with qbman 5.0
authorYouri Querry <youri.querry_1@nxp.com>
Wed, 24 Feb 2021 12:42:49 +0000 (18:12 +0530)
committerFerruh Yigit <ferruh.yigit@intel.com>
Wed, 24 Feb 2021 17:03:30 +0000 (18:03 +0100)
Random portal hangs observed on device with QBMAN 5.0

This fixes few random packet hang issues in event mode.
Few things fixed it.
1. Generally, pi == ci, no need for extra checks.
2. The proper initializations in init with ci

Fixes: 1b49352f41be ("bus/fslmc: rename portal pi index to consumer index")
Cc: stable@dpdk.org
Signed-off-by: Youri Querry <youri.querry_1@nxp.com>
Acked-by: Hemant Agrawal <hemant.agrawal@nxp.com>
drivers/bus/fslmc/qbman/qbman_portal.c

index 77c9d50..aedcad9 100644 (file)
@@ -339,17 +339,9 @@ struct qbman_swp *qbman_swp_init(const struct qbman_swp_desc *d)
        eqcr_pi = qbman_cinh_read(&p->sys, QBMAN_CINH_SWP_EQCR_PI);
        p->eqcr.pi = eqcr_pi & p->eqcr.pi_ci_mask;
        p->eqcr.pi_vb = eqcr_pi & QB_VALID_BIT;
-       if ((p->desc.qman_version & QMAN_REV_MASK) >= QMAN_REV_5000
-                       && (d->cena_access_mode == qman_cena_fastest_access))
-               p->eqcr.ci = qbman_cinh_read(&p->sys, QBMAN_CINH_SWP_EQCR_PI)
-                                            & p->eqcr.pi_ci_mask;
-       else
-               p->eqcr.ci = qbman_cinh_read(&p->sys, QBMAN_CINH_SWP_EQCR_CI)
-                                            & p->eqcr.pi_ci_mask;
-       p->eqcr.available = p->eqcr.pi_ring_size -
-                               qm_cyc_diff(p->eqcr.pi_ring_size,
-                               p->eqcr.ci & (p->eqcr.pi_ci_mask<<1),
-                               p->eqcr.pi & (p->eqcr.pi_ci_mask<<1));
+       p->eqcr.ci = qbman_cinh_read(&p->sys, QBMAN_CINH_SWP_EQCR_CI)
+                       & p->eqcr.pi_ci_mask;
+       p->eqcr.available = p->eqcr.pi_ring_size;
 
        portal_idx_map[p->desc.idx] = p;
        return p;