]> Git Repo - linux.git/blame - kernel/time/ntp.c
Linux 6.14-rc3
[linux.git] / kernel / time / ntp.c
CommitLineData
b2441318 1// SPDX-License-Identifier: GPL-2.0
4c7ee8de 2/*
4c7ee8de
JS
3 * NTP state machine interfaces and logic.
4 *
5 * This code was mainly moved from kernel/timer.c and kernel/time.c
6 * Please see those files for relevant copyright info and historical
7 * changelogs.
8 */
aa0ac365 9#include <linux/capability.h>
7dffa3c6 10#include <linux/clocksource.h>
eb3f938f 11#include <linux/workqueue.h>
53bbfa9e
IM
12#include <linux/hrtimer.h>
13#include <linux/jiffies.h>
14#include <linux/math64.h>
15#include <linux/timex.h>
16#include <linux/time.h>
17#include <linux/mm.h>
025b40ab 18#include <linux/module.h>
023f333a 19#include <linux/rtc.h>
7e8eda73 20#include <linux/audit.h>
4c7ee8de 21
aa6f9c59 22#include "ntp_internal.h"
0af86465
D
23#include "timekeeping_internal.h"
24
68f66f97
TG
25/**
26 * struct ntp_data - Structure holding all NTP related state
27 * @tick_usec: USER_HZ period in microseconds
ec93ec22
TG
28 * @tick_length: Adjusted tick length
29 * @tick_length_base: Base value for @tick_length
bee18a23
TG
30 * @time_state: State of the clock synchronization
31 * @time_status: Clock status bits
d5143554
TG
32 * @time_offset: Time adjustment in nanoseconds
33 * @time_constant: PLL time constant
7891cf29
TG
34 * @time_maxerror: Maximum error in microseconds holding the NTP sync distance
35 * (NTP dispersion + delay / 2)
36 * @time_esterror: Estimated error in microseconds holding NTP dispersion
161b8ec2
TG
37 * @time_freq: Frequency offset scaled nsecs/secs
38 * @time_reftime: Time at last adjustment in seconds
bb6400a2
TG
39 * @time_adjust: Adjustment value
40 * @ntp_tick_adj: Constant boot-param configurable NTP tick adjustment (upscaled)
75d956b9 41 * @ntp_next_leap_sec: Second value of the next pending leapsecond, or TIME64_MAX if no leap
a076b214 42 *
931a177f 43 * @pps_valid: PPS signal watchdog counter
5cc953b8 44 * @pps_tf: PPS phase median filter
9d7130df 45 * @pps_jitter: PPS current jitter in nanoseconds
db45e9bc 46 * @pps_fbase: PPS beginning of the last freq interval
b1c89a76
TG
47 * @pps_shift: PPS current interval duration in seconds (shift value)
48 * @pps_intcnt: PPS interval counter
12850b46
TG
49 * @pps_freq: PPS frequency offset in scaled ns/s
50 * @pps_stabil: PPS current stability in scaled ns/s
6fadb4a6
TG
51 * @pps_calcnt: PPS monitor: calibration intervals
52 * @pps_jitcnt: PPS monitor: jitter limit exceeded
53 * @pps_stbcnt: PPS monitor: stability limit exceeded
54 * @pps_errcnt: PPS monitor: calibration errors
931a177f 55 *
68f66f97 56 * Protected by the timekeeping locks.
b0ee7556 57 */
68f66f97
TG
58struct ntp_data {
59 unsigned long tick_usec;
ec93ec22
TG
60 u64 tick_length;
61 u64 tick_length_base;
bee18a23
TG
62 int time_state;
63 int time_status;
d5143554
TG
64 s64 time_offset;
65 long time_constant;
7891cf29
TG
66 long time_maxerror;
67 long time_esterror;
161b8ec2
TG
68 s64 time_freq;
69 time64_t time_reftime;
bb6400a2
TG
70 long time_adjust;
71 s64 ntp_tick_adj;
75d956b9 72 time64_t ntp_next_leap_sec;
931a177f
TG
73#ifdef CONFIG_NTP_PPS
74 int pps_valid;
5cc953b8 75 long pps_tf[3];
9d7130df 76 long pps_jitter;
db45e9bc 77 struct timespec64 pps_fbase;
b1c89a76
TG
78 int pps_shift;
79 int pps_intcnt;
12850b46
TG
80 s64 pps_freq;
81 long pps_stabil;
6fadb4a6
TG
82 long pps_calcnt;
83 long pps_jitcnt;
84 long pps_stbcnt;
85 long pps_errcnt;
931a177f 86#endif
68f66f97 87};
b0ee7556 88
68f66f97
TG
89static struct ntp_data tk_ntp_data = {
90 .tick_usec = USER_TICK_USEC,
bee18a23
TG
91 .time_state = TIME_OK,
92 .time_status = STA_UNSYNC,
d5143554 93 .time_constant = 2,
7891cf29
TG
94 .time_maxerror = NTP_PHASE_LIMIT,
95 .time_esterror = NTP_PHASE_LIMIT,
75d956b9 96 .ntp_next_leap_sec = TIME64_MAX,
68f66f97 97};
53bbfa9e 98
90bf361c 99#define SECS_PER_DAY 86400
bbd12676 100#define MAX_TICKADJ 500LL /* usecs */
53bbfa9e 101#define MAX_TICKADJ_SCALED \
bbd12676 102 (((MAX_TICKADJ * NSEC_PER_USEC) << NTP_SCALE_SHIFT) / NTP_INTERVAL_FREQ)
d897a4ab 103#define MAX_TAI_OFFSET 100000
4c7ee8de 104
025b40ab
AG
105#ifdef CONFIG_NTP_PPS
106
107/*
108 * The following variables are used when a pulse-per-second (PPS) signal
109 * is available. They establish the engineering parameters of the clock
110 * discipline loop when controlled by the PPS signal.
111 */
112#define PPS_VALID 10 /* PPS signal watchdog max (s) */
113#define PPS_POPCORN 4 /* popcorn spike threshold (shift) */
114#define PPS_INTMIN 2 /* min freq interval (s) (shift) */
115#define PPS_INTMAX 8 /* max freq interval (s) (shift) */
116#define PPS_INTCOUNT 4 /* number of consecutive good intervals to
117 increase pps_shift or consecutive bad
118 intervals to decrease it */
119#define PPS_MAXWANDER 100000 /* max PPS freq wander (ns/s) */
120
a0581cdb
TG
121/*
122 * PPS kernel consumer compensates the whole phase error immediately.
025b40ab
AG
123 * Otherwise, reduce the offset by a fixed factor times the time constant.
124 */
bee18a23 125static inline s64 ntp_offset_chunk(struct ntp_data *ntpdata, s64 offset)
025b40ab 126{
bee18a23 127 if (ntpdata->time_status & STA_PPSTIME && ntpdata->time_status & STA_PPSSIGNAL)
025b40ab
AG
128 return offset;
129 else
d5143554 130 return shift_right(offset, SHIFT_PLL + ntpdata->time_constant);
025b40ab
AG
131}
132
b1c89a76 133static inline void pps_reset_freq_interval(struct ntp_data *ntpdata)
025b40ab 134{
a0581cdb 135 /* The PPS calibration interval may end surprisingly early */
b1c89a76
TG
136 ntpdata->pps_shift = PPS_INTMIN;
137 ntpdata->pps_intcnt = 0;
025b40ab
AG
138}
139
140/**
141 * pps_clear - Clears the PPS state variables
5cc953b8 142 * @ntpdata: Pointer to ntp data
025b40ab 143 */
5cc953b8 144static inline void pps_clear(struct ntp_data *ntpdata)
025b40ab 145{
b1c89a76 146 pps_reset_freq_interval(ntpdata);
5cc953b8
TG
147 ntpdata->pps_tf[0] = 0;
148 ntpdata->pps_tf[1] = 0;
149 ntpdata->pps_tf[2] = 0;
db45e9bc 150 ntpdata->pps_fbase.tv_sec = ntpdata->pps_fbase.tv_nsec = 0;
12850b46 151 ntpdata->pps_freq = 0;
025b40ab
AG
152}
153
a0581cdb
TG
154/*
155 * Decrease pps_valid to indicate that another second has passed since the
156 * last PPS signal. When it reaches 0, indicate that PPS signal is missing.
025b40ab 157 */
bee18a23 158static inline void pps_dec_valid(struct ntp_data *ntpdata)
025b40ab 159{
931a177f
TG
160 if (ntpdata->pps_valid > 0) {
161 ntpdata->pps_valid--;
162 } else {
bee18a23
TG
163 ntpdata->time_status &= ~(STA_PPSSIGNAL | STA_PPSJITTER |
164 STA_PPSWANDER | STA_PPSERROR);
5cc953b8 165 pps_clear(ntpdata);
025b40ab
AG
166 }
167}
168
12850b46 169static inline void pps_set_freq(struct ntp_data *ntpdata)
025b40ab 170{
12850b46 171 ntpdata->pps_freq = ntpdata->time_freq;
025b40ab
AG
172}
173
48c3c65f 174static inline bool is_error_status(int status)
025b40ab 175{
ea54bca3 176 return (status & (STA_UNSYNC|STA_CLOCKERR))
a0581cdb
TG
177 /*
178 * PPS signal lost when either PPS time or PPS frequency
179 * synchronization requested
025b40ab 180 */
ea54bca3
GS
181 || ((status & (STA_PPSFREQ|STA_PPSTIME))
182 && !(status & STA_PPSSIGNAL))
a0581cdb
TG
183 /*
184 * PPS jitter exceeded when PPS time synchronization
185 * requested
186 */
ea54bca3 187 || ((status & (STA_PPSTIME|STA_PPSJITTER))
025b40ab 188 == (STA_PPSTIME|STA_PPSJITTER))
a0581cdb
TG
189 /*
190 * PPS wander exceeded or calibration error when PPS
191 * frequency synchronization requested
025b40ab 192 */
ea54bca3
GS
193 || ((status & STA_PPSFREQ)
194 && (status & (STA_PPSWANDER|STA_PPSERROR)));
025b40ab
AG
195}
196
bee18a23 197static inline void pps_fill_timex(struct ntp_data *ntpdata, struct __kernel_timex *txc)
025b40ab 198{
12850b46 199 txc->ppsfreq = shift_right((ntpdata->pps_freq >> PPM_SCALE_INV_SHIFT) *
025b40ab 200 PPM_SCALE_INV, NTP_SCALE_SHIFT);
9d7130df 201 txc->jitter = ntpdata->pps_jitter;
bee18a23 202 if (!(ntpdata->time_status & STA_NANO))
9d7130df 203 txc->jitter = ntpdata->pps_jitter / NSEC_PER_USEC;
b1c89a76 204 txc->shift = ntpdata->pps_shift;
12850b46 205 txc->stabil = ntpdata->pps_stabil;
6fadb4a6
TG
206 txc->jitcnt = ntpdata->pps_jitcnt;
207 txc->calcnt = ntpdata->pps_calcnt;
208 txc->errcnt = ntpdata->pps_errcnt;
209 txc->stbcnt = ntpdata->pps_stbcnt;
025b40ab
AG
210}
211
212#else /* !CONFIG_NTP_PPS */
213
d5143554 214static inline s64 ntp_offset_chunk(struct ntp_data *ntpdata, s64 offset)
025b40ab 215{
d5143554 216 return shift_right(offset, SHIFT_PLL + ntpdata->time_constant);
025b40ab
AG
217}
218
b1c89a76 219static inline void pps_reset_freq_interval(struct ntp_data *ntpdata) {}
5cc953b8 220static inline void pps_clear(struct ntp_data *ntpdata) {}
bee18a23 221static inline void pps_dec_valid(struct ntp_data *ntpdata) {}
12850b46 222static inline void pps_set_freq(struct ntp_data *ntpdata) {}
025b40ab 223
48c3c65f 224static inline bool is_error_status(int status)
025b40ab
AG
225{
226 return status & (STA_UNSYNC|STA_CLOCKERR);
227}
228
bee18a23 229static inline void pps_fill_timex(struct ntp_data *ntpdata, struct __kernel_timex *txc)
025b40ab
AG
230{
231 /* PPS is not implemented, so these are zero */
232 txc->ppsfreq = 0;
233 txc->jitter = 0;
234 txc->shift = 0;
235 txc->stabil = 0;
236 txc->jitcnt = 0;
237 txc->calcnt = 0;
238 txc->errcnt = 0;
239 txc->stbcnt = 0;
240}
241
242#endif /* CONFIG_NTP_PPS */
243
9ce616aa 244/*
a849a027
TG
245 * Update tick_length and tick_length_base, based on tick_usec, ntp_tick_adj and
246 * time_freq:
9ce616aa 247 */
68f66f97 248static void ntp_update_frequency(struct ntp_data *ntpdata)
70bc42f9 249{
68f66f97 250 u64 second_length, new_base, tick_usec = (u64)ntpdata->tick_usec;
9ce616aa 251
68f66f97 252 second_length = (u64)(tick_usec * NSEC_PER_USEC * USER_HZ) << NTP_SCALE_SHIFT;
9ce616aa 253
bb6400a2 254 second_length += ntpdata->ntp_tick_adj;
161b8ec2 255 second_length += ntpdata->time_freq;
70bc42f9 256
bc26c31d 257 new_base = div_u64(second_length, NTP_INTERVAL_FREQ);
fdcedf7b
JS
258
259 /*
a0581cdb
TG
260 * Don't wait for the next second_overflow, apply the change to the
261 * tick length immediately:
fdcedf7b 262 */
ec93ec22
TG
263 ntpdata->tick_length += new_base - ntpdata->tick_length_base;
264 ntpdata->tick_length_base = new_base;
70bc42f9
AB
265}
266
bee18a23 267static inline s64 ntp_update_offset_fll(struct ntp_data *ntpdata, s64 offset64, long secs)
f939890b 268{
bee18a23 269 ntpdata->time_status &= ~STA_MODE;
f939890b
IM
270
271 if (secs < MINSEC)
478b7aab 272 return 0;
f939890b 273
bee18a23 274 if (!(ntpdata->time_status & STA_FLL) && (secs <= MAXSEC))
478b7aab 275 return 0;
f939890b 276
bee18a23 277 ntpdata->time_status |= STA_MODE;
f939890b 278
a078c6d0 279 return div64_long(offset64 << (NTP_SCALE_SHIFT - SHIFT_FLL), secs);
f939890b
IM
280}
281
bee18a23 282static void ntp_update_offset(struct ntp_data *ntpdata, long offset)
ee9851b2 283{
136bccbc
TG
284 s64 freq_adj, offset64;
285 long secs, real_secs;
ee9851b2 286
bee18a23 287 if (!(ntpdata->time_status & STA_PLL))
ee9851b2
RZ
288 return;
289
bee18a23 290 if (!(ntpdata->time_status & STA_NANO)) {
52d189f1
SL
291 /* Make sure the multiplication below won't overflow */
292 offset = clamp(offset, -USEC_PER_SEC, USEC_PER_SEC);
9f14f669 293 offset *= NSEC_PER_USEC;
52d189f1 294 }
ee9851b2 295
a0581cdb 296 /* Scale the phase adjustment and clamp to the operating range. */
52d189f1 297 offset = clamp(offset, -MAXPHASE, MAXPHASE);
ee9851b2
RZ
298
299 /*
300 * Select how the frequency is to be controlled
301 * and in which mode (PLL or FLL).
302 */
136bccbc 303 real_secs = __ktime_get_real_seconds();
161b8ec2 304 secs = (long)(real_secs - ntpdata->time_reftime);
bee18a23 305 if (unlikely(ntpdata->time_status & STA_FREQHOLD))
c7986acb
IM
306 secs = 0;
307
161b8ec2 308 ntpdata->time_reftime = real_secs;
ee9851b2 309
f939890b 310 offset64 = offset;
bee18a23 311 freq_adj = ntp_update_offset_fll(ntpdata, offset64, secs);
f939890b 312
8af3c153
ML
313 /*
314 * Clamp update interval to reduce PLL gain with low
315 * sampling rate (e.g. intermittent network connection)
316 * to avoid instability.
317 */
d5143554
TG
318 if (unlikely(secs > 1 << (SHIFT_PLL + 1 + ntpdata->time_constant)))
319 secs = 1 << (SHIFT_PLL + 1 + ntpdata->time_constant);
8af3c153
ML
320
321 freq_adj += (offset64 * secs) <<
d5143554 322 (NTP_SCALE_SHIFT - 2 * (SHIFT_PLL + 2 + ntpdata->time_constant));
f939890b 323
161b8ec2 324 freq_adj = min(freq_adj + ntpdata->time_freq, MAXFREQ_SCALED);
f939890b 325
161b8ec2 326 ntpdata->time_freq = max(freq_adj, -MAXFREQ_SCALED);
f939890b 327
d5143554 328 ntpdata->time_offset = div_s64(offset64 << NTP_SCALE_SHIFT, NTP_INTERVAL_FREQ);
ee9851b2
RZ
329}
330
68f66f97 331static void __ntp_clear(struct ntp_data *ntpdata)
b0ee7556 332{
a0581cdb 333 /* Stop active adjtime() */
bb6400a2 334 ntpdata->time_adjust = 0;
bee18a23 335 ntpdata->time_status |= STA_UNSYNC;
7891cf29
TG
336 ntpdata->time_maxerror = NTP_PHASE_LIMIT;
337 ntpdata->time_esterror = NTP_PHASE_LIMIT;
b0ee7556 338
68f66f97 339 ntp_update_frequency(ntpdata);
b0ee7556 340
ec93ec22 341 ntpdata->tick_length = ntpdata->tick_length_base;
d5143554 342 ntpdata->time_offset = 0;
025b40ab 343
75d956b9 344 ntpdata->ntp_next_leap_sec = TIME64_MAX;
025b40ab 345 /* Clear PPS state variables */
5cc953b8 346 pps_clear(ntpdata);
b0ee7556
RZ
347}
348
68f66f97
TG
349/**
350 * ntp_clear - Clears the NTP state variables
351 */
352void ntp_clear(void)
353{
354 __ntp_clear(&tk_ntp_data);
355}
356
ea7cf49a
JS
357
358u64 ntp_tick_length(void)
359{
ec93ec22 360 return tk_ntp_data.tick_length;
ea7cf49a
JS
361}
362
833f32d7
JS
363/**
364 * ntp_get_next_leap - Returns the next leapsecond in CLOCK_REALTIME ktime_t
365 *
366 * Provides the time of the next leapsecond against CLOCK_REALTIME in
367 * a ktime_t format. Returns KTIME_MAX if no leapsecond is pending.
368 */
369ktime_t ntp_get_next_leap(void)
370{
bee18a23 371 struct ntp_data *ntpdata = &tk_ntp_data;
833f32d7
JS
372 ktime_t ret;
373
bee18a23 374 if ((ntpdata->time_state == TIME_INS) && (ntpdata->time_status & STA_INS))
75d956b9 375 return ktime_set(ntpdata->ntp_next_leap_sec, 0);
2456e855 376 ret = KTIME_MAX;
833f32d7
JS
377 return ret;
378}
ea7cf49a 379
4c7ee8de 380/*
a0581cdb 381 * This routine handles the overflow of the microsecond field
6b43ae8a
JS
382 *
383 * The tricky bits of code to handle the accurate clock support
384 * were provided by Dave Mills ([email protected]) of NTP fame.
385 * They were originally developed for SUN and DEC kernels.
386 * All the kudos should go to Dave for this stuff.
387 *
388 * Also handles leap second processing, and returns leap offset
4c7ee8de 389 */
c7963487 390int second_overflow(time64_t secs)
4c7ee8de 391{
ec93ec22 392 struct ntp_data *ntpdata = &tk_ntp_data;
6b43ae8a 393 s64 delta;
bd331268 394 int leap = 0;
c7963487 395 s32 rem;
6b43ae8a
JS
396
397 /*
398 * Leap second processing. If in leap-insert state at the end of the
399 * day, the system clock is set back one second; if in leap-delete
400 * state, the system clock is set ahead one second.
401 */
bee18a23 402 switch (ntpdata->time_state) {
4c7ee8de 403 case TIME_OK:
bee18a23
TG
404 if (ntpdata->time_status & STA_INS) {
405 ntpdata->time_state = TIME_INS;
c7963487 406 div_s64_rem(secs, SECS_PER_DAY, &rem);
75d956b9 407 ntpdata->ntp_next_leap_sec = secs + SECS_PER_DAY - rem;
bee18a23
TG
408 } else if (ntpdata->time_status & STA_DEL) {
409 ntpdata->time_state = TIME_DEL;
c7963487 410 div_s64_rem(secs + 1, SECS_PER_DAY, &rem);
75d956b9 411 ntpdata->ntp_next_leap_sec = secs + SECS_PER_DAY - rem;
833f32d7 412 }
4c7ee8de
JS
413 break;
414 case TIME_INS:
bee18a23 415 if (!(ntpdata->time_status & STA_INS)) {
75d956b9 416 ntpdata->ntp_next_leap_sec = TIME64_MAX;
bee18a23 417 ntpdata->time_state = TIME_OK;
75d956b9 418 } else if (secs == ntpdata->ntp_next_leap_sec) {
6b43ae8a 419 leap = -1;
bee18a23 420 ntpdata->time_state = TIME_OOP;
38007dc0 421 pr_notice("Clock: inserting leap second 23:59:60 UTC\n");
6b43ae8a 422 }
4c7ee8de
JS
423 break;
424 case TIME_DEL:
bee18a23 425 if (!(ntpdata->time_status & STA_DEL)) {
75d956b9 426 ntpdata->ntp_next_leap_sec = TIME64_MAX;
bee18a23 427 ntpdata->time_state = TIME_OK;
75d956b9 428 } else if (secs == ntpdata->ntp_next_leap_sec) {
6b43ae8a 429 leap = 1;
75d956b9 430 ntpdata->ntp_next_leap_sec = TIME64_MAX;
bee18a23 431 ntpdata->time_state = TIME_WAIT;
38007dc0 432 pr_notice("Clock: deleting leap second 23:59:59 UTC\n");
6b43ae8a 433 }
4c7ee8de
JS
434 break;
435 case TIME_OOP:
75d956b9 436 ntpdata->ntp_next_leap_sec = TIME64_MAX;
bee18a23 437 ntpdata->time_state = TIME_WAIT;
6b43ae8a 438 break;
4c7ee8de 439 case TIME_WAIT:
bee18a23
TG
440 if (!(ntpdata->time_status & (STA_INS | STA_DEL)))
441 ntpdata->time_state = TIME_OK;
7dffa3c6
RZ
442 break;
443 }
bd331268 444
7dffa3c6 445 /* Bump the maxerror field */
7891cf29
TG
446 ntpdata->time_maxerror += MAXFREQ / NSEC_PER_USEC;
447 if (ntpdata->time_maxerror > NTP_PHASE_LIMIT) {
448 ntpdata->time_maxerror = NTP_PHASE_LIMIT;
bee18a23 449 ntpdata->time_status |= STA_UNSYNC;
4c7ee8de
JS
450 }
451
025b40ab 452 /* Compute the phase adjustment for the next second */
ec93ec22 453 ntpdata->tick_length = ntpdata->tick_length_base;
39854fe8 454
d5143554
TG
455 delta = ntp_offset_chunk(ntpdata, ntpdata->time_offset);
456 ntpdata->time_offset -= delta;
ec93ec22 457 ntpdata->tick_length += delta;
4c7ee8de 458
025b40ab 459 /* Check PPS signal */
bee18a23 460 pps_dec_valid(ntpdata);
025b40ab 461
bb6400a2 462 if (!ntpdata->time_adjust)
bd331268 463 goto out;
3c972c24 464
bb6400a2
TG
465 if (ntpdata->time_adjust > MAX_TICKADJ) {
466 ntpdata->time_adjust -= MAX_TICKADJ;
ec93ec22 467 ntpdata->tick_length += MAX_TICKADJ_SCALED;
bd331268 468 goto out;
4c7ee8de 469 }
3c972c24 470
bb6400a2
TG
471 if (ntpdata->time_adjust < -MAX_TICKADJ) {
472 ntpdata->time_adjust += MAX_TICKADJ;
ec93ec22 473 ntpdata->tick_length -= MAX_TICKADJ_SCALED;
bd331268 474 goto out;
3c972c24
IM
475 }
476
bb6400a2 477 ntpdata->tick_length += (s64)(ntpdata->time_adjust * NSEC_PER_USEC / NTP_INTERVAL_FREQ)
ec93ec22 478 << NTP_SCALE_SHIFT;
bb6400a2 479 ntpdata->time_adjust = 0;
6b43ae8a 480
bd331268 481out:
6b43ae8a 482 return leap;
4c7ee8de
JS
483}
484
c9e6189f 485#if defined(CONFIG_GENERIC_CMOS_UPDATE) || defined(CONFIG_RTC_SYSTOHC)
0f295b06 486static void sync_hw_clock(struct work_struct *work);
c9e6189f
TG
487static DECLARE_WORK(sync_work, sync_hw_clock);
488static struct hrtimer sync_hrtimer;
e3fab2f3 489#define SYNC_PERIOD_NS (11ULL * 60 * NSEC_PER_SEC)
0f295b06 490
c9e6189f 491static enum hrtimer_restart sync_timer_callback(struct hrtimer *timer)
0f295b06 492{
24c242ec 493 queue_work(system_freezable_power_efficient_wq, &sync_work);
0f295b06 494
c9e6189f
TG
495 return HRTIMER_NORESTART;
496}
0f295b06 497
c9e6189f
TG
498static void sched_sync_hw_clock(unsigned long offset_nsec, bool retry)
499{
500 ktime_t exp = ktime_set(ktime_get_real_seconds(), 0);
501
502 if (retry)
e3fab2f3 503 exp = ktime_add_ns(exp, 2ULL * NSEC_PER_SEC - offset_nsec);
c9e6189f
TG
504 else
505 exp = ktime_add_ns(exp, SYNC_PERIOD_NS - offset_nsec);
0f295b06 506
c9e6189f 507 hrtimer_start(&sync_hrtimer, exp, HRTIMER_MODE_ABS);
0f295b06
JG
508}
509
33e62e83 510/*
69eca258
TG
511 * Check whether @now is correct versus the required time to update the RTC
512 * and calculate the value which needs to be written to the RTC so that the
513 * next seconds increment of the RTC after the write is aligned with the next
514 * seconds increment of clock REALTIME.
33e62e83 515 *
69eca258 516 * tsched t1 write(t2.tv_sec - 1sec)) t2 RTC increments seconds
33e62e83 517 *
69eca258
TG
518 * t2.tv_nsec == 0
519 * tsched = t2 - set_offset_nsec
520 * newval = t2 - NSEC_PER_SEC
521 *
522 * ==> neval = tsched + set_offset_nsec - NSEC_PER_SEC
523 *
524 * As the execution of this code is not guaranteed to happen exactly at
525 * tsched this allows it to happen within a fuzzy region:
526 *
527 * abs(now - tsched) < FUZZ
528 *
529 * If @now is not inside the allowed window the function returns false.
33e62e83 530 */
69eca258 531static inline bool rtc_tv_nsec_ok(unsigned long set_offset_nsec,
33e62e83
TG
532 struct timespec64 *to_set,
533 const struct timespec64 *now)
534{
4bf07f65 535 /* Allowed error in tv_nsec, arbitrarily set to 5 jiffies in ns. */
33e62e83 536 const unsigned long TIME_SET_NSEC_FUZZ = TICK_NSEC * 5;
69eca258 537 struct timespec64 delay = {.tv_sec = -1,
33e62e83
TG
538 .tv_nsec = set_offset_nsec};
539
540 *to_set = timespec64_add(*now, delay);
541
542 if (to_set->tv_nsec < TIME_SET_NSEC_FUZZ) {
543 to_set->tv_nsec = 0;
544 return true;
545 }
546
547 if (to_set->tv_nsec > NSEC_PER_SEC - TIME_SET_NSEC_FUZZ) {
548 to_set->tv_sec++;
549 to_set->tv_nsec = 0;
550 return true;
551 }
552 return false;
553}
554
76e87d96
TG
555#ifdef CONFIG_GENERIC_CMOS_UPDATE
556int __weak update_persistent_clock64(struct timespec64 now64)
557{
558 return -ENODEV;
559}
560#else
561static inline int update_persistent_clock64(struct timespec64 now64)
562{
563 return -ENODEV;
564}
565#endif
566
33e62e83 567#ifdef CONFIG_RTC_SYSTOHC
76e87d96
TG
568/* Save NTP synchronized time to the RTC */
569static int update_rtc(struct timespec64 *to_set, unsigned long *offset_nsec)
33e62e83
TG
570{
571 struct rtc_device *rtc;
572 struct rtc_time tm;
33e62e83 573 int err = -ENODEV;
33e62e83
TG
574
575 rtc = rtc_class_open(CONFIG_RTC_SYSTOHC_DEVICE);
576 if (!rtc)
76e87d96 577 return -ENODEV;
33e62e83
TG
578
579 if (!rtc->ops || !rtc->ops->set_time)
580 goto out_close;
581
76e87d96
TG
582 /* First call might not have the correct offset */
583 if (*offset_nsec == rtc->set_offset_nsec) {
584 rtc_time64_to_tm(to_set->tv_sec, &tm);
585 err = rtc_set_time(rtc, &tm);
586 } else {
587 /* Store the update offset and let the caller try again */
588 *offset_nsec = rtc->set_offset_nsec;
589 err = -EAGAIN;
33e62e83 590 }
33e62e83
TG
591out_close:
592 rtc_class_close(rtc);
33e62e83
TG
593 return err;
594}
33e62e83 595#else
76e87d96 596static inline int update_rtc(struct timespec64 *to_set, unsigned long *offset_nsec)
3c00a1fe 597{
92661788 598 return -ENODEV;
3c00a1fe
XP
599}
600#endif
601
48c3c65f
TG
602/**
603 * ntp_synced - Tells whether the NTP status is not UNSYNC
604 * Returns: true if not UNSYNC, false otherwise
605 */
606static inline bool ntp_synced(void)
607{
bee18a23 608 return !(tk_ntp_data.time_status & STA_UNSYNC);
48c3c65f
TG
609}
610
0f295b06
JG
611/*
612 * If we have an externally synchronized Linux clock, then update RTC clock
613 * accordingly every ~11 minutes. Generally RTCs can only store second
614 * precision, but many RTCs will adjust the phase of their second tick to
615 * match the moment of update. This infrastructure arranges to call to the RTC
616 * set at the correct moment to phase synchronize the RTC second tick over
617 * with the kernel clock.
618 */
619static void sync_hw_clock(struct work_struct *work)
620{
76e87d96
TG
621 /*
622 * The default synchronization offset is 500ms for the deprecated
623 * update_persistent_clock64() under the assumption that it uses
624 * the infamous CMOS clock (MC146818).
625 */
626 static unsigned long offset_nsec = NSEC_PER_SEC / 2;
627 struct timespec64 now, to_set;
628 int res = -EAGAIN;
629
c9e6189f
TG
630 /*
631 * Don't update if STA_UNSYNC is set and if ntp_notify_cmos_timer()
632 * managed to schedule the work between the timer firing and the
633 * work being able to rearm the timer. Wait for the timer to expire.
634 */
635 if (!ntp_synced() || hrtimer_is_queued(&sync_hrtimer))
0f295b06 636 return;
82644459 637
76e87d96
TG
638 ktime_get_real_ts64(&now);
639 /* If @now is not in the allowed window, try again */
640 if (!rtc_tv_nsec_ok(offset_nsec, &to_set, &now))
641 goto rearm;
642
643 /* Take timezone adjusted RTCs into account */
644 if (persistent_clock_is_local)
645 to_set.tv_sec -= (sys_tz.tz_minuteswest * 60);
646
647 /* Try the legacy RTC first. */
648 res = update_persistent_clock64(to_set);
649 if (res != -ENODEV)
650 goto rearm;
0f295b06 651
76e87d96
TG
652 /* Try the RTC class */
653 res = update_rtc(&to_set, &offset_nsec);
654 if (res == -ENODEV)
655 return;
656rearm:
657 sched_sync_hw_clock(offset_nsec, res != 0);
82644459
TG
658}
659
35b603f8 660void ntp_notify_cmos_timer(bool offset_set)
4c7ee8de 661{
35b603f8
BR
662 /*
663 * If the time jumped (using ADJ_SETOFFSET) cancels sync timer,
664 * which may have been running if the time was synchronized
665 * prior to the ADJ_SETOFFSET call.
666 */
667 if (offset_set)
668 hrtimer_cancel(&sync_hrtimer);
669
c9e6189f
TG
670 /*
671 * When the work is currently executed but has not yet the timer
672 * rearmed this queues the work immediately again. No big issue,
673 * just a pointless work scheduled.
674 */
675 if (ntp_synced() && !hrtimer_is_queued(&sync_hrtimer))
24c242ec 676 queue_work(system_freezable_power_efficient_wq, &sync_work);
c9e6189f 677}
82644459 678
c9e6189f
TG
679static void __init ntp_init_cmos_sync(void)
680{
681 hrtimer_init(&sync_hrtimer, CLOCK_REALTIME, HRTIMER_MODE_ABS);
682 sync_hrtimer.function = sync_timer_callback;
0f295b06 683}
c9e6189f
TG
684#else /* CONFIG_GENERIC_CMOS_UPDATE) || defined(CONFIG_RTC_SYSTOHC) */
685static inline void __init ntp_init_cmos_sync(void) { }
686#endif /* !CONFIG_GENERIC_CMOS_UPDATE) || defined(CONFIG_RTC_SYSTOHC) */
80f22571
IM
687
688/*
689 * Propagate a new txc->status value into the NTP state:
690 */
bee18a23 691static inline void process_adj_status(struct ntp_data *ntpdata, const struct __kernel_timex *txc)
80f22571 692{
bee18a23
TG
693 if ((ntpdata->time_status & STA_PLL) && !(txc->status & STA_PLL)) {
694 ntpdata->time_state = TIME_OK;
695 ntpdata->time_status = STA_UNSYNC;
75d956b9 696 ntpdata->ntp_next_leap_sec = TIME64_MAX;
a0581cdb 697 /* Restart PPS frequency calibration */
b1c89a76 698 pps_reset_freq_interval(ntpdata);
80f22571 699 }
80f22571
IM
700
701 /*
702 * If we turn on PLL adjustments then reset the
703 * reference time to current time.
704 */
bee18a23 705 if (!(ntpdata->time_status & STA_PLL) && (txc->status & STA_PLL))
161b8ec2 706 ntpdata->time_reftime = __ktime_get_real_seconds();
80f22571 707
bee18a23
TG
708 /* only set allowed bits */
709 ntpdata->time_status &= STA_RONLY;
710 ntpdata->time_status |= txc->status & ~STA_RONLY;
80f22571 711}
cd5398be 712
68f66f97 713static inline void process_adjtimex_modes(struct ntp_data *ntpdata, const struct __kernel_timex *txc,
ead25417 714 s32 *time_tai)
80f22571
IM
715{
716 if (txc->modes & ADJ_STATUS)
bee18a23 717 process_adj_status(ntpdata, txc);
80f22571
IM
718
719 if (txc->modes & ADJ_NANO)
bee18a23 720 ntpdata->time_status |= STA_NANO;
e9629165 721
80f22571 722 if (txc->modes & ADJ_MICRO)
bee18a23 723 ntpdata->time_status &= ~STA_NANO;
80f22571
IM
724
725 if (txc->modes & ADJ_FREQUENCY) {
161b8ec2
TG
726 ntpdata->time_freq = txc->freq * PPM_SCALE;
727 ntpdata->time_freq = min(ntpdata->time_freq, MAXFREQ_SCALED);
728 ntpdata->time_freq = max(ntpdata->time_freq, -MAXFREQ_SCALED);
a0581cdb 729 /* Update pps_freq */
12850b46 730 pps_set_freq(ntpdata);
80f22571
IM
731 }
732
733 if (txc->modes & ADJ_MAXERROR)
7891cf29 734 ntpdata->time_maxerror = clamp(txc->maxerror, 0, NTP_PHASE_LIMIT);
e9629165 735
80f22571 736 if (txc->modes & ADJ_ESTERROR)
7891cf29 737 ntpdata->time_esterror = clamp(txc->esterror, 0, NTP_PHASE_LIMIT);
80f22571
IM
738
739 if (txc->modes & ADJ_TIMECONST) {
d5143554 740 ntpdata->time_constant = clamp(txc->constant, 0, MAXTC);
bee18a23 741 if (!(ntpdata->time_status & STA_NANO))
d5143554
TG
742 ntpdata->time_constant += 4;
743 ntpdata->time_constant = clamp(ntpdata->time_constant, 0, MAXTC);
80f22571
IM
744 }
745
bee18a23 746 if (txc->modes & ADJ_TAI && txc->constant >= 0 && txc->constant <= MAX_TAI_OFFSET)
cc244dda 747 *time_tai = txc->constant;
80f22571
IM
748
749 if (txc->modes & ADJ_OFFSET)
bee18a23 750 ntp_update_offset(ntpdata, txc->offset);
e9629165 751
80f22571 752 if (txc->modes & ADJ_TICK)
68f66f97 753 ntpdata->tick_usec = txc->tick;
80f22571
IM
754
755 if (txc->modes & (ADJ_TICK|ADJ_FREQUENCY|ADJ_OFFSET))
68f66f97 756 ntp_update_frequency(ntpdata);
80f22571
IM
757}
758
ad460967 759/*
a0581cdb 760 * adjtimex() mainly allows reading (and writing, if superuser) of
ad460967
JS
761 * kernel time-keeping variables. used by xntpd.
762 */
ead25417 763int __do_adjtimex(struct __kernel_timex *txc, const struct timespec64 *ts,
7e8eda73 764 s32 *time_tai, struct audit_ntp_data *ad)
ad460967 765{
68f66f97 766 struct ntp_data *ntpdata = &tk_ntp_data;
ad460967
JS
767 int result;
768
916c7a85 769 if (txc->modes & ADJ_ADJTIME) {
bb6400a2 770 long save_adjust = ntpdata->time_adjust;
916c7a85
RZ
771
772 if (!(txc->modes & ADJ_OFFSET_READONLY)) {
773 /* adjtime() is independent from ntp_adjtime() */
bb6400a2 774 ntpdata->time_adjust = txc->offset;
68f66f97 775 ntp_update_frequency(ntpdata);
7e8eda73
OM
776
777 audit_ntp_set_old(ad, AUDIT_NTP_ADJUST, save_adjust);
bb6400a2 778 audit_ntp_set_new(ad, AUDIT_NTP_ADJUST, ntpdata->time_adjust);
916c7a85
RZ
779 }
780 txc->offset = save_adjust;
e9629165 781 } else {
e9629165 782 /* If there are input parameters, then process them: */
7e8eda73 783 if (txc->modes) {
d5143554 784 audit_ntp_set_old(ad, AUDIT_NTP_OFFSET, ntpdata->time_offset);
161b8ec2 785 audit_ntp_set_old(ad, AUDIT_NTP_FREQ, ntpdata->time_freq);
bee18a23 786 audit_ntp_set_old(ad, AUDIT_NTP_STATUS, ntpdata->time_status);
7e8eda73 787 audit_ntp_set_old(ad, AUDIT_NTP_TAI, *time_tai);
68f66f97 788 audit_ntp_set_old(ad, AUDIT_NTP_TICK, ntpdata->tick_usec);
7e8eda73 789
68f66f97 790 process_adjtimex_modes(ntpdata, txc, time_tai);
eea83d89 791
d5143554 792 audit_ntp_set_new(ad, AUDIT_NTP_OFFSET, ntpdata->time_offset);
161b8ec2 793 audit_ntp_set_new(ad, AUDIT_NTP_FREQ, ntpdata->time_freq);
bee18a23 794 audit_ntp_set_new(ad, AUDIT_NTP_STATUS, ntpdata->time_status);
7e8eda73 795 audit_ntp_set_new(ad, AUDIT_NTP_TAI, *time_tai);
68f66f97 796 audit_ntp_set_new(ad, AUDIT_NTP_TICK, ntpdata->tick_usec);
7e8eda73
OM
797 }
798
d5143554 799 txc->offset = shift_right(ntpdata->time_offset * NTP_INTERVAL_FREQ, NTP_SCALE_SHIFT);
bee18a23 800 if (!(ntpdata->time_status & STA_NANO))
f5807b06 801 txc->offset = div_s64(txc->offset, NSEC_PER_USEC);
e9629165 802 }
916c7a85 803
bee18a23
TG
804 result = ntpdata->time_state;
805 if (is_error_status(ntpdata->time_status))
4c7ee8de
JS
806 result = TIME_ERROR;
807
161b8ec2 808 txc->freq = shift_right((ntpdata->time_freq >> PPM_SCALE_INV_SHIFT) *
2b9d1496 809 PPM_SCALE_INV, NTP_SCALE_SHIFT);
7891cf29
TG
810 txc->maxerror = ntpdata->time_maxerror;
811 txc->esterror = ntpdata->time_esterror;
bee18a23 812 txc->status = ntpdata->time_status;
d5143554 813 txc->constant = ntpdata->time_constant;
70bc42f9 814 txc->precision = 1;
074b3b87 815 txc->tolerance = MAXFREQ_SCALED / PPM_SCALE;
68f66f97 816 txc->tick = ntpdata->tick_usec;
87ace39b 817 txc->tai = *time_tai;
4c7ee8de 818
a0581cdb 819 /* Fill PPS status fields */
bee18a23 820 pps_fill_timex(ntpdata, txc);
e9629165 821
2f584134 822 txc->time.tv_sec = ts->tv_sec;
87ace39b 823 txc->time.tv_usec = ts->tv_nsec;
bee18a23 824 if (!(ntpdata->time_status & STA_NANO))
ead25417 825 txc->time.tv_usec = ts->tv_nsec / NSEC_PER_USEC;
ee9851b2 826
96efdcf2 827 /* Handle leapsec adjustments */
75d956b9 828 if (unlikely(ts->tv_sec >= ntpdata->ntp_next_leap_sec)) {
bee18a23 829 if ((ntpdata->time_state == TIME_INS) && (ntpdata->time_status & STA_INS)) {
96efdcf2
JS
830 result = TIME_OOP;
831 txc->tai++;
832 txc->time.tv_sec--;
833 }
bee18a23 834 if ((ntpdata->time_state == TIME_DEL) && (ntpdata->time_status & STA_DEL)) {
96efdcf2
JS
835 result = TIME_WAIT;
836 txc->tai--;
837 txc->time.tv_sec++;
838 }
75d956b9 839 if ((ntpdata->time_state == TIME_OOP) && (ts->tv_sec == ntpdata->ntp_next_leap_sec))
96efdcf2 840 result = TIME_WAIT;
96efdcf2
JS
841 }
842
ee9851b2 843 return result;
4c7ee8de 844}
10a398d0 845
025b40ab
AG
846#ifdef CONFIG_NTP_PPS
847
a0581cdb
TG
848/*
849 * struct pps_normtime is basically a struct timespec, but it is
025b40ab
AG
850 * semantically different (and it is the reason why it was invented):
851 * pps_normtime.nsec has a range of ( -NSEC_PER_SEC / 2, NSEC_PER_SEC / 2 ]
a0581cdb
TG
852 * while timespec.tv_nsec has a range of [0, NSEC_PER_SEC)
853 */
025b40ab 854struct pps_normtime {
7ec88e4b 855 s64 sec; /* seconds */
025b40ab
AG
856 long nsec; /* nanoseconds */
857};
858
a0581cdb
TG
859/*
860 * Normalize the timestamp so that nsec is in the
861 * [ -NSEC_PER_SEC / 2, NSEC_PER_SEC / 2 ] interval
862 */
7ec88e4b 863static inline struct pps_normtime pps_normalize_ts(struct timespec64 ts)
025b40ab
AG
864{
865 struct pps_normtime norm = {
866 .sec = ts.tv_sec,
867 .nsec = ts.tv_nsec
868 };
869
870 if (norm.nsec > (NSEC_PER_SEC >> 1)) {
871 norm.nsec -= NSEC_PER_SEC;
872 norm.sec++;
873 }
874
875 return norm;
876}
877
a0581cdb 878/* Get current phase correction and jitter */
5cc953b8 879static inline long pps_phase_filter_get(struct ntp_data *ntpdata, long *jitter)
025b40ab 880{
5cc953b8 881 *jitter = ntpdata->pps_tf[0] - ntpdata->pps_tf[1];
025b40ab
AG
882 if (*jitter < 0)
883 *jitter = -*jitter;
884
885 /* TODO: test various filters */
5cc953b8 886 return ntpdata->pps_tf[0];
025b40ab
AG
887}
888
a0581cdb 889/* Add the sample to the phase filter */
5cc953b8 890static inline void pps_phase_filter_add(struct ntp_data *ntpdata, long err)
025b40ab 891{
5cc953b8
TG
892 ntpdata->pps_tf[2] = ntpdata->pps_tf[1];
893 ntpdata->pps_tf[1] = ntpdata->pps_tf[0];
894 ntpdata->pps_tf[0] = err;
025b40ab
AG
895}
896
a0581cdb
TG
897/*
898 * Decrease frequency calibration interval length. It is halved after four
899 * consecutive unstable intervals.
025b40ab 900 */
b1c89a76 901static inline void pps_dec_freq_interval(struct ntp_data *ntpdata)
025b40ab 902{
b1c89a76
TG
903 if (--ntpdata->pps_intcnt <= -PPS_INTCOUNT) {
904 ntpdata->pps_intcnt = -PPS_INTCOUNT;
905 if (ntpdata->pps_shift > PPS_INTMIN) {
906 ntpdata->pps_shift--;
907 ntpdata->pps_intcnt = 0;
025b40ab
AG
908 }
909 }
910}
911
a0581cdb
TG
912/*
913 * Increase frequency calibration interval length. It is doubled after
914 * four consecutive stable intervals.
025b40ab 915 */
b1c89a76 916static inline void pps_inc_freq_interval(struct ntp_data *ntpdata)
025b40ab 917{
b1c89a76
TG
918 if (++ntpdata->pps_intcnt >= PPS_INTCOUNT) {
919 ntpdata->pps_intcnt = PPS_INTCOUNT;
920 if (ntpdata->pps_shift < PPS_INTMAX) {
921 ntpdata->pps_shift++;
922 ntpdata->pps_intcnt = 0;
025b40ab
AG
923 }
924 }
925}
926
a0581cdb
TG
927/*
928 * Update clock frequency based on MONOTONIC_RAW clock PPS signal
025b40ab
AG
929 * timestamps
930 *
931 * At the end of the calibration interval the difference between the
932 * first and last MONOTONIC_RAW clock timestamps divided by the length
933 * of the interval becomes the frequency update. If the interval was
934 * too long, the data are discarded.
935 * Returns the difference between old and new frequency values.
936 */
68f66f97 937static long hardpps_update_freq(struct ntp_data *ntpdata, struct pps_normtime freq_norm)
025b40ab
AG
938{
939 long delta, delta_mod;
940 s64 ftemp;
941
a0581cdb 942 /* Check if the frequency interval was too long */
b1c89a76 943 if (freq_norm.sec > (2 << ntpdata->pps_shift)) {
bee18a23 944 ntpdata->time_status |= STA_PPSERROR;
6fadb4a6 945 ntpdata->pps_errcnt++;
b1c89a76 946 pps_dec_freq_interval(ntpdata);
38007dc0
AMB
947 printk_deferred(KERN_ERR "hardpps: PPSERROR: interval too long - %lld s\n",
948 freq_norm.sec);
025b40ab
AG
949 return 0;
950 }
951
a0581cdb
TG
952 /*
953 * Here the raw frequency offset and wander (stability) is
954 * calculated. If the wander is less than the wander threshold the
955 * interval is increased; otherwise it is decreased.
025b40ab
AG
956 */
957 ftemp = div_s64(((s64)(-freq_norm.nsec)) << NTP_SCALE_SHIFT,
958 freq_norm.sec);
12850b46
TG
959 delta = shift_right(ftemp - ntpdata->pps_freq, NTP_SCALE_SHIFT);
960 ntpdata->pps_freq = ftemp;
025b40ab 961 if (delta > PPS_MAXWANDER || delta < -PPS_MAXWANDER) {
38007dc0 962 printk_deferred(KERN_WARNING "hardpps: PPSWANDER: change=%ld\n", delta);
bee18a23 963 ntpdata->time_status |= STA_PPSWANDER;
6fadb4a6 964 ntpdata->pps_stbcnt++;
b1c89a76 965 pps_dec_freq_interval(ntpdata);
a0581cdb
TG
966 } else {
967 /* Good sample */
b1c89a76 968 pps_inc_freq_interval(ntpdata);
025b40ab
AG
969 }
970
a0581cdb
TG
971 /*
972 * The stability metric is calculated as the average of recent
973 * frequency changes, but is used only for performance monitoring
025b40ab
AG
974 */
975 delta_mod = delta;
976 if (delta_mod < 0)
977 delta_mod = -delta_mod;
12850b46
TG
978 ntpdata->pps_stabil += (div_s64(((s64)delta_mod) << (NTP_SCALE_SHIFT - SHIFT_USEC),
979 NSEC_PER_USEC) - ntpdata->pps_stabil) >> PPS_INTMIN;
025b40ab 980
a0581cdb 981 /* If enabled, the system clock frequency is updated */
bee18a23 982 if ((ntpdata->time_status & STA_PPSFREQ) && !(ntpdata->time_status & STA_FREQHOLD)) {
12850b46 983 ntpdata->time_freq = ntpdata->pps_freq;
68f66f97 984 ntp_update_frequency(ntpdata);
025b40ab
AG
985 }
986
987 return delta;
988}
989
a0581cdb 990/* Correct REALTIME clock phase error against PPS signal */
bee18a23 991static void hardpps_update_phase(struct ntp_data *ntpdata, long error)
025b40ab
AG
992{
993 long correction = -error;
994 long jitter;
995
a0581cdb 996 /* Add the sample to the median filter */
5cc953b8
TG
997 pps_phase_filter_add(ntpdata, correction);
998 correction = pps_phase_filter_get(ntpdata, &jitter);
025b40ab 999
a0581cdb
TG
1000 /*
1001 * Nominal jitter is due to PPS signal noise. If it exceeds the
025b40ab
AG
1002 * threshold, the sample is discarded; otherwise, if so enabled,
1003 * the time offset is updated.
1004 */
9d7130df 1005 if (jitter > (ntpdata->pps_jitter << PPS_POPCORN)) {
38007dc0 1006 printk_deferred(KERN_WARNING "hardpps: PPSJITTER: jitter=%ld, limit=%ld\n",
9d7130df 1007 jitter, (ntpdata->pps_jitter << PPS_POPCORN));
bee18a23 1008 ntpdata->time_status |= STA_PPSJITTER;
6fadb4a6 1009 ntpdata->pps_jitcnt++;
bee18a23 1010 } else if (ntpdata->time_status & STA_PPSTIME) {
a0581cdb 1011 /* Correct the time using the phase offset */
d5143554
TG
1012 ntpdata->time_offset = div_s64(((s64)correction) << NTP_SCALE_SHIFT,
1013 NTP_INTERVAL_FREQ);
a0581cdb 1014 /* Cancel running adjtime() */
bb6400a2 1015 ntpdata->time_adjust = 0;
025b40ab 1016 }
a0581cdb 1017 /* Update jitter */
9d7130df 1018 ntpdata->pps_jitter += (jitter - ntpdata->pps_jitter) >> PPS_INTMIN;
025b40ab
AG
1019}
1020
1021/*
aa6f9c59 1022 * __hardpps() - discipline CPU clock oscillator to external PPS signal
025b40ab
AG
1023 *
1024 * This routine is called at each PPS signal arrival in order to
1025 * discipline the CPU clock oscillator to the PPS signal. It takes two
1026 * parameters: REALTIME and MONOTONIC_RAW clock timestamps. The former
1027 * is used to correct clock phase error and the latter is used to
1028 * correct the frequency.
1029 *
1030 * This code is based on David Mills's reference nanokernel
1031 * implementation. It was mostly rewritten but keeps the same idea.
1032 */
7ec88e4b 1033void __hardpps(const struct timespec64 *phase_ts, const struct timespec64 *raw_ts)
025b40ab
AG
1034{
1035 struct pps_normtime pts_norm, freq_norm;
68f66f97 1036 struct ntp_data *ntpdata = &tk_ntp_data;
025b40ab
AG
1037
1038 pts_norm = pps_normalize_ts(*phase_ts);
1039
a0581cdb 1040 /* Clear the error bits, they will be set again if needed */
bee18a23 1041 ntpdata->time_status &= ~(STA_PPSJITTER | STA_PPSWANDER | STA_PPSERROR);
025b40ab 1042
bee18a23
TG
1043 /* indicate signal presence */
1044 ntpdata->time_status |= STA_PPSSIGNAL;
931a177f 1045 ntpdata->pps_valid = PPS_VALID;
025b40ab 1046
a0581cdb
TG
1047 /*
1048 * When called for the first time, just start the frequency
1049 * interval
1050 */
db45e9bc
TG
1051 if (unlikely(ntpdata->pps_fbase.tv_sec == 0)) {
1052 ntpdata->pps_fbase = *raw_ts;
025b40ab
AG
1053 return;
1054 }
1055
a0581cdb 1056 /* Ok, now we have a base for frequency calculation */
db45e9bc 1057 freq_norm = pps_normalize_ts(timespec64_sub(*raw_ts, ntpdata->pps_fbase));
025b40ab 1058
a0581cdb
TG
1059 /*
1060 * Check that the signal is in the range
1061 * [1s - MAXFREQ us, 1s + MAXFREQ us], otherwise reject it
1062 */
38007dc0
AMB
1063 if ((freq_norm.sec == 0) || (freq_norm.nsec > MAXFREQ * freq_norm.sec) ||
1064 (freq_norm.nsec < -MAXFREQ * freq_norm.sec)) {
bee18a23 1065 ntpdata->time_status |= STA_PPSJITTER;
a0581cdb 1066 /* Restart the frequency calibration interval */
db45e9bc 1067 ntpdata->pps_fbase = *raw_ts;
6d9bcb62 1068 printk_deferred(KERN_ERR "hardpps: PPSJITTER: bad pulse\n");
025b40ab
AG
1069 return;
1070 }
1071
a0581cdb 1072 /* Signal is ok. Check if the current frequency interval is finished */
b1c89a76 1073 if (freq_norm.sec >= (1 << ntpdata->pps_shift)) {
6fadb4a6 1074 ntpdata->pps_calcnt++;
a0581cdb 1075 /* Restart the frequency calibration interval */
db45e9bc 1076 ntpdata->pps_fbase = *raw_ts;
68f66f97 1077 hardpps_update_freq(ntpdata, freq_norm);
025b40ab
AG
1078 }
1079
bee18a23 1080 hardpps_update_phase(ntpdata, pts_norm.nsec);
025b40ab 1081
025b40ab 1082}
025b40ab
AG
1083#endif /* CONFIG_NTP_PPS */
1084
10a398d0
RZ
1085static int __init ntp_tick_adj_setup(char *str)
1086{
bb6400a2 1087 int rc = kstrtos64(str, 0, &tk_ntp_data.ntp_tick_adj);
cdafb93f
FF
1088 if (rc)
1089 return rc;
069569e0 1090
bb6400a2 1091 tk_ntp_data.ntp_tick_adj <<= NTP_SCALE_SHIFT;
10a398d0
RZ
1092 return 1;
1093}
1094
1095__setup("ntp_tick_adj=", ntp_tick_adj_setup);
7dffa3c6
RZ
1096
1097void __init ntp_init(void)
1098{
1099 ntp_clear();
c9e6189f 1100 ntp_init_cmos_sync();
7dffa3c6 1101}
This page took 1.371823 seconds and 5 git commands to generate.