dev.dpdk.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 00/11] net/enetc: various fixes and enhancements
@ 2025-10-06  8:03 Hemant Agrawal
  2025-10-06  8:04 ` [PATCH 01/11] net/enetfec: fix file descriptor leak on read error Hemant Agrawal
                   ` (10 more replies)
  0 siblings, 11 replies; 12+ messages in thread
From: Hemant Agrawal @ 2025-10-06  8:03 UTC (permalink / raw)
  To: dev, stephen, david.marchand

This patch includes:

1. Various fixes as identified by NXP internal coverity
2. packet parsing and MAC address support

Hemant Agrawal (10):
  net/enetfec: fix file descriptor leak on read error
  net/enetfec: fix buffer descriptor size configuration
  net/enetfec: fix incorrect Tx queue free logic
  net/enetfec: fix checksum flag handling and error return
  net/enetfec: fix to reject multi-queue configuration
  net/enetfec: fix memory leak in Rx buffer cleanup
  net/enetfec: fix to add check for Rx/Tx deferred queue
  net/enetfec: handle cache for forwarded packets
  net/enetfec: support to set MAC address
  net/enetfec: add software packet type parsing and cleanup

Vanshika Shukla (1):
  net/enetfec: fix out-of-bounds access in UIO mapping

 drivers/net/enetfec/enet_ethdev.c | 103 +++++++++++++++++-------------
 drivers/net/enetfec/enet_ethdev.h |  59 +++++++++++++++--
 drivers/net/enetfec/enet_rxtx.c   |  27 ++++++--
 drivers/net/enetfec/enet_uio.c    |  11 +++-
 4 files changed, 140 insertions(+), 60 deletions(-)

-- 
2.25.1


^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH 01/11] net/enetfec: fix file descriptor leak on read error
  2025-10-06  8:03 [PATCH 00/11] net/enetc: various fixes and enhancements Hemant Agrawal
@ 2025-10-06  8:04 ` Hemant Agrawal
  2025-10-06  8:04 ` [PATCH 02/11] net/enetfec: fix out-of-bounds access in UIO mapping Hemant Agrawal
                   ` (9 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: Hemant Agrawal @ 2025-10-06  8:04 UTC (permalink / raw)
  To: dev, stephen, david.marchand; +Cc: stable

The file descriptor was not closed when a read error occurred while
reading the first line from a UIO device file. This could lead to
resource leakage. The patch ensures the descriptor is closed in
case of read failure.

Fixes: b84fdd39638b ("net/enetfec: support UIO")
Cc: stable@dpdk.org

Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
 drivers/net/enetfec/enet_uio.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/drivers/net/enetfec/enet_uio.c b/drivers/net/enetfec/enet_uio.c
index 9f4e896985..23cb4e7e93 100644
--- a/drivers/net/enetfec/enet_uio.c
+++ b/drivers/net/enetfec/enet_uio.c
@@ -1,5 +1,5 @@
 /* SPDX-License-Identifier: BSD-3-Clause
- * Copyright 2021 NXP
+ * Copyright 2021,2024 NXP
  */
 
 #include <stdbool.h>
@@ -66,13 +66,16 @@ file_read_first_line(const char root[], const char subdir[],
 		"%s/%s/%s", root, subdir, filename);
 
 	fd = open(absolute_file_name, O_RDONLY);
-	if (fd <= 0)
+	if (fd < 0) {
 		ENETFEC_PMD_ERR("Error opening file %s", absolute_file_name);
+		return fd;
+	}
 
 	/* read UIO device name from first line in file */
 	ret = read(fd, line, FEC_UIO_MAX_DEVICE_FILE_NAME_LENGTH);
 	if (ret <= 0) {
 		ENETFEC_PMD_ERR("Error reading file %s", absolute_file_name);
+		close(fd);
 		return ret;
 	}
 	close(fd);
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH 02/11] net/enetfec: fix out-of-bounds access in UIO mapping
  2025-10-06  8:03 [PATCH 00/11] net/enetc: various fixes and enhancements Hemant Agrawal
  2025-10-06  8:04 ` [PATCH 01/11] net/enetfec: fix file descriptor leak on read error Hemant Agrawal
