All of lore.kernel.org
 help / color / mirror / Atom feed
From: Prashant Gupta <prashant.gupta_3@nxp.com>
To: stephen@networkplumber.org, dev@dpdk.org
Cc: Breeson Francis <breeson.francis@nokia.com>, Jun Yang <jun.yang@nxp.com>
Subject: [PATCH v4-S3 17/65] net/dpaa2: rework xstats with page table and MAC support
Date: Fri, 23 Oct 2026 19:12:57 +0530	[thread overview]
Message-ID: <20261023134346.37727-18-prashant.gupta_3@nxp.com> (raw)
In-Reply-To: <20261023134346.37727-1-prashant.gupta_3@nxp.com>

From: Breeson Francis <breeson.francis@nokia.com>

Reshape DPAA2 xstats so that counter identity is derived from the DPNI
statistics page layout itself instead of a hand-maintained parallel
table, extend coverage to all DPNI pages (0..6, including CEETM and
tx-pending), expose per-MAC counters when the endpoint is a DPMAC on
MC firmware that supports it, and make xstats_get_by_id() actually
cheap when a caller asks for a subset of IDs.

Signed-off-by: Breeson Francis <breeson.francis@nokia.com>
Signed-off-by: Jun Yang <jun.yang@nxp.com>
---
 drivers/net/dpaa2/dpaa2_ethdev.c | 1004 +++++++++++++++++++-----------
 drivers/net/dpaa2/dpaa2_ethdev.h |   11 +-
 drivers/net/dpaa2/mc/fsl_dpni.h  |  116 ++--
 3 files changed, 708 insertions(+), 423 deletions(-)

diff --git a/drivers/net/dpaa2/dpaa2_ethdev.c b/drivers/net/dpaa2/dpaa2_ethdev.c
index 0fbc2c77b0..e7ac6b7dad 100644
--- a/drivers/net/dpaa2/dpaa2_ethdev.c
+++ b/drivers/net/dpaa2/dpaa2_ethdev.c
@@ -169,116 +169,290 @@ dpaa2_dist_size_is_supported(uint16_t n)
 int dpaa2_valid_dev;
 struct rte_mempool *dpaa2_tx_sg_pool;
 
