735b6767c8ed78eda64acda6cba265cbfc8df44e
[pandora-kernel.git] / arch / x86_64 / kernel / time.c
1 /*
2  *  linux/arch/x86-64/kernel/time.c
3  *
4  *  "High Precision Event Timer" based timekeeping.
5  *
6  *  Copyright (c) 1991,1992,1995  Linus Torvalds
7  *  Copyright (c) 1994  Alan Modra
8  *  Copyright (c) 1995  Markus Kuhn
9  *  Copyright (c) 1996  Ingo Molnar
10  *  Copyright (c) 1998  Andrea Arcangeli
11  *  Copyright (c) 2002  Vojtech Pavlik
12  *  Copyright (c) 2003  Andi Kleen
13  *  RTC support code taken from arch/i386/kernel/timers/time_hpet.c
14  */
15
16 #include <linux/kernel.h>
17 #include <linux/sched.h>
18 #include <linux/interrupt.h>
19 #include <linux/init.h>
20 #include <linux/mc146818rtc.h>
21 #include <linux/irq.h>
22 #include <linux/time.h>
23 #include <linux/ioport.h>
24 #include <linux/module.h>
25 #include <linux/device.h>
26 #include <linux/sysdev.h>
27 #include <linux/bcd.h>
28 #include <linux/kallsyms.h>
29 #include <linux/acpi.h>
30 #include <acpi/achware.h>       /* for PM timer frequency */
31 #include <asm/8253pit.h>
32 #include <asm/pgtable.h>
33 #include <asm/vsyscall.h>
34 #include <asm/timex.h>
35 #include <asm/proto.h>
36 #include <asm/hpet.h>
37 #include <asm/sections.h>
38 #include <linux/cpufreq.h>
39 #include <linux/hpet.h>
40 #ifdef CONFIG_X86_LOCAL_APIC
41 #include <asm/apic.h>
42 #endif
43
44 u64 jiffies_64 = INITIAL_JIFFIES;
45
46 EXPORT_SYMBOL(jiffies_64);
47
48 #ifdef CONFIG_CPU_FREQ
49 static void cpufreq_delayed_get(void);
50 #endif
51 extern void i8254_timer_resume(void);
52 extern int using_apic_timer;
53
54 DEFINE_SPINLOCK(rtc_lock);
55 DEFINE_SPINLOCK(i8253_lock);
56
57 static int nohpet __initdata = 0;
58 static int notsc __initdata = 0;
59
60 #undef HPET_HACK_ENABLE_DANGEROUS
61
62 unsigned int cpu_khz;                                   /* TSC clocks / usec, not used here */
63 static unsigned long hpet_period;                       /* fsecs / HPET clock */
64 unsigned long hpet_tick;                                /* HPET clocks / interrupt */
65 unsigned long vxtime_hz = PIT_TICK_RATE;
66 int report_lost_ticks;                          /* command line option */
67 unsigned long long monotonic_base;
68
69 struct vxtime_data __vxtime __section_vxtime;   /* for vsyscalls */
70
71 volatile unsigned long __jiffies __section_jiffies = INITIAL_JIFFIES;
72 unsigned long __wall_jiffies __section_wall_jiffies = INITIAL_JIFFIES;
73 struct timespec __xtime __section_xtime;
74 struct timezone __sys_tz __section_sys_tz;
75
76 static inline void rdtscll_sync(unsigned long *tsc)
77 {
78 #ifdef CONFIG_SMP
79         sync_core();
80 #endif
81         rdtscll(*tsc);
82 }
83
84 /*
85  * do_gettimeoffset() returns microseconds since last timer interrupt was
86  * triggered by hardware. A memory read of HPET is slower than a register read
87  * of TSC, but much more reliable. It's also synchronized to the timer
88  * interrupt. Note that do_gettimeoffset() may return more than hpet_tick, if a
89  * timer interrupt has happened already, but vxtime.trigger wasn't updated yet.
90  * This is not a problem, because jiffies hasn't updated either. They are bound
91  * together by xtime_lock.
92  */
93
94 static inline unsigned int do_gettimeoffset_tsc(void)
95 {
96         unsigned long t;
97         unsigned long x;
98         rdtscll_sync(&t);
99         if (t < vxtime.last_tsc) t = vxtime.last_tsc; /* hack */
100         x = ((t - vxtime.last_tsc) * vxtime.tsc_quot) >> 32;
101         return x;
102 }
103
104 static inline unsigned int do_gettimeoffset_hpet(void)
105 {
106         return ((hpet_readl(HPET_COUNTER) - vxtime.last) * vxtime.quot) >> 32;
107 }
108
109 unsigned int (*do_gettimeoffset)(void) = do_gettimeoffset_tsc;
110
111 /*
112  * This version of gettimeofday() has microsecond resolution and better than
113  * microsecond precision, as we're using at least a 10 MHz (usually 14.31818
114  * MHz) HPET timer.
115  */
116
117 void do_gettimeofday(struct timeval *tv)
118 {
119         unsigned long seq, t;
120         unsigned int sec, usec;
121
122         do {
123                 seq = read_seqbegin(&xtime_lock);
124
125                 sec = xtime.tv_sec;
126                 usec = xtime.tv_nsec / 1000;
127
128                 /* i386 does some correction here to keep the clock 
129                    monotonous even when ntpd is fixing drift.
130                    But they didn't work for me, there is a non monotonic
131                    clock anyways with ntp.
132                    I dropped all corrections now until a real solution can
133                    be found. Note when you fix it here you need to do the same
134                    in arch/x86_64/kernel/vsyscall.c and export all needed
135                    variables in vmlinux.lds. -AK */ 
136
137                 t = (jiffies - wall_jiffies) * (1000000L / HZ) +
138                         do_gettimeoffset();
139                 usec += t;
140
141         } while (read_seqretry(&xtime_lock, seq));
142
143         tv->tv_sec = sec + usec / 1000000;
144         tv->tv_usec = usec % 1000000;
145 }
146
147 EXPORT_SYMBOL(do_gettimeofday);
148
149 /*
150  * settimeofday() first undoes the correction that gettimeofday would do
151  * on the time, and then saves it. This is ugly, but has been like this for
152  * ages already.
153  */
154
155 int do_settimeofday(struct timespec *tv)
156 {
157         time_t wtm_sec, sec = tv->tv_sec;
158         long wtm_nsec, nsec = tv->tv_nsec;
159
160         if ((unsigned long)tv->tv_nsec >= NSEC_PER_SEC)
161                 return -EINVAL;
162
163         write_seqlock_irq(&xtime_lock);
164
165         nsec -= do_gettimeoffset() * 1000 +
166                 (jiffies - wall_jiffies) * (NSEC_PER_SEC/HZ);
167
168         wtm_sec  = wall_to_monotonic.tv_sec + (xtime.tv_sec - sec);
169         wtm_nsec = wall_to_monotonic.tv_nsec + (xtime.tv_nsec - nsec);
170
171         set_normalized_timespec(&xtime, sec, nsec);
172         set_normalized_timespec(&wall_to_monotonic, wtm_sec, wtm_nsec);
173
174         time_adjust = 0;                /* stop active adjtime() */
175         time_status |= STA_UNSYNC;
176         time_maxerror = NTP_PHASE_LIMIT;
177         time_esterror = NTP_PHASE_LIMIT;
178
179         write_sequnlock_irq(&xtime_lock);
180         clock_was_set();
181         return 0;
182 }
183
184 EXPORT_SYMBOL(do_settimeofday);
185
186 unsigned long profile_pc(struct pt_regs *regs)
187 {
188         unsigned long pc = instruction_pointer(regs);
189
190         /* Assume the lock function has either no stack frame or only a single word.
191            This checks if the address on the stack looks like a kernel text address.
192            There is a small window for false hits, but in that case the tick
193            is just accounted to the spinlock function.
194            Better would be to write these functions in assembler again
195            and check exactly. */
196         if (in_lock_functions(pc)) {
197                 char *v = *(char **)regs->rsp;
198                 if ((v >= _stext && v <= _etext) ||
199                         (v >= _sinittext && v <= _einittext) ||
200                         (v >= (char *)MODULES_VADDR  && v <= (char *)MODULES_END))
201                         return (unsigned long)v;
202                 return ((unsigned long *)regs->rsp)[1];
203         }
204         return pc;
205 }
206 EXPORT_SYMBOL(profile_pc);
207
208 /*
209  * In order to set the CMOS clock precisely, set_rtc_mmss has to be called 500
210  * ms after the second nowtime has started, because when nowtime is written
211  * into the registers of the CMOS clock, it will jump to the next second
212  * precisely 500 ms later. Check the Motorola MC146818A or Dallas DS12887 data
213  * sheet for details.
214  */
215
216 static void set_rtc_mmss(unsigned long nowtime)
217 {
218         int real_seconds, real_minutes, cmos_minutes;
219         unsigned char control, freq_select;
220
221 /*
222  * IRQs are disabled when we're called from the timer interrupt,
223  * no need for spin_lock_irqsave()
224  */
225
226         spin_lock(&rtc_lock);
227
228 /*
229  * Tell the clock it's being set and stop it.
230  */
231
232         control = CMOS_READ(RTC_CONTROL);
233         CMOS_WRITE(control | RTC_SET, RTC_CONTROL);
234
235         freq_select = CMOS_READ(RTC_FREQ_SELECT);
236         CMOS_WRITE(freq_select | RTC_DIV_RESET2, RTC_FREQ_SELECT);
237
238         cmos_minutes = CMOS_READ(RTC_MINUTES);
239                 BCD_TO_BIN(cmos_minutes);
240
241 /*
242  * since we're only adjusting minutes and seconds, don't interfere with hour
243  * overflow. This avoids messing with unknown time zones but requires your RTC
244  * not to be off by more than 15 minutes. Since we're calling it only when
245  * our clock is externally synchronized using NTP, this shouldn't be a problem.
246  */
247
248         real_seconds = nowtime % 60;
249         real_minutes = nowtime / 60;
250         if (((abs(real_minutes - cmos_minutes) + 15) / 30) & 1)
251                 real_minutes += 30;             /* correct for half hour time zone */
252         real_minutes %= 60;
253
254 #if 0
255         /* AMD 8111 is a really bad time keeper and hits this regularly. 
256            It probably was an attempt to avoid screwing up DST, but ignore
257            that for now. */        
258         if (abs(real_minutes - cmos_minutes) >= 30) {
259                 printk(KERN_WARNING "time.c: can't update CMOS clock "
260                        "from %d to %d\n", cmos_minutes, real_minutes);
261         } else
262 #endif
263
264         {
265                         BIN_TO_BCD(real_seconds);
266                         BIN_TO_BCD(real_minutes);
267                 CMOS_WRITE(real_seconds, RTC_SECONDS);
268                 CMOS_WRITE(real_minutes, RTC_MINUTES);
269         }
270
271 /*
272  * The following flags have to be released exactly in this order, otherwise the
273  * DS12887 (popular MC146818A clone with integrated battery and quartz) will
274  * not reset the oscillator and will not update precisely 500 ms later. You
275  * won't find this mentioned in the Dallas Semiconductor data sheets, but who
276  * believes data sheets anyway ... -- Markus Kuhn
277  */
278
279         CMOS_WRITE(control, RTC_CONTROL);
280         CMOS_WRITE(freq_select, RTC_FREQ_SELECT);
281
282         spin_unlock(&rtc_lock);
283 }
284
285
286 /* monotonic_clock(): returns # of nanoseconds passed since time_init()
287  *              Note: This function is required to return accurate
288  *              time even in the absence of multiple timer ticks.
289  */
290 unsigned long long monotonic_clock(void)
291 {
292         unsigned long seq;
293         u32 last_offset, this_offset, offset;
294         unsigned long long base;
295
296         if (vxtime.mode == VXTIME_HPET) {
297                 do {
298                         seq = read_seqbegin(&xtime_lock);
299
300                         last_offset = vxtime.last;
301                         base = monotonic_base;
302                         this_offset = hpet_readl(HPET_T0_CMP) - hpet_tick;
303
304                 } while (read_seqretry(&xtime_lock, seq));
305                 offset = (this_offset - last_offset);
306                 offset *=(NSEC_PER_SEC/HZ)/hpet_tick;
307                 return base + offset;
308         }else{
309                 do {
310                         seq = read_seqbegin(&xtime_lock);
311
312                         last_offset = vxtime.last_tsc;
313                         base = monotonic_base;
314                 } while (read_seqretry(&xtime_lock, seq));
315                 sync_core();
316                 rdtscll(this_offset);
317                 offset = (this_offset - last_offset)*1000/cpu_khz; 
318                 return base + offset;
319         }
320
321
322 }
323 EXPORT_SYMBOL(monotonic_clock);
324
325 static noinline void handle_lost_ticks(int lost, struct pt_regs *regs)
326 {
327     static long lost_count;
328     static int warned;
329
330     if (report_lost_ticks) {
331             printk(KERN_WARNING "time.c: Lost %d timer "
332                    "tick(s)! ", lost);
333             print_symbol("rip %s)\n", regs->rip);
334     }
335
336     if (lost_count == 1000 && !warned) {
337             printk(KERN_WARNING
338                    "warning: many lost ticks.\n"
339                    KERN_WARNING "Your time source seems to be instable or "
340                                 "some driver is hogging interupts\n");
341             print_symbol("rip %s\n", regs->rip);
342             if (vxtime.mode == VXTIME_TSC && vxtime.hpet_address) {
343                     printk(KERN_WARNING "Falling back to HPET\n");
344                     vxtime.last = hpet_readl(HPET_T0_CMP) - hpet_tick;
345                     vxtime.mode = VXTIME_HPET;
346                     do_gettimeoffset = do_gettimeoffset_hpet;
347             }
348             /* else should fall back to PIT, but code missing. */
349             warned = 1;
350     } else
351             lost_count++;
352
353 #ifdef CONFIG_CPU_FREQ
354     /* In some cases the CPU can change frequency without us noticing
355        (like going into thermal throttle)
356        Give cpufreq a change to catch up. */
357     if ((lost_count+1) % 25 == 0) {
358             cpufreq_delayed_get();
359     }
360 #endif
361 }
362
363 static irqreturn_t timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
364 {
365         static unsigned long rtc_update = 0;
366         unsigned long tsc;
367         int delay, offset = 0, lost = 0;
368
369 /*
370  * Here we are in the timer irq handler. We have irqs locally disabled (so we
371  * don't need spin_lock_irqsave()) but we don't know if the timer_bh is running
372  * on the other CPU, so we need a lock. We also need to lock the vsyscall
373  * variables, because both do_timer() and us change them -arca+vojtech
374  */
375
376         write_seqlock(&xtime_lock);
377
378         if (vxtime.hpet_address) {
379                 offset = hpet_readl(HPET_T0_CMP) - hpet_tick;
380                 delay = hpet_readl(HPET_COUNTER) - offset;
381         } else {
382                 spin_lock(&i8253_lock);
383                 outb_p(0x00, 0x43);
384                 delay = inb_p(0x40);
385                 delay |= inb(0x40) << 8;
386                 spin_unlock(&i8253_lock);
387                 delay = LATCH - 1 - delay;
388         }
389
390         rdtscll_sync(&tsc);
391
392         if (vxtime.mode == VXTIME_HPET) {
393                 if (offset - vxtime.last > hpet_tick) {
394                         lost = (offset - vxtime.last) / hpet_tick - 1;
395                 }
396
397                 monotonic_base += 
398                         (offset - vxtime.last)*(NSEC_PER_SEC/HZ) / hpet_tick;
399
400                 vxtime.last = offset;
401 #ifdef CONFIG_X86_PM_TIMER
402         } else if (vxtime.mode == VXTIME_PMTMR) {
403                 lost = pmtimer_mark_offset();
404 #endif
405         } else {
406                 offset = (((tsc - vxtime.last_tsc) *
407                            vxtime.tsc_quot) >> 32) - (USEC_PER_SEC / HZ);
408
409                 if (offset < 0)
410                         offset = 0;
411
412                 if (offset > (USEC_PER_SEC / HZ)) {
413                         lost = offset / (USEC_PER_SEC / HZ);
414                         offset %= (USEC_PER_SEC / HZ);
415                 }
416
417                 monotonic_base += (tsc - vxtime.last_tsc)*1000000/cpu_khz ;
418
419                 vxtime.last_tsc = tsc - vxtime.quot * delay / vxtime.tsc_quot;
420
421                 if ((((tsc - vxtime.last_tsc) *
422                       vxtime.tsc_quot) >> 32) < offset)
423                         vxtime.last_tsc = tsc -
424                                 (((long) offset << 32) / vxtime.tsc_quot) - 1;
425         }
426
427         if (lost > 0) {
428                 handle_lost_ticks(lost, regs);
429                 jiffies += lost;
430         }
431
432 /*
433  * Do the timer stuff.
434  */
435
436         do_timer(regs);
437 #ifndef CONFIG_SMP
438         update_process_times(user_mode(regs));
439 #endif
440
441 /*
442  * In the SMP case we use the local APIC timer interrupt to do the profiling,
443  * except when we simulate SMP mode on a uniprocessor system, in that case we
444  * have to call the local interrupt handler.
445  */
446
447 #ifndef CONFIG_X86_LOCAL_APIC
448         profile_tick(CPU_PROFILING, regs);
449 #else
450         if (!using_apic_timer)
451                 smp_local_timer_interrupt(regs);
452 #endif
453
454 /*
455  * If we have an externally synchronized Linux clock, then update CMOS clock
456  * accordingly every ~11 minutes. set_rtc_mmss() will be called in the jiffy
457  * closest to exactly 500 ms before the next second. If the update fails, we
458  * don't care, as it'll be updated on the next turn, and the problem (time way
459  * off) isn't likely to go away much sooner anyway.
460  */
461
462         if ((~time_status & STA_UNSYNC) && xtime.tv_sec > rtc_update &&
463                 abs(xtime.tv_nsec - 500000000) <= tick_nsec / 2) {
464                 set_rtc_mmss(xtime.tv_sec);
465                 rtc_update = xtime.tv_sec + 660;
466         }
467  
468         write_sequnlock(&xtime_lock);
469
470         return IRQ_HANDLED;
471 }
472
473 static unsigned int cyc2ns_scale;
474 #define CYC2NS_SCALE_FACTOR 10 /* 2^10, carefully chosen */
475
476 static inline void set_cyc2ns_scale(unsigned long cpu_mhz)
477 {
478         cyc2ns_scale = (1000 << CYC2NS_SCALE_FACTOR)/cpu_mhz;
479 }
480
481 static inline unsigned long long cycles_2_ns(unsigned long long cyc)
482 {
483         return (cyc * cyc2ns_scale) >> CYC2NS_SCALE_FACTOR;
484 }
485
486 unsigned long long sched_clock(void)
487 {
488         unsigned long a = 0;
489
490 #if 0
491         /* Don't do a HPET read here. Using TSC always is much faster
492            and HPET may not be mapped yet when the scheduler first runs.
493            Disadvantage is a small drift between CPUs in some configurations,
494            but that should be tolerable. */
495         if (__vxtime.mode == VXTIME_HPET)
496                 return (hpet_readl(HPET_COUNTER) * vxtime.quot) >> 32;
497 #endif
498
499         /* Could do CPU core sync here. Opteron can execute rdtsc speculatively,
500            which means it is not completely exact and may not be monotonous between
501            CPUs. But the errors should be too small to matter for scheduling
502            purposes. */
503
504         rdtscll(a);
505         return cycles_2_ns(a);
506 }
507
508 unsigned long get_cmos_time(void)
509 {
510         unsigned int timeout, year, mon, day, hour, min, sec;
511         unsigned char last, this;
512         unsigned long flags;
513
514 /*
515  * The Linux interpretation of the CMOS clock register contents: When the
516  * Update-In-Progress (UIP) flag goes from 1 to 0, the RTC registers show the
517  * second which has precisely just started. Waiting for this can take up to 1
518  * second, we timeout approximately after 2.4 seconds on a machine with
519  * standard 8.3 MHz ISA bus.
520  */
521
522         spin_lock_irqsave(&rtc_lock, flags);
523
524         timeout = 1000000;
525         last = this = 0;
526
527         while (timeout && last && !this) {
528                 last = this;
529                 this = CMOS_READ(RTC_FREQ_SELECT) & RTC_UIP;
530                 timeout--;
531         }
532
533 /*
534  * Here we are safe to assume the registers won't change for a whole second, so
535  * we just go ahead and read them.
536          */
537
538                 sec = CMOS_READ(RTC_SECONDS);
539                 min = CMOS_READ(RTC_MINUTES);
540                 hour = CMOS_READ(RTC_HOURS);
541                 day = CMOS_READ(RTC_DAY_OF_MONTH);
542                 mon = CMOS_READ(RTC_MONTH);
543                 year = CMOS_READ(RTC_YEAR);
544
545         spin_unlock_irqrestore(&rtc_lock, flags);
546
547 /*
548  * We know that x86-64 always uses BCD format, no need to check the config
549  * register.
550  */
551
552             BCD_TO_BIN(sec);
553             BCD_TO_BIN(min);
554             BCD_TO_BIN(hour);
555             BCD_TO_BIN(day);
556             BCD_TO_BIN(mon);
557             BCD_TO_BIN(year);
558
559 /*
560  * x86-64 systems only exists since 2002.
561  * This will work up to Dec 31, 2100
562  */
563         year += 2000;
564
565         return mktime(year, mon, day, hour, min, sec);
566 }
567
568 #ifdef CONFIG_CPU_FREQ
569
570 /* Frequency scaling support. Adjust the TSC based timer when the cpu frequency
571    changes.
572    
573    RED-PEN: On SMP we assume all CPUs run with the same frequency.  It's
574    not that important because current Opteron setups do not support
575    scaling on SMP anyroads.
576
577    Should fix up last_tsc too. Currently gettimeofday in the
578    first tick after the change will be slightly wrong. */
579
580 #include <linux/workqueue.h>
581
582 static unsigned int cpufreq_delayed_issched = 0;
583 static unsigned int cpufreq_init = 0;
584 static struct work_struct cpufreq_delayed_get_work;
585
586 static void handle_cpufreq_delayed_get(void *v)
587 {
588         unsigned int cpu;
589         for_each_online_cpu(cpu) {
590                 cpufreq_get(cpu);
591         }
592         cpufreq_delayed_issched = 0;
593 }
594
595 /* if we notice lost ticks, schedule a call to cpufreq_get() as it tries
596  * to verify the CPU frequency the timing core thinks the CPU is running
597  * at is still correct.
598  */
599 static void cpufreq_delayed_get(void)
600 {
601         static int warned;
602         if (cpufreq_init && !cpufreq_delayed_issched) {
603                 cpufreq_delayed_issched = 1;
604                 if (!warned) {
605                         warned = 1;
606                         printk(KERN_DEBUG "Losing some ticks... checking if CPU frequency changed.\n");
607                 }
608                 schedule_work(&cpufreq_delayed_get_work);
609         }
610 }
611
612 static unsigned int  ref_freq = 0;
613 static unsigned long loops_per_jiffy_ref = 0;
614
615 static unsigned long cpu_khz_ref = 0;
616
617 static int time_cpufreq_notifier(struct notifier_block *nb, unsigned long val,
618                                  void *data)
619 {
620         struct cpufreq_freqs *freq = data;
621         unsigned long *lpj, dummy;
622
623         if (cpu_has(&cpu_data[freq->cpu], X86_FEATURE_CONSTANT_TSC))
624                 return 0;
625
626         lpj = &dummy;
627         if (!(freq->flags & CPUFREQ_CONST_LOOPS))
628 #ifdef CONFIG_SMP
629         lpj = &cpu_data[freq->cpu].loops_per_jiffy;
630 #else
631         lpj = &boot_cpu_data.loops_per_jiffy;
632 #endif
633
634         if (!ref_freq) {
635                 ref_freq = freq->old;
636                 loops_per_jiffy_ref = *lpj;
637                 cpu_khz_ref = cpu_khz;
638         }
639         if ((val == CPUFREQ_PRECHANGE  && freq->old < freq->new) ||
640             (val == CPUFREQ_POSTCHANGE && freq->old > freq->new) ||
641             (val == CPUFREQ_RESUMECHANGE)) {
642                 *lpj =
643                 cpufreq_scale(loops_per_jiffy_ref, ref_freq, freq->new);
644
645                 cpu_khz = cpufreq_scale(cpu_khz_ref, ref_freq, freq->new);
646                 if (!(freq->flags & CPUFREQ_CONST_LOOPS))
647                         vxtime.tsc_quot = (1000L << 32) / cpu_khz;
648         }
649         
650         set_cyc2ns_scale(cpu_khz_ref / 1000);
651
652         return 0;
653 }
654  
655 static struct notifier_block time_cpufreq_notifier_block = {
656          .notifier_call  = time_cpufreq_notifier
657 };
658
659 static int __init cpufreq_tsc(void)
660 {
661         INIT_WORK(&cpufreq_delayed_get_work, handle_cpufreq_delayed_get, NULL);
662         if (!cpufreq_register_notifier(&time_cpufreq_notifier_block,
663                                        CPUFREQ_TRANSITION_NOTIFIER))
664                 cpufreq_init = 1;
665         return 0;
666 }
667
668 core_initcall(cpufreq_tsc);
669
670 #endif
671
672 /*
673  * calibrate_tsc() calibrates the processor TSC in a very simple way, comparing
674  * it to the HPET timer of known frequency.
675  */
676
677 #define TICK_COUNT 100000000
678
679 static unsigned int __init hpet_calibrate_tsc(void)
680 {
681         int tsc_start, hpet_start;
682         int tsc_now, hpet_now;
683         unsigned long flags;
684
685         local_irq_save(flags);
686         local_irq_disable();
687
688         hpet_start = hpet_readl(HPET_COUNTER);
689         rdtscl(tsc_start);
690
691         do {
692                 local_irq_disable();
693                 hpet_now = hpet_readl(HPET_COUNTER);
694                 sync_core();
695                 rdtscl(tsc_now);
696                 local_irq_restore(flags);
697         } while ((tsc_now - tsc_start) < TICK_COUNT &&
698                  (hpet_now - hpet_start) < TICK_COUNT);
699
700         return (tsc_now - tsc_start) * 1000000000L
701                 / ((hpet_now - hpet_start) * hpet_period / 1000);
702 }
703
704
705 /*
706  * pit_calibrate_tsc() uses the speaker output (channel 2) of
707  * the PIT. This is better than using the timer interrupt output,
708  * because we can read the value of the speaker with just one inb(),
709  * where we need three i/o operations for the interrupt channel.
710  * We count how many ticks the TSC does in 50 ms.
711  */
712
713 static unsigned int __init pit_calibrate_tsc(void)
714 {
715         unsigned long start, end;
716         unsigned long flags;
717
718         spin_lock_irqsave(&i8253_lock, flags);
719
720         outb((inb(0x61) & ~0x02) | 0x01, 0x61);
721
722         outb(0xb0, 0x43);
723         outb((PIT_TICK_RATE / (1000 / 50)) & 0xff, 0x42);
724         outb((PIT_TICK_RATE / (1000 / 50)) >> 8, 0x42);
725         rdtscll(start);
726         sync_core();
727         while ((inb(0x61) & 0x20) == 0);
728         sync_core();
729         rdtscll(end);
730
731         spin_unlock_irqrestore(&i8253_lock, flags);
732         
733         return (end - start) / 50;
734 }
735
736 #ifdef  CONFIG_HPET
737 static __init int late_hpet_init(void)
738 {
739         struct hpet_data        hd;
740         unsigned int            ntimer;
741
742         if (!vxtime.hpet_address)
743           return -1;
744
745         memset(&hd, 0, sizeof (hd));
746
747         ntimer = hpet_readl(HPET_ID);
748         ntimer = (ntimer & HPET_ID_NUMBER) >> HPET_ID_NUMBER_SHIFT;
749         ntimer++;
750
751         /*
752          * Register with driver.
753          * Timer0 and Timer1 is used by platform.
754          */
755         hd.hd_phys_address = vxtime.hpet_address;
756         hd.hd_address = (void *)fix_to_virt(FIX_HPET_BASE);
757         hd.hd_nirqs = ntimer;
758         hd.hd_flags = HPET_DATA_PLATFORM;
759         hpet_reserve_timer(&hd, 0);
760 #ifdef  CONFIG_HPET_EMULATE_RTC
761         hpet_reserve_timer(&hd, 1);
762 #endif
763         hd.hd_irq[0] = HPET_LEGACY_8254;
764         hd.hd_irq[1] = HPET_LEGACY_RTC;
765         if (ntimer > 2) {
766                 struct hpet             *hpet;
767                 struct hpet_timer       *timer;
768                 int                     i;
769
770                 hpet = (struct hpet *) fix_to_virt(FIX_HPET_BASE);
771
772                 for (i = 2, timer = &hpet->hpet_timers[2]; i < ntimer;
773                      timer++, i++)
774                         hd.hd_irq[i] = (timer->hpet_config &
775                                         Tn_INT_ROUTE_CNF_MASK) >>
776                                 Tn_INT_ROUTE_CNF_SHIFT;
777
778         }
779
780         hpet_alloc(&hd);
781         return 0;
782 }
783 fs_initcall(late_hpet_init);
784 #endif
785
786 static int hpet_timer_stop_set_go(unsigned long tick)
787 {
788         unsigned int cfg;
789
790 /*
791  * Stop the timers and reset the main counter.
792  */
793
794         cfg = hpet_readl(HPET_CFG);
795         cfg &= ~(HPET_CFG_ENABLE | HPET_CFG_LEGACY);
796         hpet_writel(cfg, HPET_CFG);
797         hpet_writel(0, HPET_COUNTER);
798         hpet_writel(0, HPET_COUNTER + 4);
799
800 /*
801  * Set up timer 0, as periodic with first interrupt to happen at hpet_tick,
802  * and period also hpet_tick.
803  */
804
805         hpet_writel(HPET_TN_ENABLE | HPET_TN_PERIODIC | HPET_TN_SETVAL |
806                     HPET_TN_32BIT, HPET_T0_CFG);
807         hpet_writel(hpet_tick, HPET_T0_CMP);
808         hpet_writel(hpet_tick, HPET_T0_CMP); /* AK: why twice? */
809
810 /*
811  * Go!
812  */
813
814         cfg |= HPET_CFG_ENABLE | HPET_CFG_LEGACY;
815         hpet_writel(cfg, HPET_CFG);
816
817         return 0;
818 }
819
820 static int hpet_init(void)
821 {
822         unsigned int id;
823
824         if (!vxtime.hpet_address)
825                 return -1;
826         set_fixmap_nocache(FIX_HPET_BASE, vxtime.hpet_address);
827         __set_fixmap(VSYSCALL_HPET, vxtime.hpet_address, PAGE_KERNEL_VSYSCALL_NOCACHE);
828
829 /*
830  * Read the period, compute tick and quotient.
831  */
832
833         id = hpet_readl(HPET_ID);
834
835         if (!(id & HPET_ID_VENDOR) || !(id & HPET_ID_NUMBER) ||
836             !(id & HPET_ID_LEGSUP))
837                 return -1;
838
839         hpet_period = hpet_readl(HPET_PERIOD);
840         if (hpet_period < 100000 || hpet_period > 100000000)
841                 return -1;
842
843         hpet_tick = (1000000000L * (USEC_PER_SEC / HZ) + hpet_period / 2) /
844                 hpet_period;
845
846         return hpet_timer_stop_set_go(hpet_tick);
847 }
848
849 static int hpet_reenable(void)
850 {
851         return hpet_timer_stop_set_go(hpet_tick);
852 }
853
854 void __init pit_init(void)
855 {
856         unsigned long flags;
857
858         spin_lock_irqsave(&i8253_lock, flags);
859         outb_p(0x34, 0x43);             /* binary, mode 2, LSB/MSB, ch 0 */
860         outb_p(LATCH & 0xff, 0x40);     /* LSB */
861         outb_p(LATCH >> 8, 0x40);       /* MSB */
862         spin_unlock_irqrestore(&i8253_lock, flags);
863 }
864
865 int __init time_setup(char *str)
866 {
867         report_lost_ticks = 1;
868         return 1;
869 }
870
871 static struct irqaction irq0 = {
872         timer_interrupt, SA_INTERRUPT, CPU_MASK_NONE, "timer", NULL, NULL
873 };
874
875 extern void __init config_acpi_tables(void);
876
877 void __init time_init(void)
878 {
879         char *timename;
880
881 #ifdef HPET_HACK_ENABLE_DANGEROUS
882         if (!vxtime.hpet_address) {
883                 printk(KERN_WARNING "time.c: WARNING: Enabling HPET base "
884                        "manually!\n");
885                 outl(0x800038a0, 0xcf8);
886                 outl(0xff000001, 0xcfc);
887                 outl(0x800038a0, 0xcf8);
888                 vxtime.hpet_address = inl(0xcfc) & 0xfffffffe;
889                 printk(KERN_WARNING "time.c: WARNING: Enabled HPET "
890                        "at %#lx.\n", vxtime.hpet_address);
891         }
892 #endif
893         if (nohpet)
894                 vxtime.hpet_address = 0;
895
896         xtime.tv_sec = get_cmos_time();
897         xtime.tv_nsec = 0;
898
899         set_normalized_timespec(&wall_to_monotonic,
900                                 -xtime.tv_sec, -xtime.tv_nsec);
901
902         if (!hpet_init()) {
903                 vxtime_hz = (1000000000000000L + hpet_period / 2) /
904                         hpet_period;
905                 cpu_khz = hpet_calibrate_tsc();
906                 timename = "HPET";
907 #ifdef CONFIG_X86_PM_TIMER
908         } else if (pmtmr_ioport) {
909                 vxtime_hz = PM_TIMER_FREQUENCY;
910                 timename = "PM";
911                 pit_init();
912                 cpu_khz = pit_calibrate_tsc();
913 #endif
914         } else {
915                 pit_init();
916                 cpu_khz = pit_calibrate_tsc();
917                 timename = "PIT";
918         }
919
920         printk(KERN_INFO "time.c: Using %ld.%06ld MHz %s timer.\n",
921                vxtime_hz / 1000000, vxtime_hz % 1000000, timename);
922         printk(KERN_INFO "time.c: Detected %d.%03d MHz processor.\n",
923                 cpu_khz / 1000, cpu_khz % 1000);
924         vxtime.mode = VXTIME_TSC;
925         vxtime.quot = (1000000L << 32) / vxtime_hz;
926         vxtime.tsc_quot = (1000L << 32) / cpu_khz;
927         vxtime.hz = vxtime_hz;
928         rdtscll_sync(&vxtime.last_tsc);
929         setup_irq(0, &irq0);
930
931         set_cyc2ns_scale(cpu_khz / 1000);
932
933 #ifndef CONFIG_SMP
934         time_init_gtod();
935 #endif
936 }
937
938 /*
939  * Make an educated guess if the TSC is trustworthy and synchronized
940  * over all CPUs.
941  */
942 static __init int unsynchronized_tsc(void)
943 {
944 #ifdef CONFIG_SMP
945         if (oem_force_hpet_timer())
946                 return 1;
947         /* Intel systems are normally all synchronized. Exceptions
948            are handled in the OEM check above. */
949         if (boot_cpu_data.x86_vendor == X86_VENDOR_INTEL)
950                 return 0;
951         /* All in a single socket - should be synchronized */
952         if (cpus_weight(cpu_core_map[0]) == num_online_cpus())
953                 return 0;
954 #endif
955         /* Assume multi socket systems are not synchronized */
956         return num_online_cpus() > 1;
957 }
958
959 /*
960  * Decide after all CPUs are booted what mode gettimeofday should use.
961  */
962 void __init time_init_gtod(void)
963 {
964         char *timetype;
965
966         if (unsynchronized_tsc())
967                 notsc = 1;
968         if (vxtime.hpet_address && notsc) {
969                 timetype = "HPET";
970                 vxtime.last = hpet_readl(HPET_T0_CMP) - hpet_tick;
971                 vxtime.mode = VXTIME_HPET;
972                 do_gettimeoffset = do_gettimeoffset_hpet;
973 #ifdef CONFIG_X86_PM_TIMER
974         /* Using PM for gettimeofday is quite slow, but we have no other
975            choice because the TSC is too unreliable on some systems. */
976         } else if (pmtmr_ioport && !vxtime.hpet_address && notsc) {
977                 timetype = "PM";
978                 do_gettimeoffset = do_gettimeoffset_pm;
979                 vxtime.mode = VXTIME_PMTMR;
980                 sysctl_vsyscall = 0;
981                 printk(KERN_INFO "Disabling vsyscall due to use of PM timer\n");
982 #endif
983         } else {
984                 timetype = vxtime.hpet_address ? "HPET/TSC" : "PIT/TSC";
985                 vxtime.mode = VXTIME_TSC;
986         }
987
988         printk(KERN_INFO "time.c: Using %s based timekeeping.\n", timetype);
989 }
990
991 __setup("report_lost_ticks", time_setup);
992
993 static long clock_cmos_diff;
994 static unsigned long sleep_start;
995
996 static int timer_suspend(struct sys_device *dev, pm_message_t state)
997 {
998         /*
999          * Estimate time zone so that set_time can update the clock
1000          */
1001         long cmos_time =  get_cmos_time();
1002
1003         clock_cmos_diff = -cmos_time;
1004         clock_cmos_diff += get_seconds();
1005         sleep_start = cmos_time;
1006         return 0;
1007 }
1008
1009 static int timer_resume(struct sys_device *dev)
1010 {
1011         unsigned long flags;
1012         unsigned long sec;
1013         unsigned long ctime = get_cmos_time();
1014         unsigned long sleep_length = (ctime - sleep_start) * HZ;
1015
1016         if (vxtime.hpet_address)
1017                 hpet_reenable();
1018         else
1019                 i8254_timer_resume();
1020
1021         sec = ctime + clock_cmos_diff;
1022         write_seqlock_irqsave(&xtime_lock,flags);
1023         xtime.tv_sec = sec;
1024         xtime.tv_nsec = 0;
1025         write_sequnlock_irqrestore(&xtime_lock,flags);
1026         jiffies += sleep_length;
1027         wall_jiffies += sleep_length;
1028         return 0;
1029 }
1030
1031 static struct sysdev_class timer_sysclass = {
1032         .resume = timer_resume,
1033         .suspend = timer_suspend,
1034         set_kset_name("timer"),
1035 };
1036
1037
1038 /* XXX this driverfs stuff should probably go elsewhere later -john */
1039 static struct sys_device device_timer = {
1040         .id     = 0,
1041         .cls    = &timer_sysclass,
1042 };
1043
1044 static int time_init_device(void)
1045 {
1046         int error = sysdev_class_register(&timer_sysclass);
1047         if (!error)
1048                 error = sysdev_register(&device_timer);
1049         return error;
1050 }
1051
1052 device_initcall(time_init_device);
1053
1054 #ifdef CONFIG_HPET_EMULATE_RTC
1055 /* HPET in LegacyReplacement Mode eats up RTC interrupt line. When, HPET
1056  * is enabled, we support RTC interrupt functionality in software.
1057  * RTC has 3 kinds of interrupts:
1058  * 1) Update Interrupt - generate an interrupt, every sec, when RTC clock
1059  *    is updated
1060  * 2) Alarm Interrupt - generate an interrupt at a specific time of day
1061  * 3) Periodic Interrupt - generate periodic interrupt, with frequencies
1062  *    2Hz-8192Hz (2Hz-64Hz for non-root user) (all freqs in powers of 2)
1063  * (1) and (2) above are implemented using polling at a frequency of
1064  * 64 Hz. The exact frequency is a tradeoff between accuracy and interrupt
1065  * overhead. (DEFAULT_RTC_INT_FREQ)
1066  * For (3), we use interrupts at 64Hz or user specified periodic
1067  * frequency, whichever is higher.
1068  */
1069 #include <linux/rtc.h>
1070
1071 extern irqreturn_t rtc_interrupt(int irq, void *dev_id, struct pt_regs *regs);
1072
1073 #define DEFAULT_RTC_INT_FREQ    64
1074 #define RTC_NUM_INTS            1
1075
1076 static unsigned long UIE_on;
1077 static unsigned long prev_update_sec;
1078
1079 static unsigned long AIE_on;
1080 static struct rtc_time alarm_time;
1081
1082 static unsigned long PIE_on;
1083 static unsigned long PIE_freq = DEFAULT_RTC_INT_FREQ;
1084 static unsigned long PIE_count;
1085
1086 static unsigned long hpet_rtc_int_freq; /* RTC interrupt frequency */
1087
1088 int is_hpet_enabled(void)
1089 {
1090         return vxtime.hpet_address != 0;
1091 }
1092
1093 /*
1094  * Timer 1 for RTC, we do not use periodic interrupt feature,
1095  * even if HPET supports periodic interrupts on Timer 1.
1096  * The reason being, to set up a periodic interrupt in HPET, we need to
1097  * stop the main counter. And if we do that everytime someone diables/enables
1098  * RTC, we will have adverse effect on main kernel timer running on Timer 0.
1099  * So, for the time being, simulate the periodic interrupt in software.
1100  *
1101  * hpet_rtc_timer_init() is called for the first time and during subsequent
1102  * interuppts reinit happens through hpet_rtc_timer_reinit().
1103  */
1104 int hpet_rtc_timer_init(void)
1105 {
1106         unsigned int cfg, cnt;
1107         unsigned long flags;
1108
1109         if (!is_hpet_enabled())
1110                 return 0;
1111         /*
1112          * Set the counter 1 and enable the interrupts.
1113          */
1114         if (PIE_on && (PIE_freq > DEFAULT_RTC_INT_FREQ))
1115                 hpet_rtc_int_freq = PIE_freq;
1116         else
1117                 hpet_rtc_int_freq = DEFAULT_RTC_INT_FREQ;
1118
1119         local_irq_save(flags);
1120         cnt = hpet_readl(HPET_COUNTER);
1121         cnt += ((hpet_tick*HZ)/hpet_rtc_int_freq);
1122         hpet_writel(cnt, HPET_T1_CMP);
1123         local_irq_restore(flags);
1124
1125         cfg = hpet_readl(HPET_T1_CFG);
1126         cfg |= HPET_TN_ENABLE | HPET_TN_SETVAL | HPET_TN_32BIT;
1127         hpet_writel(cfg, HPET_T1_CFG);
1128
1129         return 1;
1130 }
1131
1132 static void hpet_rtc_timer_reinit(void)
1133 {
1134         unsigned int cfg, cnt;
1135
1136         if (!(PIE_on | AIE_on | UIE_on))
1137                 return;
1138
1139         if (PIE_on && (PIE_freq > DEFAULT_RTC_INT_FREQ))
1140                 hpet_rtc_int_freq = PIE_freq;
1141         else
1142                 hpet_rtc_int_freq = DEFAULT_RTC_INT_FREQ;
1143
1144         /* It is more accurate to use the comparator value than current count.*/
1145         cnt = hpet_readl(HPET_T1_CMP);
1146         cnt += hpet_tick*HZ/hpet_rtc_int_freq;
1147         hpet_writel(cnt, HPET_T1_CMP);
1148
1149         cfg = hpet_readl(HPET_T1_CFG);
1150         cfg |= HPET_TN_ENABLE | HPET_TN_SETVAL | HPET_TN_32BIT;
1151         hpet_writel(cfg, HPET_T1_CFG);
1152
1153         return;
1154 }
1155
1156 /*
1157  * The functions below are called from rtc driver.
1158  * Return 0 if HPET is not being used.
1159  * Otherwise do the necessary changes and return 1.
1160  */
1161 int hpet_mask_rtc_irq_bit(unsigned long bit_mask)
1162 {
1163         if (!is_hpet_enabled())
1164                 return 0;
1165
1166         if (bit_mask & RTC_UIE)
1167                 UIE_on = 0;
1168         if (bit_mask & RTC_PIE)
1169                 PIE_on = 0;
1170         if (bit_mask & RTC_AIE)
1171                 AIE_on = 0;
1172
1173         return 1;
1174 }
1175
1176 int hpet_set_rtc_irq_bit(unsigned long bit_mask)
1177 {
1178         int timer_init_reqd = 0;
1179
1180         if (!is_hpet_enabled())
1181                 return 0;
1182
1183         if (!(PIE_on | AIE_on | UIE_on))
1184                 timer_init_reqd = 1;
1185
1186         if (bit_mask & RTC_UIE) {
1187                 UIE_on = 1;
1188         }
1189         if (bit_mask & RTC_PIE) {
1190                 PIE_on = 1;
1191                 PIE_count = 0;
1192         }
1193         if (bit_mask & RTC_AIE) {
1194                 AIE_on = 1;
1195         }
1196
1197         if (timer_init_reqd)
1198                 hpet_rtc_timer_init();
1199
1200         return 1;
1201 }
1202
1203 int hpet_set_alarm_time(unsigned char hrs, unsigned char min, unsigned char sec)
1204 {
1205         if (!is_hpet_enabled())
1206                 return 0;
1207
1208         alarm_time.tm_hour = hrs;
1209         alarm_time.tm_min = min;
1210         alarm_time.tm_sec = sec;
1211
1212         return 1;
1213 }
1214
1215 int hpet_set_periodic_freq(unsigned long freq)
1216 {
1217         if (!is_hpet_enabled())
1218                 return 0;
1219
1220         PIE_freq = freq;
1221         PIE_count = 0;
1222
1223         return 1;
1224 }
1225
1226 int hpet_rtc_dropped_irq(void)
1227 {
1228         if (!is_hpet_enabled())
1229                 return 0;
1230
1231         return 1;
1232 }
1233
1234 irqreturn_t hpet_rtc_interrupt(int irq, void *dev_id, struct pt_regs *regs)
1235 {
1236         struct rtc_time curr_time;
1237         unsigned long rtc_int_flag = 0;
1238         int call_rtc_interrupt = 0;
1239
1240         hpet_rtc_timer_reinit();
1241
1242         if (UIE_on | AIE_on) {
1243                 rtc_get_rtc_time(&curr_time);
1244         }
1245         if (UIE_on) {
1246                 if (curr_time.tm_sec != prev_update_sec) {
1247                         /* Set update int info, call real rtc int routine */
1248                         call_rtc_interrupt = 1;
1249                         rtc_int_flag = RTC_UF;
1250                         prev_update_sec = curr_time.tm_sec;
1251                 }
1252         }
1253         if (PIE_on) {
1254                 PIE_count++;
1255                 if (PIE_count >= hpet_rtc_int_freq/PIE_freq) {
1256                         /* Set periodic int info, call real rtc int routine */
1257                         call_rtc_interrupt = 1;
1258                         rtc_int_flag |= RTC_PF;
1259                         PIE_count = 0;
1260                 }
1261         }
1262         if (AIE_on) {
1263                 if ((curr_time.tm_sec == alarm_time.tm_sec) &&
1264                     (curr_time.tm_min == alarm_time.tm_min) &&
1265                     (curr_time.tm_hour == alarm_time.tm_hour)) {
1266                         /* Set alarm int info, call real rtc int routine */
1267                         call_rtc_interrupt = 1;
1268                         rtc_int_flag |= RTC_AF;
1269                 }
1270         }
1271         if (call_rtc_interrupt) {
1272                 rtc_int_flag |= (RTC_IRQF | (RTC_NUM_INTS << 8));
1273                 rtc_interrupt(rtc_int_flag, dev_id, regs);
1274         }
1275         return IRQ_HANDLED;
1276 }
1277 #endif
1278
1279
1280
1281 static int __init nohpet_setup(char *s) 
1282
1283         nohpet = 1;
1284         return 0;
1285
1286
1287 __setup("nohpet", nohpet_setup);
1288
1289
1290 static int __init notsc_setup(char *s)
1291 {
1292         notsc = 1;
1293         return 0;
1294 }
1295
1296 __setup("notsc", notsc_setup);
1297
1298