@ 2025-10-06  8:04 ` Hemant Agrawal
  2025-10-06  8:04 ` [PATCH 03/11] net/enetfec: fix buffer descriptor size configuration Hemant Agrawal
                   ` (8 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: Hemant Agrawal @ 2025-10-06  8:04 UTC (permalink / raw)
  To: dev, stephen, david.marchand; +Cc: Vanshika Shukla, stable

From: Vanshika Shukla <vanshika.shukla@nxp.com>

NXP internal Coverity flagged a potential out-of-bounds
access due to invalid mapping size. This patch adds a check to
ensure the mapping size is within valid bounds before proceeding
with memory mapping.

Fixes: b84fdd39638b ("net/enetfec: support UIO")
Cc: stable@dpdk.org

Signed-off-by: Vanshika Shukla <vanshika.shukla@nxp.com>
---
 drivers/net/enetfec/enet_uio.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/drivers/net/enetfec/enet_uio.c b/drivers/net/enetfec/enet_uio.c
index 23cb4e7e93..f32d5e1b1e 100644
--- a/drivers/net/enetfec/enet_uio.c
+++ b/drivers/net/enetfec/enet_uio.c
@@ -1,5 +1,5 @@
 /* SPDX-License-Identifier: BSD-3-Clause
- * Copyright 2021,2024 NXP
+ * Copyright 2021,2024-2025 NXP
  */
 
 #include <stdbool.h>
@@ -142,6 +142,10 @@ uio_map_mem(int uio_device_fd, int uio_device_id,
 	}
 	/* Read mapping size and physical address expressed in hexa(base 16) */
 	uio_map_size = strtol(uio_map_size_str, NULL, 16);
+	if (uio_map_size <= 0 || uio_map_size > INT_MAX) {
+		ENETFEC_PMD_ERR("Invalid mapping size: %u.", uio_map_size);
+		return NULL;
+	}
 	uio_map_p_addr = strtol(uio_map_p_addr_str, NULL, 16);
 
 	if (uio_map_id == 0) {
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH 03/11] net/enetfec: fix buffer descriptor size configuration
  2025-10-06  8:03 [PATCH 00/11] net/enetc: various fixes and enhancements Hemant Agrawal
  2025-10-06  8:04 ` [PATCH 01/11] net/enetfec: fix file descriptor leak on read error Hemant Agrawal
  2025-10-06  8:04 ` [PATCH 02/11] net/enetfec: fix out-of-bounds access in UIO mapping Hemant Agrawal
@ 2025-10-06  8:04 ` Hemant Agrawal
  2025-10-06  8:04 ` [PATCH 04/11] net/enetfec: fix incorrect Tx queue free logic Hemant Agrawal
                   ` (7 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: Hemant Agrawal @ 2025-10-06  8:04 UTC (permalink / raw)
  To: dev, stephen, david.marchand; +Cc: stable

The driver previously allowed arbitrary descriptor counts, which could
lead to misaligned buffer allocations. This patch enforces the use of
fixed descriptor ring sizes for both RX and TX queues, ensuring proper
buffer allocation and avoiding potential runtime issues.

Fixes: bb5b5bf1e5c6 ("net/enetfec: support queue configuration")
Cc: stable@dpdk.org

Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
 drivers/net/enetfec/enet_ethdev.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/net/enetfec/enet_ethdev.c b/drivers/net/enetfec/enet_ethdev.c
index 7c2926409e..f7a45fcd4d 100644
--- a/drivers/net/enetfec/enet_ethdev.c
+++ b/drivers/net/enetfec/enet_ethdev.c
@@ -384,7 +384,7 @@ enetfec_tx_queue_setup(struct rte_eth_dev *dev,
 		return -ENOMEM;
 	}
 
-	if (nb_desc > MAX_TX_BD_RING_SIZE) {
+	if (nb_desc != MAX_TX_BD_RING_SIZE) {
 		nb_desc = MAX_TX_BD_RING_SIZE;
 		ENETFEC_PMD_WARN("modified the nb_desc to MAX_TX_BD_RING_SIZE");
 	}
@@ -462,7 +462,7 @@ enetfec_rx_queue_setup(struct rte_eth_dev *dev,
 		return -ENOMEM;
 	}
 
-	if (nb_rx_desc > MAX_RX_BD_RING_SIZE) {
+	if (nb_rx_desc != MAX_RX_BD_RING_SIZE) {
 		nb_rx_desc = MAX_RX_BD_RING_SIZE;
 		ENETFEC_PMD_WARN("modified the nb_desc to MAX_RX_BD_RING_SIZE");
 	}
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH 04/11] net/enetfec: fix incorrect Tx queue free logic
  2025-10-06  8:03 [PATCH 00/11] net/enetc: various fixes and enhancements Hemant Agrawal
                   ` (2 preceding siblings ...)
  2025-10-06  8:04 ` [PATCH 03/11] net/enetfec: fix buffer descriptor size configuration Hemant Agrawal
@ 2025-10-06  8:04 ` Hemant Agrawal
  2025-10-06  8:04 ` [PATCH 05/11] net/enetfec: fix checksum flag handling and error return Hemant Agrawal
                   ` (6 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: Hemant Agrawal @ 2025-10-06  8:04 UTC (permalink / raw)
  To: dev, stephen, david.marchand; +Cc: stable

The TX queue cleanup mistakenly freed RX queue pointers instead of TX
queue pointers. This patch corrects the loop to free the correct memory.

Fixes: ecae71571b0d ("net/enetfec: support Rx/Tx")
Cc: stable@dpdk.org

Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
 drivers/net/enetfec/enet_ethdev.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/enetfec/enet_ethdev.c b/drivers/net/enetfec/enet_ethdev.c
index f7a45fcd4d..16f36a53f1 100644
--- a/drivers/net/enetfec/enet_ethdev.c
+++ b/drivers/net/enetfec/enet_ethdev.c
@@ -350,7 +350,7 @@ enet_free_queue(struct rte_eth_dev *dev)
 	for (i = 0; i < dev->data->nb_rx_queues; i++)
 		rte_free(fep->rx_queues[i]);
 	for (i = 0; i < dev->data->nb_tx_queues; i++)
-		rte_free(fep->rx_queues[i]);
+		rte_free(fep->tx_queues[i]);
 }
 
 static const unsigned short offset_des_active_rxq[] = {
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH 05/11] net/enetfec: fix checksum flag handling and error return
  2025-10-06  8:03 [PATCH 00/11] net/enetc: various fixes and enhancements Hemant Agrawal
                   ` (3 preceding siblings ...)
  2025-10-06  8:04 ` [PATCH 04/11] net/enetfec: fix incorrect Tx queue free logic Hemant Agrawal
@ 2025-10-06  8:04 ` Hemant Agrawal
  2025-10-06  8:04 ` [PATCH 06/11] net/enetfec: fix to reject multi-queue configuration Hemant Agrawal
                   ` (5 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: Hemant Agrawal @ 2025-10-06  8:04 UTC (permalink / raw)
  To: dev, stephen, david.marchand; +Cc: stable

- Corrects the logic for setting RX checksum flags based on error status.
- Updates TX checksum offload condition to check for TX flags.
- Fixes incorrect error return in RX queue setup by replacing `errno`
with `-ENOMEM`.

Fixes: ecae71571b0d ("net/enetfec: support Rx/Tx")
Cc: stable@dpdk.org

Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
 drivers/net/enetfec/enet_rxtx.c | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/drivers/net/enetfec/enet_rxtx.c b/drivers/net/enetfec/enet_rxtx.c
index 0aea8b240d..ea2c28a26b 100644
--- a/drivers/net/enetfec/enet_rxtx.c
+++ b/drivers/net/enetfec/enet_rxtx.c
@@ -121,10 +121,11 @@ enetfec_recv_pkts(void *rxq1, struct rte_mbuf **rx_pkts,
 			(rxq->fep->flag_csum & RX_FLAG_CSUM_EN)) {
 			if ((rte_read32(&ebdp->bd_esc) &
 				rte_cpu_to_le_32(RX_FLAG_CSUM_ERR)) == 0) {
-				/* don't check it */
-				mbuf->ol_flags = RTE_MBUF_F_RX_IP_CKSUM_BAD;
-			} else {
+				/* No checksum error - checksum is good */
 				mbuf->ol_flags = RTE_MBUF_F_RX_IP_CKSUM_GOOD;
+			} else {
+				/* Checksum error detected */
+				mbuf->ol_flags = RTE_MBUF_F_RX_IP_CKSUM_BAD;
 			}
 		}
 
@@ -238,7 +239,8 @@ enetfec_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pkts)
 		if (txq->fep->bufdesc_ex) {
 			struct bufdesc_ex *ebdp = (struct bufdesc_ex *)bdp;
 
-			if (mbuf->ol_flags == RTE_MBUF_F_RX_IP_CKSUM_GOOD)
+			if (mbuf->ol_flags & (RTE_MBUF_F_TX_IP_CKSUM | RTE_MBUF_F_TX_TCP_CKSUM |
+					RTE_MBUF_F_TX_UDP_CKSUM | RTE_MBUF_F_TX_SCTP_CKSUM))
 				estatus |= TX_BD_PINS | TX_BD_IINS;
 
 			rte_write32(0, &ebdp->bd_bdu);
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH 06/11] net/enetfec: fix to reject multi-queue configuration
  2025-10-06  8:03 [PATCH 00/11] net/enetc: various fixes and enhancements Hemant Agrawal
                   ` (4 preceding siblings ...)
  2025-10-06  8:04 ` [PATCH 05/11] net/enetfec: fix checksum flag handling and error return Hemant Agrawal
@ 2025-10-06  8:04 ` Hemant Agrawal
  2025-10-06  8:04 ` [PATCH 07/11] net/enetfec: fix memory leak in Rx buffer cleanup Hemant Agrawal
                   ` (4 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: Hemant Agrawal @ 2025-10-06  8:04 UTC (permalink / raw)
  To: dev, stephen, david.marchand; +Cc: stable

The enetfec PMD currently supports only a single TX queue. This patch
adds a check to prevent users from configuring more than one queue,
ensuring predictable behavior and avoiding unsupported configurations.

Fixes: bb5b5bf1e5c6 ("net/enetfec: support queue configuration")
Cc: stable@dpdk.org

Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
 drivers/net/enetfec/enet_ethdev.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/drivers/net/enetfec/enet_ethdev.c b/drivers/net/enetfec/enet_ethdev.c
index 16f36a53f1..bcecab828e 100644
--- a/drivers/net/enetfec/enet_ethdev.c
+++ b/drivers/net/enetfec/enet_ethdev.c
@@ -1,5 +1,5 @@
 /* SPDX-License-Identifier: BSD-3-Clause
- * Copyright 2020-2021 NXP
+ * Copyright 2020-2021,2023 NXP
  */
 
 #include <inttypes.h>
@@ -377,6 +377,11 @@ enetfec_tx_queue_setup(struct rte_eth_dev *dev,
 		sizeof(struct bufdesc);
 	unsigned int dsize_log2 = rte_fls_u64(dsize) - 1;
 
+	if (queue_idx > 0) {
+		ENETFEC_PMD_ERR("Multi queue not supported");
+		return -EINVAL;
+	}
+
 	/* allocate transmit queue */
 	txq = rte_zmalloc(NULL, sizeof(*txq), RTE_CACHE_LINE_SIZE);
 	if (txq == NULL) {
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH 07/11] net/enetfec: fix memory leak in Rx buffer cleanup
  2025-10-06  8:03 [PATCH 00/11] net/enetc: various fixes and enhancements Hemant Agrawal
                   ` (5 preceding siblings ...)
  2025-10-06  8:04 ` [PATCH 06/11] net/enetfec: fix to reject multi-queue configuration Hemant Agrawal
@ 2025-10-06  8:04 ` Hemant Agrawal
  2025-10-06  8:04 ` [PATCH 08/11] net/enetfec: fix to add check for Rx/Tx deferred queue Hemant Agrawal
                   ` (3 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: Hemant Agrawal @ 2025-10-06  8:04 UTC (permalink / raw)
  To: dev, stephen, david.marchand; +Cc: stable

The RX buffer cleanup logic did not check for NULL before freeing mbufs,
which could lead to undefined behavior. This patch adds a NULL check
before freeing each mbuf.

Fixes: ecae71571b0d ("net/enetfec: support Rx/Tx")
Cc: stable@dpdk.org

Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
 drivers/net/enetfec/enet_ethdev.c | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/drivers/net/enetfec/enet_ethdev.c b/drivers/net/enetfec/enet_ethdev.c
index bcecab828e..60bb4f7ebd 100644
--- a/drivers/net/enetfec/enet_ethdev.c
+++ b/drivers/net/enetfec/enet_ethdev.c
@@ -1,5 +1,5 @@
 /* SPDX-License-Identifier: BSD-3-Clause
- * Copyright 2020-2021,2023 NXP
+ * Copyright 2020-2021,2023-2024 NXP
  */
 
 #include <inttypes.h>
@@ -172,8 +172,10 @@ enet_free_buffers(struct rte_eth_dev *dev)
 		bdp = rxq->bd.base;
 		for (i = 0; i < rxq->bd.ring_size; i++) {
 			mbuf = rxq->rx_mbuf[i];
-			rxq->rx_mbuf[i] = NULL;
-			rte_pktmbuf_free(mbuf);
+			if (mbuf) {
+				rxq->rx_mbuf[i] = NULL;
+				rte_pktmbuf_free(mbuf);
+			}
 			bdp = enet_get_nextdesc(bdp, &rxq->bd);
 		}
 	}
@@ -547,7 +549,7 @@ enetfec_rx_queue_setup(struct rte_eth_dev *dev,
 		}
 	}
 	rte_free(rxq);
-	return errno;
+	return -ENOMEM;
 }
 
 static const struct eth_dev_ops enetfec_ops = {
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH 08/11] net/enetfec: fix to add check for Rx/Tx deferred queue
  2025-10-06  8:03 [PATCH 00/11] net/enetc: various fixes and enhancements Hemant Agrawal
                   ` (6 preceding siblings ...)
  2025-10-06  8:04 ` [PATCH 07/11] net/enetfec: fix memory leak in Rx buffer cleanup Hemant Agrawal
