Re: [PATCH net-next v2] net: dsa: microchip: enable SGMII port for KSZ9897

Nicolai Buchwitz <[email protected]>
Newsgroups org.kernel.vger.netdev,org.kernel.vger.linux-kernel
Message-ID <[email protected]>
Hi Tapio

On 11.8.2026 12:20, Tapio Reijonen wrote:
> The KSZ9897 has an SGMII/1000BASE-X capable port 7, but its chip_info
> entry never set .sgmii_port.

AFAIK only the KSZ9897S variant.  AN5513 says the S "contains the same 
SGMII
port as the KSZ9477 however, the KSZ9897R has a second RGMII port", and
the R data sheet never mentions SGMII at all.

Unfortunately the chip id for both seems to be identical (0x00989700), 
so
this would apply to the R variant too. With this the R variant should
return -ENODEV in ksz9477_pcs_create() during probe.

Have a look how KSZ9563 is split off the KSZ9893 chip id, so maybe it 
can
be solved in a similar manner.  PORT_SGMII_SEL could also be worth a 
look.

> As a result ksz_has_sgmii_port() is false,
> ksz9477_pcs_create() is never called, and 
> ksz9477_phylink_mac_select_pcs()
> returns NULL for port 7, so no PCS is ever instantiated and a
> phy-mode = "sgmii" or "1000base-x" link on that port cannot come up.
> 
> The KSZ9897 shares the KSZ9477 register layout and operations
> (ksz9477_dev_ops, ksz9477_regs) and reaches its port-7 PCS through the
> same SPI-indirect XPCS register window. The register-identical LAN9646
> already enables this via .sgmii_port = 7. Set the same for the KSZ9897
> so the XPCS instance is created and 1000BASE-X / SGMII links on port 7
> negotiate correctly.
> 
> Tested on a KSZ9897 with a 1000BASE-X fibre SFP wired directly to
> port 7: the link negotiates at 1Gbps/full duplex and passes traffic.
> 
> Signed-off-by: Tapio Reijonen <[email protected]>
> ---
> Changes in v2:
> - Resend only, no functional change: v1 was dropped when the netdev
>   patch queue overflowed.
> - Rebased onto current net-next.
> - Link to v1: 
> https://lore.kernel.org/r/[email protected]
> ---
>  drivers/net/dsa/microchip/ksz_common.c | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/drivers/net/dsa/microchip/ksz_common.c 
> b/drivers/net/dsa/microchip/ksz_common.c
> index 
> 1a9d6f83a0232830ac4996ae5f53b8bde0b3747d..a80fde0a8c7e93ea2db4baeb2f941a260e23b687 
> 100644
> --- a/drivers/net/dsa/microchip/ksz_common.c
> +++ b/drivers/net/dsa/microchip/ksz_common.c
> @@ -1484,6 +1484,7 @@ const struct ksz_chip_data ksz_switch_chips[] = {
>  		.internal_phy	= {true, true, true, true,
>  				   true, false, false},
>  		.gbit_capable	= {true, true, true, true, true, true, true},
> +		.sgmii_port = 7,
>  	},
> 
>  	[KSZ9893] = {
> 
> ---
> base-commit: b54074ffb813aa4b97585d97ae1ead69d96432b5
> change-id: 20260703-ksz9897-sgmii-port-48ddb100e015
> 
> Best regards,

Thanks,
Nicolai
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.