[PATCH net-next v1 3/4] net: phy: realtek: provide TimeSync data path delays for RTL8211E

From: Oleksij Rempel
Date: Wed Apr 17 2024 - 12:43:38 EST


Provide default data path delays for RTL8211E.

The measurements was done against with iMX8MP STMMAC and LAN8841 as the
link partner.

This values was calculated based on RGMII-PHY-PHY-RGMII measurements,
where the link partner is LAN8841. Following values was measured:
- data flow from RTL8211E to LAN8841:
746ns @ 1000Mbps
1770ns @ 100Mbps
932000ns @ 10Mbps
- data flow from LAN8841 to RTL8211E:
594ns @ 1000Mbps
1130ns @ 100Mbps
8920ns @ 10Mbps

Before this patch ptp4l reported following path delays:
~610ns @ 1000Mbps
~942ns @ 100Mbps
~465998ns @ 10Mbps

PPS offset compared to grand master was:
~ -114ns @ 1000Mbps
~ -215ns @ 100Mbps
~ -465998ns @ 10Mbps

Magnetic - Cable - Magnetic - delay in this setup was about 5ns.

Signed-off-by: Oleksij Rempel <o.rempel@xxxxxxxxxxxxxx>
---
drivers/net/phy/realtek.c | 42 +++++++++++++++++++++++++++++++++++++++
1 file changed, 42 insertions(+)

diff --git a/drivers/net/phy/realtek.c b/drivers/net/phy/realtek.c
index 1fa70427b2a26..e39fec8d166b9 100644
--- a/drivers/net/phy/realtek.c
+++ b/drivers/net/phy/realtek.c
@@ -221,6 +221,47 @@ static int rtl8211e_config_intr(struct phy_device *phydev)
return err;
}

+static int rtl8211e_get_timesync_data_path_delays(struct phy_device *phydev,
+ struct phy_timesync_delay *tsd)
+{
+ phydev_warn(phydev, "Time stamping is not supported\n");
+
+ switch (phydev->interface) {
+ case PHY_INTERFACE_MODE_RGMII:
+ case PHY_INTERFACE_MODE_RGMII_RXID:
+ case PHY_INTERFACE_MODE_RGMII_TXID:
+ case PHY_INTERFACE_MODE_RGMII_ID:
+ /* The values are measured with RTL8211E and LAN8841 as link
+ * partners and confirmed with i211 to be in sane range.
+ */
+ if (phydev->speed == SPEED_1000) {
+ tsd->tx_min_delay_ns = 326;
+ tsd->rx_min_delay_ns = 406;
+ return 0;
+ } else if (phydev->speed == SPEED_100) {
+ tsd->tx_min_delay_ns = 703;
+ tsd->rx_min_delay_ns = 621;
+ return 0;
+ } else if (phydev->speed == SPEED_10) {
+ /* This value is suspiciously big, with atypical
+ * shift to Egress side. This value is confirmed
+ * by measuring RGMII-PHY-PHY-RGMII path delay.
+ * Similar results are confirmed with LAN8841 and i211
+ * as link partners.
+ */
+ tsd->tx_min_delay_ns = 920231;
+ tsd->rx_min_delay_ns = 1674;
+ return 0;
+ }
+ default:
+ break;
+ }
+
+ phydev_warn(phydev, "Not tested or not supported modes for path delay values\n");
+
+ return -EOPNOTSUPP;
+}
+
static int rtl8211f_config_intr(struct phy_device *phydev)
{
u16 val;
@@ -935,6 +976,7 @@ static struct phy_driver realtek_drvs[] = {
.resume = genphy_resume,
.read_page = rtl821x_read_page,
.write_page = rtl821x_write_page,
+ .get_timesync_data_path_delays = rtl8211e_get_timesync_data_path_delays,
}, {
PHY_ID_MATCH_EXACT(0x001cc916),
.name = "RTL8211F Gigabit Ethernet",
--
2.39.2