phc2sys: Read maximum frequency adjustment.

Signed-off-by: Miroslav Lichvar <mlichvar@redhat.com>
master
Miroslav Lichvar 2013-04-08 15:44:05 +02:00 committed by Richard Cochran
parent 1f2c9de982
commit e3f57d1579
2 changed files with 14 additions and 5 deletions

View File

@ -52,8 +52,9 @@ ptp4l: $(OBJ)
pmc: msg.o pmc.o pmc_common.o print.o raw.o sk.o tlv.o transport.o udp.o \ pmc: msg.o pmc.o pmc_common.o print.o raw.o sk.o tlv.o transport.o udp.o \
udp6.o uds.o util.o version.o udp6.o uds.o util.o version.o
phc2sys: clockadj.o msg.o phc2sys.o pmc_common.o print.o pi.o servo.o raw.o \ phc2sys: clockadj.o msg.o phc.o phc2sys.o pi.o pmc_common.o print.o servo.o \
sk.o stats.o sysoff.o tlv.o transport.o udp.o udp6.o uds.o util.o version.o raw.o sk.o stats.o sysoff.o tlv.o transport.o udp.o udp6.o uds.o util.o \
version.o
hwstamp_ctl: hwstamp_ctl.o version.o hwstamp_ctl: hwstamp_ctl.o version.o

View File

@ -37,6 +37,7 @@
#include "ds.h" #include "ds.h"
#include "fsm.h" #include "fsm.h"
#include "missing.h" #include "missing.h"
#include "phc.h"
#include "pi.h" #include "pi.h"
#include "pmc_common.h" #include "pmc_common.h"
#include "print.h" #include "print.h"
@ -52,8 +53,6 @@
#define KI 0.3 #define KI 0.3
#define NS_PER_SEC 1000000000LL #define NS_PER_SEC 1000000000LL
#define max_ppb 512000
#define PHC_PPS_OFFSET_LIMIT 10000000 #define PHC_PPS_OFFSET_LIMIT 10000000
#define PMC_UPDATE_INTERVAL (60 * NS_PER_SEC) #define PMC_UPDATE_INTERVAL (60 * NS_PER_SEC)
@ -543,7 +542,7 @@ int main(int argc, char *argv[])
char *progname, *ethdev = NULL; char *progname, *ethdev = NULL;
clockid_t src = CLOCK_INVALID; clockid_t src = CLOCK_INVALID;
int c, phc_readings = 5, phc_rate = 1, pps_fd = -1; int c, phc_readings = 5, phc_rate = 1, pps_fd = -1;
int r, wait_sync = 0, forced_sync_offset = 0; int max_ppb, r, wait_sync = 0, forced_sync_offset = 0;
int print_level = LOG_INFO, use_syslog = 1, verbose = 0; int print_level = LOG_INFO, use_syslog = 1, verbose = 0;
double ppb; double ppb;
struct clock dst_clock = { struct clock dst_clock = {
@ -701,6 +700,15 @@ int main(int argc, char *argv[])
make sure ppb is the actual frequency of the clock. */ make sure ppb is the actual frequency of the clock. */
clockadj_set_freq(dst_clock.clkid, ppb); clockadj_set_freq(dst_clock.clkid, ppb);
clockadj_set_leap(dst_clock.clkid, 0); clockadj_set_leap(dst_clock.clkid, 0);
if (dst_clock.clkid == CLOCK_REALTIME) {
max_ppb = sysclk_max_freq();
} else {
max_ppb = phc_max_adj(dst_clock.clkid);
if (!max_ppb) {
pr_err("clock is not adjustable");
return -1;
}
}
dst_clock.servo = servo_create(CLOCK_SERVO_PI, -ppb, max_ppb, 0); dst_clock.servo = servo_create(CLOCK_SERVO_PI, -ppb, max_ppb, 0);