Commit 3a9a9a61 authored by Rahul Rameshbabu's avatar Rahul Rameshbabu Committed by David S. Miller

testptp: Add support for testing ptp_clock_info .adjphase callback

Invoke clock_adjtime syscall with tx.modes set with ADJ_OFFSET when testptp
is invoked with a phase adjustment offset value. Support seconds and
nanoseconds for the offset value.

Cc: Jakub Kicinski <kuba@kernel.org>
Cc: Shuah Khan <shuah@kernel.org>
Cc: Richard Cochran <richardcochran@gmail.com>
Cc: Maciek Machnikowski <maciek@machnikowski.net>
Signed-off-by: default avatarRahul Rameshbabu <rrameshbabu@nvidia.com>
Acked-by: default avatarRichard Cochran <richardcochran@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 048f6d99
...@@ -134,6 +134,7 @@ static void usage(char *progname) ...@@ -134,6 +134,7 @@ static void usage(char *progname)
" 1 - external time stamp\n" " 1 - external time stamp\n"
" 2 - periodic output\n" " 2 - periodic output\n"
" -n val shift the ptp clock time by 'val' nanoseconds\n" " -n val shift the ptp clock time by 'val' nanoseconds\n"
" -o val phase offset (in nanoseconds) to be provided to the PHC servo\n"
" -p val enable output with a period of 'val' nanoseconds\n" " -p val enable output with a period of 'val' nanoseconds\n"
" -H val set output phase to 'val' nanoseconds (requires -p)\n" " -H val set output phase to 'val' nanoseconds (requires -p)\n"
" -w val set output pulse width to 'val' nanoseconds (requires -p)\n" " -w val set output pulse width to 'val' nanoseconds (requires -p)\n"
...@@ -167,6 +168,7 @@ int main(int argc, char *argv[]) ...@@ -167,6 +168,7 @@ int main(int argc, char *argv[])
int adjfreq = 0x7fffffff; int adjfreq = 0x7fffffff;
int adjtime = 0; int adjtime = 0;
int adjns = 0; int adjns = 0;
int adjphase = 0;
int capabilities = 0; int capabilities = 0;
int extts = 0; int extts = 0;
int flagtest = 0; int flagtest = 0;
...@@ -188,7 +190,7 @@ int main(int argc, char *argv[]) ...@@ -188,7 +190,7 @@ int main(int argc, char *argv[])
progname = strrchr(argv[0], '/'); progname = strrchr(argv[0], '/');
progname = progname ? 1+progname : argv[0]; progname = progname ? 1+progname : argv[0];
while (EOF != (c = getopt(argc, argv, "cd:e:f:ghH:i:k:lL:n: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:z"))) {
switch (c) { switch (c) {
case 'c': case 'c':
capabilities = 1; capabilities = 1;
...@@ -228,6 +230,9 @@ int main(int argc, char *argv[]) ...@@ -228,6 +230,9 @@ int main(int argc, char *argv[])
case 'n': case 'n':
adjns = atoi(optarg); adjns = atoi(optarg);
break; break;
case 'o':
adjphase = atoi(optarg);
break;
case 'p': case 'p':
perout = atoll(optarg); perout = atoll(optarg);
break; break;
...@@ -327,6 +332,18 @@ int main(int argc, char *argv[]) ...@@ -327,6 +332,18 @@ int main(int argc, char *argv[])
} }
} }
if (adjphase) {
memset(&tx, 0, sizeof(tx));
tx.modes = ADJ_OFFSET | ADJ_NANO;
tx.offset = adjphase;
if (clock_adjtime(clkid, &tx) < 0) {
perror("clock_adjtime");
} else {
puts("phase adjustment okay");
}
}
if (gettime) { if (gettime) {
if (clock_gettime(clkid, &ts)) { if (clock_gettime(clkid, &ts)) {
perror("clock_gettime"); perror("clock_gettime");
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment