2024-04-17 16:43:41

by Oleksij Rempel

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

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 <[email protected]>
---
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



2024-04-18 05:40:56

by kernel test robot

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

Hi Oleksij,

kernel test robot noticed the following build warnings:

[auto build test WARNING on net-next/main]

url: https://github.com/intel-lab-lkp/linux/commits/Oleksij-Rempel/net-phy-Add-TimeSync-delay-query-support-to-PHYlib-API/20240418-004607
base: net-next/main
patch link: https://lore.kernel.org/r/20240417164316.1755299-4-o.rempel%40pengutronix.de
patch subject: [PATCH net-next v1 3/4] net: phy: realtek: provide TimeSync data path delays for RTL8211E
config: arm-defconfig (https://download.01.org/0day-ci/archive/20240418/[email protected]/config)
compiler: clang version 14.0.6 (https://github.com/llvm/llvm-project.git f28c006a5895fc0e329fe15fead81e37457cb1d1)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240418/[email protected]/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <[email protected]>
| Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/

All warnings (new ones prefixed by >>):

>> drivers/net/phy/realtek.c:278:2: warning: unannotated fall-through between switch labels [-Wimplicit-fallthrough]
default:
^
drivers/net/phy/realtek.c:278:2: note: insert 'break;' to avoid fall-through
default:
^
break;
1 warning generated.


vim +278 drivers/net/phy/realtek.c

245
246 static int rtl8211e_get_timesync_data_path_delays(struct phy_device *phydev,
247 struct phy_timesync_delay *tsd)
248 {
249 phydev_warn(phydev, "Time stamping is not supported\n");
250
251 switch (phydev->interface) {
252 case PHY_INTERFACE_MODE_RGMII:
253 case PHY_INTERFACE_MODE_RGMII_RXID:
254 case PHY_INTERFACE_MODE_RGMII_TXID:
255 case PHY_INTERFACE_MODE_RGMII_ID:
256 /* The values are measured with RTL8211E and LAN8841 as link
257 * partners and confirmed with i211 to be in sane range.
258 */
259 if (phydev->speed == SPEED_1000) {
260 tsd->tx_min_delay_ns = 326;
261 tsd->rx_min_delay_ns = 406;
262 return 0;
263 } else if (phydev->speed == SPEED_100) {
264 tsd->tx_min_delay_ns = 703;
265 tsd->rx_min_delay_ns = 621;
266 return 0;
267 } else if (phydev->speed == SPEED_10) {
268 /* This value is suspiciously big, with atypical
269 * shift to Egress side. This value is confirmed
270 * by measuring RGMII-PHY-PHY-RGMII path delay.
271 * Similar results are confirmed with LAN8841 and i211
272 * as link partners.
273 */
274 tsd->tx_min_delay_ns = 920231;
275 tsd->rx_min_delay_ns = 1674;
276 return 0;
277 }
> 278 default:
279 break;
280 }
281
282 phydev_warn(phydev, "Not tested or not supported modes for path delay values\n");
283
284 return -EOPNOTSUPP;
285 }
286

--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki