Re: [PATCH v3 1/3] net: dsa: microchip: implement KSZ87xx Module 3 low-loss cable errata
From: Fidelio LAWSON
Date: Tue Apr 14 2026 - 07:59:45 EST
On 4/14/26 13:05, Marek Vasut wrote:
On 4/14/26 11:12 AM, Fidelio Lawson wrote:You are right that EQ training and LPF bandwidth control
Implement the "Module 3: Equalizer fix for short cables" erratum fromI may not fully understand this, but aren't the EQ and LPF settings orthogonal ?
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.
The affected registers are part of the switch address space and are not
directly accessible from the PHY driver. To keep the PHY-facing API
clean and avoid leaking switch-specific details, model this errata
control as vendor-specific Clause 22 PHY registers.
A vendor-specific Clause 22 PHY register is introduced as a mode
selector in PHY_REG_LOW_LOSS_CTRL, and ksz8_r_phy() / ksz8_w_phy()
translate accesses to these bits into the appropriate indirect
TABLE_LINK_MD_V accesses.
The control register defines the following modes:
0: disabled (default behavior)
1: EQ training workaround
2: LPF 90 MHz
3: LPF 62 MHz
4: LPF 55 MHz
5: LPF 44 MHz
are orthogonal from a hardware point of view.
In this case, the interface is intentionally modeled after the erratum
guidance rather than exposing all possible combinations. Microchip
documents the workarounds as alternative solutions:
"If work around 1 does not solve the short cable issue in a CAT-5E or CAT-6 application, change the work around 1 register (0x3C) to its default value (0x0A), and use the following settings"
from: https://ww1.microchip.com/downloads/aemDocuments/documents/OTH/ProductDocuments/Errata/KSZ87xx-Errata-DS80000687C.pdf
If you’d prefer exposing these as orthogonal controls, I can revise the
interface in the next iteration.