-struct rte_dpaa2_xstats_name_off {
+struct dpaa2_dpni_xstats_pg_seq {
+	struct dpni_statistics_page_0 pg0;
+	struct dpni_statistics_page_1 pg1;
+	struct dpni_statistics_page_2 pg2;
+	struct dpni_statistics_page_3 pg3;
+	struct dpni_statistics_page_4 pg4;
+	struct dpni_statistics_page_5 pg5[MAX_TCS];
+	struct dpni_statistics_page_6 pg6;
+};
+
+#define DPAA2_DPNI_XSTAT_MAX_NUM \
+	(sizeof(struct dpaa2_dpni_xstats_pg_seq) / sizeof(uint64_t))
+
+struct dpaa2_dpni_xstats_pg {
+	uint64_t page_offset;
+	enum dpni_statistics_page_id page_id;
+	uint16_t param;
+	uint16_t size;
+};
+
+static const struct dpaa2_dpni_xstats_pg s_dpaa2_dpni_xstats_pgs[] = {
+	{
+		offsetof(struct dpaa2_dpni_xstats_pg_seq, pg0),
+		DPNI_INGRESS_STATISTICS_PAGE_ID, 0,
+		sizeof(struct dpni_statistics_page_0)
+	},
+	{
+		offsetof(struct dpaa2_dpni_xstats_pg_seq, pg1),
+		DPNI_EGRESS_STATISTICS_PAGE_ID, 0,
+		sizeof(struct dpni_statistics_page_1)
+	},
+	{
+		offsetof(struct dpaa2_dpni_xstats_pg_seq, pg2),
+		DPNI_ERR_STATISTICS_PAGE_ID, 0,
+		sizeof(struct dpni_statistics_page_2)
+	},
+	{
+		offsetof(struct dpaa2_dpni_xstats_pg_seq, pg3),
+		DPNI_CEETM_STATISTICS_PAGE_ID, 0,
+		sizeof(struct dpni_statistics_page_3)
+	},
+	{
+		offsetof(struct dpaa2_dpni_xstats_pg_seq, pg4),
+		DPNI_CGR_STATISTICS_PAGE_ID, 0,
+		sizeof(struct dpni_statistics_page_4)
+	},
+	{
+		offsetof(struct dpaa2_dpni_xstats_pg_seq, pg5[0]),
+		DPNI_POLICER_STATISTICS_PAGE_ID, 0,
+		sizeof(struct dpni_statistics_page_5)
+	},
+	{
+		offsetof(struct dpaa2_dpni_xstats_pg_seq, pg5[1]),
+		DPNI_POLICER_STATISTICS_PAGE_ID, 1,
+		sizeof(struct dpni_statistics_page_5)
+	},
+	{
+		offsetof(struct dpaa2_dpni_xstats_pg_seq, pg5[2]),
+		DPNI_POLICER_STATISTICS_PAGE_ID, 2,
+		sizeof(struct dpni_statistics_page_5)
+	},
+	{
+		offsetof(struct dpaa2_dpni_xstats_pg_seq, pg5[3]),
+		DPNI_POLICER_STATISTICS_PAGE_ID, 3,
+		sizeof(struct dpni_statistics_page_5)
+	},
+	{
+		offsetof(struct dpaa2_dpni_xstats_pg_seq, pg5[4]),
+		DPNI_POLICER_STATISTICS_PAGE_ID, 4,
+		sizeof(struct dpni_statistics_page_5)
+	},
+	{
+		offsetof(struct dpaa2_dpni_xstats_pg_seq, pg5[5]),
+		DPNI_POLICER_STATISTICS_PAGE_ID, 5,
+		sizeof(struct dpni_statistics_page_5)
+	},
+	{
+		offsetof(struct dpaa2_dpni_xstats_pg_seq, pg5[6]),
+		DPNI_POLICER_STATISTICS_PAGE_ID, 6,
+		sizeof(struct dpni_statistics_page_5)
+	},
+	{
+		offsetof(struct dpaa2_dpni_xstats_pg_seq, pg5[7]),
+		DPNI_POLICER_STATISTICS_PAGE_ID, 7,
+		sizeof(struct dpni_statistics_page_5)
+	},
+	{
+		offsetof(struct dpaa2_dpni_xstats_pg_seq, pg6),
+		DPNI_TX_PENDING_STATISTICS_PAGE_ID, 0,
+		sizeof(struct dpni_statistics_page_6)
+	},
+	{
+		sizeof(struct dpaa2_dpni_xstats_pg_seq),
+		0, 0, 0
+	}
+};
+
+static inline int
+dpaa2_xstats_id_parse(uint32_t id, uint8_t *page,
+	uint8_t *stat_id, uint16_t *param, uint16_t *size)
+{
+	int found = 0;
+	uint8_t _page = 0, _stat_id = 0;
+	uint16_t _param = 0, _size = 0;
+	uint64_t offset = id * sizeof(uint64_t), page_offset = 0, i;
+
+	for (i = 1; i < RTE_DIM(s_dpaa2_dpni_xstats_pgs); i++) {
+		if (offset < s_dpaa2_dpni_xstats_pgs[i].page_offset) {
+			page_offset = s_dpaa2_dpni_xstats_pgs[i - 1].page_offset;
+			_page = s_dpaa2_dpni_xstats_pgs[i - 1].page_id;
+			_stat_id = (offset - page_offset) / sizeof(uint64_t);
+			_param = s_dpaa2_dpni_xstats_pgs[i - 1].param;
+			_size = s_dpaa2_dpni_xstats_pgs[i - 1].size / sizeof(uint64_t);
+			found = 1;
+			break;
+		}
+	}
+
+	if (!found)
+		return -EINVAL;
+
+	if (page)
+		*page = _page;
+	if (stat_id)
+		*stat_id = _stat_id;
+	if (param)
+		*param = _param;
+	if (size)
+		*size = _size;
+
+	return 0;
+}
+
+struct dpaa2_stats_name_off {
 	char name[RTE_ETH_XSTATS_NAME_SIZE];
-	uint8_t page_id; /* dpni statistics page id */
-	uint8_t stats_id; /* stats id in the given page */
+	uint64_t offset;
+};
+
+#define DPAA2_STATS_IPACKETS_STR "ingress_all_frames"
+#define DPAA2_STATS_OPACKETS_STR "egress_all_frames"
+#define DPAA2_STATS_IBYTES_STR "ingress_all_bytes"
+#define DPAA2_STATS_OBYTES_STR "egress_all_bytes"
+#define DPAA2_STATS_IERRORS_STR "ingress_discarded_frames"
+#define DPAA2_STATS_OERRORS_STR "egress_discarded_frames"
+#define DPAA2_STATS_RX_NOMBUF_STR "ingress_nobuffer_discards"
+#define DPAA2_STATS_FILTERED_STR "ingress_filtered_frames"
+
+static const struct dpaa2_stats_name_off dpaa2_stats_strings[] = {
+	{
+		DPAA2_STATS_IPACKETS_STR,
+		offsetof(struct rte_eth_stats, ipackets)
+	},
+	{
+		DPAA2_STATS_OPACKETS_STR,
+		offsetof(struct rte_eth_stats, opackets)
+	},
+	{
+		DPAA2_STATS_IBYTES_STR,
+		offsetof(struct rte_eth_stats, ibytes)
+	},
+	{
+		DPAA2_STATS_OBYTES_STR,
+		offsetof(struct rte_eth_stats, obytes)
+	},
+	{
+		DPAA2_STATS_FILTERED_STR,
+		sizeof(struct rte_eth_stats)
+	},
+	{
+		DPAA2_STATS_IERRORS_STR,
+		offsetof(struct rte_eth_stats, ierrors)
+	},
+	{
+		DPAA2_STATS_OERRORS_STR,
+		offsetof(struct rte_eth_stats, oerrors)
+	},
+	{
+		DPAA2_STATS_RX_NOMBUF_STR,
+		offsetof(struct rte_eth_stats, rx_nombuf)
+	}
 };
 
-static const struct rte_dpaa2_xstats_name_off dpaa2_xstats_strings[] = {
-	{"ingress_multicast_frames", 0, 2},
-	{"ingress_multicast_bytes", 0, 3},
-	{"ingress_broadcast_frames", 0, 4},
-	{"ingress_broadcast_bytes", 0, 5},
-	{"egress_multicast_frames", 1, 2},
-	{"egress_multicast_bytes", 1, 3},
-	{"egress_broadcast_frames", 1, 4},
-	{"egress_broadcast_bytes", 1, 5},
-	{"ingress_filtered_frames", 2, 0},
-	{"ingress_discarded_frames", 2, 1},
-	{"ingress_nobuffer_discards", 2, 2},
-	{"egress_discarded_frames", 2, 3},
-	{"egress_confirmed_frames", 2, 4},
-	{"cgr_reject_frames", 4, 0},
-	{"cgr_reject_bytes", 4, 1},
-	{"TC_0_policer_cnt_red", 5, 0},
-	{"TC_0_policer_cnt_yellow", 5, 1},
-	{"TC_0_policer_cnt_green", 5, 2},
-	{"TC_0_policer_cnt_re_red", 5, 3},
-	{"TC_0_policer_cnt_re_yellow", 5, 4},
-	{"TC_1_policer_cnt_red", 6, 0},
-	{"TC_1_policer_cnt_yellow", 6, 1},
-	{"TC_1_policer_cnt_green", 6, 2},
-	{"TC_1_policer_cnt_re_red", 6, 3},
-	{"TC_1_policer_cnt_re_yellow", 6, 4},
-	{"TC_2_policer_cnt_red", 7, 0},
-	{"TC_2_policer_cnt_yellow", 7, 1},
-	{"TC_2_policer_cnt_green", 7, 2},
-	{"TC_2_policer_cnt_re_red", 7, 3},
-	{"TC_2_policer_cnt_re_yellow", 7, 4},
-	{"TC_3_policer_cnt_red", 8, 0},
-	{"TC_3_policer_cnt_yellow", 8, 1},
-	{"TC_3_policer_cnt_green", 8, 2},
-	{"TC_3_policer_cnt_re_red", 8, 3},
-	{"TC_3_policer_cnt_re_yellow", 8, 4},
-	{"TC_4_policer_cnt_red", 9, 0},
-	{"TC_4_policer_cnt_yellow", 9, 1},
-	{"TC_4_policer_cnt_green", 9, 2},
-	{"TC_4_policer_cnt_re_red", 9, 3},
-	{"TC_4_policer_cnt_re_yellow", 9, 4},
-	{"TC_5_policer_cnt_red", 10, 0},
-	{"TC_5_policer_cnt_yellow", 10, 1},
-	{"TC_5_policer_cnt_green", 10, 2},
-	{"TC_5_policer_cnt_re_red", 10, 3},
-	{"TC_5_policer_cnt_re_yellow", 10, 4},
-	{"TC_6_policer_cnt_red", 11, 0},
-	{"TC_6_policer_cnt_yellow", 11, 1},
-	{"TC_6_policer_cnt_green", 11, 2},
-	{"TC_6_policer_cnt_re_red", 11, 3},
-	{"TC_6_policer_cnt_re_yellow", 11, 4},
-	{"TC_7_policer_cnt_red", 12, 0},
-	{"TC_7_policer_cnt_yellow", 12, 1},
-	{"TC_7_policer_cnt_green", 12, 2},
-	{"TC_7_policer_cnt_re_red", 12, 3},
-	{"TC_7_policer_cnt_re_yellow", 12, 4},
-	{"mac_rx_64 bytes", 0, 0},
-	{"mac_rx_65-127 bytes", 0, 0},
-	{"mac_rx_128-255 bytes", 0, 0},
-	{"mac_rx_256-511 bytes", 0, 0},
-	{"mac_rx_512-1023 bytes", 0, 0},
-	{"mac_rx_1024-1518 bytes", 0, 0},
-	{"mac_rx_1519-max bytes", 0, 0},
-	{"mac_rx_frags", 0, 0},
-	{"mac_rx_jabber", 0, 0},
-	{"mac_rx_frame discards", 0, 0},
-	{"mac_rx_align errors", 0, 0},
-	{"mac_tx_undersized", 0, 0},
-	{"mac_rx_oversized", 0, 0},
-	{"mac_rx_pause", 0, 0},
-	{"mac_tx_b-pause", 0, 0},
-	{"mac_rx_bytes", 0, 0},
-	{"mac_rx_m-cast", 0, 0},
-	{"mac_rx_b-cast", 0, 0},
-	{"mac_rx_all frames", 0, 0},
-	{"mac_rx_u-cast", 0, 0},
-	{"mac_rx_frame errors", 0, 0},
-	{"mac_tx_bytes", 0, 0},
-	{"mac_tx_m-cast", 0, 0},
-	{"mac_tx_b-cast", 0, 0},
-	{"mac_tx_u-cast", 0, 0},
-	{"mac_tx_frame errors", 0, 0},
-	{"mac_rx_frames ok", 0, 0},
-	{"mac_tx_frames ok", 0, 0},
-	{"mac_tx_64 bytes", 0, 0},
-	{"mac_tx_65-127 bytes", 0, 0},
-	{"mac_tx_128-255 bytes", 0, 0},
-	{"mac_tx_256-511 bytes", 0, 0},
-	{"mac_tx_512-1023 bytes", 0, 0},
-	{"mac_tx_1024-1518 bytes", 0, 0},
-	{"mac_tx_1519-max bytes", 0, 0},
-	{"mac_rx_all_bytes", 0, 0},
-	{"mac_rx_fcs_err", 0, 0},
-	{"mac_rx_vlan_frame", 0, 0},
-	{"mac_rx_undersized", 0, 0},
-	{"mac_rx_control_frame", 0, 0},
-	{"mac_rx_frame_discard_not_trunc", 0, 0},
-	{"mac_tx_all_bytes", 0, 0},
-	{"mac_tx_fcs_err", 0, 0},
-	{"mac_tx_vlan_frame", 0, 0},
-	{"mac_tx_all_frame", 0, 0},
-	{"mac_tx_control_frame", 0, 0},
+#define DPAA2_STATS_SET_BY_OFFSET(p_stats, offset, val) \
+	(*((uint64_t *)((uint8_t *)(p_stats) + (offset))) = (val))
+
+#define DPAA2_TC_COLOR(tc) \
+	"TC_"#tc"_policer_cnt_red", \
+	"TC_"#tc"_policer_cnt_yellow", \
+	"TC_"#tc"_policer_cnt_green", \
+	"TC_"#tc"_policer_cnt_re_red", \
+	"TC_"#tc"_policer_cnt_re_yellow" \
+
+static const char * const dpaa2_dpni_xstats_strings[] = {
+	DPAA2_STATS_IPACKETS_STR,
+	DPAA2_STATS_IBYTES_STR,
+	"ingress_multicast_frames",
+	"ingress_multicast_bytes",
+	"ingress_broadcast_frames",
+	"ingress_broadcast_bytes",
+
+	DPAA2_STATS_OPACKETS_STR,
+	DPAA2_STATS_OBYTES_STR,
+	"egress_multicast_frames",
+	"egress_multicast_bytes",
+	"egress_broadcast_frames",
+	"egress_broadcast_bytes",
+
+	DPAA2_STATS_FILTERED_STR,
+	DPAA2_STATS_IERRORS_STR,
+	DPAA2_STATS_RX_NOMBUF_STR,
+	DPAA2_STATS_OERRORS_STR,
+	"egress_confirmed_frames",
+
+	"cgr_reject_frames",
+	"cgr_reject_bytes",
+
+	"ceetm_dequeue_bytes",
+	"ceetm_dequeue_frames",
+	"ceetm_reject_bytes",
+	"ceetm_reject_frames",
+	DPAA2_TC_COLOR(0),
+	DPAA2_TC_COLOR(1),
+	DPAA2_TC_COLOR(2),
+	DPAA2_TC_COLOR(3),
+	DPAA2_TC_COLOR(4),
+	DPAA2_TC_COLOR(5),
+	DPAA2_TC_COLOR(6),
+	DPAA2_TC_COLOR(7),
+
+	"tx_pending_frames_cnt"
 };
 
+static const char * const dpaa2_mac_xstats_strings[] = {
+	"mac_rx_64 bytes",
+	"mac_rx_65-127 bytes",
+	"mac_rx_128-255 bytes",
+	"mac_rx_256-511 bytes",
+	"mac_rx_512-1023 bytes",
+	"mac_rx_1024-1518 bytes",
+	"mac_rx_1519-max bytes",
+	"mac_rx_frags",
+	"mac_rx_jabber",
+	"mac_rx_frame discards",
+	"mac_rx_align errors",
+	"mac_tx_undersized",
+	"mac_rx_oversized",
+	"mac_rx_pause",
+	"mac_tx_b-pause",
+	"mac_rx_bytes",
+	"mac_rx_m-cast",
+	"mac_rx_b-cast",
+	"mac_rx_all frames",
+	"mac_rx_u-cast",
+	"mac_rx_frame errors",
+	"mac_tx_bytes",
+	"mac_tx_m-cast",
+	"mac_tx_b-cast",
+	"mac_tx_u-cast",
+	"mac_tx_frame errors",
+	"mac_rx_frames ok",
+	"mac_tx_frames ok",
+	"mac_tx_64 bytes",
+	"mac_tx_65-127 bytes",
+	"mac_tx_128-255 bytes",
+	"mac_tx_256-511 bytes",
+	"mac_tx_512-1023 bytes",
+	"mac_tx_1024-1518 bytes",
+	"mac_tx_1519-max bytes",
+	"mac_rx_all_bytes",
+	"mac_rx_fcs_err",
+	"mac_rx_vlan_frame",
+	"mac_rx_undersized",
+	"mac_rx_control_frame",
+	"mac_rx_frame_discard_not_trunc",
+	"mac_tx_all_bytes",
+	"mac_tx_fcs_err",
+	"mac_tx_vlan_frame",
+	"mac_tx_all_frame",
+	"mac_tx_control_frame"
+};
+
+#define DPAA2_MAC_XSTATS_START_ID \
+	(sizeof(struct dpaa2_dpni_xstats_pg_seq) / sizeof(uint64_t))
+
 static struct rte_dpaa2_driver rte_dpaa2_pmd;
 static int dpaa2_dev_link_update(struct rte_eth_dev *dev,
 				 int wait_to_complete);
@@ -1958,132 +2132,97 @@ dpaa2_dev_set_mac_addr(struct rte_eth_dev *dev,
 }
 
 static int
-dpaa2_dev_stats_get(struct rte_eth_dev *dev,
-	struct rte_eth_stats *stats, struct eth_queue_stats *qstats)
+dpaa2_dev_xstat_mac_setup_mem(struct rte_eth_dev *dev)
 {
 	struct dpaa2_dev_priv *priv = dev->data->dev_private;
-	struct fsl_mc_io *dpni = dev->process_private;
-	int32_t retcode;
-	uint8_t page0 = 0, page1 = 1, page2 = 2;
-	union dpni_statistics value;
-	int i;
-	struct dpaa2_queue *dpaa2_rxq, *dpaa2_txq;
-
-	memset(&value, 0, sizeof(union dpni_statistics));
-
-	PMD_INIT_FUNC_TRACE();
+	uint32_t *cnt_idx, i;
+	int ret = 0;
 
-	if (!dpni) {
-		DPAA2_PMD_ERR("dpni is NULL");
-		return -EINVAL;
-	}
+	if (!priv->cnt_idx_dma_mem) {
+		priv->cnt_idx_dma_mem = rte_zmalloc(NULL,
+			DPAA2_MAC_STATS_INDEX_DMA_SIZE, RTE_CACHE_LINE_SIZE);
+		if (!priv->cnt_idx_dma_mem) {
+			ret = -ENOMEM;
+			DPAA2_PMD_ERR("Failure to allocate memory for mac index");
+			goto out;
+		}
 
-	if (!stats) {
-		DPAA2_PMD_ERR("stats is NULL");
-		return -EINVAL;
+		priv->cnt_idx_iova = rte_mem_virt2iova(priv->cnt_idx_dma_mem);
+		if (priv->cnt_idx_iova == RTE_BAD_IOVA) {
+			ret = -ENOBUFS;
+			DPAA2_PMD_ERR("%s: No IOMMU map for count index dma mem(%p)",
+				__func__, priv->cnt_idx_dma_mem);
+			goto err_dma_map;
+		}
+		cnt_idx = priv->cnt_idx_dma_mem;
+		for (i = 0; i < DPAA2_MAC_NUM_STATS; i++)
+			cnt_idx[i] = rte_cpu_to_le_32(i);
 	}
 
-	/*Get Counters from page_0*/
-	retcode = dpni_get_statistics(dpni, CMD_PRI_LOW, priv->token,
-				      page0, 0, &value);
-	if (retcode)
-		goto err;
-
-	stats->ipackets = value.page_0.ingress_all_frames;
-	stats->ibytes = value.page_0.ingress_all_bytes;
-
-	/*Get Counters from page_1*/
-	retcode = dpni_get_statistics(dpni, CMD_PRI_LOW, priv->token,
-				      page1, 0, &value);
-	if (retcode)
-		goto err;
-
-	stats->opackets = value.page_1.egress_all_frames;
-	stats->obytes = value.page_1.egress_all_bytes;
-
-	/*Get Counters from page_2*/
-	retcode = dpni_get_statistics(dpni, CMD_PRI_LOW, priv->token,
-				      page2, 0, &value);
-	if (retcode)
-		goto err;
-
-	/* Ingress drop frame count due to configured rules */
-	stats->ierrors = value.page_2.ingress_filtered_frames;
-	/* Ingress drop frame count due to error */
-	stats->ierrors += value.page_2.ingress_discarded_frames;
-
-	stats->oerrors = value.page_2.egress_discarded_frames;
-	stats->imissed = value.page_2.ingress_nobuffer_discards;
-
-	/* Fill in per queue stats. Byte counting is not implemented. */
-	if (qstats != NULL) {
-		for (i = 0; i < dev->data->nb_rx_queues; ++i) {
-			dpaa2_rxq = priv->rx_vq[i];
-			if (dpaa2_rxq)
-				qstats[i].q_ipackets = dpaa2_rxq->rx_pkts;
+	if (!priv->cnt_values_dma_mem) {
+		priv->cnt_values_dma_mem = rte_zmalloc(NULL,
+			DPAA2_MAC_STATS_VALUE_DMA_SIZE, RTE_CACHE_LINE_SIZE);
+		if (!priv->cnt_values_dma_mem) {
+			ret = -ENOMEM;
+			DPAA2_PMD_ERR("Failure to allocate memory for mac values");
+			goto err_alloc_values;
 		}
-		for (i = 0; i < dev->data->nb_tx_queues; ++i) {
-			dpaa2_txq = priv->tx_vq[i];
-			if (dpaa2_txq)
-				qstats[i].q_opackets = dpaa2_txq->tx_pkts;
+		priv->cnt_values_iova = rte_mem_virt2iova(priv->cnt_values_dma_mem);
+		if (priv->cnt_values_iova == RTE_BAD_IOVA) {
+			ret = -ENOBUFS;
+			DPAA2_PMD_ERR("%s: No IOMMU map for count values dma mem(%p)",
+				__func__, priv->cnt_values_dma_mem);
+			goto err_dma_map;
 		}
 	}
 
 	return 0;
 
-err:
-	DPAA2_PMD_ERR("Operation not completed:Error Code = %d", retcode);
-	return retcode;
-};
+err_dma_map:
+	rte_free(priv->cnt_values_dma_mem);
+err_alloc_values:
+	rte_free(priv->cnt_idx_dma_mem);
+out:
+	priv->cnt_idx_dma_mem = NULL;
+	priv->cnt_values_dma_mem = NULL;
 
-void
-dpaa2_dev_mac_setup_stats(struct rte_eth_dev *dev)
+	return ret;
+}
+
+static int
+dpaa2_dev_mac_xstats_avail(struct rte_eth_dev *dev)
 {
 	struct dpaa2_dev_priv *priv = dev->data->dev_private;
-	uint32_t *cnt_idx;
-	int i;
-
-	priv->cnt_idx_dma_mem = rte_malloc(NULL, DPAA2_MAC_STATS_INDEX_DMA_SIZE,
-					   RTE_CACHE_LINE_SIZE);
-	if (!priv->cnt_idx_dma_mem) {
-		DPAA2_PMD_ERR("Failure to allocate memory for mac index");
-		goto out;
-	}
 
-	priv->cnt_values_dma_mem = rte_malloc(NULL, DPAA2_MAC_STATS_VALUE_DMA_SIZE,
-					      RTE_CACHE_LINE_SIZE);
-	if (!priv->cnt_values_dma_mem) {
-		DPAA2_PMD_ERR("Failure to allocate memory for mac values");
-		goto err_alloc_values;
-	}
+	if (priv->ep_dev_type != DPAA2_MAC)
+		return false;
+	if (priv->mc_rev < DPAA2_MAC_XSTATS_MC_REV)
+		return false;
 
-	cnt_idx = priv->cnt_idx_dma_mem;
-	for (i = 0; i < DPAA2_MAC_NUM_STATS; i++)
-		*cnt_idx++ = rte_cpu_to_le_32((uint32_t)i);
+	return true;
+}
 
-	priv->cnt_idx_iova = rte_mem_virt2iova(priv->cnt_idx_dma_mem);
-	if (priv->cnt_idx_iova == RTE_BAD_IOVA) {
-		DPAA2_PMD_ERR("%s: No IOMMU map for count index dma mem(%p)",
-			__func__, priv->cnt_idx_dma_mem);
-		goto err_dma_map;
-	}
+static int
+dpaa2_dev_dpni_xstats_avail(struct rte_eth_dev *dev,
+	uint8_t page_id, uint16_t param)
+{
+	struct dpaa2_dev_priv *priv = dev->data->dev_private;
+	uint8_t tc, i;
 
-	priv->cnt_values_iova = rte_mem_virt2iova(priv->cnt_values_dma_mem);
-	if (priv->cnt_values_iova == RTE_BAD_IOVA) {
-		DPAA2_PMD_ERR("%s: No IOMMU map for count values dma mem(%p)",
-			__func__, priv->cnt_values_dma_mem);
-		goto err_dma_map;
+	if (page_id == DPNI_CGR_STATISTICS_PAGE_ID) {
+		for (i = 0; i < priv->max_cgs; i++) {
+			if (priv->cgid_in_use[i])
+				return true;
+		}
+	} else if (page_id == DPNI_POLICER_STATISTICS_PAGE_ID) {
+		tc = param;
+		if (tc < MAX_TCS)
+			return true;
+	} else {
+		return true;
 	}
 
-	return;
-
-err_dma_map:
-	rte_free(priv->cnt_values_dma_mem);
-err_alloc_values:
-	rte_free(priv->cnt_idx_dma_mem);
-out:
-	priv->cnt_idx_dma_mem = NULL;
-	priv->cnt_values_dma_mem = NULL;
+	return false;
 }
 
 /*
@@ -2093,213 +2232,343 @@ dpaa2_dev_mac_setup_stats(struct rte_eth_dev *dev)
  */
 static int
 dpaa2_dev_xstats_get(struct rte_eth_dev *dev,
-	struct rte_eth_xstat *xstats, unsigned int n)
+	struct rte_eth_xstat *xstats, uint32_t n)
 {
-	struct fsl_mc_io *dpni = (struct fsl_mc_io *)dev->process_private;
-	unsigned int i = 0, j = 0, num = RTE_DIM(dpaa2_xstats_strings);
+	struct fsl_mc_io *dpni = dev->process_private;
+	uint16_t i, j, param, stat_cnt, size;
 	struct dpaa2_dev_priv *priv = dev->data->dev_private;
-	union dpni_statistics value[13] = {};
-	struct dpni_rx_tc_policing_cfg cfg;
-	uint8_t page_id, stats_id;
+	union dpni_statistics values;
+	uint8_t page_id, stat_id;
 	uint64_t *cnt_values;
-	int32_t retcode;
-	int16_t tc;
+	int retcode;
+
+	stat_cnt = DPAA2_DPNI_XSTAT_MAX_NUM;
+	if (priv->ep_dev_type == DPAA2_MAC)
+		stat_cnt += DPAA2_MAC_NUM_STATS;
 
-	if (n < num)
-		return num;
+	if (n > stat_cnt) {
+		DPAA2_PMD_ERR("%s: Expected number(%d) > max number(%d)",
+			__func__, n, stat_cnt);
+		return -EINVAL;
+	}
 
 	if (!xstats)
 		return 0;
 
-	/* Get Counters from page_0*/
-	retcode = dpni_get_statistics(dpni, CMD_PRI_LOW, priv->token,
-				      0, 0, &value[0]);
-	if (retcode)
-		goto err;
-
-	/* Get Counters from page_1*/
-	retcode = dpni_get_statistics(dpni, CMD_PRI_LOW, priv->token,
-				      1, 0, &value[1]);
-	if (retcode)
-		goto err;
-
-	/* Get Counters from page_2*/
-	retcode = dpni_get_statistics(dpni, CMD_PRI_LOW, priv->token,
-				      2, 0, &value[2]);
-	if (retcode)
-		goto err;
-
-	for (j = 0; j < priv->max_cgs; j++) {
-		if (!priv->cgid_in_use[j]) {
-			/* Get Counters from page_4*/
-			retcode = dpni_get_statistics(dpni, CMD_PRI_LOW,
-						      priv->token,
-						      4, 0, &value[4]);
-			if (retcode)
-				goto err;
-			break;
+	i = 0;
+	while (i < n) {
+		if (i >= DPAA2_MAC_XSTATS_START_ID) {
+			if (!dpaa2_dev_mac_xstats_avail(dev)) {
+				for (j = i; j < n; j++) {
+					xstats[j].id = j;
+					xstats[j].value = 0;
+				}
+				i = n;
+				break;
+			}
+			goto dpmac_get_xstat;
 		}
-	}
 
-	for (tc = 0; tc < priv->num_rx_tc; tc++) {
-		retcode = dpni_get_rx_tc_policing(dpni, CMD_PRI_LOW,
-						  priv->token, tc,
-						  &cfg);
+		page_id = 0;
+		stat_id = 0;
+		param = 0;
+		retcode = dpaa2_xstats_id_parse(i, &page_id, &stat_id, &param, &size);
+		if (retcode)
+			return retcode;
+		if (!dpaa2_dev_dpni_xstats_avail(dev, page_id, param)) {
+			xstats[i].id = i;
+			xstats[i].value = 0;
+			i++;
+			continue;
+		}
+		retcode = dpni_get_statistics(dpni, CMD_PRI_LOW,
+			priv->token, page_id, param, &values);
 		if (retcode) {
-			DPAA2_PMD_ERR("Error to get the policer rule: %d", retcode);
-			goto err;
+			DPAA2_PMD_ERR("%s: Failed(%d) to get %s's statistcis of page%d!",
+				__func__, retcode, dev->data->name, page_id);
+			return retcode;
 		}
-
-		/* get policer stats if policer is enabled */
-		if (cfg.mode != 0) {
-			/* Get Counters from page_5*/
-			retcode = dpni_get_statistics(dpni, CMD_PRI_LOW,
-						      priv->token, 5, tc,
-						      &value[(tc + 5)]);
-			if (retcode)
-				goto err;
+		cnt_values = (void *)&values;
+		j = stat_id;
+		while (i < n && j < size) {
+			xstats[i].id = i;
+			xstats[i].value = cnt_values[j];
+			i++;
+			j++;
 		}
-	}
+		continue;
 
-	while (i < (num - DPAA2_MAC_NUM_STATS)) {
-		xstats[i].id = i;
-		page_id = dpaa2_xstats_strings[i].page_id;
-		stats_id = dpaa2_xstats_strings[i].stats_id;
-		xstats[i].value = value[page_id].raw.counter[stats_id];
-		i++;
-	}
-
-	if (priv->cnt_idx_dma_mem &&
-	    !dpni_get_mac_statistics(dpni, CMD_PRI_LOW, priv->token,
-				    priv->cnt_idx_iova,
-				    priv->cnt_values_iova,
-				    DPAA2_MAC_NUM_STATS)) {
+dpmac_get_xstat:
+		retcode = dpaa2_dev_xstat_mac_setup_mem(dev);
+		if (retcode) {
+			DPAA2_PMD_ERR("%s: Failed(%d) to setup %s MAC statistics!",
+				__func__, retcode, dev->data->name);
+			return retcode;
+		}
+		retcode = dpni_get_mac_statistics(dpni, CMD_PRI_LOW,
+			priv->token, priv->cnt_idx_iova,
+			priv->cnt_values_iova, DPAA2_MAC_NUM_STATS);
+		if (retcode) {
+			DPAA2_PMD_ERR("%s: Failed(%d) to get %s's MAC statistics!",
+				__func__, retcode, dev->data->name);
+			return retcode;
+		}
 		cnt_values = priv->cnt_values_dma_mem;
-		while (i >= (num - DPAA2_MAC_NUM_STATS) && i < num) {
+
+		j = i - DPAA2_MAC_XSTATS_START_ID;
+		while (i < n && j < DPAA2_MAC_NUM_STATS) {
 			xstats[i].id = i;
-			xstats[i].value = rte_le_to_cpu_64(*cnt_values++);
+			xstats[i].value = cnt_values[j];
 			i++;
+			j++;
 		}
-		return i;
-	}
-
-	while (i >= (num - DPAA2_MAC_NUM_STATS) && i < num) {
-		xstats[i].id = i;
-		xstats[i].value = 0;
-		i++;
 	}
 
 	return i;
-err:
-	DPAA2_PMD_ERR("Error in obtaining extended stats (%d)", retcode);
-	return retcode;
 }
 
 static int
-dpaa2_xstats_get_names(__rte_unused struct rte_eth_dev *dev,
-	struct rte_eth_xstat_name *xstats_names,
-	unsigned int limit)
+dpaa2_dev_xstats_get_names(struct rte_eth_dev *dev,
+	struct rte_eth_xstat_name *xstats_names, uint32_t limit)
 {
-	unsigned int i, stat_cnt = RTE_DIM(dpaa2_xstats_strings);
+	struct dpaa2_dev_priv *priv = dev->data->dev_private;
+	uint16_t i, stat_cnt;
+
+	stat_cnt = DPAA2_DPNI_XSTAT_MAX_NUM;
+	if (priv->ep_dev_type == DPAA2_MAC)
+		stat_cnt += DPAA2_MAC_NUM_STATS;
+
+	if (!limit)
+		return stat_cnt;
 
 	if (limit < stat_cnt)
+		stat_cnt = limit;
+
+	if (!xstats_names)
 		return stat_cnt;
 
-	if (xstats_names != NULL)
-		for (i = 0; i < stat_cnt; i++)
-			strlcpy(xstats_names[i].name,
-				dpaa2_xstats_strings[i].name,
-				sizeof(xstats_names[i].name));
+	for (i = 0; i < stat_cnt; i++) {
+		if (i < DPAA2_DPNI_XSTAT_MAX_NUM) {
+			rte_strscpy(xstats_names[i].name, dpaa2_dpni_xstats_strings[i],
+				RTE_ETH_XSTATS_NAME_SIZE);
+		} else {
+			rte_strscpy(xstats_names[i].name,
+				dpaa2_mac_xstats_strings[i - DPAA2_DPNI_XSTAT_MAX_NUM],
+				RTE_ETH_XSTATS_NAME_SIZE);
+		}
+	}
 
 	return stat_cnt;
 }
 
 static int
-dpaa2_xstats_get_by_id(struct rte_eth_dev *dev, const uint64_t *ids,
-	uint64_t *values, unsigned int n)
+dpaa2_dev_xstats_get_by_id(struct rte_eth_dev *dev, const uint64_t *ids,
+	uint64_t *values, uint32_t n)
 {
-	unsigned int i, stat_cnt = RTE_DIM(dpaa2_xstats_strings);
-	uint64_t values_copy[stat_cnt];
-	uint8_t page_id, stats_id;
-
-	if (!ids) {
-		struct dpaa2_dev_priv *priv = dev->data->dev_private;
-		struct fsl_mc_io *dpni = dev->process_private;
-		int32_t retcode;
-		union dpni_statistics value[5] = {};
+	uint16_t i, id, stat_cnt;
+	uint8_t page_id, stat_id;
+	uint16_t param;
+	struct dpaa2_dev_priv *priv = dev->data->dev_private;
+	struct fsl_mc_io *dpni = dev->process_private;
+	bool page_fetched[DPNI_MAX_STATISTICS_PAGE_ID][DPNI_STAT_MAX_PARAM];
+	/* Fetch all MAC counters in a single MC command on first MAC xstat. */
+	bool mac_fetched = false;
+	int retcode;
+	uint64_t *cnt_values;
 
-		if (n < stat_cnt)
-			return stat_cnt;
+	stat_cnt = DPAA2_DPNI_XSTAT_MAX_NUM;
+	if (priv->ep_dev_type == DPAA2_MAC)
+		stat_cnt += DPAA2_MAC_NUM_STATS;
 
-		if (!values)
-			return 0;
+	memset(page_fetched, 0, sizeof(page_fetched));
 
-		/* Get Counters from page_0*/
-		retcode = dpni_get_statistics(dpni, CMD_PRI_LOW, priv->token,
-					      0, 0, &value[0]);
+	for (i = 0; i < n; i++) {
+		if (ids && ids[i] >= stat_cnt) {
+			DPAA2_PMD_ERR("xstats id value isn't valid");
+			return -EINVAL;
+		}
+		id = ids ? ids[i] : i;
+		if (id >= DPAA2_MAC_XSTATS_START_ID) {
+			if (!dpaa2_dev_mac_xstats_avail(dev)) {
+				values[i] = 0;
+				continue;
+			}
+			if (mac_fetched) {
+				cnt_values = priv->cnt_values_dma_mem;
+				values[i] = cnt_values[id - DPAA2_MAC_XSTATS_START_ID];
+				continue;
+			}
+			goto dpmac_get_xstat;
+		}
+		page_id = 0;
+		stat_id = 0;
+		param = 0;
+		retcode = dpaa2_xstats_id_parse(id, &page_id, &stat_id, &param, NULL);
 		if (retcode)
-			return 0;
+			return retcode;
+		if (!dpaa2_dev_dpni_xstats_avail(dev, page_id, param)) {
+			values[i] = 0;
+			continue;
+		}
+		if (!page_fetched[page_id][param])
+			goto dpni_get_xstat;
+		values[i] = priv->pg_xstats[page_id][param].raw.counter[stat_id];
+		continue;
+
+dpmac_get_xstat:
+		/* Single MC call fetches all MAC counters at once;
+		 * reuse the result for every subsequent MAC xstat.
+		 */
+		retcode = dpaa2_dev_xstat_mac_setup_mem(dev);
+		if (retcode) {
+			DPAA2_PMD_ERR("%s: Failed(%d) to setup %s's MAC statistics!",
+				__func__, retcode, dev->data->name);
+			return retcode;
+		}
+		retcode = dpni_get_mac_statistics(dpni, CMD_PRI_LOW,
+			priv->token, priv->cnt_idx_iova,
+			priv->cnt_values_iova, DPAA2_MAC_NUM_STATS);
+		if (retcode) {
+			DPAA2_PMD_ERR("%s: Failed(%d) to get %s's MAC statistics!",
+				__func__, retcode, dev->data->name);
+			return retcode;
+		}
+		mac_fetched = true;
+		cnt_values = priv->cnt_values_dma_mem;
+		values[i] = cnt_values[id - DPAA2_MAC_XSTATS_START_ID];
+		continue;
 
-		/* Get Counters from page_1*/
-		retcode = dpni_get_statistics(dpni, CMD_PRI_LOW, priv->token,
-					      1, 0, &value[1]);
-		if (retcode)
-			return 0;
+dpni_get_xstat:
+		/* Cache dpni page results: multiple xstats can share
+		 * the same (page_id, param), so only fetch each pair once.
+		 */
+		retcode = dpni_get_statistics(dpni, CMD_PRI_LOW,
+				priv->token, page_id, param,
+				&priv->pg_xstats[page_id][param]);
+		if (retcode) {
+			DPAA2_PMD_ERR("%s: Failed(%d) to get %s's statistcis of page%d!",
+				__func__, retcode, dev->data->name, page_id);
+			return retcode;
+		}
+		page_fetched[page_id][param] = true;
+		values[i] = priv->pg_xstats[page_id][param].raw.counter[stat_id];
+	}
 
-		/* Get Counters from page_2*/
-		retcode = dpni_get_statistics(dpni, CMD_PRI_LOW, priv->token,
-					      2, 0, &value[2]);
-		if (retcode)
-			return 0;
+	return n;
+}
 
-		/* Get Counters from page_4*/
-		retcode = dpni_get_statistics(dpni, CMD_PRI_LOW, priv->token,
-					      4, 0, &value[4]);
-		if (retcode)
-			return 0;
+static int
+dpaa2_dev_xstats_get_names_by_id(struct rte_eth_dev *dev,
+	const uint64_t *ids, struct rte_eth_xstat_name *xstats_names,
+	uint32_t limit)
+{
+	struct dpaa2_dev_priv *priv = dev->data->dev_private;
+	uint16_t i, stat_cnt;
 
-		for (i = 0; i < stat_cnt; i++) {
-			page_id = dpaa2_xstats_strings[i].page_id;
-			stats_id = dpaa2_xstats_strings[i].stats_id;
-			values[i] = value[page_id].raw.counter[stats_id];
-		}
-		return stat_cnt;
-	}
+	stat_cnt = DPAA2_DPNI_XSTAT_MAX_NUM;
+	if (priv->ep_dev_type == DPAA2_MAC)
+		stat_cnt += DPAA2_MAC_NUM_STATS;
 
-	dpaa2_xstats_get_by_id(dev, NULL, values_copy, stat_cnt);
+	if (!ids)
+		return dpaa2_dev_xstats_get_names(dev, xstats_names, limit);
 
-	for (i = 0; i < n; i++) {
+	for (i = 0; i < limit; i++) {
 		if (ids[i] >= stat_cnt) {
-			DPAA2_PMD_ERR("xstats id value isn't valid");
+			DPAA2_PMD_ERR("xstats id[%d] value(%" PRIu64 ") >= max count(%d)",
+				i, ids[i], stat_cnt);
 			return -EINVAL;
 		}
-		values[i] = values_copy[ids[i]];
+		if (ids[i] < DPAA2_DPNI_XSTAT_MAX_NUM) {
+			rte_strscpy(xstats_names[i].name, dpaa2_dpni_xstats_strings[ids[i]],
+				RTE_ETH_XSTATS_NAME_SIZE);
+		} else {
+			rte_strscpy(xstats_names[i].name,
+				dpaa2_mac_xstats_strings[ids[i] - DPAA2_DPNI_XSTAT_MAX_NUM],
+				RTE_ETH_XSTATS_NAME_SIZE);
+		}
 	}
-	return n;
+	return limit;
 }
 
 static int
-dpaa2_xstats_get_names_by_id(struct rte_eth_dev *dev,
-	const uint64_t *ids,
-	struct rte_eth_xstat_name *xstats_names,
-	unsigned int limit)
+dpaa2_dev_stats_get(struct rte_eth_dev *dev,
+	struct rte_eth_stats *stats, struct eth_queue_stats *qstats)
 {
-	unsigned int i, stat_cnt = RTE_DIM(dpaa2_xstats_strings);
-	struct rte_eth_xstat_name xstats_names_copy[stat_cnt];
+	struct dpaa2_dev_priv *priv = dev->data->dev_private;
+	int32_t retcode;
+	uint16_t stats_len = RTE_DIM(dpaa2_stats_strings), i, j, xstats_len;
+	struct dpaa2_queue *dpaa2_q;
+	uint64_t ids[stats_len];
+	uint64_t counts[stats_len];
+	uint64_t ifiltered = 0;
+	const char **dpni_nms = (const char **)&dpaa2_dpni_xstats_strings;
 
-	if (!ids)
-		return dpaa2_xstats_get_names(dev, xstats_names, limit);
+	PMD_INIT_FUNC_TRACE();
 
-	dpaa2_xstats_get_names(dev, xstats_names_copy, limit);
+	xstats_len = DPAA2_DPNI_XSTAT_MAX_NUM;
+	if (priv->ep_dev_type == DPAA2_MAC)
+		xstats_len += DPAA2_MAC_NUM_STATS;
 
-	for (i = 0; i < limit; i++) {
-		if (ids[i] >= stat_cnt) {
-			DPAA2_PMD_ERR("xstats id value isn't valid");
-			return -1;
+	if (!stats) {
+		DPAA2_PMD_ERR("stats is NULL");
+		return -EINVAL;
+	}
+
+	memset(stats, 0, sizeof(struct rte_eth_stats));
+
+	for (i = 0; i < stats_len; i++) {
+		for (j = 0; j < xstats_len; j++) {
+			if (j < DPAA2_DPNI_XSTAT_MAX_NUM) {
+				retcode = strcmp(dpaa2_stats_strings[i].name, dpni_nms[j]);
+			} else {
+				retcode = strcmp(dpaa2_stats_strings[i].name,
+					dpaa2_mac_xstats_strings[j - DPAA2_DPNI_XSTAT_MAX_NUM]);
+			}
+			if (!retcode) {
+				ids[i] = j;
+				break;
+			}
+		}
+		if (j == xstats_len) {
+			DPAA2_PMD_ERR("%s: stat(%s) not found in xstat!",
+				__func__, dpaa2_stats_strings[i].name);
+			return -EINVAL;
 		}
-		strcpy(xstats_names[i].name, xstats_names_copy[ids[i]].name);
 	}
-	return limit;
+
+	retcode = dpaa2_dev_xstats_get_by_id(dev, ids, counts, stats_len);
+	if (retcode != stats_len) {
+		DPAA2_PMD_ERR("%s: Failed to get xstats (%d)counters by %d IDs",
+			__func__, retcode, stats_len);
+		if (retcode >= 0)
+			retcode = -EINVAL;
+		return retcode;
+	}
+
+	for (i = 0; i < stats_len; i++) {
+		if (dpaa2_stats_strings[i].offset < sizeof(struct rte_eth_stats)) {
+			DPAA2_STATS_SET_BY_OFFSET(stats,
+				dpaa2_stats_strings[i].offset, counts[i]);
+		} else {
+			ifiltered = counts[i];
+		}
+	}
+	stats->imissed = stats->ierrors + stats->rx_nombuf + ifiltered;
+
+	if (qstats) {
+		for (i = 0; i < dev->data->nb_rx_queues; i++) {
+			dpaa2_q = priv->rx_vq[i];
+			if (dpaa2_q)
+				qstats[i].q_ipackets = dpaa2_q->rx_pkts;
+		}
+		for (i = 0; i < dev->data->nb_tx_queues; i++) {
+			dpaa2_q = priv->tx_vq[i];
+			if (dpaa2_q)
+				qstats[i].q_opackets = dpaa2_q->tx_pkts;
+		}
+	}
+
+	return 0;
 }
 
 static int
@@ -3326,9 +3595,9 @@ static struct eth_dev_ops dpaa2_ethdev_ops = {
 	.link_update	   = dpaa2_dev_link_update,
 	.stats_get	       = dpaa2_dev_stats_get,
 	.xstats_get	       = dpaa2_dev_xstats_get,
-	.xstats_get_by_id     = dpaa2_xstats_get_by_id,
-	.xstats_get_names_by_id = dpaa2_xstats_get_names_by_id,
-	.xstats_get_names      = dpaa2_xstats_get_names,
+	.xstats_get_by_id     = dpaa2_dev_xstats_get_by_id,
+	.xstats_get_names_by_id = dpaa2_dev_xstats_get_names_by_id,
+	.xstats_get_names      = dpaa2_dev_xstats_get_names,
 	.stats_reset	   = dpaa2_dev_stats_reset,
 	.xstats_reset	      = dpaa2_dev_stats_reset,
 	.fw_version_get	   = dpaa2_fw_version_get,
@@ -3682,17 +3951,6 @@ dpaa2_dev_init(struct rte_eth_dev *eth_dev)
 
 	priv->speed_capa = dpaa2_dev_get_speed_capability(eth_dev);
 
-	/* mac_statistics supported on MC version > 10.39.0 */
-	{
-		struct mc_version mc_ver_info = {0};
-
-		if (!mc_get_version(dpni_dev, CMD_PRI_LOW, &mc_ver_info) &&
-		    mc_ver_info.major >= MC_VER_MAJOR &&
-		    mc_ver_info.minor >= MC_VER_MINOR &&
-		    mc_ver_info.revision > 0)
-			dpaa2_dev_mac_setup_stats(eth_dev);
-	}
-
 	return 0;
 init_err:
 	dpaa2_dev_close(eth_dev);
diff --git a/drivers/net/dpaa2/dpaa2_ethdev.h b/drivers/net/dpaa2/dpaa2_ethdev.h
index cc0292cd9c..00bbc17862 100644
--- a/drivers/net/dpaa2/dpaa2_ethdev.h
+++ b/drivers/net/dpaa2/dpaa2_ethdev.h
@@ -206,6 +206,7 @@
 
 #define DPAA2_FLOW_FRM_REPLICATION_ACTION_MC_REV RTE_FSL_MC_REV(10, 39, 106)
 #define DPAA2_QOS_FLOW_TABLE_SET_V3_MC_REV RTE_FSL_MC_REV(10, 39, 109)
+#define DPAA2_MAC_XSTATS_MC_REV RTE_FSL_MC_REV(10, 39, 109)
 
 /* mac counters */
 #define DPAA2_MAC_NUM_STATS            (DPMAC_CNT_EGR_CONTROL_FRAME + 1)
@@ -514,6 +515,12 @@ struct dpaa2_dev_priv {
 	uint64_t cnt_idx_iova, cnt_values_iova;
 	uint64_t mc_rev;
 
+	/* Cache one dpni_statistics result per (page_id, param) pair to avoid
+	 * redundant MC commands when multiple xstats share the same page.
+	 * Put it in heap to avoid allocating multi-KB stack in runtime.
+	 */
+	union dpni_statistics pg_xstats[DPNI_MAX_STATISTICS_PAGE_ID][DPNI_STAT_MAX_PARAM];
+
 	struct dpaa2_dev_flow *curr;
 	LIST_HEAD(, dpaa2_dev_flow) flows;
 	LIST_HEAD(nodes, dpaa2_tm_node) nodes;
@@ -662,8 +669,4 @@ int dpaa2_timesync_read_tx_timestamp(struct rte_eth_dev *dev,
 
 int dpaa2_dev_recycle_config(struct rte_eth_dev *eth_dev);
 int dpaa2_dev_recycle_deconfig(struct rte_eth_dev *eth_dev);
-
-void
-dpaa2_dev_mac_setup_stats(struct rte_eth_dev *dev);
-
 #endif /* _DPAA2_ETHDEV_H */
diff --git a/drivers/net/dpaa2/mc/fsl_dpni.h b/drivers/net/dpaa2/mc/fsl_dpni.h
index f47f383a9b..b63627493a 100644
--- a/drivers/net/dpaa2/mc/fsl_dpni.h
+++ b/drivers/net/dpaa2/mc/fsl_dpni.h
@@ -688,50 +688,77 @@ int dpni_get_tx_data_offset(struct fsl_mc_io *mc_io,
  * @page_6.tx_pending_frames_cnt: total number of frames pending in Tx queues
  * @raw: raw statistics structure, used to index counters
  */
+enum dpni_statistics_page_id {
+	DPNI_INGRESS_STATISTICS_PAGE_ID = 0,
+	DPNI_EGRESS_STATISTICS_PAGE_ID = 1,
+	DPNI_ERR_STATISTICS_PAGE_ID = 2,
+	DPNI_CEETM_STATISTICS_PAGE_ID = 3,
+	DPNI_CGR_STATISTICS_PAGE_ID = 4,
+	DPNI_POLICER_STATISTICS_PAGE_ID = 5,
+	DPNI_TX_PENDING_STATISTICS_PAGE_ID = 6,
+	DPNI_MAX_STATISTICS_PAGE_ID
+};
+
+struct dpni_statistics_page_0 {
+	uint64_t ingress_all_frames;
+	uint64_t ingress_all_bytes;
+	uint64_t ingress_multicast_frames;
+	uint64_t ingress_multicast_bytes;
+	uint64_t ingress_broadcast_frames;
+	uint64_t ingress_broadcast_bytes;
+};
+
+struct dpni_statistics_page_1 {
+	uint64_t egress_all_frames;
+	uint64_t egress_all_bytes;
+	uint64_t egress_multicast_frames;
+	uint64_t egress_multicast_bytes;
+	uint64_t egress_broadcast_frames;
+	uint64_t egress_broadcast_bytes;
+};
+
+struct dpni_statistics_page_2 {
+	uint64_t ingress_filtered_frames;
+	uint64_t ingress_discarded_frames;
+	uint64_t ingress_nobuffer_discards;
+	uint64_t egress_discarded_frames;
+	uint64_t egress_confirmed_frames;
+};
+
+struct dpni_statistics_page_3 {
+	uint64_t ceetm_dequeue_bytes;
+	uint64_t ceetm_dequeue_frames;
+	uint64_t ceetm_reject_bytes;
+	uint64_t ceetm_reject_frames;
+};
+
+struct dpni_statistics_page_4 {
+	uint64_t cgr_reject_frames;
+	uint64_t cgr_reject_bytes;
+};
+
+struct dpni_statistics_page_5 {
+	uint64_t policer_cnt_red;
+	uint64_t policer_cnt_yellow;
+	uint64_t policer_cnt_green;
+	uint64_t policer_cnt_re_red;
+	uint64_t policer_cnt_re_yellow;
+};
+
+struct dpni_statistics_page_6 {
+	uint64_t tx_pending_frames_cnt;
+};
+
+#define DPNI_STAT_MAX_PARAM DPNI_MAX_TC
+
 union dpni_statistics {
-	struct {
-		uint64_t ingress_all_frames;
-		uint64_t ingress_all_bytes;
-		uint64_t ingress_multicast_frames;
-		uint64_t ingress_multicast_bytes;
-		uint64_t ingress_broadcast_frames;
-		uint64_t ingress_broadcast_bytes;
-	} page_0;
-	struct {
-		uint64_t egress_all_frames;
-		uint64_t egress_all_bytes;
-		uint64_t egress_multicast_frames;
-		uint64_t egress_multicast_bytes;
-		uint64_t egress_broadcast_frames;
-		uint64_t egress_broadcast_bytes;
-	} page_1;
-	struct {
-		uint64_t ingress_filtered_frames;
-		uint64_t ingress_discarded_frames;
-		uint64_t ingress_nobuffer_discards;
-		uint64_t egress_discarded_frames;
-		uint64_t egress_confirmed_frames;
-	} page_2;
-	struct {
-		uint64_t ceetm_dequeue_bytes;
-		uint64_t ceetm_dequeue_frames;
-		uint64_t ceetm_reject_bytes;
-		uint64_t ceetm_reject_frames;
-	} page_3;
-	struct {
-		uint64_t cgr_reject_frames;
-		uint64_t cgr_reject_bytes;
-	} page_4;
-	struct {
-		uint64_t policer_cnt_red;
-		uint64_t policer_cnt_yellow;
-		uint64_t policer_cnt_green;
-		uint64_t policer_cnt_re_red;
-		uint64_t policer_cnt_re_yellow;
-	} page_5;
-	struct {
-		uint64_t tx_pending_frames_cnt;
-	} page_6;
+	struct dpni_statistics_page_0 page_0;
+	struct dpni_statistics_page_1 page_1;
+	struct dpni_statistics_page_2 page_2;
+	struct dpni_statistics_page_3 page_3;
+	struct dpni_statistics_page_4 page_4;
+	struct dpni_statistics_page_5 page_5;
+	struct dpni_statistics_page_6 page_6;
 	struct {
 		uint64_t counter[DPNI_STATISTICS_CNT];
 	} raw;
@@ -2134,9 +2161,6 @@ int dpni_sp_enable(struct fsl_mc_io *mc_io, uint32_t cmd_flags, uint16_t token,
 int dpni_get_mac_statistics(struct fsl_mc_io *mc_io, uint32_t cmd_flags, uint16_t token,
 			    uint64_t iova_cnt, uint64_t iova_values, uint32_t num_cnt);
 
-int dpni_get_mac_statistics(struct fsl_mc_io *mc_io, uint32_t cmd_flags, uint16_t token,
-			    uint64_t iova_cnt, uint64_t iova_values, uint32_t num_cnt);
-
 int dpni_get_mac_speed_capability(struct fsl_mc_io *mc_io, uint32_t cmd_flags, uint16_t token,
 				  uint32_t *speed_cap);
 
-- 
2.43.0


  parent reply	other threads:[~2026-10-23 13:45 UTC|newest]

Thread overview: 356+ 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 ` [PATCH 29/45] drivers: assign dpaa2 Rx CGID per traffic class Prashant Gupta
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
2026-09-07 20:35 ` [PATCH 00/45] net/dpaa2: features and fixes for NXP DPAA2 drivers Stephen Hemminger
2026-09-07 20:47 ` Stephen Hemminger
2026-09-07 21:03 ` Stephen Hemminger
2026-09-07 21:10 ` Stephen Hemminger
2026-09-07 21:22 ` Stephen Hemminger
2026-09-10 13:51 ` [PATCH v2 00/47] NXP DPAA2 driver updates and fixes Prashant Gupta
2026-09-10 13:51   ` [PATCH v2 01/47] crypto/dpaa2_sec: fix buffer overflow in GCM decrypt Prashant Gupta
2026-09-10 13:51   ` [PATCH v2 02/47] crypto/dpaa2_sec: fix FLE pool leak on sec FD build failure Prashant Gupta
2026-09-10 13:51   ` [PATCH v2 03/47] crypto/dpaa2_sec: support AES-GMAC Prashant Gupta
2026-09-24 10:32     ` [EXTERNAL] " Akhil Goyal
2026-09-10 13:51   ` [PATCH v2 04/47] crypto/dpaa2_sec: increase ivsize range for AES-CTR Prashant Gupta
2026-09-10 13:51   ` [PATCH v2 05/47] crypto/dpaa2_sec: add missing ECN capability Prashant Gupta
2026-09-10 13:51   ` [PATCH v2 06/47] crypto/dpaa2_sec: add support for env variables Prashant Gupta
2026-09-24 10:33     ` [EXTERNAL] " Akhil Goyal
2026-09-10 13:51   ` [PATCH v2 07/47] net/dpaa2: fix integer overflow in CCSR region mapping Prashant Gupta
2026-09-10 13:51   ` [PATCH v2 08/47] dma/dpaa2: fix array-bounds warning in dequeue path Prashant Gupta
2026-09-10 13:51   ` [PATCH v2 09/47] bus/fslmc: defer bus initialization to probe Prashant Gupta
2026-09-10 13:51   ` [PATCH v2 10/47] dma/dpaa2: validate IOVA in pre-populate helpers Prashant Gupta
2026-09-10 13:51   ` [PATCH v2 11/47] dma/dpaa2: optimize context index ring enqueue Prashant Gupta
2026-09-10 13:51   ` [PATCH v2 12/47] drivers: add dpaa2 DMA bypass memory translation option Prashant Gupta
2026-09-10 13:51   ` [PATCH v2 13/47] mempool/dpaa2: support ops index from primary in secondary Prashant Gupta
2026-09-10 13:51   ` [PATCH v2 14/47] net/dpaa2: set Tx confirmation on device init Prashant Gupta
2026-09-10 13:51   ` [PATCH v2 15/47] drivers: optimize dpaa2 Tx queue and channel mapping Prashant Gupta
2026-09-10 13:51   ` [PATCH v2 16/47] net/dpaa2: support larger burst size Prashant Gupta
2026-09-10 13:51   ` [PATCH v2 17/47] net/dpaa2: support MPLS and PPPoE flow distribution Prashant Gupta
2026-09-10 13:51   ` [PATCH v2 18/47] net/dpaa2: support meter and policing Prashant Gupta
2026-09-10 13:51   ` [PATCH v2 19/47] net/dpaa2: support flow drop action Prashant Gupta
2026-09-10 13:51   ` [PATCH v2 20/47] net/dpaa2: set default flow miss action per device Prashant Gupta
2026-09-10 13:51   ` [PATCH v2 21/47] net/dpaa2: identify Rx mbuf hash information by FLC Prashant Gupta
2026-09-10 13:51   ` [PATCH v2 22/47] net/dpaa2: add minimum key size support Prashant Gupta
2026-09-10 13:51   ` [PATCH v2 23/47] net/dpaa2: restructure dpaa2 parser processing Prashant Gupta
2026-09-10 13:51   ` [PATCH v2 24/47] net/dpaa2: parse tunnel and fragmented packet types Prashant Gupta
2026-09-10 13:51   ` [PATCH v2 25/47] net/dpaa2: remove unused soft parser driver Prashant Gupta
2026-09-10 13:51   ` [PATCH v2 26/47] drivers: refresh dpaa2 MC and SoC version info Prashant Gupta
2026-09-10 13:51   ` [PATCH v2 27/47] drivers: identify dpaa2 soft parser protocol Prashant Gupta
2026-09-10 13:51   ` [PATCH v2 28/47] drivers: assign dpaa2 Rx CGID per traffic class Prashant Gupta
2026-09-10 13:51   ` [PATCH v2 29/47] drivers: inherit dpaa2 rxq config for event queue Prashant Gupta
2026-09-10 13:51   ` [PATCH v2 30/47] net/dpaa2: rename Rx queue flags Prashant Gupta
2026-09-10 13:51   ` [PATCH v2 31/47] drivers: rework dpaa2 Tx confirmation Prashant Gupta
2026-09-10 13:51   ` [PATCH v2 32/47] net/dpaa2: ptp enhancements Prashant Gupta
2026-09-10 13:51   ` [PATCH v2 33/47] net/dpaa2: remove unused soft parser Tx code Prashant Gupta
2026-09-10 13:51   ` [PATCH v2 34/47] net/dpaa2: update MC dpni QoS and flow steering API Prashant Gupta
2026-09-10 13:51   ` [PATCH v2 35/47] net/dpaa2: enhance xstat implementation Prashant Gupta
2026-09-10 13:51   ` [PATCH v2 36/47] net/dpaa2: rework flow engine Prashant Gupta
2026-09-10 13:51   ` [PATCH v2 37/47] net/dpaa2: support GENEVE flow item Prashant Gupta
2026-09-10 13:51   ` [PATCH v2 38/47] net/dpaa2: support flow meter and policer actions Prashant Gupta
2026-09-10 13:51   ` [PATCH v2 39/47] net/dpaa2: support flow table miss actions Prashant Gupta
2026-09-10 13:51   ` [PATCH v2 40/47] net/dpaa2: support Rx mempool per traffic class Prashant Gupta
2026-09-10 13:51   ` [PATCH v2 41/47] drivers: consume dpaa2 DQRR entries in batches Prashant Gupta
2026-09-10 13:51   ` [PATCH v2 42/47] drivers: resolve dpaa2 endpoint in the net driver Prashant Gupta
2026-09-10 13:51   ` [PATCH v2 43/47] drivers: align dpaa2 event port depths with hardware rings Prashant Gupta
2026-09-10 13:51   ` [PATCH v2 44/47] net/dpaa2: read MC version from device private data Prashant Gupta
2026-09-10 13:51   ` [PATCH v2 45/47] net/dpaa2: do not overwrite mbuf hash with drop priority Prashant Gupta
2026-09-10 13:51   ` [PATCH v2 46/47] bus/fslmc: reduce probe-time logging and MC traffic Prashant Gupta
2026-09-10 13:51   ` [PATCH v2 47/47] net/dpaa2: reject Rx queue deferred start Prashant Gupta
2026-09-15 11:34     ` [PATCH v3-S2 00/13] net/dpaa2: flow, meter and parser features Prashant Gupta
2026-09-15 11:34       ` [PATCH v3-S2 01/13] net/dpaa2: fix integer overflow in CCSR region mapping Prashant Gupta
2026-09-15 11:34       ` [PATCH v3-S2 02/13] net/dpaa2: set Tx confirmation on device init Prashant Gupta
2026-09-15 11:34       ` [PATCH v3-S2 03/13] net/dpaa2: support larger burst size Prashant Gupta
2026-09-15 11:34       ` [PATCH v3-S2 04/13] net/dpaa2: support MPLS and PPPoE flow distribution Prashant Gupta
2026-09-15 11:34       ` [PATCH v3-S2 05/13] net/dpaa2: support meter and policing Prashant Gupta
2026-09-15 11:34       ` [PATCH v3-S2 06/13] net/dpaa2: support flow drop action Prashant Gupta
2026-09-15 11:34       ` [PATCH v3-S2 07/13] net/dpaa2: set default flow miss action per device Prashant Gupta
2026-09-15 11:34       ` [PATCH v3-S2 08/13] net/dpaa2: identify Rx mbuf hash information by FLC Prashant Gupta
2026-09-15 11:34       ` [PATCH v3-S2 09/13] net/dpaa2: add minimum key size support Prashant Gupta
2026-09-15 11:34       ` [PATCH v3-S2 10/13] net/dpaa2: restructure dpaa2 parser processing Prashant Gupta
2026-09-15 11:34       ` [PATCH v3-S2 11/13] net/dpaa2: parse tunnel and fragmented packet types Prashant Gupta
2026-09-15 11:34       ` [PATCH v3-S2 12/13] net/dpaa2: remove unused soft parser driver Prashant Gupta
2026-09-15 11:34       ` [PATCH v3-S2 13/13] net/dpaa2: rename Rx queue flags Prashant Gupta
2026-09-15 12:01       ` [PATCH v3-S3 00/10] net/dpaa2: bus, DMA, eventdev and datapath rework Prashant Gupta
2026-09-15 12:01         ` [PATCH v3-S3 01/10] drivers: add dpaa2 DMA bypass memory translation option Prashant Gupta
2026-09-15 12:02         ` [PATCH v3-S3 02/10] drivers: optimize dpaa2 Tx queue and channel mapping Prashant Gupta
2026-09-15 12:02         ` [PATCH v3-S3 03/10] drivers: refresh dpaa2 MC and SoC version info Prashant Gupta
2026-09-17  6:51           ` David Marchand
2026-09-15 12:02         ` [PATCH v3-S3 04/10] drivers: identify dpaa2 soft parser protocol Prashant Gupta
2026-09-15 12:02         ` [PATCH v3-S3 05/10] drivers: assign dpaa2 Rx CGID per traffic class Prashant Gupta
2026-09-15 12:02         ` [PATCH v3-S3 06/10] drivers: inherit dpaa2 rxq config for event queue Prashant Gupta
2026-09-17  6:52           ` David Marchand
2026-09-15 12:02         ` [PATCH v3-S3 07/10] drivers: rework dpaa2 Tx confirmation Prashant Gupta
2026-09-15 12:02         ` [PATCH v3-S3 08/10] drivers: consume dpaa2 DQRR entries in batches Prashant Gupta
2026-09-15 12:02         ` [PATCH v3-S3 09/10] drivers: resolve dpaa2 endpoint in the net driver Prashant Gupta
2026-09-15 12:02         ` [PATCH v3-S3 10/10] drivers: align dpaa2 event port depths with hardware rings Prashant Gupta
2026-10-23 13:42         ` [PATCH v4-S3 00/65] net/dpaa2, event/dpaa2 and fslmc rework Prashant Gupta
2026-10-23 13:42           ` [PATCH v4-S3 01/65] net/dpaa2: refactor and optimize Rx parser result decode Prashant Gupta
2026-10-23 13:42           ` [PATCH v4-S3 02/65] net/dpaa2: generate devargs table and string from one list Prashant Gupta
2026-10-23 13:42           ` [PATCH v4-S3 03/65] crypto/dpaa2_sec: use table-driven devargs parsing Prashant Gupta
2026-10-23 13:42           ` [PATCH v4-S3 04/65] dma/dpaa2: " Prashant Gupta
2026-10-23 13:42           ` [PATCH v4-S3 05/65] net/dpaa2: unify debug dump via log based helpers Prashant Gupta
2026-10-23 13:42           ` [PATCH v4-S3 06/65] net/dpaa2: expose Rx L3/L4/L5 offsets via mbuf dynfield Prashant Gupta
2026-10-23 13:42           ` [PATCH v4-S3 07/65] net/dpaa2: optimize dpaa2 Tx queue and channel mapping Prashant Gupta
2026-10-23 13:42           ` [PATCH v4-S3 08/65] bus/fslmc: split bus-level device walk from VFIO primitives Prashant Gupta
2026-10-23 15:00             ` David Marchand
2026-10-23 13:42           ` [PATCH v4-S3 09/65] bus/fslmc: centralize MC version and SoC detection in the bus layer Prashant Gupta
2026-10-23 13:42           ` [PATCH v4-S3 10/65] net/dpaa2: remove unused soft parser loader Prashant Gupta
2026-10-23 13:42           ` [PATCH v4-S3 11/65] net/dpaa2: cache per-rxq DPNI queue cfg and share CGID per TC Prashant Gupta
2026-10-23 13:42           ` [PATCH v4-S3 12/65] The dpaa2 PMD so far supported only two Tx buffer release schemes: direct release by hardware, and an absolute Tx confirmation mode (drv_tx_conf=1) where every transmitted buffer is returned on a Tx confirmation queue that software must poll to free the buffers. Absolute confirmation adds a confirmation descriptor and a poll cost for all packets, even those the hardware could free on its own Prashant Gupta
2026-10-23 13:42           ` [PATCH v4-S3 13/65] net/dpaa2: support runtime IEEE1588 timestamping Prashant Gupta
2026-10-23 13:42           ` [PATCH v4-S3 14/65] bus/fslmc: consume dpaa2 DQRR entries in batches Prashant Gupta
2026-10-23 13:42           ` [PATCH v4-S3 15/65] bus/fslmc: align dpaa2 event port depths with hardware rings Prashant Gupta
2026-10-23 13:42           ` [PATCH v4-S3 16/65] net/dpaa2: support multi-DPNI FS redirect and QoS table v3 Prashant Gupta
2026-10-23 13:42           ` Prashant Gupta [this message]
2026-10-23 13:42           ` [PATCH v4-S3 18/65] net/dpaa2: unify xstats layout and add DPMAC counter struct Prashant Gupta
2026-10-23 13:42           ` [PATCH v4-S3 19/65] net/dpaa2: reimplement xstats_get() on top of xstats_get_by_id() Prashant Gupta
2026-10-23 13:43           ` [PATCH v4-S3 20/65] net/dpaa2: fetch only requested MAC xstats in one MC call Prashant Gupta
2026-10-23 13:43           ` [PATCH v4-S3 21/65] net/dpaa2: rework flow with per-table profile and group types Prashant Gupta
2026-10-23 13:43           ` [PATCH v4-S3 22/65] net/dpaa2: reimplement RSS distribution via rte_flow Prashant Gupta
2026-10-23 13:43           ` [PATCH v4-S3 23/65] net/dpaa2: expand IP address extracts for RSS hashing Prashant Gupta
2026-10-23 13:43           ` [PATCH v4-S3 24/65] net/dpaa2: add policer v2 MC command and L2/L3 byte units Prashant Gupta
2026-10-23 13:43           ` [PATCH v4-S3 25/65] net/dpaa2: support rte_mtr and METER rte_flow action Prashant Gupta
2026-10-23 13:43           ` [PATCH v4-S3 26/65] net/dpaa2: program flow table miss actions via rte_flow Prashant Gupta
2026-10-23 13:43           ` [PATCH v4-S3 27/65] net/dpaa2: support DCB Rx mode " Prashant Gupta
2026-10-23 13:43           ` [PATCH v4-S3 28/65] net/dpaa2: reject Rx queue deferred start Prashant Gupta
2026-10-23 13:43           ` [PATCH v4-S3 29/65] bus/fslmc: support DPCI peer and dynamic queues Prashant Gupta
2026-10-23 13:43           ` [PATCH v4-S3 30/65] bus/fslmc: add alloc/free DPIO API for non-affine portals Prashant Gupta
2026-10-23 13:43           ` [PATCH v4-S3 31/65] event/dpaa2: rework event port model and DPCI handling Prashant Gupta
2026-10-23 13:43           ` [PATCH v4-S3 32/65] event/dpaa2: fix Tx adapter enqueue for mixed destinations Prashant Gupta
2026-10-23 13:43           ` [PATCH v4-S3 33/65] event/dpaa2: rework self test for dynamic link and balance check Prashant Gupta
2026-10-23 13:43           ` [PATCH v4-S3 34/65] event/dpaa2: add DPCON based standalone Rx scheduler Prashant Gupta
2026-10-23 13:43           ` [PATCH v4-S3 35/65] event/dpaa2: add push mode to DPCON " Prashant Gupta
2026-10-23 13:43           ` [PATCH v4-S3 36/65] event/dpaa2: drain Rx scheduler queues on destroy Prashant Gupta
2026-10-23 13:43           ` [PATCH v4-S3 37/65] event/dpaa2: track and detach attached Rx queues Prashant Gupta
2026-10-23 13:43           ` [PATCH v4-S3 38/65] net/dpaa2: add multi-port Tx API Prashant Gupta
2026-10-23 13:43           ` [PATCH v4-S3 39/65] event/dpaa2: limit attached Rx flows per event queue Prashant Gupta
2026-10-23 13:43           ` [PATCH v4-S3 40/65] eventdev: fix port link/unlink callback return documentation Prashant Gupta
2026-10-23 13:43           ` [PATCH v4-S3 41/65] event/dpaa2: allow event queue link to multiple ports Prashant Gupta
2026-10-23 13:43           ` [PATCH v4-S3 42/65] event/dpaa2: report available DPIO count and fix create cleanup Prashant Gupta
2026-10-23 13:43           ` [PATCH v4-S3 43/65] event/dpaa2: use event port DPIO for dequeue wait Prashant Gupta
2026-10-23 13:43           ` [PATCH v4-S3 44/65] bus/fslmc: consolidate DPIO interrupt setup and bound coalescing Prashant Gupta
2026-10-23 13:43           ` [PATCH v4-S3 45/65] event/dpaa2: honor configured dequeue timeout Prashant Gupta
2026-10-23 13:43           ` [PATCH v4-S3 46/65] bus/fslmc: use EAL API for DPIO interrupt Prashant Gupta
2026-10-23 13:43           ` [PATCH v4-S3 47/65] bus/fslmc: defer DPIO interrupt setup and bind portal to worker core Prashant Gupta
2026-10-23 13:43           ` [PATCH v4-S3 48/65] bus/fslmc: move Tx SG mempool to fslmc bus Prashant Gupta
2026-10-23 13:43           ` [PATCH v4-S3 49/65] net/dpaa2: move DPNI endpoint lookup out of the " Prashant Gupta
2026-10-23 13:43           ` [PATCH v4-S3 50/65] net/dpaa2: add APIs to query device info and set default action Prashant Gupta
2026-10-23 13:43           ` [PATCH v4-S3 51/65] net/dpaa2: consolidate dequeue paths and optimize fast path Prashant Gupta
2026-10-23 13:43           ` [PATCH v4-S3 52/65] net/dpaa2: bind per-queue DPIO for rx-queue interrupts Prashant Gupta
2026-10-23 13:43           ` [PATCH v4-S3 53/65] net/dpaa2: add API to clean Tx confirmation queue Prashant Gupta
2026-10-23 13:43           ` [PATCH v4-S3 54/65] event/dpaa2: fix DQRR held buffer accounting on enqueue Prashant Gupta
2026-10-23 13:43           ` [PATCH v4-S3 55/65] bus/fslmc: store dequeue dpio in mbuf seq dynfield Prashant Gupta
2026-10-23 13:43           ` [PATCH v4-S3 56/65] bus/fslmc: use explicit flags for mbuf seqn encoding Prashant Gupta
2026-10-23 13:43           ` [PATCH v4-S3 57/65] net/dpaa2: unify tx burst path for ordered and atomic enqueue Prashant Gupta
2026-10-23 13:43           ` [PATCH v4-S3 58/65] crypto/dpaa2_sec: unify enqueue burst path for ordered enqueue Prashant Gupta
2026-10-23 13:43           ` [PATCH v4-S3 59/65] bus/fslmc: track atomic DCA context per dequeue dpio Prashant Gupta
2026-10-23 13:43           ` [PATCH v4-S3 60/65] bus/fslmc: move enqueue response descriptors to per-queue Prashant Gupta
2026-10-23 13:43           ` [PATCH v4-S3 61/65] event/dpaa2: add ordered schedule type support Prashant Gupta
2026-10-23 13:43           ` [PATCH v4-S3 62/65] bus/fslmc: make DPAA2 ORP/ODP ordering per-queue instead of per-device Prashant Gupta
2026-10-23 13:43           ` [PATCH v4-S3 63/65] event/dpaa2: support multi-port enqueue in selftest random event generator Prashant Gupta
2026-10-23 13:43           ` [PATCH v4-S3 64/65] event/dpaa2: do not fail device creation on DPCI errors Prashant Gupta
2026-10-23 13:43           ` [PATCH v4-S3 65/65] net/dpaa2: add Tx fast path for no-confirmation case Prashant Gupta
2026-09-15 15:42       ` [PATCH v3-S2 00/13] net/dpaa2: flow, meter and parser features Stephen Hemminger
2026-09-22  9:55       ` [PATCH v4-S2 " Prashant Gupta
2026-09-22  9:55         ` [PATCH v4-S2 01/13] net/dpaa2: fix integer overflow in CCSR region mapping Prashant Gupta
2026-09-22  9:55         ` [PATCH v4-S2 02/13] net/dpaa2: set Tx confirmation on device init Prashant Gupta
2026-09-22  9:55         ` [PATCH v4-S2 03/13] net/dpaa2: support larger burst size Prashant Gupta
2026-09-22  9:55         ` [PATCH v4-S2 04/13] net/dpaa2: support MPLS and PPPoE flow distribution Prashant Gupta
2026-09-22  9:55         ` [PATCH v4-S2 05/13] net/dpaa2: support meter and policing Prashant Gupta
2026-09-22  9:55         ` [PATCH v4-S2 06/13] net/dpaa2: support flow drop action Prashant Gupta
2026-09-22  9:55         ` [PATCH v4-S2 07/13] net/dpaa2: set default flow miss action per device Prashant Gupta
2026-09-22  9:55         ` [PATCH v4-S2 08/13] net/dpaa2: identify Rx mbuf hash information by FLC Prashant Gupta
2026-09-22  9:55         ` [PATCH v4-S2 09/13] net/dpaa2: add minimum key size support Prashant Gupta
2026-09-22  9:55         ` [PATCH v4-S2 10/13] net/dpaa2: restructure dpaa2 parser processing Prashant Gupta
2026-09-22  9:55         ` [PATCH v4-S2 11/13] net/dpaa2: parse tunnel and fragmented packet types Prashant Gupta
2026-09-22  9:55         ` [PATCH v4-S2 12/13] net/dpaa2: remove unused soft parser driver Prashant Gupta
2026-09-22  9:55         ` [PATCH v4-S2 13/13] net/dpaa2: rename Rx queue flags Prashant Gupta
2026-09-22 13:39         ` [PATCH v4-S2 00/13] net/dpaa2: flow, meter and parser features Stephen Hemminger
2026-10-01  7:32         ` [PATCH v5-S2 " Prashant Gupta
2026-10-01  7:32           ` [PATCH v5-S2 01/13] net/dpaa2: fix integer overflow in CCSR region mapping Prashant Gupta
2026-10-01  7:32           ` [PATCH v5-S2 02/13] net/dpaa2: set Tx confirmation on device init Prashant Gupta
2026-10-01  7:32           ` [PATCH v5-S2 03/13] net/dpaa2: support larger burst size Prashant Gupta
2026-10-01  7:32           ` [PATCH v5-S2 04/13] net/dpaa2: support MPLS and PPPoE flow distribution Prashant Gupta
2026-10-01  7:32           ` [PATCH v5-S2 05/13] net/dpaa2: support meter and policing Prashant Gupta
2026-10-01  7:33           ` [PATCH v5-S2 06/13] net/dpaa2: support flow drop action Prashant Gupta
2026-10-01  7:33           ` [PATCH v5-S2 07/13] net/dpaa2: set default flow miss action per device Prashant Gupta
2026-10-01  7:33           ` [PATCH v5-S2 08/13] net/dpaa2: identify Rx mbuf hash information by FLC Prashant Gupta
2026-10-01  7:33           ` [PATCH v5-S2 09/13] net/dpaa2: add minimum key size support Prashant Gupta
2026-10-01  7:33           ` [PATCH v5-S2 10/13] net/dpaa2: restructure dpaa2 parser processing Prashant Gupta
2026-10-01  7:33           ` [PATCH v5-S2 11/13] net/dpaa2: parse tunnel and fragmented packet types Prashant Gupta
2026-10-01  7:33           ` [PATCH v5-S2 12/13] net/dpaa2: remove unused soft parser driver Prashant Gupta
2026-10-01  7:33           ` [PATCH v5-S2 13/13] net/dpaa2: rename Rx queue flags Prashant Gupta
2026-10-02 16:42           ` [PATCH v5-S2 00/13] net/dpaa2: flow, meter and parser features Stephen Hemminger
2026-10-06 15:09           ` [PATCH v6-S2 " Prashant Gupta
2026-10-06 15:09             ` [PATCH v6-S2 01/13] net/dpaa2: fix integer overflow in CCSR region mapping Prashant Gupta
2026-10-06 15:09             ` [PATCH v6-S2 02/13] net/dpaa2: set Tx confirmation on device init Prashant Gupta
2026-10-06 15:09             ` [PATCH v6-S2 03/13] net/dpaa2: support larger burst size Prashant Gupta
2026-10-06 15:10             ` [PATCH v6-S2 04/13] net/dpaa2: support MPLS and PPPoE flow distribution Prashant Gupta
2026-10-06 15:10             ` [PATCH v6-S2 05/13] net/dpaa2: support meter and policing Prashant Gupta
2026-10-06 15:10             ` [PATCH v6-S2 06/13] net/dpaa2: support flow drop action Prashant Gupta
2026-10-06 15:10             ` [PATCH v6-S2 07/13] net/dpaa2: set default flow miss action per device Prashant Gupta
2026-10-06 15:10             ` [PATCH v6-S2 08/13] net/dpaa2: identify Rx mbuf hash information by FLC Prashant Gupta
2026-10-06 15:10             ` [PATCH v6-S2 09/13] net/dpaa2: add minimum key size support Prashant Gupta
2026-10-06 15:10             ` [PATCH v6-S2 10/13] net/dpaa2: restructure dpaa2 parser processing Prashant Gupta
2026-10-06 15:10             ` [PATCH v6-S2 11/13] net/dpaa2: parse tunnel and fragmented packet types Prashant Gupta
2026-10-06 15:10             ` [PATCH v6-S2 12/13] net/dpaa2: remove unused soft parser driver Prashant Gupta
2026-10-06 15:10             ` [PATCH v6-S2 13/13] net/dpaa2: rename Rx queue flags Prashant Gupta
2026-10-07  6:02             ` [PATCH v7-S2 00/13] net/dpaa2: flow, meter and parser features Prashant Gupta
2026-10-07  6:02               ` [PATCH v7-S2 01/13] net/dpaa2: fix integer overflow in CCSR region mapping Prashant Gupta
2026-10-07  6:02               ` [PATCH v7-S2 02/13] net/dpaa2: set Tx confirmation on device init Prashant Gupta
2026-10-07  6:02               ` [PATCH v7-S2 03/13] net/dpaa2: support larger burst size Prashant Gupta
2026-10-07  6:02               ` [PATCH v7-S2 04/13] net/dpaa2: support MPLS and PPPoE flow distribution Prashant Gupta
2026-10-07  6:02               ` [PATCH v7-S2 05/13] net/dpaa2: support meter and policing Prashant Gupta
2026-10-07  6:02               ` [PATCH v7-S2 06/13] net/dpaa2: support flow drop action Prashant Gupta
2026-10-07  6:02               ` [PATCH v7-S2 07/13] net/dpaa2: set default flow miss action per device Prashant Gupta
2026-10-07  6:02               ` [PATCH v7-S2 08/13] net/dpaa2: identify Rx mbuf hash information by FLC Prashant Gupta
2026-10-07  6:02               ` [PATCH v7-S2 09/13] net/dpaa2: add minimum key size support Prashant Gupta
2026-10-07  6:02               ` [PATCH v7-S2 10/13] net/dpaa2: restructure dpaa2 parser processing Prashant Gupta
2026-10-07  6:02               ` [PATCH v7-S2 11/13] net/dpaa2: parse tunnel and fragmented packet types Prashant Gupta
2026-10-07  6:02               ` [PATCH v7-S2 12/13] net/dpaa2: remove unused soft parser driver Prashant Gupta
2026-10-07  6:02               ` [PATCH v7-S2 13/13] net/dpaa2: rename Rx queue flags Prashant Gupta
2026-10-07 16:25               ` [PATCH v7-S2 00/13] net/dpaa2: flow, meter and parser features Stephen Hemminger
2026-10-09 10:48               ` [PATCH v8-S2 00/13] net/dpaa2 updates Prashant Gupta
2026-10-09 10:48                 ` [PATCH v8-S2 01/13] net/dpaa2: fix integer overflow in CCSR region mapping Prashant Gupta
2026-10-09 10:48                 ` [PATCH v8-S2 02/13] net/dpaa2: set Tx confirmation on device init Prashant Gupta
2026-10-09 10:48                 ` [PATCH v8-S2 03/13] net/dpaa2: support larger burst size Prashant Gupta
2026-10-09 10:48                 ` [PATCH v8-S2 04/13] net/dpaa2: support MPLS and PPPoE flow distribution Prashant Gupta
2026-10-09 10:48                 ` [PATCH v8-S2 05/13] net/dpaa2: support meter and policing Prashant Gupta
2026-10-09 10:48                 ` [PATCH v8-S2 06/13] net/dpaa2: support flow drop action Prashant Gupta
2026-10-09 10:48                 ` [PATCH v8-S2 07/13] net/dpaa2: set default flow miss action per device Prashant Gupta
2026-10-09 10:48                 ` [PATCH v8-S2 08/13] net/dpaa2: identify Rx mbuf hash information by FLC Prashant Gupta
2026-10-09 10:48                 ` [PATCH v8-S2 09/13] net/dpaa2: add minimum key size support Prashant Gupta
2026-10-09 10:48                 ` [PATCH v8-S2 10/13] net/dpaa2: restructure dpaa2 parser processing Prashant Gupta
2026-10-09 10:48                 ` [PATCH v8-S2 11/13] net/dpaa2: parse tunnel and fragmented packet types Prashant Gupta
2026-10-09 10:48                 ` [PATCH v8-S2 12/13] net/dpaa2: remove unused soft parser driver Prashant Gupta
2026-10-09 10:49                 ` [PATCH v8-S2 13/13] net/dpaa2: rename Rx queue flags Prashant Gupta
2026-10-09 19:09                 ` [PATCH v8-S2 00/13] net/dpaa2 updates Stephen Hemminger
2026-10-12  7:04                 ` [PATCH v9-S2 " Prashant Gupta
2026-10-12  7:04                   ` [PATCH v9-S2 01/13] net/dpaa2: fix integer overflow in CCSR region mapping Prashant Gupta
2026-10-13 14:52                     ` Stephen Hemminger
2026-10-12  7:04                   ` [PATCH v9-S2 02/13] net/dpaa2: set Tx confirmation on device init Prashant Gupta
2026-10-12  7:04                   ` [PATCH v9-S2 03/13] net/dpaa2: support larger burst size Prashant Gupta
2026-10-12  7:04                   ` [PATCH v9-S2 04/13] net/dpaa2: support MPLS and PPPoE flow distribution Prashant Gupta
2026-10-13 14:54                     ` Stephen Hemminger
2026-10-12  7:04                   ` [PATCH v9-S2 05/13] net/dpaa2: support meter and policing Prashant Gupta
2026-10-13 14:55                     ` Stephen Hemminger
2026-10-13 14:56                     ` Stephen Hemminger
2026-10-13 15:11                     ` Stephen Hemminger
2026-10-12  7:04                   ` [PATCH v9-S2 06/13] net/dpaa2: support flow drop action Prashant Gupta
2026-10-12  7:04                   ` [PATCH v9-S2 07/13] net/dpaa2: set default flow miss action per device Prashant Gupta
2026-10-12  7:04                   ` [PATCH v9-S2 08/13] net/dpaa2: identify Rx mbuf hash information by FLC Prashant Gupta
2026-10-12  7:04                   ` [PATCH v9-S2 09/13] net/dpaa2: add minimum key size support Prashant Gupta
2026-10-12  7:04                   ` [PATCH v9-S2 10/13] net/dpaa2: restructure dpaa2 parser processing Prashant Gupta
2026-10-12  7:04                   ` [PATCH v9-S2 11/13] net/dpaa2: parse tunnel and fragmented packet types Prashant Gupta
2026-10-12  7:04                   ` [PATCH v9-S2 12/13] net/dpaa2: remove unused soft parser driver Prashant Gupta
2026-10-12  7:04                   ` [PATCH v9-S2 13/13] net/dpaa2: rename Rx queue flags Prashant Gupta
2026-10-12 21:22                   ` [PATCH v9-S2 00/13] net/dpaa2 updates Stephen Hemminger
2026-10-14  5:43                   ` [PATCH v10-S2 00/11] " Prashant Gupta
2026-10-14  5:43                     ` [PATCH v10-S2 01/11] net/dpaa2: fix integer overflow in CCSR region mapping Prashant Gupta
2026-10-14  5:43                     ` [PATCH v10-S2 02/11] net/dpaa2: set Tx confirmation on device init Prashant Gupta
2026-10-14  5:43                     ` [PATCH v10-S2 03/11] net/dpaa2: support larger burst size Prashant Gupta
2026-10-14  5:43                     ` [PATCH v10-S2 04/11] net/dpaa2: support MPLS and PPPoE flow distribution Prashant Gupta
2026-10-14  5:43                     ` [PATCH v10-S2 05/11] net/dpaa2: support flow drop action Prashant Gupta
2026-10-14  5:43                     ` [PATCH v10-S2 06/11] net/dpaa2: set default flow miss action per device Prashant Gupta
2026-10-14  5:43                     ` [PATCH v10-S2 07/11] net/dpaa2: identify Rx mbuf hash information by FLC Prashant Gupta
2026-10-14  5:43                     ` [PATCH v10-S2 08/11] net/dpaa2: add minimum key size support Prashant Gupta
2026-10-14  5:43                     ` [PATCH v10-S2 09/11] net/dpaa2: parse tunnel and fragmented packet types Prashant Gupta
2026-10-14 17:18                       ` Stephen Hemminger
2026-10-14  5:43                     ` [PATCH v10-S2 10/11] net/dpaa2: remove unused soft parser driver Prashant Gupta
2026-10-14  5:44                     ` [PATCH v10-S2 11/11] net/dpaa2: rename Rx queue flags Prashant Gupta
2026-10-15  9:25                     ` [PATCH v11-S2 00/11] net/dpaa2 updates Prashant Gupta
2026-10-15  9:25                       ` [PATCH v11-S2 01/11] net/dpaa2: fix integer overflow in CCSR region mapping Prashant Gupta
2026-10-15  9:25                       ` [PATCH v11-S2 02/11] net/dpaa2: set Tx confirmation on device init Prashant Gupta
2026-10-15  9:25                       ` [PATCH v11-S2 03/11] net/dpaa2: support larger burst size Prashant Gupta
2026-10-15  9:25                       ` [PATCH v11-S2 04/11] net/dpaa2: support MPLS and PPPoE flow distribution Prashant Gupta
2026-10-15  9:25                       ` [PATCH v11-S2 05/11] net/dpaa2: support flow drop action Prashant Gupta
2026-10-15  9:25                       ` [PATCH v11-S2 06/11] net/dpaa2: set default flow miss action per device Prashant Gupta
2026-10-15  9:25                       ` [PATCH v11-S2 07/11] net/dpaa2: identify Rx mbuf hash information by FLC Prashant Gupta
2026-10-15  9:25                       ` [PATCH v11-S2 08/11] net/dpaa2: add minimum key size support Prashant Gupta
2026-10-15  9:25                       ` [PATCH v11-S2 09/11] net/dpaa2: parse tunnel and fragmented packet types Prashant Gupta
2026-10-15  9:25                       ` [PATCH v11-S2 10/11] net/dpaa2: remove unused soft parser driver Prashant Gupta
2026-10-15 23:36                         ` Stephen Hemminger
2026-10-15  9:25                       ` [PATCH v11-S2 11/11] net/dpaa2: rename Rx queue flags Prashant Gupta
2026-10-15 23:26                       ` [PATCH v11-S2 00/11] net/dpaa2 updates Stephen Hemminger
2026-10-16  7:03                       ` [PATCH v12-S2 " Prashant Gupta
2026-10-16  7:03                         ` [PATCH v12-S2 01/11] net/dpaa2: fix integer overflow in CCSR region mapping Prashant Gupta
2026-10-16  7:03                         ` [PATCH v12-S2 02/11] net/dpaa2: set Tx confirmation on device init Prashant Gupta
2026-10-16  7:03                         ` [PATCH v12-S2 03/11] net/dpaa2: support larger burst size Prashant Gupta
2026-10-16  7:03                         ` [PATCH v12-S2 04/11] net/dpaa2: support MPLS and PPPoE flow distribution Prashant Gupta
2026-10-16  7:03                         ` [PATCH v12-S2 05/11] net/dpaa2: support flow drop action Prashant Gupta
2026-10-16  7:03                         ` [PATCH v12-S2 06/11] net/dpaa2: set default flow miss action per device Prashant Gupta
2026-10-16  7:03                         ` [PATCH v12-S2 07/11] net/dpaa2: identify Rx mbuf hash information by FLC Prashant Gupta
2026-10-16  7:03                         ` [PATCH v12-S2 08/11] net/dpaa2: add minimum key size support Prashant Gupta
2026-10-16  7:03                         ` [PATCH v12-S2 09/11] net/dpaa2: parse tunnel and fragmented packet types Prashant Gupta
2026-10-16  7:03                         ` [PATCH v12-S2 10/11] net/dpaa2: remove unused soft parser driver Prashant Gupta
2026-10-20 13:45                           ` Stephen Hemminger
2026-10-16  7:03                         ` [PATCH v12-S2 11/11] net/dpaa2: rename Rx queue flags Prashant Gupta
2026-10-16 16:18                         ` [PATCH v12-S2 00/11] net/dpaa2 updates Stephen Hemminger
2026-10-19 18:34                         ` [PATCH v13-S2 00/10] " Prashant Gupta
2026-10-19 18:34                           ` [PATCH v13-S2 01/10] net/dpaa2: fix integer overflow in CCSR region mapping Prashant Gupta
2026-10-19 18:34                           ` [PATCH v13-S2 02/10] net/dpaa2: set Tx confirmation on device init Prashant Gupta
2026-10-19 18:34                           ` [PATCH v13-S2 03/10] net/dpaa2: support larger burst size Prashant Gupta
2026-10-19 18:34                           ` [PATCH v13-S2 04/10] net/dpaa2: support MPLS and PPPoE flow distribution Prashant Gupta
2026-10-19 18:34                           ` [PATCH v13-S2 05/10] net/dpaa2: support flow drop action Prashant Gupta
2026-10-19 18:34                           ` [PATCH v13-S2 06/10] net/dpaa2: set default flow miss action per device Prashant Gupta
2026-10-19 18:34                           ` [PATCH v13-S2 07/10] net/dpaa2: identify Rx mbuf hash information by FLC Prashant Gupta
2026-10-19 18:34                           ` [PATCH v13-S2 08/10] net/dpaa2: add minimum key size support Prashant Gupta
2026-10-19 18:34                           ` [PATCH v13-S2 09/10] net/dpaa2: parse tunnel and fragmented packet types Prashant Gupta
2026-10-19 18:34                           ` [PATCH v13-S2 10/10] net/dpaa2: rename Rx queue flags Prashant Gupta
2026-10-20 14:48                           ` [PATCH v14-S2 00/10] net/dpaa2 updates Prashant Gupta
2026-10-20 14:48                             ` [PATCH v14-S2 01/10] net/dpaa2: fix integer overflow in CCSR region mapping Prashant Gupta
2026-10-20 14:48                             ` [PATCH v14-S2 02/10] net/dpaa2: set Tx confirmation on device init Prashant Gupta
2026-10-20 14:48                             ` [PATCH v14-S2 03/10] net/dpaa2: support larger burst size Prashant Gupta
2026-10-20 14:48                             ` [PATCH v14-S2 04/10] net/dpaa2: support MPLS and PPPoE flow distribution Prashant Gupta
2026-10-20 14:48                             ` [PATCH v14-S2 05/10] net/dpaa2: support flow drop action Prashant Gupta
2026-10-20 14:48                             ` [PATCH v14-S2 06/10] net/dpaa2: set default flow miss action per device Prashant Gupta
2026-10-20 14:48                             ` [PATCH v14-S2 07/10] net/dpaa2: identify Rx mbuf hash information by FLC Prashant Gupta
2026-10-20 14:48                             ` [PATCH v14-S2 08/10] net/dpaa2: add minimum key size support Prashant Gupta
2026-10-20 14:48                             ` [PATCH v14-S2 09/10] net/dpaa2: parse tunnel and fragmented packet types Prashant Gupta
2026-10-20 14:48                             ` [PATCH v14-S2 10/10] net/dpaa2: rename Rx queue flags Prashant Gupta
2026-10-20 15:07                             ` [PATCH v14-S2 00/10] net/dpaa2 updates Stephen Hemminger
2026-09-10 16:57   ` [PATCH v2 00/47] NXP DPAA2 driver updates and fixes Stephen Hemminger

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=20261023134346.37727-18-prashant.gupta_3@nxp.com \
    --to=prashant.gupta_3@nxp.com \
    --cc=breeson.francis@nokia.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.