@ 2025-10-06  8:04 ` Hemant Agrawal
  2025-10-06  8:04 ` [PATCH 09/11] net/enetfec: handle cache for forwarded packets Hemant Agrawal
                   ` (2 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: Hemant Agrawal @ 2025-10-06  8:04 UTC (permalink / raw)
  To: dev, stephen, david.marchand; +Cc: stable

This patch adds a check to reject configuration of Tx deferred start,
which is not supported by the enetfec PMD. This ensures that unsupported
features are explicitly handled and reported.

Fixes: bb5b5bf1e5c6 ("net/enetfec: support queue configuration")
Cc: stable@dpdk.org

Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
 drivers/net/enetfec/enet_ethdev.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/drivers/net/enetfec/enet_ethdev.c b/drivers/net/enetfec/enet_ethdev.c
index 60bb4f7ebd..6d4d3e0fc2 100644
--- a/drivers/net/enetfec/enet_ethdev.c
+++ b/drivers/net/enetfec/enet_ethdev.c
@@ -384,6 +384,12 @@ enetfec_tx_queue_setup(struct rte_eth_dev *dev,
 		return -EINVAL;
 	}
 
+	/* Tx deferred start is not supported */
+	if (tx_conf->tx_deferred_start) {
+		ENETFEC_PMD_ERR("Tx deferred start not supported");
+		return -EINVAL;
+	}
+
 	/* allocate transmit queue */
 	txq = rte_zmalloc(NULL, sizeof(*txq), RTE_CACHE_LINE_SIZE);
 	if (txq == NULL) {
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH 09/11] net/enetfec: handle cache for forwarded packets
  2025-10-06  8:03 [PATCH 00/11] net/enetc: various fixes and enhancements Hemant Agrawal
                   ` (7 preceding siblings ...)
  2025-10-06  8:04 ` [PATCH 08/11] net/enetfec: fix to add check for Rx/Tx deferred queue Hemant Agrawal
@ 2025-10-06  8:04 ` Hemant Agrawal
  2025-10-06  8:04 ` [PATCH 10/11] net/enetfec: support to set MAC address Hemant Agrawal
  2025-10-06  8:04 ` [PATCH 11/11] net/enetfec: add software packet type parsing and cleanup Hemant Agrawal
  10 siblings, 0 replies; 12+ messages in thread
