Lines Matching refs:ntpdata
128 static inline s64 ntp_offset_chunk(struct ntp_data *ntpdata, s64 offset) in ntp_offset_chunk() argument
130 if (ntpdata->time_status & STA_PPSTIME && ntpdata->time_status & STA_PPSSIGNAL) in ntp_offset_chunk()
133 return shift_right(offset, SHIFT_PLL + ntpdata->time_constant); in ntp_offset_chunk()
136 static inline void pps_reset_freq_interval(struct ntp_data *ntpdata) in pps_reset_freq_interval() argument
139 ntpdata->pps_shift = PPS_INTMIN; in pps_reset_freq_interval()
140 ntpdata->pps_intcnt = 0; in pps_reset_freq_interval()
147 static inline void pps_clear(struct ntp_data *ntpdata) in pps_clear() argument
149 pps_reset_freq_interval(ntpdata); in pps_clear()
150 ntpdata->pps_tf[0] = 0; in pps_clear()
151 ntpdata->pps_tf[1] = 0; in pps_clear()
152 ntpdata->pps_tf[2] = 0; in pps_clear()
153 ntpdata->pps_fbase.tv_sec = ntpdata->pps_fbase.tv_nsec = 0; in pps_clear()
154 ntpdata->pps_freq = 0; in pps_clear()
161 static inline void pps_dec_valid(struct ntp_data *ntpdata) in pps_dec_valid() argument
163 if (ntpdata->pps_valid > 0) { in pps_dec_valid()
164 ntpdata->pps_valid--; in pps_dec_valid()
166 ntpdata->time_status &= ~(STA_PPSSIGNAL | STA_PPSJITTER | in pps_dec_valid()
168 pps_clear(ntpdata); in pps_dec_valid()
172 static inline void pps_set_freq(struct ntp_data *ntpdata) in pps_set_freq() argument
174 ntpdata->pps_freq = ntpdata->time_freq; in pps_set_freq()
200 static inline void pps_fill_timex(struct ntp_data *ntpdata, struct __kernel_timex *txc) in pps_fill_timex() argument
202 txc->ppsfreq = shift_right((ntpdata->pps_freq >> PPM_SCALE_INV_SHIFT) * in pps_fill_timex()
204 txc->jitter = ntpdata->pps_jitter; in pps_fill_timex()
205 if (!(ntpdata->time_status & STA_NANO)) in pps_fill_timex()
206 txc->jitter = ntpdata->pps_jitter / NSEC_PER_USEC; in pps_fill_timex()
207 txc->shift = ntpdata->pps_shift; in pps_fill_timex()
208 txc->stabil = ntpdata->pps_stabil; in pps_fill_timex()
209 txc->jitcnt = ntpdata->pps_jitcnt; in pps_fill_timex()
210 txc->calcnt = ntpdata->pps_calcnt; in pps_fill_timex()
211 txc->errcnt = ntpdata->pps_errcnt; in pps_fill_timex()
212 txc->stbcnt = ntpdata->pps_stbcnt; in pps_fill_timex()
217 static inline s64 ntp_offset_chunk(struct ntp_data *ntpdata, s64 offset) in ntp_offset_chunk() argument
219 return shift_right(offset, SHIFT_PLL + ntpdata->time_constant); in ntp_offset_chunk()
222 static inline void pps_reset_freq_interval(struct ntp_data *ntpdata) {} in pps_reset_freq_interval() argument
223 static inline void pps_clear(struct ntp_data *ntpdata) {} in pps_clear() argument
224 static inline void pps_dec_valid(struct ntp_data *ntpdata) {} in pps_dec_valid() argument
225 static inline void pps_set_freq(struct ntp_data *ntpdata) {} in pps_set_freq() argument
232 static inline void pps_fill_timex(struct ntp_data *ntpdata, struct __kernel_timex *txc) in pps_fill_timex() argument
251 static void ntp_update_frequency(struct ntp_data *ntpdata) in ntp_update_frequency() argument
253 u64 second_length, new_base, tick_usec = (u64)ntpdata->tick_usec; in ntp_update_frequency()
257 second_length += ntpdata->ntp_tick_adj; in ntp_update_frequency()
258 second_length += ntpdata->time_freq; in ntp_update_frequency()
266 ntpdata->tick_length += new_base - ntpdata->tick_length_base; in ntp_update_frequency()
267 ntpdata->tick_length_base = new_base; in ntp_update_frequency()
270 static inline s64 ntp_update_offset_fll(struct ntp_data *ntpdata, s64 offset64, long secs) in ntp_update_offset_fll() argument
272 ntpdata->time_status &= ~STA_MODE; in ntp_update_offset_fll()
277 if (!(ntpdata->time_status & STA_FLL) && (secs <= MAXSEC)) in ntp_update_offset_fll()
280 ntpdata->time_status |= STA_MODE; in ntp_update_offset_fll()
285 static void ntp_update_offset(struct ntp_data *ntpdata, long offset) in ntp_update_offset() argument
290 if (!(ntpdata->time_status & STA_PLL)) in ntp_update_offset()
293 if (!(ntpdata->time_status & STA_NANO)) { in ntp_update_offset()
306 real_secs = ktime_get_ntp_seconds(ntpdata - tk_ntp_data); in ntp_update_offset()
307 secs = (long)(real_secs - ntpdata->time_reftime); in ntp_update_offset()
308 if (unlikely(ntpdata->time_status & STA_FREQHOLD)) in ntp_update_offset()
311 ntpdata->time_reftime = real_secs; in ntp_update_offset()
314 freq_adj = ntp_update_offset_fll(ntpdata, offset64, secs); in ntp_update_offset()
321 if (unlikely(secs > 1 << (SHIFT_PLL + 1 + ntpdata->time_constant))) in ntp_update_offset()
322 secs = 1 << (SHIFT_PLL + 1 + ntpdata->time_constant); in ntp_update_offset()
325 (NTP_SCALE_SHIFT - 2 * (SHIFT_PLL + 2 + ntpdata->time_constant)); in ntp_update_offset()
327 freq_adj = min(freq_adj + ntpdata->time_freq, MAXFREQ_SCALED); in ntp_update_offset()
329 ntpdata->time_freq = max(freq_adj, -MAXFREQ_SCALED); in ntp_update_offset()
331 ntpdata->time_offset = div_s64(offset64 << NTP_SCALE_SHIFT, NTP_INTERVAL_FREQ); in ntp_update_offset()
334 static void __ntp_clear(struct ntp_data *ntpdata) in __ntp_clear() argument
337 ntpdata->time_adjust = 0; in __ntp_clear()
338 ntpdata->time_status |= STA_UNSYNC; in __ntp_clear()
339 ntpdata->time_maxerror = NTP_PHASE_LIMIT; in __ntp_clear()
340 ntpdata->time_esterror = NTP_PHASE_LIMIT; in __ntp_clear()
342 ntp_update_frequency(ntpdata); in __ntp_clear()
344 ntpdata->tick_length = ntpdata->tick_length_base; in __ntp_clear()
345 ntpdata->time_offset = 0; in __ntp_clear()
347 ntpdata->ntp_next_leap_sec = TIME64_MAX; in __ntp_clear()
349 pps_clear(ntpdata); in __ntp_clear()
377 struct ntp_data *ntpdata = &tk_ntp_data[TIMEKEEPER_CORE]; in ntp_get_next_leap() local
382 if ((ntpdata->time_state == TIME_INS) && (ntpdata->time_status & STA_INS)) in ntp_get_next_leap()
383 return ktime_set(ntpdata->ntp_next_leap_sec, 0); in ntp_get_next_leap()
400 struct ntp_data *ntpdata = &tk_ntp_data[tkid]; in second_overflow() local
410 switch (ntpdata->time_state) { in second_overflow()
412 if (ntpdata->time_status & STA_INS) { in second_overflow()
413 ntpdata->time_state = TIME_INS; in second_overflow()
415 ntpdata->ntp_next_leap_sec = secs + SECS_PER_DAY - rem; in second_overflow()
416 } else if (ntpdata->time_status & STA_DEL) { in second_overflow()
417 ntpdata->time_state = TIME_DEL; in second_overflow()
419 ntpdata->ntp_next_leap_sec = secs + SECS_PER_DAY - rem; in second_overflow()
423 if (!(ntpdata->time_status & STA_INS)) { in second_overflow()
424 ntpdata->ntp_next_leap_sec = TIME64_MAX; in second_overflow()
425 ntpdata->time_state = TIME_OK; in second_overflow()
426 } else if (secs == ntpdata->ntp_next_leap_sec) { in second_overflow()
428 ntpdata->time_state = TIME_OOP; in second_overflow()
433 if (!(ntpdata->time_status & STA_DEL)) { in second_overflow()
434 ntpdata->ntp_next_leap_sec = TIME64_MAX; in second_overflow()
435 ntpdata->time_state = TIME_OK; in second_overflow()
436 } else if (secs == ntpdata->ntp_next_leap_sec) { in second_overflow()
438 ntpdata->ntp_next_leap_sec = TIME64_MAX; in second_overflow()
439 ntpdata->time_state = TIME_WAIT; in second_overflow()
444 ntpdata->ntp_next_leap_sec = TIME64_MAX; in second_overflow()
445 ntpdata->time_state = TIME_WAIT; in second_overflow()
448 if (!(ntpdata->time_status & (STA_INS | STA_DEL))) in second_overflow()
449 ntpdata->time_state = TIME_OK; in second_overflow()
454 ntpdata->time_maxerror += MAXFREQ / NSEC_PER_USEC; in second_overflow()
455 if (ntpdata->time_maxerror > NTP_PHASE_LIMIT) { in second_overflow()
456 ntpdata->time_maxerror = NTP_PHASE_LIMIT; in second_overflow()
457 ntpdata->time_status |= STA_UNSYNC; in second_overflow()
461 ntpdata->tick_length = ntpdata->tick_length_base; in second_overflow()
463 delta = ntp_offset_chunk(ntpdata, ntpdata->time_offset); in second_overflow()
464 ntpdata->time_offset -= delta; in second_overflow()
465 ntpdata->tick_length += delta; in second_overflow()
468 pps_dec_valid(ntpdata); in second_overflow()
470 if (!ntpdata->time_adjust) in second_overflow()
473 if (ntpdata->time_adjust > MAX_TICKADJ) { in second_overflow()
474 ntpdata->time_adjust -= MAX_TICKADJ; in second_overflow()
475 ntpdata->tick_length += MAX_TICKADJ_SCALED; in second_overflow()
479 if (ntpdata->time_adjust < -MAX_TICKADJ) { in second_overflow()
480 ntpdata->time_adjust += MAX_TICKADJ; in second_overflow()
481 ntpdata->tick_length -= MAX_TICKADJ_SCALED; in second_overflow()
485 ntpdata->tick_length += (s64)(ntpdata->time_adjust * NSEC_PER_USEC / NTP_INTERVAL_FREQ) in second_overflow()
487 ntpdata->time_adjust = 0; in second_overflow()
698 static inline void process_adj_status(struct ntp_data *ntpdata, const struct __kernel_timex *txc) in process_adj_status() argument
700 if ((ntpdata->time_status & STA_PLL) && !(txc->status & STA_PLL)) { in process_adj_status()
701 ntpdata->time_state = TIME_OK; in process_adj_status()
702 ntpdata->time_status = STA_UNSYNC; in process_adj_status()
703 ntpdata->ntp_next_leap_sec = TIME64_MAX; in process_adj_status()
705 pps_reset_freq_interval(ntpdata); in process_adj_status()
712 if (!(ntpdata->time_status & STA_PLL) && (txc->status & STA_PLL)) in process_adj_status()
713 ntpdata->time_reftime = ktime_get_ntp_seconds(ntpdata - tk_ntp_data); in process_adj_status()
716 ntpdata->time_status &= STA_RONLY; in process_adj_status()
717 ntpdata->time_status |= txc->status & ~STA_RONLY; in process_adj_status()
720 static inline void process_adjtimex_modes(struct ntp_data *ntpdata, const struct __kernel_timex *tx… in process_adjtimex_modes() argument
724 process_adj_status(ntpdata, txc); in process_adjtimex_modes()
727 ntpdata->time_status |= STA_NANO; in process_adjtimex_modes()
730 ntpdata->time_status &= ~STA_NANO; in process_adjtimex_modes()
733 ntpdata->time_freq = txc->freq * PPM_SCALE; in process_adjtimex_modes()
734 ntpdata->time_freq = min(ntpdata->time_freq, MAXFREQ_SCALED); in process_adjtimex_modes()
735 ntpdata->time_freq = max(ntpdata->time_freq, -MAXFREQ_SCALED); in process_adjtimex_modes()
737 pps_set_freq(ntpdata); in process_adjtimex_modes()
741 ntpdata->time_maxerror = clamp(txc->maxerror, 0, NTP_PHASE_LIMIT); in process_adjtimex_modes()
744 ntpdata->time_esterror = clamp(txc->esterror, 0, NTP_PHASE_LIMIT); in process_adjtimex_modes()
747 ntpdata->time_constant = clamp(txc->constant, 0, MAXTC); in process_adjtimex_modes()
748 if (!(ntpdata->time_status & STA_NANO)) in process_adjtimex_modes()
749 ntpdata->time_constant += 4; in process_adjtimex_modes()
750 ntpdata->time_constant = clamp(ntpdata->time_constant, 0, MAXTC); in process_adjtimex_modes()
757 ntp_update_offset(ntpdata, txc->offset); in process_adjtimex_modes()
760 ntpdata->tick_usec = txc->tick; in process_adjtimex_modes()
763 ntp_update_frequency(ntpdata); in process_adjtimex_modes()
773 struct ntp_data *ntpdata = &tk_ntp_data[tkid]; in ntp_adjtimex() local
777 long save_adjust = ntpdata->time_adjust; in ntp_adjtimex()
781 ntpdata->time_adjust = txc->offset; in ntp_adjtimex()
782 ntp_update_frequency(ntpdata); in ntp_adjtimex()
785 audit_ntp_set_new(ad, AUDIT_NTP_ADJUST, ntpdata->time_adjust); in ntp_adjtimex()
791 audit_ntp_set_old(ad, AUDIT_NTP_OFFSET, ntpdata->time_offset); in ntp_adjtimex()
792 audit_ntp_set_old(ad, AUDIT_NTP_FREQ, ntpdata->time_freq); in ntp_adjtimex()
793 audit_ntp_set_old(ad, AUDIT_NTP_STATUS, ntpdata->time_status); in ntp_adjtimex()
795 audit_ntp_set_old(ad, AUDIT_NTP_TICK, ntpdata->tick_usec); in ntp_adjtimex()
797 process_adjtimex_modes(ntpdata, txc, time_tai); in ntp_adjtimex()
799 audit_ntp_set_new(ad, AUDIT_NTP_OFFSET, ntpdata->time_offset); in ntp_adjtimex()
800 audit_ntp_set_new(ad, AUDIT_NTP_FREQ, ntpdata->time_freq); in ntp_adjtimex()
801 audit_ntp_set_new(ad, AUDIT_NTP_STATUS, ntpdata->time_status); in ntp_adjtimex()
803 audit_ntp_set_new(ad, AUDIT_NTP_TICK, ntpdata->tick_usec); in ntp_adjtimex()
806 txc->offset = shift_right(ntpdata->time_offset * NTP_INTERVAL_FREQ, NTP_SCALE_SHIFT); in ntp_adjtimex()
807 if (!(ntpdata->time_status & STA_NANO)) in ntp_adjtimex()
811 result = ntpdata->time_state; in ntp_adjtimex()
812 if (is_error_status(ntpdata->time_status)) in ntp_adjtimex()
815 txc->freq = shift_right((ntpdata->time_freq >> PPM_SCALE_INV_SHIFT) * in ntp_adjtimex()
817 txc->maxerror = ntpdata->time_maxerror; in ntp_adjtimex()
818 txc->esterror = ntpdata->time_esterror; in ntp_adjtimex()
819 txc->status = ntpdata->time_status; in ntp_adjtimex()
820 txc->constant = ntpdata->time_constant; in ntp_adjtimex()
823 txc->tick = ntpdata->tick_usec; in ntp_adjtimex()
827 pps_fill_timex(ntpdata, txc); in ntp_adjtimex()
831 if (!(ntpdata->time_status & STA_NANO)) in ntp_adjtimex()
835 if (unlikely(ts->tv_sec >= ntpdata->ntp_next_leap_sec)) { in ntp_adjtimex()
836 if ((ntpdata->time_state == TIME_INS) && (ntpdata->time_status & STA_INS)) { in ntp_adjtimex()
841 if ((ntpdata->time_state == TIME_DEL) && (ntpdata->time_status & STA_DEL)) { in ntp_adjtimex()
846 if ((ntpdata->time_state == TIME_OOP) && (ts->tv_sec == ntpdata->ntp_next_leap_sec)) in ntp_adjtimex()
886 static inline long pps_phase_filter_get(struct ntp_data *ntpdata, long *jitter) in pps_phase_filter_get() argument
888 *jitter = ntpdata->pps_tf[0] - ntpdata->pps_tf[1]; in pps_phase_filter_get()
893 return ntpdata->pps_tf[0]; in pps_phase_filter_get()
897 static inline void pps_phase_filter_add(struct ntp_data *ntpdata, long err) in pps_phase_filter_add() argument
899 ntpdata->pps_tf[2] = ntpdata->pps_tf[1]; in pps_phase_filter_add()
900 ntpdata->pps_tf[1] = ntpdata->pps_tf[0]; in pps_phase_filter_add()
901 ntpdata->pps_tf[0] = err; in pps_phase_filter_add()
908 static inline void pps_dec_freq_interval(struct ntp_data *ntpdata) in pps_dec_freq_interval() argument
910 if (--ntpdata->pps_intcnt <= -PPS_INTCOUNT) { in pps_dec_freq_interval()
911 ntpdata->pps_intcnt = -PPS_INTCOUNT; in pps_dec_freq_interval()
912 if (ntpdata->pps_shift > PPS_INTMIN) { in pps_dec_freq_interval()
913 ntpdata->pps_shift--; in pps_dec_freq_interval()
914 ntpdata->pps_intcnt = 0; in pps_dec_freq_interval()
923 static inline void pps_inc_freq_interval(struct ntp_data *ntpdata) in pps_inc_freq_interval() argument
925 if (++ntpdata->pps_intcnt >= PPS_INTCOUNT) { in pps_inc_freq_interval()
926 ntpdata->pps_intcnt = PPS_INTCOUNT; in pps_inc_freq_interval()
927 if (ntpdata->pps_shift < PPS_INTMAX) { in pps_inc_freq_interval()
928 ntpdata->pps_shift++; in pps_inc_freq_interval()
929 ntpdata->pps_intcnt = 0; in pps_inc_freq_interval()
944 static long hardpps_update_freq(struct ntp_data *ntpdata, struct pps_normtime freq_norm) in hardpps_update_freq() argument
950 if (freq_norm.sec > (2 << ntpdata->pps_shift)) { in hardpps_update_freq()
951 ntpdata->time_status |= STA_PPSERROR; in hardpps_update_freq()
952 ntpdata->pps_errcnt++; in hardpps_update_freq()
953 pps_dec_freq_interval(ntpdata); in hardpps_update_freq()
966 delta = shift_right(ftemp - ntpdata->pps_freq, NTP_SCALE_SHIFT); in hardpps_update_freq()
967 ntpdata->pps_freq = ftemp; in hardpps_update_freq()
970 ntpdata->time_status |= STA_PPSWANDER; in hardpps_update_freq()
971 ntpdata->pps_stbcnt++; in hardpps_update_freq()
972 pps_dec_freq_interval(ntpdata); in hardpps_update_freq()
975 pps_inc_freq_interval(ntpdata); in hardpps_update_freq()
985 ntpdata->pps_stabil += (div_s64(((s64)delta_mod) << (NTP_SCALE_SHIFT - SHIFT_USEC), in hardpps_update_freq()
986 NSEC_PER_USEC) - ntpdata->pps_stabil) >> PPS_INTMIN; in hardpps_update_freq()
989 if ((ntpdata->time_status & STA_PPSFREQ) && !(ntpdata->time_status & STA_FREQHOLD)) { in hardpps_update_freq()
990 ntpdata->time_freq = ntpdata->pps_freq; in hardpps_update_freq()
991 ntp_update_frequency(ntpdata); in hardpps_update_freq()
998 static void hardpps_update_phase(struct ntp_data *ntpdata, long error) in hardpps_update_phase() argument
1004 pps_phase_filter_add(ntpdata, correction); in hardpps_update_phase()
1005 correction = pps_phase_filter_get(ntpdata, &jitter); in hardpps_update_phase()
1012 if (jitter > (ntpdata->pps_jitter << PPS_POPCORN)) { in hardpps_update_phase()
1014 jitter, (ntpdata->pps_jitter << PPS_POPCORN)); in hardpps_update_phase()
1015 ntpdata->time_status |= STA_PPSJITTER; in hardpps_update_phase()
1016 ntpdata->pps_jitcnt++; in hardpps_update_phase()
1017 } else if (ntpdata->time_status & STA_PPSTIME) { in hardpps_update_phase()
1019 ntpdata->time_offset = div_s64(((s64)correction) << NTP_SCALE_SHIFT, in hardpps_update_phase()
1022 ntpdata->time_adjust = 0; in hardpps_update_phase()
1025 ntpdata->pps_jitter += (jitter - ntpdata->pps_jitter) >> PPS_INTMIN; in hardpps_update_phase()
1042 struct ntp_data *ntpdata = &tk_ntp_data[TIMEKEEPER_CORE]; in __hardpps() local
1048 ntpdata->time_status &= ~(STA_PPSJITTER | STA_PPSWANDER | STA_PPSERROR); in __hardpps()
1051 ntpdata->time_status |= STA_PPSSIGNAL; in __hardpps()
1052 ntpdata->pps_valid = PPS_VALID; in __hardpps()
1058 if (unlikely(ntpdata->pps_fbase.tv_sec == 0)) { in __hardpps()
1059 ntpdata->pps_fbase = *raw_ts; in __hardpps()
1064 freq_norm = pps_normalize_ts(timespec64_sub(*raw_ts, ntpdata->pps_fbase)); in __hardpps()
1072 ntpdata->time_status |= STA_PPSJITTER; in __hardpps()
1074 ntpdata->pps_fbase = *raw_ts; in __hardpps()
1080 if (freq_norm.sec >= (1 << ntpdata->pps_shift)) { in __hardpps()
1081 ntpdata->pps_calcnt++; in __hardpps()
1083 ntpdata->pps_fbase = *raw_ts; in __hardpps()
1084 hardpps_update_freq(ntpdata, freq_norm); in __hardpps()
1087 hardpps_update_phase(ntpdata, pts_norm.nsec); in __hardpps()