From mboxrd@z Thu Jan 1 00:00:00 1970 From: Shreyansh Jain Subject: Re: [PATCH v2 3/9] bus/fslmc: keep Tx queues information for DPCI devices too Date: Wed, 25 Apr 2018 03:53:59 +0000 Message-ID: References: <1519292089-13851-1-git-send-email-nipun.gupta@nxp.com> <1523111645-8076-1-git-send-email-nipun.gupta@nxp.com> <1523111645-8076-4-git-send-email-nipun.gupta@nxp.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Cc: "dev@dpdk.org" , "thomas@monjalon.net" , Hemant Agrawal To: Nipun Gupta Return-path: Received: from EUR01-DB5-obe.outbound.protection.outlook.com (mail-db5eur01on0069.outbound.protection.outlook.com [104.47.2.69]) by dpdk.org (Postfix) with ESMTP id 813162C17 for ; Wed, 25 Apr 2018 05:54:21 +0200 (CEST) In-Reply-To: <1523111645-8076-4-git-send-email-nipun.gupta@nxp.com> Content-Language: en-US List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Hi Nipun, Apologies for delay in review. 2 quick comments inline. > -----Original Message----- > From: Nipun Gupta > Sent: Saturday, April 7, 2018 8:04 PM > To: thomas@monjalon.net; Hemant Agrawal ; > Shreyansh Jain > Cc: dev@dpdk.org; Nipun Gupta > Subject: [PATCH v2 3/9] bus/fslmc: keep Tx queues information for DPCI > devices too >=20 > The DPCI devices have oth Tx and Rx queues. Event devices use > DPCI Rx queues only, but CMDIF (AIOP) uses both Tx and Rx queues. > This patch enables Tx queues configuration too. >=20 > Signed-off-by: Nipun Gupta > --- > drivers/bus/fslmc/portal/dpaa2_hw_dpci.c | 57 > +++++++++++++++++++++++++------- > drivers/bus/fslmc/portal/dpaa2_hw_pvt.h | 3 +- > drivers/event/dpaa2/dpaa2_eventdev.c | 10 +++--- > 3 files changed, 52 insertions(+), 18 deletions(-) >=20 > diff --git a/drivers/bus/fslmc/portal/dpaa2_hw_dpci.c > b/drivers/bus/fslmc/portal/dpaa2_hw_dpci.c > index aee870a..3bf7e7f 100644 > --- a/drivers/bus/fslmc/portal/dpaa2_hw_dpci.c > +++ b/drivers/bus/fslmc/portal/dpaa2_hw_dpci.c > @@ -39,6 +39,7 @@ > struct dpci_attr attr; > struct dpci_rx_queue_cfg rx_queue_cfg; > struct dpci_rx_queue_attr rx_attr; > + struct dpci_tx_queue_attr tx_attr; > int ret, i; >=20 > /* Allocate DPAA2 dpci handle */ > @@ -67,17 +68,38 @@ > return -1; > } >=20 > - /* Set up the Rx Queue */ > - memset(&rx_queue_cfg, 0, sizeof(struct dpci_rx_queue_cfg)); > - ret =3D dpci_set_rx_queue(&dpci_node->dpci, > - CMD_PRI_LOW, > - dpci_node->token, > - 0, &rx_queue_cfg); > - if (ret) { > - DPAA2_BUS_ERR("Setting Rx queue failed with err code: %d", > - ret); > - rte_free(dpci_node); > - return -1; > + for (i =3D 0; i < DPAA2_DPCI_MAX_QUEUES; i++) { > + struct dpaa2_queue *rxq; > + > + memset(&rx_queue_cfg, 0, sizeof(struct dpci_rx_queue_cfg)); > + ret =3D dpci_set_rx_queue(&dpci_node->dpci, > + CMD_PRI_LOW, > + dpci_node->token, > + i, &rx_queue_cfg); > + if (ret) { > + DPAA2_BUS_ERR("Setting Rx queue failed with err code: > %d", > + ret); > + rte_free(dpci_node); > + return -1; > + } > + > + /* Allocate DQ storage for the DPCI Rx queues */ > + rxq =3D &(dpci_node->rx_queue[i]); > + rxq->q_storage =3D rte_malloc("dq_storage", > + sizeof(struct queue_storage_info_t), > + RTE_CACHE_LINE_SIZE); > + if (!rxq->q_storage) { > + DPAA2_BUS_ERR("q_storage allocation failed\n"); > + rte_free(dpci_node); > + return -ENOMEM; > + } > + > + memset(rxq->q_storage, 0, sizeof(struct > queue_storage_info_t)); > + if (dpaa2_alloc_dq_storage(rxq->q_storage)) { > + DPAA2_BUS_ERR("dpaa2_alloc_dq_storage failed\n"); > + rte_free(dpci_node); If the q_storage->dq_storage allocation has failed, q_storage too needs to = be free'd. > + return -ENOMEM; > + } > } >=20 > /* Enable the device */ > @@ -101,8 +123,19 @@ > rte_free(dpci_node); > return -1; > } > + dpci_node->rx_queue[i].fqid =3D rx_attr.fqid; >=20 > - dpci_node->queue[i].fqid =3D rx_attr.fqid; > + ret =3D dpci_get_tx_queue(&dpci_node->dpci, > + CMD_PRI_LOW, > + dpci_node->token, i, > + &tx_attr); > + if (ret !=3D 0) { > + DPAA2_BUS_ERR("Reading device failed with err code:" > + " %d",ret); > + rte_free(dpci_node); Maybe in this case as well where both, q_storage and dq_storage, need to be= released. > + return -1; > + } > + dpci_node->tx_queue[i].fqid =3D tx_attr.fqid; > } >=20 > dpci_node->dpci_id =3D dpci_id; [...]