From: Hemant Agrawal @ 2025-10-06  8:04 UTC (permalink / raw)
  To: dev, stephen, david.marchand

Previously, only cache flush (`dc cvac`) was used for packet buffers,
which could result in stale data being read when buffers were reused.
This patch replaces it with flush and invalidate (`dc civac`) to ensure
data consistency for forwarded packets.

Termination packets are excluded from this change as they are not freed
by the driver and do not require cache invalidation.

Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
 drivers/net/enetfec/enet_ethdev.h | 29 ++++++++++++++++++++++-------
 drivers/net/enetfec/enet_rxtx.c   |  4 ++--
 2 files changed, 24 insertions(+), 9 deletions(-)

diff --git a/drivers/net/enetfec/enet_ethdev.h b/drivers/net/enetfec/enet_ethdev.h
index 4e196b8552..ee5c244c91 100644
--- a/drivers/net/enetfec/enet_ethdev.h
+++ b/drivers/net/enetfec/enet_ethdev.h
@@ -1,5 +1,5 @@
 /* SPDX-License-Identifier: BSD-3-Clause
- * Copyright 2020-2021 NXP
+ * Copyright 2020-2024 NXP
  */
 
 #ifndef __ENETFEC_ETHDEV_H__
@@ -23,17 +23,32 @@
 #define __iomem
 #if defined(RTE_ARCH_ARM)
 #if defined(RTE_ARCH_64)
