[PATCH net-next v3 2/5] net: enetc: Enable probing of version 4.4 devices

From: Claudiu Manoil

Date: Tue Nov 03 2026 - 09:52:50 EST


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>
---
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 c6571b5cc8425..b989823859ff2 100644
--- a/drivers/net/ethernet/freescale/enetc/enetc.c
+++ b/drivers/net/ethernet/freescale/enetc/enetc.c
@@ -3832,6 +3832,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,
@@ -3862,6 +3876,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 2c9d9042eb0bb..8e6a9d366d404 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