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
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