-#define dcbf(p) { asm volatile("dc cvac, %0" : : "r"(p) : "memory"); }
-#define dcbf_64(p) dcbf(p)
+/* Flush */
+#define dccvac(p) { asm volatile("dc cvac, %0" : : "r"(p) : "memory"); }
+#define dccvac_64(p) dccvac(p)
+/* Invalidate(Not working on A35 core) */
+#define dcivac(p) { asm volatile("dc ivac, %0" : : "r"(p) : "memory"); }
+#define dcivac_64(p) dcivac(p)
+/* Flush and Invalidate */
+#define dccivac(p) { asm volatile("dc civac, %0" : : "r"(p) : "memory"); }
+#define dccivac_64(p) dccivac(p)
 
 #else /* RTE_ARCH_32 */
-#define dcbf(p) RTE_SET_USED(p)
-#define dcbf_64(p) dcbf(p)
+#define dccvac(p) RTE_SET_USED(p)
+#define dccvac_64(p) dccvac(p)
+#define dcivac(p) RTE_SET_USED(p)
+#define dcivac_64(p) dcivac(p)
+#define dccivac(p) RTE_SET_USED(p)
+#define dccivac_64(p) dccivac(p)
 #endif
 
 #else
-#define dcbf(p) RTE_SET_USED(p)
-#define dcbf_64(p) dcbf(p)
+#define dccvac(p) RTE_SET_USED(p)
+#define dccvac_64(p) dccvac(p)
+#define dcivac(p) RTE_SET_USED(p)
+#define dcivac_64(p) dcivac(p)
+#define dccivac(p) RTE_SET_USED(p)
+#define dccivac_64(p) dccivac(p)
 #endif
 
 /*
diff --git a/drivers/net/enetfec/enet_rxtx.c b/drivers/net/enetfec/enet_rxtx.c
index ea2c28a26b..95767b561e 100644
--- a/drivers/net/enetfec/enet_rxtx.c
+++ b/drivers/net/enetfec/enet_rxtx.c
@@ -1,5 +1,5 @@
 /* SPDX-License-Identifier: BSD-3-Clause
- * Copyright 2021 NXP
+ * Copyright 2021-2024 NXP
  */
 
 #include <rte_mbuf.h>
