lkml.org 
[lkml]   [2024]   [Apr]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
From
Subject[PATCH net-next v1 3/4] net: phy: realtek: provide TimeSync data path delays for RTL8211E
Date
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@pengutronix.de>
---
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

\
 
 \ /
  Last update: 2024-04-17 18:43    [W:0.114 / U:0.372 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site