[dpdk-dev] [PATCH v2 3/9] bus/fslmc: keep Tx queues information for DPCI devices too
Shreyansh Jain
shreyansh.jain at nxp.com
Wed Apr 25 05:53:59 CEST 2018
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 at monjalon.net; Hemant Agrawal <hemant.agrawal at nxp.com>;
> Shreyansh Jain <shreyansh.jain at nxp.com>
> Cc: dev at dpdk.org; Nipun Gupta <nipun.gupta at nxp.com>
> Subject: [PATCH v2 3/9] bus/fslmc: keep Tx queues information for DPCI
> devices too
>
> 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.
>
> Signed-off-by: Nipun Gupta <nipun.gupta at nxp.com>
> ---
> 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(-)
>
> 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;
>
> /* Allocate DPAA2 dpci handle */
> @@ -67,17 +68,38 @@
> return -1;
> }
>
> - /* Set up the Rx Queue */
> - memset(&rx_queue_cfg, 0, sizeof(struct dpci_rx_queue_cfg));
> - ret = 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 = 0; i < DPAA2_DPCI_MAX_QUEUES; i++) {
> + struct dpaa2_queue *rxq;
> +
> + memset(&rx_queue_cfg, 0, sizeof(struct dpci_rx_queue_cfg));
> + ret = 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 = &(dpci_node->rx_queue[i]);
> + rxq->q_storage = 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;
> + }
> }
>
> /* Enable the device */
> @@ -101,8 +123,19 @@
> rte_free(dpci_node);
> return -1;
> }
> + dpci_node->rx_queue[i].fqid = rx_attr.fqid;
>
> - dpci_node->queue[i].fqid = rx_attr.fqid;
> + ret = dpci_get_tx_queue(&dpci_node->dpci,
> + CMD_PRI_LOW,
> + dpci_node->token, i,
> + &tx_attr);
> + if (ret != 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 = tx_attr.fqid;
> }
>
> dpci_node->dpci_id = dpci_id;
[...]
More information about the dev
mailing list