@@ -230,7 +230,7 @@ enetfec_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pkts)
 		status |= (TX_BD_LAST);
 		data = rte_pktmbuf_mtod(mbuf, void *);
 		for (i = 0; i <= buflen; i += RTE_CACHE_LINE_SIZE)
-			dcbf(data + i);
+			dccivac(data + i);
 
 		rte_write32(rte_cpu_to_le_32(rte_pktmbuf_iova(mbuf)),
 			    &bdp->bd_bufaddr);
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH 10/11] net/enetfec: support to set MAC address
  2025-10-06  8:03 [PATCH 00/11] net/enetc: various fixes and enhancements Hemant Agrawal
                   ` (8 preceding siblings ...)
  2025-10-06  8:04 ` [PATCH 09/11] net/enetfec: handle cache for forwarded packets Hemant Agrawal
@ 2025-10-06  8:04 ` Hemant Agrawal
  2025-10-06  8:04 ` [PATCH 11/11] net/enetfec: add software packet type parsing and cleanup Hemant Agrawal
  10 siblings, 0 replies; 12+ messages in thread
From: Hemant Agrawal @ 2025-10-06  8:04 UTC (permalink / raw)
  To: dev, stephen, david.marchand

This patch adds the support of mac_addr_set.

Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
 drivers/net/enetfec/enet_ethdev.c | 76 ++++++++++++++++---------------
 drivers/net/enetfec/enet_ethdev.h | 30 ++++++++++++
 2 files changed, 69 insertions(+), 37 deletions(-)

diff --git a/drivers/net/enetfec/enet_ethdev.c b/drivers/net/enetfec/enet_ethdev.c
index 6d4d3e0fc2..959d5d4a6e 100644
--- a/drivers/net/enetfec/enet_ethdev.c
+++ b/drivers/net/enetfec/enet_ethdev.c
@@ -14,30 +14,6 @@
 #include "enet_regs.h"
 #include "enet_uio.h"
 
-#define ENETFEC_NAME_PMD                net_enetfec
-
-/* FEC receive acceleration */
-#define ENETFEC_RACC_IPDIS		RTE_BIT32(1)
-#define ENETFEC_RACC_PRODIS		RTE_BIT32(2)
-#define ENETFEC_RACC_SHIFT16		RTE_BIT32(7)
-#define ENETFEC_RACC_OPTIONS		(ENETFEC_RACC_IPDIS | \
-						ENETFEC_RACC_PRODIS)
-
-#define ENETFEC_PAUSE_FLAG_AUTONEG	0x1
-#define ENETFEC_PAUSE_FLAG_ENABLE	0x2
-
-/* Pause frame field and FIFO threshold */
-#define ENETFEC_FCE			RTE_BIT32(5)
-#define ENETFEC_RSEM_V			0x84
-#define ENETFEC_RSFL_V			16
-#define ENETFEC_RAEM_V			0x8
-#define ENETFEC_RAFL_V			0x8
-#define ENETFEC_OPD_V			0xFFF0
-
-/* Extended buffer descriptor */
-#define ENETFEC_EXTENDED_BD		0
-#define NUM_OF_BD_QUEUES		6
-
 /* Supported Rx offloads */
 static uint64_t dev_rx_offloads_sup =
 		RTE_ETH_RX_OFFLOAD_CHECKSUM |
@@ -298,8 +274,7 @@ enetfec_multicast_enable(struct rte_eth_dev *dev)
 
 /* Set a MAC change in hardware. */
 static int
