mirror of
https://github.com/lkl/linux.git
synced 2025-12-19 16:13:19 +09:00
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: Rahul Rameshbabu <rrameshbabu@nvidia.com> Acked-by: Richard Cochran <richardcochran@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
048f6d998e
commit
3a9a9a6139
@@ -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[])
|
|||||||
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[])
|
|||||||
|
|
||||||
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[])
|
|||||||
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[])
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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");
|
||||||
|
|||||||
Reference in New Issue
Block a user