The PTP_CLOCK_GETCAPS ioctl call in phc_ctl has a conditional check for whether to report the caps.adjust_phase bit. This is always set for both PTP_CLOCK_GETCAPS and PTP_CLOCK_GETCAPS2, and was always zero before the bit was moved from being reserved to indicate the adjust_phase.
In some sense if we lack PTP_CLOCK_GETCAPS2 we know the kernel won't report adjust_phase, but in reality such kernel versions did not have adjust_phase at all. There's no reason to make this check against PTP_CLOCK_GETCAPS2. Instead, scan the ptp_clock.h header file and check if we have adjust_phase support. Use this new flag instead of PTP_CLOCK_GETCAPS2. Signed-off-by: Jacob Keller <jacob.e.kel...@intel.com> --- incdefs.sh | 5 +++++ phc_ctl.c | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/incdefs.sh b/incdefs.sh index 21333e5109e9..a9e94f777f6b 100755 --- a/incdefs.sh +++ b/incdefs.sh @@ -63,6 +63,7 @@ kernel_flags() { prefix="" tstamp=/usr/include/linux/net_tstamp.h + ptp_clock=/usr/include/linux/ptp_clock.h if [ "x$KBUILD_OUTPUT" != "x" ]; then # With KBUILD_OUTPUT set, we are building against @@ -90,6 +91,10 @@ kernel_flags() if grep -q SOF_TIMESTAMPING_BIND_PHC ${prefix}${tstamp}; then printf " -DHAVE_VCLOCKS" fi + + if grep -q adjust_phase ${prefix}${ptp_clock}; then + printf " -DHAVE_PTP_CAPS_ADJUST_PHASE" + fi } flags="$(user_flags)$(kernel_flags)" diff --git a/phc_ctl.c b/phc_ctl.c index 92e597c40a23..6a5c2f43d7c9 100644 --- a/phc_ctl.c +++ b/phc_ctl.c @@ -311,7 +311,7 @@ static int do_caps(clockid_t clkid, int cmdc, char *cmdv[]) caps.n_pins, caps.pps ? "has" : "doesn't have", caps.cross_timestamping ? "has" : "doesn't have", - #ifdef PTP_CLOCK_GETCAPS2 + #ifdef HAVE_PTP_CAPS_ADJUST_PHASE caps.adjust_phase ? "has" : "doesn't have" #else "no information regarding" -- 2.41.0.1.g9857a21e0017.dirty _______________________________________________ Linuxptp-devel mailing list Linuxptp-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linuxptp-devel