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, ¶m, &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, ¶m, 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
next prev 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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox