1
2#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
3
4#include <linux/kernel.h>
5#include <linux/sched.h>
6#include <linux/sched/clock.h>
7#include <linux/init.h>
8#include <linux/export.h>
9#include <linux/timer.h>
10#include <linux/acpi_pmtmr.h>
11#include <linux/cpufreq.h>
12#include <linux/delay.h>
13#include <linux/clocksource.h>
14#include <linux/percpu.h>
15#include <linux/timex.h>
16#include <linux/static_key.h>
17
18#include <asm/hpet.h>
19#include <asm/timer.h>
20#include <asm/vgtod.h>
21#include <asm/time.h>
22#include <asm/delay.h>
23#include <asm/hypervisor.h>
24#include <asm/nmi.h>
25#include <asm/x86_init.h>
26#include <asm/geode.h>
27#include <asm/apic.h>
28#include <asm/intel-family.h>
29#include <asm/i8259.h>
30#include <asm/uv/uv.h>
31
32unsigned int __read_mostly cpu_khz;
33EXPORT_SYMBOL(cpu_khz);
34
35unsigned int __read_mostly tsc_khz;
36EXPORT_SYMBOL(tsc_khz);
37
38#define KHZ 1000
39
40
41
42
43static int __read_mostly tsc_unstable;
44static unsigned int __initdata tsc_early_khz;
45
46static DEFINE_STATIC_KEY_FALSE(__use_tsc);
47
48int tsc_clocksource_reliable;
49
50static u32 art_to_tsc_numerator;
51static u32 art_to_tsc_denominator;
52static u64 art_to_tsc_offset;
53struct clocksource *art_related_clocksource;
54
55struct cyc2ns {
56 struct cyc2ns_data data[2];
57 seqcount_latch_t seq;
58
59};
60
61static DEFINE_PER_CPU_ALIGNED(struct cyc2ns, cyc2ns);
62
63static int __init tsc_early_khz_setup(char *buf)
64{
65 return kstrtouint(buf, 0, &tsc_early_khz);
66}
67early_param("tsc_early_khz", tsc_early_khz_setup);
68
69__always_inline void cyc2ns_read_begin(struct cyc2ns_data *data)
70{
71 int seq, idx;
72
73 preempt_disable_notrace();
74
75 do {
76 seq = this_cpu_read(cyc2ns.seq.seqcount.sequence);
77 idx = seq & 1;
78
79 data->cyc2ns_offset = this_cpu_read(cyc2ns.data[idx].cyc2ns_offset);
80 data->cyc2ns_mul = this_cpu_read(cyc2ns.data[idx].cyc2ns_mul);
81 data->cyc2ns_shift = this_cpu_read(cyc2ns.data[idx].cyc2ns_shift);
82
83 } while (unlikely(seq != this_cpu_read(cyc2ns.seq.seqcount.sequence)));
84}
85
86__always_inline void cyc2ns_read_end(void)
87{
88 preempt_enable_notrace();
89}
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115static __always_inline unsigned long long cycles_2_ns(unsigned long long cyc)
116{
117 struct cyc2ns_data data;
118 unsigned long long ns;
119
120 cyc2ns_read_begin(&data);
121
122 ns = data.cyc2ns_offset;
123 ns += mul_u64_u32_shr(cyc, data.cyc2ns_mul, data.cyc2ns_shift);
124
125 cyc2ns_read_end();
126
127 return ns;
128}
129
130static void __set_cyc2ns_scale(unsigned long khz, int cpu, unsigned long long tsc_now)
131{
132 unsigned long long ns_now;
133 struct cyc2ns_data data;
134 struct cyc2ns *c2n;
135
136 ns_now = cycles_2_ns(tsc_now);
137
138
139
140
141
142
143 clocks_calc_mult_shift(&data.cyc2ns_mul, &data.cyc2ns_shift, khz,
144 NSEC_PER_MSEC, 0);
145
146
147
148
149
150
151
152 if (data.cyc2ns_shift == 32) {
153 data.cyc2ns_shift = 31;
154 data.cyc2ns_mul >>= 1;
155 }
156
157 data.cyc2ns_offset = ns_now -
158 mul_u64_u32_shr(tsc_now, data.cyc2ns_mul, data.cyc2ns_shift);
159
160 c2n = per_cpu_ptr(&cyc2ns, cpu);
161
162 raw_write_seqcount_latch(&c2n->seq);
163 c2n->data[0] = data;
164 raw_write_seqcount_latch(&c2n->seq);
165 c2n->data[1] = data;
166}
167
168static void set_cyc2ns_scale(unsigned long khz, int cpu, unsigned long long tsc_now)
169{
170 unsigned long flags;
171
172 local_irq_save(flags);
173 sched_clock_idle_sleep_event();
174
175 if (khz)
176 __set_cyc2ns_scale(khz, cpu, tsc_now);
177
178 sched_clock_idle_wakeup_event();
179 local_irq_restore(flags);
180}
181
182
183
184
185static void __init cyc2ns_init_boot_cpu(void)
186{
187 struct cyc2ns *c2n = this_cpu_ptr(&cyc2ns);
188
189 seqcount_latch_init(&c2n->seq);
190 __set_cyc2ns_scale(tsc_khz, smp_processor_id(), rdtsc());
191}
192
193
194
195
196
197
198static void __init cyc2ns_init_secondary_cpus(void)
199{
200 unsigned int cpu, this_cpu = smp_processor_id();
201 struct cyc2ns *c2n = this_cpu_ptr(&cyc2ns);
202 struct cyc2ns_data *data = c2n->data;
203
204 for_each_possible_cpu(cpu) {
205 if (cpu != this_cpu) {
206 seqcount_latch_init(&c2n->seq);
207 c2n = per_cpu_ptr(&cyc2ns, cpu);
208 c2n->data[0] = data[0];
209 c2n->data[1] = data[1];
210 }
211 }
212}
213
214
215
216
217u64 native_sched_clock(void)
218{
219 if (static_branch_likely(&__use_tsc)) {
220 u64 tsc_now = rdtsc();
221
222
223 return cycles_2_ns(tsc_now);
224 }
225
226
227
228
229
230
231
232
233
234
235
236 return (jiffies_64 - INITIAL_JIFFIES) * (1000000000 / HZ);
237}
238
239
240
241
242u64 native_sched_clock_from_tsc(u64 tsc)
243{
244 return cycles_2_ns(tsc);
245}
246
247
248
249#ifdef CONFIG_PARAVIRT
250unsigned long long sched_clock(void)
251{
252 return paravirt_sched_clock();
253}
254
255bool using_native_sched_clock(void)
256{
257 return pv_ops.time.sched_clock == native_sched_clock;
258}
259#else
260unsigned long long
261sched_clock(void) __attribute__((alias("native_sched_clock")));
262
263bool using_native_sched_clock(void) { return true; }
264#endif
265
266int check_tsc_unstable(void)
267{
268 return tsc_unstable;
269}
270EXPORT_SYMBOL_GPL(check_tsc_unstable);
271
272#ifdef CONFIG_X86_TSC
273int __init notsc_setup(char *str)
274{
275 mark_tsc_unstable("boot parameter notsc");
276 return 1;
277}
278#else
279
280
281
282
283int __init notsc_setup(char *str)
284{
285 setup_clear_cpu_cap(X86_FEATURE_TSC);
286 return 1;
287}
288#endif
289
290__setup("notsc", notsc_setup);
291
292static int no_sched_irq_time;
293static int no_tsc_watchdog;
294
295static int __init tsc_setup(char *str)
296{
297 if (!strcmp(str, "reliable"))
298 tsc_clocksource_reliable = 1;
299 if (!strncmp(str, "noirqtime", 9))
300 no_sched_irq_time = 1;
301 if (!strcmp(str, "unstable"))
302 mark_tsc_unstable("boot parameter");
303 if (!strcmp(str, "nowatchdog"))
304 no_tsc_watchdog = 1;
305 return 1;
306}
307
308__setup("tsc=", tsc_setup);
309
310#define MAX_RETRIES 5
311#define TSC_DEFAULT_THRESHOLD 0x20000
312
313
314
315
316static u64 tsc_read_refs(u64 *p, int hpet)
317{
318 u64 t1, t2;
319 u64 thresh = tsc_khz ? tsc_khz >> 5 : TSC_DEFAULT_THRESHOLD;
320 int i;
321
322 for (i = 0; i < MAX_RETRIES; i++) {
323 t1 = get_cycles();
324 if (hpet)
325 *p = hpet_readl(HPET_COUNTER) & 0xFFFFFFFF;
326 else
327 *p = acpi_pm_read_early();
328 t2 = get_cycles();
329 if ((t2 - t1) < thresh)
330 return t2;
331 }
332 return ULLONG_MAX;
333}
334
335
336
337
338static unsigned long calc_hpet_ref(u64 deltatsc, u64 hpet1, u64 hpet2)
339{
340 u64 tmp;
341
342 if (hpet2 < hpet1)
343 hpet2 += 0x100000000ULL;
344 hpet2 -= hpet1;
345 tmp = ((u64)hpet2 * hpet_readl(HPET_PERIOD));
346 do_div(tmp, 1000000);
347 deltatsc = div64_u64(deltatsc, tmp);
348
349 return (unsigned long) deltatsc;
350}
351
352
353
354
355static unsigned long calc_pmtimer_ref(u64 deltatsc, u64 pm1, u64 pm2)
356{
357 u64 tmp;
358
359 if (!pm1 && !pm2)
360 return ULONG_MAX;
361
362 if (pm2 < pm1)
363 pm2 += (u64)ACPI_PM_OVRRUN;
364 pm2 -= pm1;
365 tmp = pm2 * 1000000000LL;
366 do_div(tmp, PMTMR_TICKS_PER_SEC);
367 do_div(deltatsc, tmp);
368
369 return (unsigned long) deltatsc;
370}
371
372#define CAL_MS 10
373#define CAL_LATCH (PIT_TICK_RATE / (1000 / CAL_MS))
374#define CAL_PIT_LOOPS 1000
375
376#define CAL2_MS 50
377#define CAL2_LATCH (PIT_TICK_RATE / (1000 / CAL2_MS))
378#define CAL2_PIT_LOOPS 5000
379
380
381
382
383
384
385
386
387
388static unsigned long pit_calibrate_tsc(u32 latch, unsigned long ms, int loopmin)
389{
390 u64 tsc, t1, t2, delta;
391 unsigned long tscmin, tscmax;
392 int pitcnt;
393
394 if (!has_legacy_pic()) {
395
396
397
398
399
400 udelay(10 * USEC_PER_MSEC);
401 udelay(10 * USEC_PER_MSEC);
402 udelay(10 * USEC_PER_MSEC);
403 udelay(10 * USEC_PER_MSEC);
404 udelay(10 * USEC_PER_MSEC);
405 return ULONG_MAX;
406 }
407
408
409 outb((inb(0x61) & ~0x02) | 0x01, 0x61);
410
411
412
413
414
415
416 outb(0xb0, 0x43);
417 outb(latch & 0xff, 0x42);
418 outb(latch >> 8, 0x42);
419
420 tsc = t1 = t2 = get_cycles();
421
422 pitcnt = 0;
423 tscmax = 0;
424 tscmin = ULONG_MAX;
425 while ((inb(0x61) & 0x20) == 0) {
426 t2 = get_cycles();
427 delta = t2 - tsc;
428 tsc = t2;
429 if ((unsigned long) delta < tscmin)
430 tscmin = (unsigned int) delta;
431 if ((unsigned long) delta > tscmax)
432 tscmax = (unsigned int) delta;
433 pitcnt++;
434 }
435
436
437
438
439
440
441
442
443
444
445 if (pitcnt < loopmin || tscmax > 10 * tscmin)
446 return ULONG_MAX;
447
448
449 delta = t2 - t1;
450 do_div(delta, ms);
451 return delta;
452}
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489static inline int pit_verify_msb(unsigned char val)
490{
491
492 inb(0x42);
493 return inb(0x42) == val;
494}
495
496static inline int pit_expect_msb(unsigned char val, u64 *tscp, unsigned long *deltap)
497{
498 int count;
499 u64 tsc = 0, prev_tsc = 0;
500
501 for (count = 0; count < 50000; count++) {
502 if (!pit_verify_msb(val))
503 break;
504 prev_tsc = tsc;
505 tsc = get_cycles();
506 }
507 *deltap = get_cycles() - prev_tsc;
508 *tscp = tsc;
509
510
511
512
513
514 return count > 5;
515}
516
517
518
519
520
521
522
523#define MAX_QUICK_PIT_MS 50
524#define MAX_QUICK_PIT_ITERATIONS (MAX_QUICK_PIT_MS * PIT_TICK_RATE / 1000 / 256)
525
526static unsigned long quick_pit_calibrate(void)
527{
528 int i;
529 u64 tsc, delta;
530 unsigned long d1, d2;
531
532 if (!has_legacy_pic())
533 return 0;
534
535
536 outb((inb(0x61) & ~0x02) | 0x01, 0x61);
537
538
539
540
541
542
543
544
545
546
547 outb(0xb0, 0x43);
548
549
550 outb(0xff, 0x42);
551 outb(0xff, 0x42);
552
553
554
555
556
557
558
559 pit_verify_msb(0);
560
561 if (pit_expect_msb(0xff, &tsc, &d1)) {
562 for (i = 1; i <= MAX_QUICK_PIT_ITERATIONS; i++) {
563 if (!pit_expect_msb(0xff-i, &delta, &d2))
564 break;
565
566 delta -= tsc;
567
568
569
570
571
572 if (i == 1 &&
573 d1 + d2 >= (delta * MAX_QUICK_PIT_ITERATIONS) >> 11)
574 return 0;
575
576
577
578
579 if (d1+d2 >= delta >> 11)
580 continue;
581
582
583
584
585
586
587
588
589 if (!pit_verify_msb(0xfe - i))
590 break;
591 goto success;
592 }
593 }
594 pr_info("Fast TSC calibration failed\n");
595 return 0;
596
597success:
598
599
600
601
602
603
604
605
606
607
608
609
610
611 delta *= PIT_TICK_RATE;
612 do_div(delta, i*256*1000);
613 pr_info("Fast TSC calibration using PIT\n");
614 return delta;
615}
616
617
618
619
620
621unsigned long native_calibrate_tsc(void)
622{
623 unsigned int eax_denominator, ebx_numerator, ecx_hz, edx;
624 unsigned int crystal_khz;
625
626 if (boot_cpu_data.x86_vendor != X86_VENDOR_INTEL)
627 return 0;
628
629 if (boot_cpu_data.cpuid_level < 0x15)
630 return 0;
631
632 eax_denominator = ebx_numerator = ecx_hz = edx = 0;
633
634
635 cpuid(0x15, &eax_denominator, &ebx_numerator, &ecx_hz, &edx);
636
637 if (ebx_numerator == 0 || eax_denominator == 0)
638 return 0;
639
640 crystal_khz = ecx_hz / 1000;
641
642
643
644
645
646
647 if (crystal_khz == 0 &&
648 boot_cpu_data.x86_model == INTEL_FAM6_ATOM_GOLDMONT_D)
649 crystal_khz = 25000;
650
651
652
653
654
655
656 if (crystal_khz != 0)
657 setup_force_cpu_cap(X86_FEATURE_TSC_KNOWN_FREQ);
658
659
660
661
662
663
664 if (crystal_khz == 0 && boot_cpu_data.cpuid_level >= 0x16) {
665 unsigned int eax_base_mhz, ebx, ecx, edx;
666
667 cpuid(0x16, &eax_base_mhz, &ebx, &ecx, &edx);
668 crystal_khz = eax_base_mhz * 1000 *
669 eax_denominator / ebx_numerator;
670 }
671
672 if (crystal_khz == 0)
673 return 0;
674
675
676
677
678
679 if (boot_cpu_data.x86_model == INTEL_FAM6_ATOM_GOLDMONT)
680 setup_force_cpu_cap(X86_FEATURE_TSC_RELIABLE);
681
682#ifdef CONFIG_X86_LOCAL_APIC
683
684
685
686
687
688
689 lapic_timer_period = crystal_khz * 1000 / HZ;
690#endif
691
692 return crystal_khz * ebx_numerator / eax_denominator;
693}
694
695static unsigned long cpu_khz_from_cpuid(void)
696{
697 unsigned int eax_base_mhz, ebx_max_mhz, ecx_bus_mhz, edx;
698
699 if (boot_cpu_data.x86_vendor != X86_VENDOR_INTEL)
700 return 0;
701
702 if (boot_cpu_data.cpuid_level < 0x16)
703 return 0;
704
705 eax_base_mhz = ebx_max_mhz = ecx_bus_mhz = edx = 0;
706
707 cpuid(0x16, &eax_base_mhz, &ebx_max_mhz, &ecx_bus_mhz, &edx);
708
709 return eax_base_mhz * 1000;
710}
711
712
713
714
715
716static unsigned long pit_hpet_ptimer_calibrate_cpu(void)
717{
718 u64 tsc1, tsc2, delta, ref1, ref2;
719 unsigned long tsc_pit_min = ULONG_MAX, tsc_ref_min = ULONG_MAX;
720 unsigned long flags, latch, ms;
721 int hpet = is_hpet_enabled(), i, loopmin;
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749 latch = CAL_LATCH;
750 ms = CAL_MS;
751 loopmin = CAL_PIT_LOOPS;
752
753 for (i = 0; i < 3; i++) {
754 unsigned long tsc_pit_khz;
755
756
757
758
759
760
761
762 local_irq_save(flags);
763 tsc1 = tsc_read_refs(&ref1, hpet);
764 tsc_pit_khz = pit_calibrate_tsc(latch, ms, loopmin);
765 tsc2 = tsc_read_refs(&ref2, hpet);
766 local_irq_restore(flags);
767
768
769 tsc_pit_min = min(tsc_pit_min, tsc_pit_khz);
770
771
772 if (ref1 == ref2)
773 continue;
774
775
776 if (tsc1 == ULLONG_MAX || tsc2 == ULLONG_MAX)
777 continue;
778
779 tsc2 = (tsc2 - tsc1) * 1000000LL;
780 if (hpet)
781 tsc2 = calc_hpet_ref(tsc2, ref1, ref2);
782 else
783 tsc2 = calc_pmtimer_ref(tsc2, ref1, ref2);
784
785 tsc_ref_min = min(tsc_ref_min, (unsigned long) tsc2);
786
787
788 delta = ((u64) tsc_pit_min) * 100;
789 do_div(delta, tsc_ref_min);
790
791
792
793
794
795
796
797 if (delta >= 90 && delta <= 110) {
798 pr_info("PIT calibration matches %s. %d loops\n",
799 hpet ? "HPET" : "PMTIMER", i + 1);
800 return tsc_ref_min;
801 }
802
803
804
805
806
807
808
809 if (i == 1 && tsc_pit_min == ULONG_MAX) {
810 latch = CAL2_LATCH;
811 ms = CAL2_MS;
812 loopmin = CAL2_PIT_LOOPS;
813 }
814 }
815
816
817
818
819 if (tsc_pit_min == ULONG_MAX) {
820
821 pr_warn("Unable to calibrate against PIT\n");
822
823
824 if (!hpet && !ref1 && !ref2) {
825 pr_notice("No reference (HPET/PMTIMER) available\n");
826 return 0;
827 }
828
829
830 if (tsc_ref_min == ULONG_MAX) {
831 pr_warn("HPET/PMTIMER calibration failed\n");
832 return 0;
833 }
834
835
836 pr_info("using %s reference calibration\n",
837 hpet ? "HPET" : "PMTIMER");
838
839 return tsc_ref_min;
840 }
841
842
843 if (!hpet && !ref1 && !ref2) {
844 pr_info("Using PIT calibration value\n");
845 return tsc_pit_min;
846 }
847
848
849 if (tsc_ref_min == ULONG_MAX) {
850 pr_warn("HPET/PMTIMER calibration failed. Using PIT calibration.\n");
851 return tsc_pit_min;
852 }
853
854
855
856
857
858
859 pr_warn("PIT calibration deviates from %s: %lu %lu\n",
860 hpet ? "HPET" : "PMTIMER", tsc_pit_min, tsc_ref_min);
861 pr_info("Using PIT calibration value\n");
862 return tsc_pit_min;
863}
864
865
866
867
868unsigned long native_calibrate_cpu_early(void)
869{
870 unsigned long flags, fast_calibrate = cpu_khz_from_cpuid();
871
872 if (!fast_calibrate)
873 fast_calibrate = cpu_khz_from_msr();
874 if (!fast_calibrate) {
875 local_irq_save(flags);
876 fast_calibrate = quick_pit_calibrate();
877 local_irq_restore(flags);
878 }
879 return fast_calibrate;
880}
881
882
883
884
885
886static unsigned long native_calibrate_cpu(void)
887{
888 unsigned long tsc_freq = native_calibrate_cpu_early();
889
890 if (!tsc_freq)
891 tsc_freq = pit_hpet_ptimer_calibrate_cpu();
892
893 return tsc_freq;
894}
895
896void recalibrate_cpu_khz(void)
897{
898#ifndef CONFIG_SMP
899 unsigned long cpu_khz_old = cpu_khz;
900
901 if (!boot_cpu_has(X86_FEATURE_TSC))
902 return;
903
904 cpu_khz = x86_platform.calibrate_cpu();
905 tsc_khz = x86_platform.calibrate_tsc();
906 if (tsc_khz == 0)
907 tsc_khz = cpu_khz;
908 else if (abs(cpu_khz - tsc_khz) * 10 > tsc_khz)
909 cpu_khz = tsc_khz;
910 cpu_data(0).loops_per_jiffy = cpufreq_scale(cpu_data(0).loops_per_jiffy,
911 cpu_khz_old, cpu_khz);
912#endif
913}
914
915EXPORT_SYMBOL(recalibrate_cpu_khz);
916
917
918static unsigned long long cyc2ns_suspend;
919
920void tsc_save_sched_clock_state(void)
921{
922 if (!sched_clock_stable())
923 return;
924
925 cyc2ns_suspend = sched_clock();
926}
927
928
929
930
931
932
933
934
935
936void tsc_restore_sched_clock_state(void)
937{
938 unsigned long long offset;
939 unsigned long flags;
940 int cpu;
941
942 if (!sched_clock_stable())
943 return;
944
945 local_irq_save(flags);
946
947
948
949
950
951
952
953 this_cpu_write(cyc2ns.data[0].cyc2ns_offset, 0);
954 this_cpu_write(cyc2ns.data[1].cyc2ns_offset, 0);
955
956 offset = cyc2ns_suspend - sched_clock();
957
958 for_each_possible_cpu(cpu) {
959 per_cpu(cyc2ns.data[0].cyc2ns_offset, cpu) = offset;
960 per_cpu(cyc2ns.data[1].cyc2ns_offset, cpu) = offset;
961 }
962
963 local_irq_restore(flags);
964}
965
966#ifdef CONFIG_CPU_FREQ
967
968
969
970
971
972
973
974
975
976
977
978static unsigned int ref_freq;
979static unsigned long loops_per_jiffy_ref;
980static unsigned long tsc_khz_ref;
981
982static int time_cpufreq_notifier(struct notifier_block *nb, unsigned long val,
983 void *data)
984{
985 struct cpufreq_freqs *freq = data;
986
987 if (num_online_cpus() > 1) {
988 mark_tsc_unstable("cpufreq changes on SMP");
989 return 0;
990 }
991
992 if (!ref_freq) {
993 ref_freq = freq->old;
994 loops_per_jiffy_ref = boot_cpu_data.loops_per_jiffy;
995 tsc_khz_ref = tsc_khz;
996 }
997
998 if ((val == CPUFREQ_PRECHANGE && freq->old < freq->new) ||
999 (val == CPUFREQ_POSTCHANGE && freq->old > freq->new)) {
1000 boot_cpu_data.loops_per_jiffy =
1001 cpufreq_scale(loops_per_jiffy_ref, ref_freq, freq->new);
1002
1003 tsc_khz = cpufreq_scale(tsc_khz_ref, ref_freq, freq->new);
1004 if (!(freq->flags & CPUFREQ_CONST_LOOPS))
1005 mark_tsc_unstable("cpufreq changes");
1006
1007 set_cyc2ns_scale(tsc_khz, freq->policy->cpu, rdtsc());
1008 }
1009
1010 return 0;
1011}
1012
1013static struct notifier_block time_cpufreq_notifier_block = {
1014 .notifier_call = time_cpufreq_notifier
1015};
1016
1017static int __init cpufreq_register_tsc_scaling(void)
1018{
1019 if (!boot_cpu_has(X86_FEATURE_TSC))
1020 return 0;
1021 if (boot_cpu_has(X86_FEATURE_CONSTANT_TSC))
1022 return 0;
1023 cpufreq_register_notifier(&time_cpufreq_notifier_block,
1024 CPUFREQ_TRANSITION_NOTIFIER);
1025 return 0;
1026}
1027
1028core_initcall(cpufreq_register_tsc_scaling);
1029
1030#endif
1031
1032#define ART_CPUID_LEAF (0x15)
1033#define ART_MIN_DENOMINATOR (1)
1034
1035
1036
1037
1038
1039static void __init detect_art(void)
1040{
1041 unsigned int unused[2];
1042
1043 if (boot_cpu_data.cpuid_level < ART_CPUID_LEAF)
1044 return;
1045
1046
1047
1048
1049
1050 if (boot_cpu_has(X86_FEATURE_HYPERVISOR) ||
1051 !boot_cpu_has(X86_FEATURE_NONSTOP_TSC) ||
1052 !boot_cpu_has(X86_FEATURE_TSC_ADJUST) ||
1053 tsc_async_resets)
1054 return;
1055
1056 cpuid(ART_CPUID_LEAF, &art_to_tsc_denominator,
1057 &art_to_tsc_numerator, unused, unused+1);
1058
1059 if (art_to_tsc_denominator < ART_MIN_DENOMINATOR)
1060 return;
1061
1062 rdmsrl(MSR_IA32_TSC_ADJUST, art_to_tsc_offset);
1063
1064
1065 setup_force_cpu_cap(X86_FEATURE_ART);
1066}
1067
1068
1069
1070
1071static void tsc_resume(struct clocksource *cs)
1072{
1073 tsc_verify_tsc_adjust(true);
1074}
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092static u64 read_tsc(struct clocksource *cs)
1093{
1094 return (u64)rdtsc_ordered();
1095}
1096
1097static void tsc_cs_mark_unstable(struct clocksource *cs)
1098{
1099 if (tsc_unstable)
1100 return;
1101
1102 tsc_unstable = 1;
1103 if (using_native_sched_clock())
1104 clear_sched_clock_stable();
1105 disable_sched_clock_irqtime();
1106 pr_info("Marking TSC unstable due to clocksource watchdog\n");
1107}
1108
1109static void tsc_cs_tick_stable(struct clocksource *cs)
1110{
1111 if (tsc_unstable)
1112 return;
1113
1114 if (using_native_sched_clock())
1115 sched_clock_tick_stable();
1116}
1117
1118static int tsc_cs_enable(struct clocksource *cs)
1119{
1120 vclocks_set_used(VDSO_CLOCKMODE_TSC);
1121 return 0;
1122}
1123
1124
1125
1126
1127static struct clocksource clocksource_tsc_early = {
1128 .name = "tsc-early",
1129 .rating = 299,
1130 .read = read_tsc,
1131 .mask = CLOCKSOURCE_MASK(64),
1132 .flags = CLOCK_SOURCE_IS_CONTINUOUS |
1133 CLOCK_SOURCE_MUST_VERIFY,
1134 .vdso_clock_mode = VDSO_CLOCKMODE_TSC,
1135 .enable = tsc_cs_enable,
1136 .resume = tsc_resume,
1137 .mark_unstable = tsc_cs_mark_unstable,
1138 .tick_stable = tsc_cs_tick_stable,
1139 .list = LIST_HEAD_INIT(clocksource_tsc_early.list),
1140};
1141
1142
1143
1144
1145
1146
1147static struct clocksource clocksource_tsc = {
1148 .name = "tsc",
1149 .rating = 300,
1150 .read = read_tsc,
1151 .mask = CLOCKSOURCE_MASK(64),
1152 .flags = CLOCK_SOURCE_IS_CONTINUOUS |
1153 CLOCK_SOURCE_VALID_FOR_HRES |
1154 CLOCK_SOURCE_MUST_VERIFY,
1155 .vdso_clock_mode = VDSO_CLOCKMODE_TSC,
1156 .enable = tsc_cs_enable,
1157 .resume = tsc_resume,
1158 .mark_unstable = tsc_cs_mark_unstable,
1159 .tick_stable = tsc_cs_tick_stable,
1160 .list = LIST_HEAD_INIT(clocksource_tsc.list),
1161};
1162
1163void mark_tsc_unstable(char *reason)
1164{
1165 if (tsc_unstable)
1166 return;
1167
1168 tsc_unstable = 1;
1169 if (using_native_sched_clock())
1170 clear_sched_clock_stable();
1171 disable_sched_clock_irqtime();
1172 pr_info("Marking TSC unstable due to %s\n", reason);
1173
1174 clocksource_mark_unstable(&clocksource_tsc_early);
1175 clocksource_mark_unstable(&clocksource_tsc);
1176}
1177
1178EXPORT_SYMBOL_GPL(mark_tsc_unstable);
1179
1180static void __init check_system_tsc_reliable(void)
1181{
1182#if defined(CONFIG_MGEODEGX1) || defined(CONFIG_MGEODE_LX) || defined(CONFIG_X86_GENERIC)
1183 if (is_geode_lx()) {
1184
1185#define RTSC_SUSP 0x100
1186 unsigned long res_low, res_high;
1187
1188 rdmsr_safe(MSR_GEODE_BUSCONT_CONF0, &res_low, &res_high);
1189
1190 if (res_low & RTSC_SUSP)
1191 tsc_clocksource_reliable = 1;
1192 }
1193#endif
1194 if (boot_cpu_has(X86_FEATURE_TSC_RELIABLE))
1195 tsc_clocksource_reliable = 1;
1196}
1197
1198
1199
1200
1201
1202int unsynchronized_tsc(void)
1203{
1204 if (!boot_cpu_has(X86_FEATURE_TSC) || tsc_unstable)
1205 return 1;
1206
1207#ifdef CONFIG_SMP
1208 if (apic_is_clustered_box())
1209 return 1;
1210#endif
1211
1212 if (boot_cpu_has(X86_FEATURE_CONSTANT_TSC))
1213 return 0;
1214
1215 if (tsc_clocksource_reliable)
1216 return 0;
1217
1218
1219
1220
1221 if (boot_cpu_data.x86_vendor != X86_VENDOR_INTEL) {
1222
1223 if (num_possible_cpus() > 1)
1224 return 1;
1225 }
1226
1227 return 0;
1228}
1229
1230
1231
1232
1233struct system_counterval_t convert_art_to_tsc(u64 art)
1234{
1235 u64 tmp, res, rem;
1236
1237 rem = do_div(art, art_to_tsc_denominator);
1238
1239 res = art * art_to_tsc_numerator;
1240 tmp = rem * art_to_tsc_numerator;
1241
1242 do_div(tmp, art_to_tsc_denominator);
1243 res += tmp + art_to_tsc_offset;
1244
1245 return (struct system_counterval_t) {.cs = art_related_clocksource,
1246 .cycles = res};
1247}
1248EXPORT_SYMBOL(convert_art_to_tsc);
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271struct system_counterval_t convert_art_ns_to_tsc(u64 art_ns)
1272{
1273 u64 tmp, res, rem;
1274
1275 rem = do_div(art_ns, USEC_PER_SEC);
1276
1277 res = art_ns * tsc_khz;
1278 tmp = rem * tsc_khz;
1279
1280 do_div(tmp, USEC_PER_SEC);
1281 res += tmp;
1282
1283 return (struct system_counterval_t) { .cs = art_related_clocksource,
1284 .cycles = res};
1285}
1286EXPORT_SYMBOL(convert_art_ns_to_tsc);
1287
1288
1289static void tsc_refine_calibration_work(struct work_struct *work);
1290static DECLARE_DELAYED_WORK(tsc_irqwork, tsc_refine_calibration_work);
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305static void tsc_refine_calibration_work(struct work_struct *work)
1306{
1307 static u64 tsc_start = ULLONG_MAX, ref_start;
1308 static int hpet;
1309 u64 tsc_stop, ref_stop, delta;
1310 unsigned long freq;
1311 int cpu;
1312
1313
1314 if (tsc_unstable)
1315 goto unreg;
1316
1317
1318
1319
1320
1321
1322 if (tsc_start == ULLONG_MAX) {
1323restart:
1324
1325
1326
1327
1328 hpet = is_hpet_enabled();
1329 tsc_start = tsc_read_refs(&ref_start, hpet);
1330 schedule_delayed_work(&tsc_irqwork, HZ);
1331 return;
1332 }
1333
1334 tsc_stop = tsc_read_refs(&ref_stop, hpet);
1335
1336
1337 if (ref_start == ref_stop)
1338 goto out;
1339
1340
1341 if (tsc_stop == ULLONG_MAX)
1342 goto restart;
1343
1344 delta = tsc_stop - tsc_start;
1345 delta *= 1000000LL;
1346 if (hpet)
1347 freq = calc_hpet_ref(delta, ref_start, ref_stop);
1348 else
1349 freq = calc_pmtimer_ref(delta, ref_start, ref_stop);
1350
1351
1352 if (abs(tsc_khz - freq) > tsc_khz/100)
1353 goto out;
1354
1355 tsc_khz = freq;
1356 pr_info("Refined TSC clocksource calibration: %lu.%03lu MHz\n",
1357 (unsigned long)tsc_khz / 1000,
1358 (unsigned long)tsc_khz % 1000);
1359
1360
1361 lapic_update_tsc_freq();
1362
1363
1364 for_each_possible_cpu(cpu)
1365 set_cyc2ns_scale(tsc_khz, cpu, tsc_stop);
1366
1367out:
1368 if (tsc_unstable)
1369 goto unreg;
1370
1371 if (boot_cpu_has(X86_FEATURE_ART))
1372 art_related_clocksource = &clocksource_tsc;
1373 clocksource_register_khz(&clocksource_tsc, tsc_khz);
1374unreg:
1375 clocksource_unregister(&clocksource_tsc_early);
1376}
1377
1378
1379static int __init init_tsc_clocksource(void)
1380{
1381 if (!boot_cpu_has(X86_FEATURE_TSC) || !tsc_khz)
1382 return 0;
1383
1384 if (tsc_unstable)
1385 goto unreg;
1386
1387 if (tsc_clocksource_reliable || no_tsc_watchdog)
1388 clocksource_tsc.flags &= ~CLOCK_SOURCE_MUST_VERIFY;
1389
1390 if (boot_cpu_has(X86_FEATURE_NONSTOP_TSC_S3))
1391 clocksource_tsc.flags |= CLOCK_SOURCE_SUSPEND_NONSTOP;
1392
1393
1394
1395
1396
1397 if (boot_cpu_has(X86_FEATURE_TSC_KNOWN_FREQ)) {
1398 if (boot_cpu_has(X86_FEATURE_ART))
1399 art_related_clocksource = &clocksource_tsc;
1400 clocksource_register_khz(&clocksource_tsc, tsc_khz);
1401unreg:
1402 clocksource_unregister(&clocksource_tsc_early);
1403 return 0;
1404 }
1405
1406 schedule_delayed_work(&tsc_irqwork, 0);
1407 return 0;
1408}
1409
1410
1411
1412
1413device_initcall(init_tsc_clocksource);
1414
1415static bool __init determine_cpu_tsc_frequencies(bool early)
1416{
1417
1418 WARN_ON(cpu_khz || tsc_khz);
1419
1420 if (early) {
1421 cpu_khz = x86_platform.calibrate_cpu();
1422 if (tsc_early_khz)
1423 tsc_khz = tsc_early_khz;
1424 else
1425 tsc_khz = x86_platform.calibrate_tsc();
1426 } else {
1427
1428 WARN_ON(x86_platform.calibrate_cpu != native_calibrate_cpu);
1429 cpu_khz = pit_hpet_ptimer_calibrate_cpu();
1430 }
1431
1432
1433
1434
1435
1436
1437 if (tsc_khz == 0)
1438 tsc_khz = cpu_khz;
1439 else if (abs(cpu_khz - tsc_khz) * 10 > tsc_khz)
1440 cpu_khz = tsc_khz;
1441
1442 if (tsc_khz == 0)
1443 return false;
1444
1445 pr_info("Detected %lu.%03lu MHz processor\n",
1446 (unsigned long)cpu_khz / KHZ,
1447 (unsigned long)cpu_khz % KHZ);
1448
1449 if (cpu_khz != tsc_khz) {
1450 pr_info("Detected %lu.%03lu MHz TSC",
1451 (unsigned long)tsc_khz / KHZ,
1452 (unsigned long)tsc_khz % KHZ);
1453 }
1454 return true;
1455}
1456
1457static unsigned long __init get_loops_per_jiffy(void)
1458{
1459 u64 lpj = (u64)tsc_khz * KHZ;
1460
1461 do_div(lpj, HZ);
1462 return lpj;
1463}
1464
1465static void __init tsc_enable_sched_clock(void)
1466{
1467
1468 tsc_store_and_check_tsc_adjust(true);
1469 cyc2ns_init_boot_cpu();
1470 static_branch_enable(&__use_tsc);
1471}
1472
1473void __init tsc_early_init(void)
1474{
1475 if (!boot_cpu_has(X86_FEATURE_TSC))
1476 return;
1477
1478 if (is_early_uv_system())
1479 return;
1480 if (!determine_cpu_tsc_frequencies(true))
1481 return;
1482 loops_per_jiffy = get_loops_per_jiffy();
1483
1484 tsc_enable_sched_clock();
1485}
1486
1487void __init tsc_init(void)
1488{
1489
1490
1491
1492
1493 if (x86_platform.calibrate_cpu == native_calibrate_cpu_early)
1494 x86_platform.calibrate_cpu = native_calibrate_cpu;
1495
1496 if (!boot_cpu_has(X86_FEATURE_TSC)) {
1497 setup_clear_cpu_cap(X86_FEATURE_TSC_DEADLINE_TIMER);
1498 return;
1499 }
1500
1501 if (!tsc_khz) {
1502
1503 if (!determine_cpu_tsc_frequencies(false)) {
1504 mark_tsc_unstable("could not calculate TSC khz");
1505 setup_clear_cpu_cap(X86_FEATURE_TSC_DEADLINE_TIMER);
1506 return;
1507 }
1508 tsc_enable_sched_clock();
1509 }
1510
1511 cyc2ns_init_secondary_cpus();
1512
1513 if (!no_sched_irq_time)
1514 enable_sched_clock_irqtime();
1515
1516 lpj_fine = get_loops_per_jiffy();
1517 use_tsc_delay();
1518
1519 check_system_tsc_reliable();
1520
1521 if (unsynchronized_tsc()) {
1522 mark_tsc_unstable("TSCs unsynchronized");
1523 return;
1524 }
1525
1526 if (tsc_clocksource_reliable || no_tsc_watchdog)
1527 clocksource_tsc_early.flags &= ~CLOCK_SOURCE_MUST_VERIFY;
1528
1529 clocksource_register_khz(&clocksource_tsc_early, tsc_khz);
1530 detect_art();
1531}
1532
1533#ifdef CONFIG_SMP
1534
1535
1536
1537
1538
1539
1540unsigned long calibrate_delay_is_known(void)
1541{
1542 int sibling, cpu = smp_processor_id();
1543 int constant_tsc = cpu_has(&cpu_data(cpu), X86_FEATURE_CONSTANT_TSC);
1544 const struct cpumask *mask = topology_core_cpumask(cpu);
1545
1546 if (!constant_tsc || !mask)
1547 return 0;
1548
1549 sibling = cpumask_any_but(mask, cpu);
1550 if (sibling < nr_cpu_ids)
1551 return cpu_data(sibling).loops_per_jiffy;
1552 return 0;
1553}
1554#endif
1555