From: Nicolai Buchwitz <nb@tipi-net.de>
To: Linus Walleij <linusw@kernel.org>
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>,
Rob Herring <robh@kernel.org>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
Conor Dooley <conor+dt@kernel.org>, Marek Vasut <marex@denx.de>,
Simon Horman <horms@kernel.org>,
Russell King <linux@armlinux.org.uk>,
netdev@vger.kernel.org, devicetree@vger.kernel.org
Subject: Re: [PATCH net-next v12 3/4] net: dsa: microchip: Support Microchip KSZ8995XA / KS8995XA
Date: Fri, 11 Sep 2026 14:11:18 +0200 [thread overview]
Message-ID: <6fdac2ceffe33e0ee02b8a6768bf7492@tipi-net.de> (raw)
In-Reply-To: <20260911-ks8995-to-ksz8-v12-3-5c3422d0d72e@kernel.org>
Hi Linus
On 11.9.2026 11:09, Linus Walleij wrote:
> This adds support for the Microchip KSZ8995XA also known as the
> Micrel KS8995XA switch to the KSZ driver.
>
> The KSZ8995XA shares family ID 0x95 and chip-ID nibble 0x0 with
> the KS8995MA, so hardware detection cannot distinguish them. The
> legacy "micrel,ks8995" compatible is therefore treated as KSZ8995XA.
> No KS8995MA users are known, and KS8995E has no documented SPI
> management interface. Neither MA nor E has been verified with this
> driver.
>
> The helper macros are named ksz_is_ksz8995xa() to make it
> possible to add E and MA support in the future.
>
> Wait for the self-clearing per-port PHY reset bits before continuing
> with switch setup. Poll each port for up to 600 ms and allow an
> additional millisecond for the PHYs to settle.
>
> The KSZ8995XA has eight global TOS priority registers with one
> bit per DSCP code point, providing two internal priority levels.
> The registers are ordered in the opposite direction from the
> other KSZ8 switches. Describe the two priorities in the chip
> data, then augment the DCB helpers for this.
>
> Practical testing also shows that its packet-size control bits use
> the same semantics as the other KSZ8 switches. The polarity in the
> manual appears to be wrong and makes the switch hang on big packets.
>
> The legacy KS8995 driver also matches the Micrel compatibles for
> KSZ8864 and KSZ8795. Add these to the KSZ SPI driver here and use
> an exact tristate dependency to make the drivers mutually exclusive.
> This transfers ownership atomically, avoiding module probe races and
> gaps in driver coverage between patches.
>
> Assisted-by: LLM
> Signed-off-by: Linus Walleij <linusw@kernel.org>
> ---
> [...]
> diff --git a/drivers/net/dsa/microchip/ksz8.c
> b/drivers/net/dsa/microchip/ksz8.c
> index 941ae9f66f70..4acce01ca063 100644
> --- a/drivers/net/dsa/microchip/ksz8.c
> +++ b/drivers/net/dsa/microchip/ksz8.c
> [...]
>
> +/*
> + * Restricted operations for KSZ8995XA, so many things are not
> supported
> + * by this old switch that we need diet DSA operations.
> + */
> +const struct dsa_switch_ops ksz8995xa_switch_ops = {
> + .get_tag_protocol = ksz8995xa_get_tag_protocol,
> + .setup = ksz8_setup,
> + .teardown = ksz_teardown,
> + .phy_read = ksz8_phy_read16,
> + .phy_write = ksz8_phy_write16,
> + .phylink_get_caps = ksz8_phylink_get_caps,
> + .port_setup = ksz8_dsa_port_setup,
> + .port_bridge_join = ksz_port_bridge_join,
> + .port_bridge_leave = ksz_port_bridge_leave,
> + .port_set_mac_address = ksz_port_set_mac_address,
> + .port_stp_state_set = ksz_port_stp_state_set,
> + .port_pre_bridge_flags = ksz_port_pre_bridge_flags,
> + .port_bridge_flags = ksz_port_bridge_flags,
> + .port_fast_age = ksz8_flush_dyn_mac_table,
KSZ8995XA datasheet [1] (table 4-2) states fast-age enable as reg 0x03
bit 1,
but ksz8_flush_dyn_mac_table() sets reg 0x02 bit 5. It needs an override
similar to the existing one for KSZ8463, but accounting for XA's 800 us
ageing time.
> + .port_mirror_add = ksz8_port_mirror_add,
> + .port_mirror_del = ksz8_port_mirror_del,
> + .port_change_mtu = ksz8995xa_change_mtu,
> + .port_max_mtu = ksz88xx_max_mtu,
> + .port_get_default_prio = ksz_port_get_default_prio,
> + .port_set_default_prio = ksz_port_set_default_prio,
> + .port_get_dscp_prio = ksz_port_get_dscp_prio,
> + .port_add_dscp_prio = ksz_port_add_dscp_prio,
> + .port_del_dscp_prio = ksz_port_del_dscp_prio,
> + .port_get_apptrust = ksz_port_get_apptrust,
> + .port_set_apptrust = ksz_port_set_apptrust,
If I read the datasheet correctly, PCP and DSCP priorities are or-ed,
but ksz_port_set_apptrust() accepts both to be set (with PCP taking
precedence).
Not sure if this would break anything though ...
The other things look fine to me.
> +};
> +
> [...]
[1]
https://ww1.microchip.com/downloads/en/DeviceDoc/KSZ8995XA-Integrated-5-Port-10-100-QoS-Switch-DS00003677A.pdf
Thanks,
Nicolai
next prev parent reply other threads:[~2026-09-11 12:11 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-11 9:09 [PATCH net-next v12 0/4] net: dsa: microchip: Add support for KSZ8995XA/KS8995XA Linus Walleij
2026-09-11 9:09 ` [PATCH net-next v12 1/4] dt-bindings: net: dsa: microchip: Add KSZ8995XA Linus Walleij
2026-09-11 11:43 ` Nicolai Buchwitz
2026-09-11 9:09 ` [PATCH net-next v12 2/4] net: dsa: tag_ks8995: Add the KS8995 tag handling Linus Walleij
2026-09-11 11:46 ` Nicolai Buchwitz
2026-09-11 9:09 ` [PATCH net-next v12 3/4] net: dsa: microchip: Support Microchip KSZ8995XA / KS8995XA Linus Walleij
2026-09-11 12:11 ` Nicolai Buchwitz [this message]
2026-09-12 9:10 ` sashiko-bot
2026-09-11 9:09 ` [PATCH net-next v12 4/4] net: dsa: ks8995: Delete surplus driver Linus Walleij
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=6fdac2ceffe33e0ee02b8a6768bf7492@tipi-net.de \
--to=nb@tipi-net.de \
--cc=UNGLinuxDriver@microchip.com \
--cc=andrew@lunn.ch \
--cc=conor+dt@kernel.org \
--cc=davem@davemloft.net \
--cc=devicetree@vger.kernel.org \
--cc=edumazet@google.com \
--cc=horms@kernel.org \
--cc=krzk+dt@kernel.org \
--cc=kuba@kernel.org \
--cc=linusw@kernel.org \
--cc=linux@armlinux.org.uk \
--cc=marex@denx.de \
--cc=netdev@vger.kernel.org \
--cc=olteanv@gmail.com \
--cc=pabeni@redhat.com \
--cc=robh@kernel.org \
--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.