Subject: Re: [PATCH] net: phy: realtek: Add RTL8224 cable testing support

From: Sven Eckelmann <[email-masked]>
Date: Mon, 27 Oct 2025 08:49:36 +0100

On Monday, 27 October 2025 01:16:12 CET Andrew Lunn wrote:
> > +#define RTL8224_SRAM_RTCT_FAULT_BUSY		BIT(0)
> > +#define RTL8224_SRAM_RTCT_FAULT_OPEN		BIT(3)
> > +#define RTL8224_SRAM_RTCT_FAULT_SAME_SHORT	BIT(4)
> > +#define RTL8224_SRAM_RTCT_FAULT_OK		BIT(5)
> > +#define RTL8224_SRAM_RTCT_FAULT_DONE		BIT(6)
> > +#define RTL8224_SRAM_RTCT_FAULT_CROSS_SHORT	BIT(7)
> 
> It is unusual these are bits. Does the datasheet say what happens if
> the cable is both same short and cross short?

Unfortunately, the datasheet doesn't say anything about cable tests.

> 
> > +static int rtl8224_cable_test_result_trans(u32 result)
> > +{
> > +	if (result & RTL8224_SRAM_RTCT_FAULT_SAME_SHORT)
> > +		return ETHTOOL_A_CABLE_RESULT_CODE_SAME_SHORT;
> > +
> > +	if (result & RTL8224_SRAM_RTCT_FAULT_BUSY)
> > +		return ETHTOOL_A_CABLE_RESULT_CODE_UNSPEC;
> > +
> > +	if (result & RTL8224_SRAM_RTCT_FAULT_CROSS_SHORT)
> > +		return ETHTOOL_A_CABLE_RESULT_CODE_CROSS_SHORT;
> 
> I don't remember seeing a PHY able to report both same short and cross
> short at the same time. Maybe there has been, but there is no code for
> it. We could add such a code.

I've tried it a couple of times (with shorts at different lengths) but was not 
able to do this. For me, it looks like the RTL8224 can represent these faults 
in parallel but not actual detect them in parallel. I also played around with
open + shorts. At the end, I never saw any parallel detections and left it to 
the bit prioritization (during decoding) from RTLSDK.

RTL8226 in RTLSDK doesn't use (in contrast to RTL8224 in RTLSDK) the bits - 
but there seems to be at least some connections. The codes for RTL8226 
(according to RTLSDK) are:

* 0x60 RTL8226_SRAM_RTCT_FAULT_OK (would be RTL8224 OK+DONE)
* 0x48 RTL8226_SRAM_RTCT_FAULT_OPEN (would be RTL8224 OPEN+DONE)
* 0x50 RTL8226_SRAM_RTCT_FAULT_SHORT (would be RTL8224 SAME_SHORT + DONE)
* 0x42 RTL8226_SRAM_RTCT_FAULT_MISMATCH_OPEN (would be RTL8224 DONE + ????)
* 0x44 RTL8226_SRAM_RTCT_FAULT_MISMATCH_SHORT (would be RTL8224 DONE + ????)
* else: RTL8226_SRAM_RTCT_FAULT_UNKNOWN

It seems like these decoding would not even have cross shorts. Don't ask me 
what this mismatch is - couldn't find anything like this in RTL8224. The bits 
1 + 2 are completely unused there.

Regards,
	Sven