-enetfec_set_mac_address(struct rte_eth_dev *dev,
-		    struct rte_ether_addr *addr)
+enetfec_set_mac_address(struct rte_eth_dev *dev, struct rte_ether_addr *addr)
 {
 	struct enetfec_private *fep = dev->data->dev_private;
 
@@ -588,15 +563,15 @@ enetfec_eth_init(struct rte_eth_dev *dev)
 static int
 pmd_enetfec_probe(struct rte_vdev_device *vdev)
 {
+	char eth_name[ENETFEC_ETH_NAMESIZE];
 	struct rte_eth_dev *dev = NULL;
 	struct enetfec_private *fep;
-	const char *name;
-	int rc;
-	int i;
+	uint16_t *mac, high_mac = 0;
+	struct rte_ether_addr addr;
+	uint32_t tmac, low_mac = 0;
 	unsigned int bdsize;
-	struct rte_ether_addr macaddr = {
-		.addr_bytes = { 0x1, 0x1, 0x1, 0x1, 0x1, 0x1 }
-	};
+	const char *name;
+	int rc, i;
 
 	name = rte_vdev_device_name(vdev);
 	ENETFEC_PMD_LOG(INFO, "Initializing pmd_fec for %s", name);
@@ -637,8 +612,12 @@ pmd_enetfec_probe(struct rte_vdev_device *vdev)
 		fep->bd_addr_p = fep->bd_addr_p + bdsize;
 	}
 
+	/* Allocate memory for storing MAC addresses */
+	snprintf(eth_name, sizeof(eth_name), "enetfec_eth_mac_%d",
+		 dev->data->port_id);
+
 	/* Copy the station address into the dev structure, */
-	dev->data->mac_addrs = rte_zmalloc("mac_addr", RTE_ETHER_ADDR_LEN, 0);
+	dev->data->mac_addrs = rte_zmalloc(eth_name, RTE_ETHER_ADDR_LEN, 0);
 	if (dev->data->mac_addrs == NULL) {
 		ENETFEC_PMD_ERR("Failed to allocate mem %d to store MAC addresses",
 			RTE_ETHER_ADDR_LEN);
@@ -646,10 +625,33 @@ pmd_enetfec_probe(struct rte_vdev_device *vdev)
 		goto err;
 	}
 
-	/*
-	 * Set default mac address
-	 */
-	enetfec_set_mac_address(dev, &macaddr);
+	/* Set mac address */
+	mac = (uint16_t *)addr.addr_bytes;
+	low_mac = (uint32_t)rte_read32((uint8_t *)fep->hw_baseaddr_v + ENETFEC_PALR);
+	*mac = (uint16_t)low_mac;
+	mac++;
+	*mac = (uint16_t)(low_mac >> ENETFEC_MAC_SHIFT);
+	mac++;
+	tmac = (uint32_t)rte_read32((uint8_t *)fep->hw_baseaddr_v + ENETFEC_PAUR);
+	*mac = (uint16_t)(tmac >> ENETFEC_MAC_SHIFT);
+	high_mac = (uint16_t)(*mac);
+
+	if ((high_mac | low_mac) == 0 || (high_mac | low_mac) == ENETFEC_MAC_RESET) {
+		uint8_t *first_byte;
+
+		mac = (uint16_t *)addr.addr_bytes;
+		tmac = (uint32_t)rte_rand();
+		first_byte = (uint8_t *)&tmac;
+		*first_byte &= (uint8_t)~RTE_ETHER_GROUP_ADDR; /* clear multicast bit */
+		*first_byte |= RTE_ETHER_LOCAL_ADMIN_ADDR; /* set local assignment bit (IEEE802) */
+		*mac = (uint16_t)tmac;
+		mac++;
+		*mac = (uint16_t)(tmac >> ENETFEC_MAC_SHIFT);
+		mac++;
+		*mac = (uint16_t)rte_rand();
+	}
+
+	enetfec_set_mac_address(dev, &addr);
 
 	fep->bufdesc_ex = ENETFEC_EXTENDED_BD;
 	rc = enetfec_eth_init(dev);
diff --git a/drivers/net/enetfec/enet_ethdev.h b/drivers/net/enetfec/enet_ethdev.h
index ee5c244c91..4c063d1799 100644
--- a/drivers/net/enetfec/enet_ethdev.h
+++ b/drivers/net/enetfec/enet_ethdev.h
@@ -20,6 +20,36 @@
 #define OPT_FRAME_SIZE		(PKT_MAX_BUF_SIZE << 16)
 #define ENETFEC_MAX_RX_PKT_LEN	3000
 
+#define ENETFEC_NAME_PMD                net_enetfec
+
+/* eth name size */
+#define ENETFEC_ETH_NAMESIZE            20
+#define ENETFEC_MAC_SHIFT               16
+/* mac addr reset */
+#define ENETFEC_MAC_RESET		0xFFFFFFFF
+
+/* FEC receive acceleration */
+#define ENETFEC_RACC_IPDIS              RTE_BIT32(1)
+#define ENETFEC_RACC_PRODIS             RTE_BIT32(2)
+#define ENETFEC_RACC_SHIFT16            RTE_BIT32(7)
+#define ENETFEC_RACC_OPTIONS            (ENETFEC_RACC_IPDIS | \
+					ENETFEC_RACC_PRODIS)
+
+#define ENETFEC_PAUSE_FLAG_AUTONEG      0x1
+#define ENETFEC_PAUSE_FLAG_ENABLE       0x2
+
+/* Pause frame field and FIFO threshold */
+#define ENETFEC_FCE                     RTE_BIT32(5)
+#define ENETFEC_RSEM_V                  0x84
+#define ENETFEC_RSFL_V                  16
+#define ENETFEC_RAEM_V                  0x8
+#define ENETFEC_RAFL_V                  0x8
+#define ENETFEC_OPD_V                   0xFFF0
+
+/* Extended buffer descriptor */
+#define ENETFEC_EXTENDED_BD             0
+#define NUM_OF_BD_QUEUES                6
+
 #define __iomem
 #if defined(RTE_ARCH_ARM)
 #if defined(RTE_ARCH_64)
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH 11/11] net/enetfec: add software packet type parsing and cleanup
  2025-10-06  8:03 [PATCH 00/11] net/enetc: various fixes and enhancements Hemant Agrawal
                   ` (9 preceding siblings ...)
  2025-10-06  8:04 ` [PATCH 10/11] net/enetfec: support to set MAC address Hemant Agrawal
