[PATCH net-next v4 3/6] net: enetc: Enable probing of version 4.4 devices

From: Claudiu Manoil

Date: Fri Nov 13 2026 - 18:17:19 EST


This commit adds driver data and platform info entries for ENETC v4.4 PF
and VF devices on S32N79 SoCs with a 500 MHz system clock frequency.

The ENETC v4.4 devices are present on S32N79 SoCs and feature only
Pseudo-MAC ENETC ports, whose PFs use either the 0xe101 or the 0xe110
PCI device ID, and the VFs answer to the usual device ID of 0xef00.

While the ENETC PF instances are usually designated by the 0xe101 ID,
in newer IP versions the 0xe110 ID was introduced to indicate the
power-on reset default NETC switch management interface. These IDs
do not indicate any functional difference between the designated
ENETC instances, and can be interchanged and re-assigned at boot time
(i.e. from firmware).

Signed-off-by: Claudiu Manoil <claudiu.manoil@xxxxxxx>
---
v4:
- Added a leading sentence to the commit message, stating that the
patch adds driver data and platform info entries for ENETC v4.4
devices with a 500 MHz system clock frequency.

v3:
- Added sysclk_freq info for the v4.4 ENETC devices.

v2:
- Described why there are two ENETC PF IDs in the commit message, as per
review.

drivers/net/ethernet/freescale/enetc/enetc.c | 26 +++++++++++++++++++
.../net/ethernet/freescale/enetc/enetc_hw.h | 4 ++-
2 files changed, 29 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/freescale/enetc/enetc.c b/drivers/net/ethernet/freescale/enetc/enetc.c
index 855b2d3b8718..e3aa117d323d 100644
--- a/drivers/net/ethernet/freescale/enetc/enetc.c
+++ b/drivers/net/ethernet/freescale/enetc/enetc.c
@@ -3840,6 +3840,20 @@ static const struct enetc_drvdata enetc4_vf_data = {
.eth_ops = &enetc_vf_ethtool_ops,
};

+static const struct enetc_drvdata enetc4_s32n79_ppm_data = {
+ .sysclk_freq = ENETC_CLK_500M,
+ .tx_csum = true,
+ .max_frags = ENETC4_MAX_SKB_FRAGS,
+ .eth_ops = &enetc4_ppm_ethtool_ops,
+};
+
+static const struct enetc_drvdata enetc4_s32n79_vf_data = {
+ .sysclk_freq = ENETC_CLK_500M,
+ .tx_csum = true,
+ .max_frags = ENETC4_MAX_SKB_FRAGS,
+ .eth_ops = &enetc_vf_ethtool_ops,
+};
+
static const struct enetc_platform_info enetc_info[] = {
{ .revision = ENETC_REV_1_0,
.dev_id = ENETC_DEV_ID_PF,
@@ -3870,6 +3884,18 @@ static const struct enetc_platform_info enetc_info[] = {
.dev_id = NXP_ENETC_VF_DEV_ID,
.data = &enetc4_vf_data,
},
+ { .revision = ENETC_REV_4_4,
+ .dev_id = NXP_ENETC_PPM_DEV_ID,
+ .data = &enetc4_s32n79_ppm_data,
+ },
+ { .revision = ENETC_REV_4_4,
+ .dev_id = NXP_ENETC_PF_DEV_ID,
+ .data = &enetc4_s32n79_ppm_data,
+ },
+ { .revision = ENETC_REV_4_4,
+ .dev_id = NXP_ENETC_VF_DEV_ID,
+ .data = &enetc4_s32n79_vf_data,
+ },
};

int enetc_get_driver_data(struct enetc_si *si)
diff --git a/drivers/net/ethernet/freescale/enetc/enetc_hw.h b/drivers/net/ethernet/freescale/enetc/enetc_hw.h
index 2c9d9042eb0b..8e6a9d366d40 100644
--- a/drivers/net/ethernet/freescale/enetc/enetc_hw.h
+++ b/drivers/net/ethernet/freescale/enetc/enetc_hw.h
@@ -414,6 +414,7 @@ enum enetc_bdr_type {TX, RX};
#define ENETC_REV_1_0 0x0100
#define ENETC_REV_4_1 0X0401
#define ENETC_REV_4_3 0x0403
+#define ENETC_REV_4_4 0x0404

#define ENETC_G_EIPBRR1 0x0bfc
#define ENETC_G_EPFBLPR(n) (0xd00 + 4 * (n))
@@ -1048,8 +1049,9 @@ struct enetc_cbd {
u8 status_flags;
};

-#define ENETC_CLK_400M 400000000ULL
#define ENETC_CLK_333M 333000000ULL
+#define ENETC_CLK_400M 400000000ULL
+#define ENETC_CLK_500M 500000000ULL

static inline u32 enetc_cycles_to_usecs(u32 cycles, u64 clk_freq)
{
--
2.34.1