Skip to content

Commit

Permalink
selftests/ptp: Add -x option for testing PTP_SYS_OFFSET_EXTENDED
Browse files Browse the repository at this point in the history
The -x option (where 'x' stands for eXtended) takes an argument which
represents the number of samples to request from the PTP device.
The help message will display the maximum number of samples allowed.
Providing an invalid argument will also display the maximum number of
samples allowed.

Signed-off-by: Alex Maftei <alex.maftei@amd.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Alex Maftei authored and David S. Miller committed Jul 28, 2023
1 parent 8ad228b commit c8ba75c
Showing 1 changed file with 42 additions and 2 deletions.
44 changes: 42 additions & 2 deletions tools/testing/selftests/ptp/testptp.c
Original file line number Diff line number Diff line change
Expand Up @@ -143,8 +143,9 @@ static void usage(char *progname)
" -S set the system time from the ptp clock time\n"
" -t val shift the ptp clock time by 'val' seconds\n"
" -T val set the ptp clock time to 'val' seconds\n"
" -x val get an extended ptp clock time with the desired number of samples (up to %d)\n"
" -z test combinations of rising/falling external time stamp flags\n",
progname);
progname, PTP_MAX_SAMPLES);
}

int main(int argc, char *argv[])
Expand All @@ -158,6 +159,7 @@ int main(int argc, char *argv[])
struct timex tx;
struct ptp_clock_time *pct;
struct ptp_sys_offset *sysoff;
struct ptp_sys_offset_extended *soe;

char *progname;
unsigned int i;
Expand All @@ -176,6 +178,7 @@ int main(int argc, char *argv[])
int index = 0;
int list_pins = 0;
int pct_offset = 0;
int getextended = 0;
int n_samples = 0;
int pin_index = -1, pin_func;
int pps = -1;
Expand All @@ -190,7 +193,7 @@ int main(int argc, char *argv[])

progname = strrchr(argv[0], '/');
progname = progname ? 1+progname : argv[0];
while (EOF != (c = getopt(argc, argv, "cd:e:f:ghH:i:k:lL:n:o:p:P:sSt:T:w:z"))) {
while (EOF != (c = getopt(argc, argv, "cd:e:f:ghH:i:k:lL:n:o:p:P:sSt:T:w:x:z"))) {
switch (c) {
case 'c':
capabilities = 1;
Expand Down Expand Up @@ -255,6 +258,15 @@ int main(int argc, char *argv[])
case 'w':
pulsewidth = atoi(optarg);
break;
case 'x':
getextended = atoi(optarg);
if (getextended < 1 || getextended > PTP_MAX_SAMPLES) {
fprintf(stderr,
"number of extended timestamp samples must be between 1 and %d; was asked for %d\n",
PTP_MAX_SAMPLES, getextended);
return -1;
}
break;
case 'z':
flagtest = 1;
break;
Expand Down Expand Up @@ -535,6 +547,34 @@ int main(int argc, char *argv[])
free(sysoff);
}

if (getextended) {
soe = calloc(1, sizeof(*soe));
if (!soe) {
perror("calloc");
return -1;
}

soe->n_samples = getextended;

if (ioctl(fd, PTP_SYS_OFFSET_EXTENDED, soe)) {
perror("PTP_SYS_OFFSET_EXTENDED");
} else {
printf("extended timestamp request returned %d samples\n",
getextended);

for (i = 0; i < getextended; i++) {
printf("sample #%2d: system time before: %lld.%09u\n",
i, soe->ts[i][0].sec, soe->ts[i][0].nsec);
printf(" phc time: %lld.%09u\n",
soe->ts[i][1].sec, soe->ts[i][1].nsec);
printf(" system time after: %lld.%09u\n",
soe->ts[i][2].sec, soe->ts[i][2].nsec);
}
}

free(soe);
}

close(fd);
return 0;
}

0 comments on commit c8ba75c

Please sign in to comment.