From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-wr1-f48.google.com (mail-wr1-f48.google.com [209.85.221.48]) (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 03C8F25A33A for ; Fri, 12 Dec 2025 08:47:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.48 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765529232; cv=none; b=PWubYH49PHfgPpnO/t2lwC6lTkUPUgHanHd6PwkjqOvNv6CjBtFsGopdwohHdSDu1YlutudFRe/O+Iw90VdYcUB0bpb1EpYaVyAlvE/Rph7N0zcYnkimSJ9SQpYxi5GNb3x7UepZzV1Wu++Peq6p62W0iA/kttMKCI2vYetUlfw= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765529232; c=relaxed/simple; bh=kT9niDzldkUdEXAqQ4V7fQV+lBlzKuktL/berCG6HpU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=SwNvPfSK4nl9+DSd2f3B+FjwSDhAwfAxnB6kgAd8ixu00CdYRtsFGw2Njp78DF7OVQ+M0VChuWDF52jXQ+m/KWNQTUqVaxTL+lnPBe/sTHdbJGtGCjl3CisrNS8EcSj/YMpjwQSBzRfeQGrLZz3XPMGFxaru2cYueeYLz7+qyIc= 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=AR/Wm9I1; arc=none smtp.client-ip=209.85.221.48 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="AR/Wm9I1" Received: by mail-wr1-f48.google.com with SMTP id ffacd0b85a97d-42e2e628f8aso448189f8f.1 for ; Fri, 12 Dec 2025 00:47:08 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1765529227; x=1766134027; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=iFWk0J+01QoS2SFsYWdPzaX0fw514m/jhzGpQbZl1TY=; b=AR/Wm9I1iTQpieNc+IV2SsBP777+VQSW1kLbeQpd+K33wzWh5M/p6JDB9qMIWkIE/B m9ATdddzJha6U7J6qbtsTELGweyMm8oIMCuiRKL2V/ZTeG3xfdGjhCZx6u/4Bs3lLJHR W8nCkEFenjciiwfVWRDVXdZ5j6Mu8dKlZ17ecqhfkVaCiSoczFn5PAVePX+falG94ZoP gDveA4RSNpL0CAg/+sac6ZTDk+69Sl3c4CseUg5MyAA624jrMil5Hpkb1SFpd9oyMLhQ 8i1QF+8LKtVRCe6hqxuV9+OAR+rCMgN1FpyAKDwKmOX54ok/jiS8zaI+F/o6i6OEoWph oZdA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765529227; x=1766134027; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=iFWk0J+01QoS2SFsYWdPzaX0fw514m/jhzGpQbZl1TY=; b=NcyIgSbCnOZGLmiyZrX/mpbUBgi0yg1aV24DRg9NUWLTG+LqO33PJS45sTseJ3KqMx 43CRG971FcSbWE1pCJt/aOqt1zEabfUh3xvjUHJdBNjy+aXsMVv3K2K84s53aMa2Eb3T 3PQheYGaEGGyfoZVC2f8mYohjyvbNalmFyxY63769xbPkDmm6QtDKSb1GwNmVNSmT4ec oPu3R/x2uC/nqT5mVWI9bHZLSQ+15kKlA9kPt61PsaOGSdIZnFn16QpB4QKMghiDvJo6 6Bb7n5Juq8346vT/wU8sKBsVIq8MpTGsxsWITnOJUWZyjXpYU2A5MRhl2zlWBdWxhFlC PkCw== X-Forwarded-Encrypted: i=1; AJvYcCXm4uEXbS9AsB3jHHj8Mf7k0ZDGkHaFLwLlGmd0Way3D0ijbtV66M+wgLBwTgXggLmh9zD0qMC7fmYObwY=@vger.kernel.org X-Gm-Message-State: AOJu0YxYbd2MckREP0DSED1V4XS33io1tCunh8l2LeTnxq4PBMOn7mRp DGSvd88tyiHfpwp833B4PF7OIx0PjugLwVMb9xcAQTIJ3sXBVwxJb6Rx X-Gm-Gg: AY/fxX7fDs4Cy5+gaLA9kh8Cswwmm6z48j9ntJWsRl8XULwfhAtYZnbtdTAUfdbUcmq sQnfjl3LVjYrIpuynj3C6jrsVDHylO3sqHJufBHv0JyG8hNsESABfN8wW2Eroee0/NJqA4PcNX9 ElXNq2m33S0row4+75WjbZB4vis8nfTSisXI8NRUaELQW4xgL0hopSAN4s9QgSTcwATn/ASWVjY 2z8GRLK59sTXkncOK2QnLBEoVW2AA7tEz8pb8dyv8e87SUHXBoBEUU9SEBlxVgEqyHbZRIXdeZv rm4jmpJ0aTYeDRjYBZXY/ipYIpbrAoJS7FUUVoCO5BdZaqSlkUmkKgn5AVqyvhX5Svwwfymaf5B DUuDXl6XBb6eXseqpgRfvWMWcKzvEguYGZ7eOltC55e+ppLmyVGxPzGy7QIGHfdULO4Dr/vLUJ+ JCSHOdlrYvcLpcwLir X-Google-Smtp-Source: AGHT+IGoA8T3vrnZPvhKsWSMPF6PaJnRKzyphO2s4dN9M2yXDFob6KV38VoR4WNUDpJzukAQqgxZkA== X-Received: by 2002:adf:e803:0:b0:42f:b683:b3bd with SMTP id ffacd0b85a97d-42fb683b4d6mr629257f8f.3.1765529227036; Fri, 12 Dec 2025 00:47:07 -0800 (PST) Received: from eichest-laptop.lan ([2a02:168:af72:0:9f18:aff4:897a:cb50]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-42fa8a09fbesm10456076f8f.0.2025.12.12.00.47.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 12 Dec 2025 00:47:06 -0800 (PST) From: Stefan Eichenberger To: andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, hkallweit1@gmail.com, linux@armlinux.org.uk, geert+renesas@glider.be, ben.dooks@codethink.co.uk Cc: netdev@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, francesco.dolcini@toradex.com, rafael.beims@toradex.com, Stefan Eichenberger Subject: [PATCH net-next v1 3/3] net: phy: micrel: Add keep-preamble-before-sfd property Date: Fri, 12 Dec 2025 09:46:18 +0100 Message-ID: <20251212084657.29239-4-eichest@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251212084657.29239-1-eichest@gmail.com> References: <20251212084657.29239-1-eichest@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit From: Stefan Eichenberger Add a property to keep the preamble before the SFD is sent from the PHY to the Ethernet controller. By default the preamble is removed, this property allows to keep it. This allows to workaround broken Ethernet controllers as found on the NXP i.MX8MP. Specifically, errata ERR050694 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-10base-t/m-p/2151032 It has been tested on Verdin iMX8MP from Toradex by forcing the PHY to 10MBit. Withouth this property set, no packets are received. With this property set, reception works fine. Signed-off-by: Stefan Eichenberger --- drivers/net/phy/micrel.c | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/drivers/net/phy/micrel.c b/drivers/net/phy/micrel.c index 05de68b9f7191..0bcc380d73653 100644 --- a/drivers/net/phy/micrel.c +++ b/drivers/net/phy/micrel.c @@ -101,6 +101,14 @@ #define LAN8814_CABLE_DIAG_VCT_DATA_MASK GENMASK(7, 0) #define LAN8814_PAIR_BIT_SHIFT 12 +/* KSZ9x31 remote loopback register */ +#define KSZ9x31_REMOTE_LOOPBACK 0x11 +/* This is an undocumented bit of the KSZ9131RNX. + * It was reported by NXP in cooperation with Micrel. + */ +#define KSZ9x31_REMOTE_LOOPBACK_KEEP_PREAMBLE BIT(2) +#define KSZ9x31_REMOTE_LOOPBACK_EN BIT(8) + #define LAN8814_SKUS 0xB #define LAN8814_WIRE_PAIR_MASK 0xF @@ -455,6 +463,7 @@ struct kszphy_priv { bool rmii_ref_clk_sel_val; bool clk_enable; bool is_ptp_available; + bool keep_preamble_before_sfd; u64 stats[ARRAY_SIZE(kszphy_hw_stats)]; struct kszphy_phy_stats phy_stats; }; @@ -1452,6 +1461,7 @@ static int ksz9131_config_init(struct phy_device *phydev) "txd2-skew-psec", "txd3-skew-psec" }; char *control_skews[2] = {"txen-skew-psec", "rxdv-skew-psec"}; + struct kszphy_priv *priv = phydev->priv; const struct device *dev_walker; int ret; @@ -1500,6 +1510,17 @@ static int ksz9131_config_init(struct phy_device *phydev) if (ret < 0) return ret; + if (priv->keep_preamble_before_sfd) { + ret = phy_read(phydev, KSZ9x31_REMOTE_LOOPBACK); + if (ret < 0) + return ret; + + ret |= KSZ9x31_REMOTE_LOOPBACK_KEEP_PREAMBLE; + ret = phy_write(phydev, KSZ9x31_REMOTE_LOOPBACK, ret); + if (ret < 0) + return ret; + } + return 0; } @@ -2683,6 +2704,14 @@ static int kszphy_probe(struct phy_device *phydev) priv->rmii_ref_clk_sel_val = true; } + /* Keep the preamble before the SFD (Start Frame Delimiter). This might + * be needed on some boards with a broken Ethernet controller like the + * eqos used in the NXP i.MX8MP. + */ + if (phydev_id_compare(phydev, PHY_ID_KSZ9131)) + priv->keep_preamble_before_sfd = of_property_read_bool(np, + "micrel,keep-preamble-before-sfd"); + return 0; } -- 2.51.0