@ 2025-10-06  8:04 ` Hemant Agrawal
  10 siblings, 0 replies; 12+ messages in thread
From: Hemant Agrawal @ 2025-10-06  8:04 UTC (permalink / raw)
  To: dev, stephen, david.marchand

This patch adds software-based parsing for Ethernet packet types,
specifically identifying IPv4 and IPv6 packets. This is a temporary
solution until hardware-based parsing is implemented.

Additionally, variable declarations in `enetfec_recv_pkts()` are
reordered to follow reverse Christmas tree style for better readability.

Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
 drivers/net/enetfec/enet_rxtx.c | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/drivers/net/enetfec/enet_rxtx.c b/drivers/net/enetfec/enet_rxtx.c
index 95767b561e..91a231af6c 100644
--- a/drivers/net/enetfec/enet_rxtx.c
+++ b/drivers/net/enetfec/enet_rxtx.c
@@ -17,12 +17,13 @@ enetfec_recv_pkts(void *rxq1, struct rte_mbuf **rx_pkts,
 		uint16_t nb_pkts)
 {
 	struct rte_mempool *pool;
-	struct bufdesc *bdp;
 	struct rte_mbuf *mbuf, *new_mbuf = NULL;
 	unsigned short status;
 	unsigned short pkt_len;
 	int pkt_received = 0, index = 0;
+	struct rte_ether_hdr *eth;
 	void *data, *mbuf_data;
+	struct bufdesc *bdp;
 	uint16_t vlan_tag;
 	struct  bufdesc_ex *ebdp = NULL;
 	bool    vlan_packet_rcvd = false;
@@ -92,6 +93,16 @@ enetfec_recv_pkts(void *rxq1, struct rte_mbuf **rx_pkts,
 			data = rte_pktmbuf_adj(mbuf, 2);
 
 		rx_pkts[pkt_received] = mbuf;
+
+		/* Assuming Ethernet packets, doing software packet type parsing.
+		 * To be replaced by HW packet parsing
+		 */
+		eth = rte_pktmbuf_mtod(mbuf, struct rte_ether_hdr *);
+		mbuf->packet_type = RTE_PTYPE_L2_ETHER;
+		if (rte_be_to_cpu_16(eth->ether_type) == RTE_ETHER_TYPE_IPV4)
+			mbuf->packet_type |= RTE_PTYPE_L3_IPV4;
+		if (rte_be_to_cpu_16(eth->ether_type) == RTE_ETHER_TYPE_IPV6)
+			mbuf->packet_type |= RTE_PTYPE_L3_IPV6;
 		pkt_received++;
 
 		/* Extract the enhanced buffer descriptor */
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2025-10-06  8:06 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-10-06  8:03 [PATCH 00/11] net/enetc: various fixes and enhancements Hemant Agrawal
2025-10-06  8:04 ` [PATCH 01/11] net/enetfec: fix file descriptor leak on read error Hemant Agrawal
2025-10-06  8:04 ` [PATCH 02/11] net/enetfec: fix out-of-bounds access in UIO mapping Hemant Agrawal
2025-10-06  8:04 ` [PATCH 03/11] net/enetfec: fix buffer descriptor size configuration Hemant Agrawal
2025-10-06  8:04 ` [PATCH 04/11] net/enetfec: fix incorrect Tx queue free logic Hemant Agrawal
2025-10-06  8:04 ` [PATCH 05/11] net/enetfec: fix checksum flag handling and error return Hemant Agrawal
2025-10-06  8:04 ` [PATCH 06/11] net/enetfec: fix to reject multi-queue configuration Hemant Agrawal
2025-10-06  8:04 ` [PATCH 07/11] net/enetfec: fix memory leak in Rx buffer cleanup Hemant Agrawal
2025-10-06  8:04 ` [PATCH 08/11] net/enetfec: fix to add check for Rx/Tx deferred queue Hemant Agrawal
2025-10-06  8:04 ` [PATCH 09/11] net/enetfec: handle cache for forwarded packets Hemant Agrawal
2025-10-06  8:04 ` [PATCH 10/11] net/enetfec: support to set MAC address Hemant Agrawal
2025-10-06  8:04 ` [PATCH 11/11] net/enetfec: add software packet type parsing and cleanup Hemant Agrawal

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).