From: Prashant Gupta <prashant.gupta_3@nxp.com>
To: stephen@networkplumber.org, dev@dpdk.org
Cc: Jun Yang <jun.yang@nxp.com>
Subject: [PATCH 29/45] drivers: assign dpaa2 Rx CGID per traffic class
Date: Thu, 3 Sep 2026 19:23:37 +0530 [thread overview]
Message-ID: <20260903135353.3358303-30-prashant.gupta_3@nxp.com> (raw)
In-Reply-To: <20260903135353.3358303-1-prashant.gupta_3@nxp.com>
From: Jun Yang <jun.yang@nxp.com>
RXQs in same TC should use same CGID for congestion set.
Signed-off-by: Jun Yang <jun.yang@nxp.com>
---
drivers/bus/fslmc/portal/dpaa2_hw_pvt.h | 3 +-
drivers/net/dpaa2/dpaa2_ethdev.c | 252 ++++++++++++------------
drivers/net/dpaa2/dpaa2_ethdev.h | 3 +-
3 files changed, 126 insertions(+), 132 deletions(-)
diff --git a/drivers/bus/fslmc/portal/dpaa2_hw_pvt.h b/drivers/bus/fslmc/portal/dpaa2_hw_pvt.h
index f0bc9a3063..12216750a8 100644
--- a/drivers/bus/fslmc/portal/dpaa2_hw_pvt.h
+++ b/drivers/bus/fslmc/portal/dpaa2_hw_pvt.h
@@ -176,7 +176,6 @@ struct __rte_cache_aligned dpaa2_queue {
uint32_t fqid; /*!< Unique ID of this queue */
uint16_t flow_id; /*!< To be used by DPAA2 framework */
uint8_t tc_index; /*!< traffic class identifier */
- uint8_t cgid; /*! < Congestion Group id for this queue */
uint64_t rx_pkts;
uint64_t tx_pkts;
uint64_t err_pkts;
@@ -186,6 +185,8 @@ struct __rte_cache_aligned dpaa2_queue {
/**Egress*/
struct qbman_result *cscn;
};
+ void *cfg;
+ uint8_t options;
struct rte_event ev;
dpaa2_queue_cb_dqrr_t *cb;
dpaa2_queue_cb_eqresp_free_t *cb_eqresp_free;
diff --git a/drivers/net/dpaa2/dpaa2_ethdev.c b/drivers/net/dpaa2/dpaa2_ethdev.c
index fb1d01e209..0835296ee2 100644
--- a/drivers/net/dpaa2/dpaa2_ethdev.c
+++ b/drivers/net/dpaa2/dpaa2_ethdev.c
@@ -1,6 +1,6 @@
/* SPDX-License-Identifier: BSD-3-Clause
* Copyright (c) 2016 Freescale Semiconductor, Inc. All rights reserved.
- * Copyright 2016-2025 NXP
+ * Copyright 2016-2026 NXP
*/
#include <time.h>
@@ -682,6 +682,9 @@ dpaa2_free_rx_tx_queues(struct rte_eth_dev *dev)
RTE_MAX_LCORE);
dpaa2_queue_storage_free(dpaa2_q,
RTE_MAX_LCORE);
+ if (dpaa2_q->cfg)
+ rte_free(dpaa2_q->cfg);
+ dpaa2_q->cfg = NULL;
priv->rx_vq[i] = NULL;
}
/* cleanup tx queue cscn */
@@ -934,11 +937,12 @@ dpaa2_dev_rx_queue_setup(struct rte_eth_dev *dev,
struct fsl_mc_io *dpni = dev->process_private;
bool dpcon_allocated = false;
struct dpaa2_queue *dpaa2_q;
- struct dpni_queue cfg;
- uint8_t options = 0;
- uint8_t flow_id;
+ struct dpni_queue *cfg;
+ struct dpni_taildrop taildrop;
+ uint8_t qopt = 0;
+ uint16_t flow_id;
uint32_t bpid;
- int i, ret;
+ int ret;
PMD_INIT_FUNC_TRACE();
@@ -975,6 +979,10 @@ dpaa2_dev_rx_queue_setup(struct rte_eth_dev *dev,
dev->data->rx_queues[rx_queue_id] = dpaa2_q;
return 0;
}
+ cfg = rte_zmalloc(NULL, sizeof(struct dpni_queue), 0);
+ if (!cfg)
+ return -ENOMEM;
+ dpaa2_q->cfg = cfg;
dpaa2_q->mb_pool = mb_pool; /**< mbuf pool to populate RX ring. */
dpaa2_q->bp_array = rte_dpaa2_bpid_info;
dpaa2_q->offloads = rx_conf->offloads;
@@ -1004,124 +1012,100 @@ dpaa2_dev_rx_queue_setup(struct rte_eth_dev *dev,
/*Get the flow id from given VQ id*/
flow_id = dpaa2_q->flow_id;
- memset(&cfg, 0, sizeof(struct dpni_queue));
+ memset(cfg, 0, sizeof(struct dpni_queue));
- options = options | DPNI_QUEUE_OPT_USER_CTX;
- cfg.user_context = (size_t)(dpaa2_q);
+ qopt |= DPNI_QUEUE_OPT_USER_CTX;
+ cfg->user_context = (size_t)(dpaa2_q);
/* napi: schedule the FQ to its DPCON once, when the channel is first
* grabbed; never re-bound (the MC refuses scheduled->parked at runtime)
*/
if (dpcon_allocated) {
- options |= DPNI_QUEUE_OPT_DEST;
- cfg.destination.type = DPNI_DEST_DPCON;
- cfg.destination.id = dpaa2_q->napi_dpcon->dpcon_id;
- }
-
- /* check if a private cgr available. */
- for (i = 0; i < priv->max_cgs; i++) {
- if (!priv->cgid_in_use[i]) {
- priv->cgid_in_use[i] = 1;
- break;
- }
+ qopt |= DPNI_QUEUE_OPT_DEST;
+ cfg->destination.type = DPNI_DEST_DPCON;
+ cfg->destination.id = dpaa2_q->napi_dpcon->dpcon_id;
}
- if (i < priv->max_cgs) {
- options |= DPNI_QUEUE_OPT_SET_CGID;
- cfg.cgid = i;
- dpaa2_q->cgid = cfg.cgid;
+ /** RXQs in same TC share same cgid.*/
+ if (dpaa2_q->tc_index < priv->max_cgs) {
+ qopt |= DPNI_QUEUE_OPT_SET_CGID;
+ cfg->cgid = dpaa2_q->tc_index;
+ priv->cgid_in_use[dpaa2_q->tc_index]++;
} else {
- dpaa2_q->cgid = DPAA2_INVALID_CGID;
+ cfg->cgid = DPAA2_INVALID_CGID;
}
/*if ls2088 or rev2 device, enable the stashing */
if ((dpaa2_svr_family & 0xffff0000) != SVR_LS2080A) {
- options |= DPNI_QUEUE_OPT_FLC;
- cfg.flc.stash_control = true;
- dpaa2_flc_stashing_clear_all(&cfg.flc.value);
+ qopt |= DPNI_QUEUE_OPT_FLC;
+ cfg->flc.stash_control = true;
+ dpaa2_flc_stashing_clear_all(&cfg->flc.value);
if (priv->flags & DPAA2_DATA_STASHING_OFF) {
dpaa2_flc_stashing_set(DPAA2_FLC_DATA_STASHING, 0,
- &cfg.flc.value);
+ &cfg->flc.value);
dpaa2_q->data_stashing_off = 1;
} else {
dpaa2_flc_stashing_set(DPAA2_FLC_DATA_STASHING, 1,
- &cfg.flc.value);
+ &cfg->flc.value);
dpaa2_q->data_stashing_off = 0;
}
if ((dpaa2_svr_family & 0xffff0000) != SVR_LX2160A) {
dpaa2_flc_stashing_set(DPAA2_FLC_ANNO_STASHING, 1,
- &cfg.flc.value);
+ &cfg->flc.value);
}
}
+
ret = dpni_set_queue(dpni, CMD_PRI_LOW, priv->token, DPNI_QUEUE_RX,
- dpaa2_q->tc_index, flow_id, options, &cfg);
+ dpaa2_q->tc_index, flow_id, qopt, cfg);
if (ret) {
+ rte_free(dpaa2_q->cfg);
+ dpaa2_q->cfg = NULL;
DPAA2_PMD_ERR("Error in setting the rx flow: = %d", ret);
goto err_free_dpcon;
}
dpaa2_q->nb_desc = nb_rx_desc;
-
- if (!(priv->flags & DPAA2_RX_TAILDROP_OFF)) {
- struct dpni_taildrop taildrop;
-
+ memset(&taildrop, 0, sizeof(struct dpni_taildrop));
+ if (!(priv->flags & DPAA2_RX_TAILDROP_OFF))
taildrop.enable = 1;
- /* Private CGR will use tail drop length as nb_rx_desc.
- * for rest cases we can use standard byte based tail drop.
- * There is no HW restriction, but number of CGRs are limited,
- * hence this restriction is placed.
- */
- if (dpaa2_q->cgid != DPAA2_INVALID_CGID) {
- /*enabling per rx queue congestion control */
- taildrop.threshold = nb_rx_desc;
- taildrop.units = DPNI_CONGESTION_UNIT_FRAMES;
- taildrop.oal = 0;
- DPAA2_PMD_DEBUG("Enabling CG Tail Drop on queue = %d",
- rx_queue_id);
- ret = dpni_set_taildrop(dpni, CMD_PRI_LOW, priv->token,
- DPNI_CP_CONGESTION_GROUP,
- DPNI_QUEUE_RX,
- dpaa2_q->tc_index,
- dpaa2_q->cgid, &taildrop);
- } else {
- /*enabling per rx queue congestion control */
- taildrop.threshold = CONG_THRESHOLD_RX_BYTES_Q;
- taildrop.units = DPNI_CONGESTION_UNIT_BYTES;
- taildrop.oal = CONG_RX_OAL;
- DPAA2_PMD_DEBUG("Enabling Byte based Drop on queue= %d",
- rx_queue_id);
- ret = dpni_set_taildrop(dpni, CMD_PRI_LOW, priv->token,
- DPNI_CP_QUEUE, DPNI_QUEUE_RX,
- dpaa2_q->tc_index, flow_id,
- &taildrop);
- }
- if (ret) {
- DPAA2_PMD_ERR("Error in setting taildrop. err=(%d)",
- ret);
- goto err_free_dpcon;
- }
- } else { /* Disable tail Drop */
- struct dpni_taildrop taildrop = {0};
- DPAA2_PMD_INFO("Tail drop is disabled on queue");
-
- taildrop.enable = 0;
- if (dpaa2_q->cgid != DPAA2_INVALID_CGID) {
- ret = dpni_set_taildrop(dpni, CMD_PRI_LOW, priv->token,
- DPNI_CP_CONGESTION_GROUP, DPNI_QUEUE_RX,
- dpaa2_q->tc_index,
- dpaa2_q->cgid, &taildrop);
- } else {
- ret = dpni_set_taildrop(dpni, CMD_PRI_LOW, priv->token,
- DPNI_CP_QUEUE, DPNI_QUEUE_RX,
- dpaa2_q->tc_index, flow_id, &taildrop);
- }
- if (ret) {
- DPAA2_PMD_ERR("Error in setting taildrop. err=(%d)",
- ret);
- goto err_free_dpcon;
- }
+ /* Private CGR will use tail drop length as nb_rx_desc * queues per TC.
+ * For rest cases we can use standard byte based tail drop.
+ * There is no HW restriction, but number of CGRs are limited,
+ * hence this restriction is placed.
+ */
+ if (cfg->cgid != DPAA2_INVALID_CGID &&
+ priv->cgid_in_use[dpaa2_q->tc_index] == 1) {
+ /*enabling per TC congestion control */
+ taildrop.threshold = nb_rx_desc * priv->dist_queues;
+ taildrop.units = DPNI_CONGESTION_UNIT_FRAMES;
+ taildrop.oal = 0;
+ DPAA2_PMD_DEBUG("%s CG Tail Drop on TC%d",
+ taildrop.enable ? "Enabling" : "Disabling",
+ dpaa2_q->tc_index);
+ ret = dpni_set_taildrop(dpni, CMD_PRI_LOW, priv->token,
+ DPNI_CP_CONGESTION_GROUP, DPNI_QUEUE_RX,
+ dpaa2_q->tc_index, cfg->cgid, &taildrop);
+ } else if (cfg->cgid == DPAA2_INVALID_CGID) {
+ /*enabling per rx queue congestion control */
+ taildrop.threshold = CONG_THRESHOLD_RX_BYTES_Q;
+ taildrop.units = DPNI_CONGESTION_UNIT_BYTES;
+ taildrop.oal = CONG_RX_OAL;
+ DPAA2_PMD_DEBUG("%s Byte based Drop on TC[%d].flow%d",
+ taildrop.enable ? "Enabling" : "Disabling",
+ dpaa2_q->tc_index, flow_id);
+ ret = dpni_set_taildrop(dpni, CMD_PRI_LOW, priv->token,
+ DPNI_CP_QUEUE, DPNI_QUEUE_RX,
+ dpaa2_q->tc_index, flow_id, &taildrop);
}
+ if (ret) {
+ rte_free(dpaa2_q->cfg);
+ dpaa2_q->cfg = NULL;
+ DPAA2_PMD_ERR("Error in setting taildrop. err=(%d)", ret);
+ return ret;
+ }
+
+ dpaa2_q->options = qopt;
dev->data->rx_queues[rx_queue_id] = dpaa2_q;
return 0;
@@ -1150,8 +1134,8 @@ dpaa2_dev_tx_queue_setup(struct rte_eth_dev *dev,
struct fsl_mc_io *dpni = dev->process_private;
struct dpni_queue tx_conf_cfg;
struct dpni_queue tx_flow_cfg;
- uint8_t options = 0, flow_id;
- uint16_t channel_id;
+ uint8_t qopt = 0;
+ uint16_t channel_id, flow_id;
struct dpni_queue_id qid;
uint32_t tc_id;
int ret;
@@ -1181,7 +1165,7 @@ dpaa2_dev_tx_queue_setup(struct rte_eth_dev *dev,
channel_id = priv->tx_channels[priv->num_channels - 1];
ret = dpni_set_queue(dpni, CMD_PRI_LOW, priv->token, DPNI_QUEUE_TX,
- DPNI_BUILD_PARAM(channel_id, tc_id), flow_id, options, &tx_flow_cfg);
+ DPNI_BUILD_PARAM(channel_id, tc_id), flow_id, qopt, &tx_flow_cfg);
if (ret) {
DPAA2_PMD_ERR("Failed(%d) to set %s's TC[%d].txq[%d]",
ret, dev->data->name, tc_id, flow_id);
@@ -1190,7 +1174,7 @@ dpaa2_dev_tx_queue_setup(struct rte_eth_dev *dev,
ret = dpni_get_queue(dpni, CMD_PRI_LOW, priv->token,
DPNI_QUEUE_TX, DPNI_BUILD_PARAM(channel_id, tc_id),
- flow_id, &tx_flow_cfg, &qid);
+ dpaa2_q->flow_id, &tx_flow_cfg, &qid);
if (ret) {
DPAA2_PMD_ERR("Error in getting LFQID err=%d", ret);
return ret;
@@ -1242,12 +1226,12 @@ dpaa2_dev_tx_queue_setup(struct rte_eth_dev *dev,
tc_id = dpaa2_tx_conf_q->tc_index;
flow_id = dpaa2_tx_conf_q->flow_id;
dpaa2_q->tx_conf_queue = dpaa2_tx_conf_q;
- options = options | DPNI_QUEUE_OPT_USER_CTX;
+ qopt |= DPNI_QUEUE_OPT_USER_CTX;
tx_conf_cfg.user_context = (size_t)(dpaa2_q);
ret = dpni_set_queue(dpni, CMD_PRI_LOW, priv->token,
DPNI_QUEUE_TX_CONFIRM,
DPNI_BUILD_PARAM(channel_id, tc_id),
- flow_id, options, &tx_conf_cfg);
+ flow_id, qopt, &tx_conf_cfg);
if (ret) {
DPAA2_PMD_ERR("Set TC[%d].TX[%d] conf flow err=%d",
tc_id, flow_id, ret);
@@ -1296,30 +1280,29 @@ dpaa2_dev_rx_queue_release(struct rte_eth_dev *dev, uint16_t rx_queue_id)
struct dpaa2_queue *dpaa2_q = dev->data->rx_queues[rx_queue_id];
struct dpaa2_dev_priv *priv = dpaa2_q->eth_data->dev_private;
struct fsl_mc_io *dpni = priv->eth_dev->process_private;
- uint8_t options = 0;
+ uint8_t qopt = 0;
int ret;
- struct dpni_queue cfg;
+ struct dpni_queue *cfg = dpaa2_q->cfg;
- memset(&cfg, 0, sizeof(struct dpni_queue));
PMD_INIT_FUNC_TRACE();
total_nb_rx_desc -= dpaa2_q->nb_desc;
- if (dpaa2_q->cgid != DPAA2_INVALID_CGID) {
- options = DPNI_QUEUE_OPT_CLEAR_CGID;
- cfg.cgid = dpaa2_q->cgid;
-
- ret = dpni_set_queue(dpni, CMD_PRI_LOW, priv->token,
- DPNI_QUEUE_RX,
- dpaa2_q->tc_index, dpaa2_q->flow_id,
- options, &cfg);
- if (ret)
- DPAA2_PMD_ERR("Unable to clear CGR from q=%u err=%d",
- dpaa2_q->fqid, ret);
- priv->cgid_in_use[dpaa2_q->cgid] = 0;
- dpaa2_q->cgid = DPAA2_INVALID_CGID;
+ if (cfg) {
+ if (cfg->cgid != DPAA2_INVALID_CGID) {
+ qopt = DPNI_QUEUE_OPT_CLEAR_CGID;
+ ret = dpni_set_queue(dpni, CMD_PRI_LOW, priv->token,
+ DPNI_QUEUE_RX, dpaa2_q->tc_index, dpaa2_q->flow_id,
+ qopt, cfg);
+ if (ret) {
+ DPAA2_PMD_ERR("Unable to clear CGR from TC[%d].flow%d err=%d",
+ dpaa2_q->tc_index, dpaa2_q->flow_id, ret);
+ }
+ priv->cgid_in_use[cfg->cgid]--;
+ }
+ rte_free(cfg);
+ dpaa2_q->cfg = NULL;
}
-
/* keep the DPCON on the FQ across a reconfigure; freed at dev_close */
if (dpaa2_q->napi_dpcon)
dpaa2_dev_rx_queue_intr_unbind(dpaa2_q);
@@ -2833,10 +2816,12 @@ int dpaa2_eth_eventq_attach(const struct rte_eth_dev *dev,
struct fsl_mc_io *dpni = (struct fsl_mc_io *)dev->process_private;
struct dpaa2_queue *dpaa2_ethq = eth_priv->rx_vq[eth_rx_queue_id];
uint8_t flow_id = dpaa2_ethq->flow_id;
- struct dpni_queue cfg;
+ struct dpni_queue *cfg;
uint8_t options, priority;
int ret;
+ cfg = dpaa2_ethq->cfg;
+
if (queue_conf->ev.sched_type == RTE_SCHED_TYPE_PARALLEL)
dpaa2_ethq->cb = dpaa2_dev_process_parallel_event;
else if (queue_conf->ev.sched_type == RTE_SCHED_TYPE_ATOMIC)
@@ -2849,15 +2834,19 @@ int dpaa2_eth_eventq_attach(const struct rte_eth_dev *dev,
priority = (RTE_EVENT_DEV_PRIORITY_LOWEST / queue_conf->ev.priority) *
(dpcon->num_priorities - 1);
- memset(&cfg, 0, sizeof(struct dpni_queue));
+ if (!cfg) {
+ DPAA2_PMD_ERR("%s: %s-rxq%d was not setup yet!",
+ __func__, dev->data->name, eth_rx_queue_id);
+ return -EINVAL;
+ }
options = DPNI_QUEUE_OPT_DEST;
- cfg.destination.type = DPNI_DEST_DPCON;
- cfg.destination.id = dpcon->dpcon_id;
- cfg.destination.priority = priority;
+ cfg->destination.type = DPNI_DEST_DPCON;
+ cfg->destination.id = dpcon->dpcon_id;
+ cfg->destination.priority = priority;
if (queue_conf->ev.sched_type == RTE_SCHED_TYPE_ATOMIC) {
options |= DPNI_QUEUE_OPT_HOLD_ACTIVE;
- cfg.destination.hold_active = 1;
+ cfg->destination.hold_active = 1;
}
if (queue_conf->ev.sched_type == RTE_SCHED_TYPE_ORDERED &&
@@ -2896,16 +2885,16 @@ int dpaa2_eth_eventq_attach(const struct rte_eth_dev *dev,
}
options |= DPNI_QUEUE_OPT_USER_CTX;
- cfg.user_context = (size_t)(dpaa2_ethq);
+ cfg->user_context = (size_t)(dpaa2_ethq);
ret = dpni_set_queue(dpni, CMD_PRI_LOW, eth_priv->token, DPNI_QUEUE_RX,
- dpaa2_ethq->tc_index, flow_id, options, &cfg);
+ dpaa2_ethq->tc_index, flow_id, options, cfg);
if (ret) {
DPAA2_PMD_ERR("Error in dpni_set_queue: ret: %d", ret);
return ret;
}
- memcpy(&dpaa2_ethq->ev, &queue_conf->ev, sizeof(struct rte_event));
+ rte_memcpy(&dpaa2_ethq->ev, &queue_conf->ev, sizeof(struct rte_event));
return 0;
}
@@ -2917,17 +2906,15 @@ int dpaa2_eth_eventq_detach(const struct rte_eth_dev *dev,
struct dpaa2_dev_priv *eth_priv = dev->data->dev_private;
struct fsl_mc_io *dpni = (struct fsl_mc_io *)dev->process_private;
struct dpaa2_queue *dpaa2_ethq = eth_priv->rx_vq[eth_rx_queue_id];
- uint8_t flow_id = dpaa2_ethq->flow_id;
- struct dpni_queue cfg;
- uint8_t options;
+ struct dpni_queue *cfg;
int ret;
- memset(&cfg, 0, sizeof(struct dpni_queue));
- options = DPNI_QUEUE_OPT_DEST;
- cfg.destination.type = DPNI_DEST_NONE;
+ cfg = dpaa2_ethq->cfg;
+ cfg->destination.type = DPNI_DEST_NONE;
+ dpaa2_ethq->options &= ~DPNI_QUEUE_OPT_DEST;
ret = dpni_set_queue(dpni, CMD_PRI_LOW, eth_priv->token, DPNI_QUEUE_RX,
- dpaa2_ethq->tc_index, flow_id, options, &cfg);
+ dpaa2_ethq->tc_index, dpaa2_ethq->flow_id, dpaa2_ethq->options, cfg);
if (ret)
DPAA2_PMD_ERR("Error in dpni_set_queue: ret: %d", ret);
@@ -3547,10 +3534,15 @@ dpaa2_dev_init(struct rte_eth_dev *eth_dev)
rte_spinlock_init(&priv->lpbk_qp_lock);
/* only if the custom CG is enabled */
- if (attr.options & DPNI_OPT_CUSTOM_CG)
+ if (attr.options & DPNI_OPT_CUSTOM_CG) {
priv->max_cgs = attr.num_cgs;
- else
+ if (priv->max_cgs < priv->num_rx_tc) {
+ DPAA2_PMD_WARN("DPNI%d has no enough cgids(%d) to set %d TCs",
+ hw_id, priv->max_cgs, priv->num_rx_tc);
+ }
+ } else {
priv->max_cgs = 0;
+ }
for (i = 0; i < priv->max_cgs; i++)
priv->cgid_in_use[i] = 0;
diff --git a/drivers/net/dpaa2/dpaa2_ethdev.h b/drivers/net/dpaa2/dpaa2_ethdev.h
index f1d1967cd1..3c611652b1 100644
--- a/drivers/net/dpaa2/dpaa2_ethdev.h
+++ b/drivers/net/dpaa2/dpaa2_ethdev.h
@@ -478,7 +478,8 @@ struct dpaa2_dev_priv {
uint8_t en_ordered;
uint8_t en_loose_ordered;
uint8_t max_cgs;
- uint8_t cgid_in_use[MAX_RX_QUEUES];
+ /** RXQs in same TC share same cgid.*/
+ uint8_t cgid_in_use[MAX_TCS];
rte_spinlock_t meter_lock;
/* Lowest priority FS flow id to receive flow steering miss frames. */
uint16_t default_flow;
--
2.43.0
next prev parent reply other threads:[~2026-09-03 13:57 UTC|newest]
Thread overview: 47+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-03 13:53 [PATCH 00/45] net/dpaa2: features and fixes for NXP DPAA2 drivers Prashant Gupta
2026-09-03 13:53 ` [PATCH 01/45] crypto/dpaa2_sec: fix buffer overflow in GCM decrypt Prashant Gupta
2026-09-03 13:53 ` [PATCH 02/45] crypto/dpaa2_sec: fix FLE pool leak on sec FD build failure Prashant Gupta
2026-09-03 13:53 ` [PATCH 03/45] crypto/dpaa2_sec: support AES-GMAC Prashant Gupta
2026-09-03 13:53 ` [PATCH 04/45] crypto/dpaa2_sec: increase ivsize range for AES-CTR Prashant Gupta
2026-09-03 13:53 ` [PATCH 05/45] crypto/dpaa2_sec: add missing ECN capability Prashant Gupta
2026-09-03 13:53 ` [PATCH 06/45] crypto/dpaa2_sec: add support for env variables Prashant Gupta
2026-09-03 13:53 ` [PATCH 07/45] drivers: fix double free of dpaa2 device on uninit Prashant Gupta
2026-09-03 14:05 ` David Marchand
2026-09-03 13:53 ` [PATCH 08/45] net/dpaa2: fix integer overflow in CCSR region mapping Prashant Gupta
2026-09-03 13:53 ` [PATCH 09/45] dma/dpaa2: fix array-bounds warning in dequeue path Prashant Gupta
2026-09-03 13:53 ` [PATCH 10/45] bus/fslmc: defer bus initialization to probe Prashant Gupta
2026-09-03 13:53 ` [PATCH 11/45] dma/dpaa2: validate IOVA in pre-populate helpers Prashant Gupta
2026-09-03 13:53 ` [PATCH 12/45] dma/dpaa2: optimize context index ring enqueue Prashant Gupta
2026-09-03 13:53 ` [PATCH 13/45] drivers: add dpaa2 DMA bypass memory translation option Prashant Gupta
2026-09-03 13:53 ` [PATCH 14/45] mempool/dpaa2: support ops index from primary in secondary Prashant Gupta
2026-09-03 13:53 ` [PATCH 15/45] net/dpaa2: set Tx confirmation on device init Prashant Gupta
2026-09-03 13:53 ` [PATCH 16/45] drivers: optimize dpaa2 Tx queue and channel mapping Prashant Gupta
2026-09-03 13:53 ` [PATCH 17/45] net/dpaa2: support larger burst size Prashant Gupta
2026-09-03 13:53 ` [PATCH 18/45] net/dpaa2: support MPLS and PPPoE flow distribution Prashant Gupta
2026-09-03 13:53 ` [PATCH 19/45] net/dpaa2: support meter and policing Prashant Gupta
2026-09-03 13:53 ` [PATCH 20/45] net/dpaa2: support flow drop action Prashant Gupta
2026-09-03 13:53 ` [PATCH 21/45] net/dpaa2: set default flow miss action per device Prashant Gupta
2026-09-03 13:53 ` [PATCH 22/45] net/dpaa2: identify Rx mbuf hash information by FLC Prashant Gupta
2026-09-03 13:53 ` [PATCH 23/45] net/dpaa2: add minimum key size support Prashant Gupta
2026-09-03 13:53 ` [PATCH 24/45] net/dpaa2: restructure dpaa2 parser processing Prashant Gupta
2026-09-03 13:53 ` [PATCH 25/45] net/dpaa2: parse tunnel and fragmented packet types Prashant Gupta
2026-09-03 13:53 ` [PATCH 26/45] net/dpaa2: remove unused soft parser driver Prashant Gupta
2026-09-03 13:53 ` [PATCH 27/45] drivers: refresh dpaa2 MC and SoC version info Prashant Gupta
2026-09-03 13:53 ` [PATCH 28/45] drivers: identify dpaa2 soft parser protocol Prashant Gupta
2026-09-03 13:53 ` Prashant Gupta [this message]
2026-09-03 13:53 ` [PATCH 30/45] drivers: inherit dpaa2 rxq config for event queue Prashant Gupta
2026-09-03 13:53 ` [PATCH 31/45] net/dpaa2: rename Rx queue flags Prashant Gupta
2026-09-03 13:53 ` [PATCH 32/45] drivers: rework dpaa2 Tx confirmation Prashant Gupta
2026-09-03 13:53 ` [PATCH 33/45] net/dpaa2: ptp enhancements Prashant Gupta
2026-09-03 13:53 ` [PATCH 34/45] net/dpaa2: remove unused soft parser Tx code Prashant Gupta
2026-09-03 13:53 ` [PATCH 35/45] net/dpaa2: update MC dpni QoS and flow steering API Prashant Gupta
2026-09-03 13:53 ` [PATCH 36/45] net/dpaa2: enhance xstat implementation Prashant Gupta
2026-09-03 13:53 ` [PATCH 37/45] net/dpaa2: rework flow engine Prashant Gupta
2026-09-03 13:53 ` [PATCH 38/45] net/dpaa2: support Rx mempool per traffic class Prashant Gupta
2026-09-03 13:53 ` [PATCH 39/45] drivers: consume dpaa2 DQRR entries in batches Prashant Gupta
2026-09-03 13:53 ` [PATCH 40/45] drivers: resolve dpaa2 endpoint in the net driver Prashant Gupta
2026-09-03 13:53 ` [PATCH 41/45] drivers: align dpaa2 event port depths with hardware rings Prashant Gupta
2026-09-03 13:53 ` [PATCH 42/45] net/dpaa2: read MC version from device private data Prashant Gupta
2026-09-03 13:53 ` [PATCH 43/45] net/dpaa2: do not overwrite mbuf hash with drop priority Prashant Gupta
2026-09-03 13:53 ` [PATCH 44/45] bus/fslmc: reduce probe-time logging and MC traffic Prashant Gupta
2026-09-03 13:53 ` [PATCH 45/45] net/dpaa2: reject Rx queue deferred start Prashant Gupta
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260903135353.3358303-30-prashant.gupta_3@nxp.com \
--to=prashant.gupta_3@nxp.com \
--cc=dev@dpdk.org \
--cc=jun.yang@nxp.com \
--cc=stephen@networkplumber.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox