From nobody Sat Feb 7 17:55:00 2026 Received: from mail-wr1-f41.google.com (mail-wr1-f41.google.com [209.85.221.41]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6711436C0C5 for ; Tue, 23 Dec 2025 10:13:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766484785; cv=none; b=lOngrdhZFsYJwCO3PddMZ9eXT8EnMqYv9TNDWx7a+VMDuCkS/5sOZ90UuwMTarhyCMbqatm866ynUVekr3zxu4boYCImxJT1v+qE+esy4O6qNqKcTAQ9Jk84eqX9nhLdRQ3sSU0DUSCqhAHdzlABUnIegOsnu3ivCpdLTLGljTE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766484785; c=relaxed/simple; bh=A9NT9+ObFVURRY5DrjmPg5SlXTK2iGfpCBkIhmcwnOc=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=f5uTp8vPypJ8rO+GwidobFR2M+gmP27O6IPvzGkZMCrZxx1a1IGPcSNbYBfeRJN+szNG+TG2hli5a0YyA+H83IWDXLJzQ2KJ1PzvlEohaoBDD4h4Qwkt05MhmLZ5YLpF0Z/n5PP5/iIGpx/a4vZrijlHyt0FMf1uKtGPTNCZJzs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=EUxVQ26Q; arc=none smtp.client-ip=209.85.221.41 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="EUxVQ26Q" Received: by mail-wr1-f41.google.com with SMTP id ffacd0b85a97d-42b3c5defb2so3122536f8f.2 for ; Tue, 23 Dec 2025 02:13:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1766484781; x=1767089581; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=kGMtlDyyRbCcoNhJtD681fIKSx7Hpi6HHJrHp091fTU=; b=EUxVQ26QPNHgQh2nsEQCmrty5yMsnXT0DvtoxZeKBaL9aRQTzyuaXkOYmuX5U2xwCr 1waj15lnXlG3754rQkmfgQ8+IxHHyodZez1YrlByvn2g8PWcFCL+asGoqjEau0y6RO5s w1w3VP6YQziB8CNIldDaLxsWr9wZQlJq6SGns9leRH8PMpgNnNWqSBzcmxAI37R4ng1H znKqunYPclYyTBSQ8oy0EoImb1k1WbGzAi9bUaPu97LmVP8G9p0nsDVmhncf53dWR9V1 oWeAp5F+reH3J/DL1pUzuX6IbQfns7QwE1o+7OKttu1oRkN3pBUamEsEI5DzRK/mKQL9 W4ew== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1766484781; x=1767089581; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=kGMtlDyyRbCcoNhJtD681fIKSx7Hpi6HHJrHp091fTU=; b=NP4JAp2ET0KWQg90SrjJfQ29d1s1AhIxFvwEwm9uXcMJWIK0PaPOKpzK8EjxeVDjXx lEPpovbpaPiR6hSVSzwAP2VDBPaAKy/3JVR3al6jPzpAsbAGre6gbSSPMNcVVR7veQ7J PTFD0lTd63haX2u6sKlhmWA5Ub8kWkBMhO//Usbuw01tq2aVMSy0Fw8vH750yvnGJk8l aNpADi3cFE0p27MrK/+NLHSjbqsTnV/JgtVkhsckF58kWRxGAKi84Kv00NioSqQ+mXA4 yjQ9FMfwjc69x7oUiuYpN2qXzsVuD9CnOZcmbPDlzSqUQso0PfT9Xyt33rSAs2VpqVr3 RQ3w== X-Forwarded-Encrypted: i=1; AJvYcCUqj+N907XJLrmQVlfNZp3ga2mCd/m/92urDNsQ6WDiLpj9rejPGJ4pvyZ7uNGEwzqg/kv1DnIHxHfqwnE=@vger.kernel.org X-Gm-Message-State: AOJu0Yz0ZgRDGMSm2V7Qvdx2cXXgj5KE7ZRnKGwA9xiUO1E7R4ku/OcR 6FtxCNUtFeEqY/bZJKaEbz6oQKdvyYGX44HrdSzbgJqhYi23QgLfJ3Hy X-Gm-Gg: AY/fxX5/GTb5kDndkk21kL3q6Ttg41yNcVhF2waw/cBCoXjvPamSLKIb8l9EiNn8yZG 3g6i+iyoc6rTM6QgBvgE7G0zrxveL9Q/s8C+3SQCgspw4hkCPUWfac1cqxzL86J27EUUqum59Dk bp9K5nXqPVmuEySE+qg9M3lx2aRq3gxhwt0Rhxj4E3UwKGZZrCK3neDwyT1mtVN6sUT/NY7o7xe 6beRbcFyd9PByH0KidYdnLoMZKJuKSLrSnzIxaJLf0B9XVdDWc3KE9A4ZkwJReKyXpCjFOZJkYO 9OaVrTRhZSTHNSV0/XsZ/mJJ6Mmv+ZtoLF/vGbFZzptLhGzy8VGvXTAPvlztlZxMiF23unfPiAG KYn7Lok7kVdhL9adD1fdvoouTImogkgZ+v5T/W+Xdp7UsLgAM8rSw63BMcc3M+SS9u5LZCE8Kht J/mtk+Lk2dX4WTZZZQFYQxeV1gaQ== X-Google-Smtp-Source: AGHT+IGF0o0X3T9TPemtGA4iv5QpXYtSLA5891eQonPhGoJJdeHdYF9/vi2taBPYEXsT/bnOH7uFfA== X-Received: by 2002:a05:6000:188e:b0:430:fb26:3409 with SMTP id ffacd0b85a97d-4324e703d95mr14723855f8f.63.1766484780377; Tue, 23 Dec 2025 02:13:00 -0800 (PST) Received: from eichest-laptop.lan ([2a02:168:af72:0:db87:3fd:1ea8:b6eb]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-4324eaa0908sm26759247f8f.31.2025.12.23.02.12.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 23 Dec 2025 02:13:00 -0800 (PST) From: Stefan Eichenberger To: andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, mcoquelin.stm32@gmail.com, alexandre.torgue@foss.st.com, shawnguo@kernel.org, s.hauer@pengutronix.de, kernel@pengutronix.de, festevam@gmail.com, linux-stm32@st-md-mailman.stormreply.com Cc: netdev@vger.kernel.org, linux-arm-kernel@lists.infradead.org, imx@lists.linux.dev, linux-kernel@vger.kernel.org, robh@kernel.org, francesco.dolcini@toradex.com, Stefan Eichenberger Subject: [PATCH net-next v2] net: stmmac: dwmac: Add a fixup for the Micrel KSZ9131 PHY Date: Tue, 23 Dec 2025 11:10:59 +0100 Message-ID: <20251223101240.10634-1-eichest@gmail.com> X-Mailer: git-send-email 2.51.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Stefan Eichenberger Add a fixup to the stmmac driver to keep the preamble before the SFD (Start Frame Delimiter) on the Micrel KSZ9131 PHY when the driver is used on an NXP i.MX8MP SoC. This allows to workaround errata ERR050694 of the NXP i.MX8MP that states: ENET_QOS: MAC incorrectly discards the received packets when Preamble Byte does not precede SFD or SMD. The bit which disables this feature is not documented in the datasheet from Micrel, but has been found by NXP and Micrel following this discussion: https://community.nxp.com/t5/i-MX-Processors/iMX8MP-eqos-not-working-for-10= base-t/m-p/2151032 It has been tested on Verdin iMX8MP from Toradex by forcing the PHY to 10MBit. Without bit 2 being set in the remote loopback register, no packets are received. With the bit set, reception works fine. Signed-off-by: Stefan Eichenberger --- Changes in v2: - Use phy_register_fixup_for_uid() instead of adding a new device tree property - I will send the conversion of the micrel.txt binding as a separate patch series - Link to v1: https://lore.kernel.org/all/20251212084657.29239-1-eichest@gm= ail.com/ .../net/ethernet/stmicro/stmmac/dwmac-imx.c | 56 ++++++++++++++++++- 1 file changed, 55 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-imx.c b/drivers/net/= ethernet/stmicro/stmmac/dwmac-imx.c index db288fbd5a4df..23bc917d3f0bd 100644 --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-imx.c +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-imx.c @@ -19,6 +19,7 @@ #include #include #include +#include =20 #include "stmmac_platform.h" =20 @@ -39,6 +40,12 @@ #define RMII_RESET_SPEED (0x3 << 14) #define CTRL_SPEED_MASK GENMASK(15, 14) =20 +/* Undocumented bit of the KSZ9131RNX in the remote loopback register to k= eep + * the preamble before sfd. It was reported by NXP in cooperation with Mic= rel. + */ +#define KSZ9x31_REMOTE_LOOPBACK 0x11 +#define KSZ9x31_REMOTE_LOOPBACK_KEEP_PREAMBLE BIT(2) + struct imx_priv_data; =20 struct imx_dwmac_ops { @@ -282,6 +289,30 @@ imx_dwmac_parse_dt(struct imx_priv_data *dwmac, struct= device *dev) return err; } =20 +static int imx8mp_dwmac_phy_micrel_fixup(struct phy_device *phydev) +{ + struct device *mdio_bus_dev =3D phydev->mdio.dev.parent; + struct device_node *mac_node; + + if (!mdio_bus_dev || !mdio_bus_dev->parent) + return 0; + + mac_node =3D mdio_bus_dev->parent->of_node; + if (!mac_node) + return 0; + + if (!of_device_is_compatible(mac_node, "nxp,imx8mp-dwmac-eqos")) + return 0; + + /* Keep the preamble before the SFD (Start Frame Delimiter) for the + * Micrel KSZ9131. This is required on the i.MX8MP because of errata + * ERR050694. + */ + return phy_modify_changed(phydev, KSZ9x31_REMOTE_LOOPBACK, + KSZ9x31_REMOTE_LOOPBACK_KEEP_PREAMBLE, + KSZ9x31_REMOTE_LOOPBACK_KEEP_PREAMBLE); +} + static int imx_dwmac_probe(struct platform_device *pdev) { struct plat_stmmacenet_data *plat_dat; @@ -389,7 +420,30 @@ static struct platform_driver imx_dwmac_driver =3D { .of_match_table =3D imx_dwmac_match, }, }; -module_platform_driver(imx_dwmac_driver); + +static int __init imx_dwmac_init(void) +{ + int ret; + + if (of_machine_is_compatible("fsl,imx8mp")) { + ret =3D phy_register_fixup_for_uid(PHY_ID_KSZ9131, MICREL_PHY_ID_MASK, + imx8mp_dwmac_phy_micrel_fixup); + if (ret) + return ret; + } + + return platform_driver_register(&imx_dwmac_driver); +} +module_init(imx_dwmac_init); + +static void __exit imx_dwmac_exit(void) +{ + if (of_machine_is_compatible("fsl,imx8mp")) + phy_unregister_fixup_for_uid(PHY_ID_KSZ9131, MICREL_PHY_ID_MASK); + + platform_driver_unregister(&imx_dwmac_driver); +} +module_exit(imx_dwmac_exit); =20 MODULE_AUTHOR("NXP"); MODULE_DESCRIPTION("NXP imx8 DWMAC Specific Glue layer"); --=20 2.51.0