Commit d11dc850 authored by Tristan Gingold's avatar Tristan Gingold

wrtd-freqmeter: fix pasto in wrtd_ts_sub.

parent 0c39d7b3
......@@ -287,7 +287,7 @@ int wrtd_ts_sub(struct wr_timestamp *res,
rticks = r->ticks + (carry ? 1 : 0);
carry = l->ticks < rticks;
res->ticks = (carry ? 125000000 : 0) + l->ticks - r->ticks;
res->ticks = (carry ? 125000000 : 0) + l->ticks - rticks;
rsecs = r->seconds + (carry ? 1 : 0);
if (l->seconds < rsecs)
......
......@@ -90,7 +90,8 @@ static void print_ns(uint64_t ns)
static void print_ts(struct wr_timestamp ts)
{
printf ("%lu:", (unsigned long)ts.seconds);
print_ns(ts.ticks * 8ULL);
print_ns(ts.ticks * 8ULL + (ts.frac * 8 / 4096));
printf("+%03df", ts.frac & 0x1ff);
}
static void disp_timing(int count)
......@@ -197,6 +198,7 @@ static void disp_graph(int count)
uint64_t max_period;
uint64_t period;
uint64_t bin_width;
uint64_t sum;
#define CBINS 10
#define NBINS (2*CBINS + 1)
int bins[NBINS];
......@@ -213,8 +215,9 @@ static void disp_graph(int count)
max_period = 0;
min_period = -1;
sum = 0;
for (i = 1; i <= count0; i++) {
for (i = 0; i < count0; i++) {
/* Get stats. */
do
AssertIntEquals(0, wrtd_in_state_get(wrtd, channel, &sti));
......@@ -225,6 +228,27 @@ static void disp_graph(int count)
&sti.last_pulse,
&last_ts));
wrtd_ts_to_pico(&d, &pico);
if (verbose) {
struct wr_timestamp d1;
uint64_t pico1;
// Note: drifting due to rounding.
sum += pico;
printf("Delay: %12"PRIu64"ps ", pico);
print_ts(d);
printf(", abs: ");
print_ts(sti.last_pulse);
printf("\n");
AssertIntEquals(0, wrtd_ts_sub(&d1,
&sti.last_pulse,
&first_ts));
wrtd_ts_to_pico(&d1, &pico1);
if (abs(pico1 - sum) > (i + 2)) {
printf("pico1: %12"PRIu64"ps, sum: %12"PRIu64"ps\n", pico1, sum);
break;
}
}
if (pico > max_period)
max_period = pico;
if (pico < min_period)
......@@ -243,10 +267,18 @@ static void disp_graph(int count)
}
// Compute period.
AssertIntEquals(0, wrtd_ts_sub(&d,
&sti.last_pulse,
&first_ts));
AssertIntEquals(0, wrtd_ts_sub(&d, &last_ts, &first_ts));
wrtd_ts_to_pico(&d, &period);
if (verbose) {
printf ("last ts: ");
print_ts (last_ts);
printf (", first ts: ");
print_ts (first_ts);
printf("\n");
printf ("diff: ");
print_ts(d);
printf(" = %12"PRIu64"ps\n", period);
}
period /= count0;
printf ("Mean period: %12"PRIu64"ps\n", period);
......
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