From: Nicolai Buchwitz <nb@tipi-net.de>
To: Fidelio Lawson <lawson.fidelio@gmail.com>
Cc: Woojung Huh <woojung.huh@microchip.com>,
UNGLinuxDriver@microchip.com, Andrew Lunn <andrew@lunn.ch>,
Vladimir Oltean <olteanv@gmail.com>,
"David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
Marek Vasut <marex@denx.de>,
Maxime Chevallier <maxime.chevallier@bootlin.com>,
Simon Horman <horms@kernel.org>,
Heiner Kallweit <hkallweit1@gmail.com>,
Russell King <linux@armlinux.org.uk>,
Tristram Ha <Tristram.Ha@microchip.com>,
netdev@vger.kernel.org, linux-kernel@vger.kernel.org,
Fidelio Lawson <fidelio.lawson@exotec.com>
Subject: Re: [PATCH net-next v7 1/3] net: dsa: microchip: implement KSZ87xx Module 3 low-loss cable errata
Date: Thu, 28 May 2026 13:43:23 +0200 [thread overview]
Message-ID: <fbb60fec5bbeb5fb83e215adbc2dcbb3@tipi-net.de> (raw)
In-Reply-To: <20260524-ksz87xx_errata_low_loss_connections-v7-1-1cd49cfa24f0@exotec.com>
Hi Fidelio,
A couple more from testing on a KSZ8794, in case they help while you
look at the register-document question.
On 24.5.2026 12:44, Fidelio Lawson wrote:
> Implement the "Module 3: Equalizer fix for short cables" erratum from
> Microchip document DS80000687C for KSZ87xx switches.
>
> The issue affects short or low-loss cable links (e.g. CAT5e/CAT6),
> where the PHY receiver equalizer may amplify high-amplitude signals
> excessively, resulting in internal distortion and link establishment
> failures.
>
> KSZ87xx devices require a workaround for the Module 3 low-loss cable
> condition, controlled through the switch TABLE_LINK_MD_V indirect
> registers.
>
> This change models the erratum handling as vendor-specific Clause 22
> PHY
> registers, virtualized by the KSZ8 DSA driver and accessed via
> ksz8_r_phy() / ksz8_w_phy(). The following controls are provided:
>
> - A boolean “short-cable” preset, which applies a documented and
> conservative configuration (LPF 62 MHz bandwidth and DSP EQ initial
> value 0), and is the recommended interface for typical use cases.
>
> - Separate LPF bandwidth and DSP EQ initial value controls intended for
> advanced or experimental tuning. These are orthogonal and
> independent,
> and override the corresponding settings without requiring any
> specific
> ordering.
>
> The preset and tunables act as simple setters with no implicit state
> machine or invalid combinations, keeping the API predictable and
> aligned
> with the KISS principle.
>
> The erratum affects the shared PHY analog front-end and therefore
> applies
> globally to the switch.
>
> Fixes: e66f840c08a2 ("net: dsa: ksz: Add Microchip KSZ8795 DSA driver")
> Signed-off-by: Fidelio Lawson <fidelio.lawson@exotec.com>
> ---
> [...]
> +
> /**
> * ksz8_r_phy_ctrl - Translates and reads from the SMI interface to a
> MIIM PHY
> * Control register (Reg. 31).
> @@ -1046,6 +1077,22 @@ static int ksz8_r_phy(struct ksz_device *dev,
> u16 phy, u16 reg, u16 *val)
> if (ret)
> return ret;
>
> + break;
> + case PHY_REG_KSZ87XX_SHORT_CABLE:
> + if (!ksz_is_ksz87xx(dev))
> + return -EOPNOTSUPP;
> + data = !!(dev->lpf_bw == KSZ87XX_PHY_LPF_62MHZ &&
> + dev->eq_init == KSZ87XX_DSP_EQ_INIT_LOW_LOSS);
The cached state lives on struct ksz_device, but ksz8_r_phy() is
invoked per port. Setting the preset on one port is reported back as
active on the others:
phytool write swp1/1/0x1a 1
phytool read swp1/2/0x1a -> 0x0001
phytool read swp1/3/0x1a -> 0x0001
The commit message already notes that the erratum applies switch-wide.
So writes from non-primary ports could either be rejected or at least
produce
a dev_info_once() so userspace can see the setting is shared?
> + break;
> + case PHY_REG_KSZ87XX_LPF_BW:
> + if (!ksz_is_ksz87xx(dev))
> + return -EOPNOTSUPP;
> + data = dev->lpf_bw;
> + break;
> + case PHY_REG_KSZ87XX_EQ_INIT:
> + if (!ksz_is_ksz87xx(dev))
> + return -EOPNOTSUPP;
> + data = dev->eq_init;
dev->eq_init starts at zero from the kzalloc, but the header added by
this patch defines KSZ87XX_DSP_EQ_INIT_FACTORY = 0x0F as the hardware
default. After a fresh boot on my setup (no writes), the read returns 0:
phytool read swp1/1/0x1c -> 0x0000
Should probe set dev->eq_init = KSZ87XX_DSP_EQ_INIT_FACTORY (and
dev->lpf_bw = KSZ87XX_PHY_LPF_90MHZ), or read the indirect registers
once on probe, so the cache reflects what the hardware actually holds?
> [...]
Thanks
Nicolai
next prev parent reply other threads:[~2026-05-28 11:43 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-24 10:44 [PATCH net-next v7 0/3] ksz87xx: add support for low-loss cable equalizer errata Fidelio Lawson
2026-05-24 10:44 ` [PATCH net-next v7 1/3] net: dsa: microchip: implement KSZ87xx Module 3 low-loss cable errata Fidelio Lawson
2026-05-28 7:19 ` Nicolai Buchwitz
2026-06-01 8:30 ` Fidelio LAWSON
2026-05-28 11:43 ` Nicolai Buchwitz [this message]
2026-06-01 10:40 ` Fidelio LAWSON
2026-05-24 10:44 ` [PATCH net-next v7 2/3] net: ethtool: add KSZ87xx low-loss cable PHY tunables Fidelio Lawson
2026-05-24 10:44 ` [PATCH net-next v7 3/3] net: phy: micrel: expose KSZ87xx low-loss cable tunables Fidelio Lawson
2026-05-24 16:19 ` [PATCH net-next v7 0/3] ksz87xx: add support for low-loss cable equalizer errata Marek Vasut
2026-05-28 9:11 ` Paolo Abeni
2026-05-28 2:30 ` Jakub Kicinski
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=fbb60fec5bbeb5fb83e215adbc2dcbb3@tipi-net.de \
--to=nb@tipi-net.de \
--cc=Tristram.Ha@microchip.com \
--cc=UNGLinuxDriver@microchip.com \
--cc=andrew@lunn.ch \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=fidelio.lawson@exotec.com \
--cc=hkallweit1@gmail.com \
--cc=horms@kernel.org \
--cc=kuba@kernel.org \
--cc=lawson.fidelio@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux@armlinux.org.uk \
--cc=marex@denx.de \
--cc=maxime.chevallier@bootlin.com \
--cc=netdev@vger.kernel.org \
--cc=olteanv@gmail.com \
--cc=pabeni@redhat.com \
--cc=woojung.huh@microchip.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.