This code in hwts_init is wrong:cfg.flags = HWTSTAMP_FLAG_BONDED_PHC_INDEX; /* Fall back without flag if user run new build on old kernel */ if (ioctl(fd, SIOCGHWTSTAMP, &ifreq) == -EINVAL) init_ifreq(&ifreq, &cfg, device); As `man ioctl` says: RETURN VALUE Usually, on success zero is returned. A few ioctl() requests use the return value as an output parameter and return a nonnegative value on success. On error, -1 is returned, and errno is set appropriately. So I think what you meant to write is this: cfg.flags = HWTSTAMP_FLAG_BONDED_PHC_INDEX; err = ioctl(fd, SIOCGHWTSTAMP, &ifreq); if (err < 0) { /* Fall back without flag if user run new build on old kernel */ if (errno == EINVAL) { init_ifreq(&ifreq, &cfg, device); } else { pr_err("ioctl SIOCGHWTSTAMP failed: %m"); return err; } }
Agree. Applying this fix reveals the real error - EOPNOTSUPP.
@Martin would that also fix your issue?
No. Getting the real error code, I went after the source of EOPNOTSUPP, and...
$ sudo hwstamp_ctl -i eth0 Device driver does not have support for non-destructive SIOCGHWTSTAMP.This is it! The nvidia eqos driver does not support SIOCGHWTSTAMP (but it does support SIOCSHWTSTAMP). Evidence can be found in https://github.com/OE4T/linux-tegra-4.9/blob/oe4t-patches-l4t-r32.7.3/nvidia/drivers/net/ethernet/nvidia/eqos/drv.c#L3979 (function eqos_ioctl).
According to https://www.kernel.org/doc/Documentation/networking/timestamping.txt, section 3.1:
A driver which supports hardware time stamping must support the SIOCSHWTSTAMP ioctl and update the supplied struct hwtstamp_config with the actual values as described in the section on SIOCSHWTSTAMP. It should also support SIOCGHWTSTAMP.
The support for SIOCGHWTSTAMP is optional.So it seems to me wrong to test for the bonded PHC support using this ioctl, which is only optional.
To add importance to this issue, I've found out it not only affects the pretty old Jetson TX2 I used for the test, but all Jetson models up to the newest AGX Orin (included). Meaning no Jetson can run ptp4l from master branch now. I really wonder I'm the first one complaining...
Regarding possible solutions I can think of:1. Check errno not only for EINVAL, but also for EOPNOTSUPP. This would solve the issue for me (and Jetsons in general), but would probably leave some users with bonded PHCs whose drivers do not support SIOCGHWTSTAMP without the possibility to use the bonded PHC.
2. Find another way to test for the bonded PHC feature. Martin
smime.p7s
Description: Elektronicky podpis S/MIME
_______________________________________________ Linuxptp-devel mailing list Linuxptp-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linuxptp-devel