diff options
| -rw-r--r-- | arch/powerpc/include/asm/machdep.h | 3 | ||||
| -rw-r--r-- | arch/powerpc/include/asm/time.h | 7 | ||||
| -rw-r--r-- | arch/powerpc/kernel/smp.c | 2 | ||||
| -rw-r--r-- | arch/powerpc/kernel/time.c | 136 | ||||
| -rw-r--r-- | arch/powerpc/platforms/52xx/lite5200_pm.c | 3 | ||||
| -rw-r--r-- | arch/powerpc/platforms/52xx/mpc52xx_pm.c | 3 | ||||
| -rw-r--r-- | arch/powerpc/platforms/powermac/cpufreq_32.c | 8 |
7 files changed, 9 insertions, 153 deletions
diff --git a/arch/powerpc/include/asm/machdep.h b/arch/powerpc/include/asm/machdep.h index 9f0fc9e6ce0d..7716e68f7b18 100644 --- a/arch/powerpc/include/asm/machdep.h +++ b/arch/powerpc/include/asm/machdep.h | |||
| @@ -366,8 +366,5 @@ static inline void log_error(char *buf, unsigned int err_type, int fatal) | |||
| 366 | #define machine_late_initcall(mach,fn) __define_machine_initcall(mach,"7",fn,7) | 366 | #define machine_late_initcall(mach,fn) __define_machine_initcall(mach,"7",fn,7) |
| 367 | #define machine_late_initcall_sync(mach,fn) __define_machine_initcall(mach,"7s",fn,7s) | 367 | #define machine_late_initcall_sync(mach,fn) __define_machine_initcall(mach,"7s",fn,7s) |
| 368 | 368 | ||
| 369 | void generic_suspend_disable_irqs(void); | ||
| 370 | void generic_suspend_enable_irqs(void); | ||
| 371 | |||
| 372 | #endif /* __KERNEL__ */ | 369 | #endif /* __KERNEL__ */ |
| 373 | #endif /* _ASM_POWERPC_MACHDEP_H */ | 370 | #endif /* _ASM_POWERPC_MACHDEP_H */ |
diff --git a/arch/powerpc/include/asm/time.h b/arch/powerpc/include/asm/time.h index 27ccb764fdab..dc779dfcf258 100644 --- a/arch/powerpc/include/asm/time.h +++ b/arch/powerpc/include/asm/time.h | |||
| @@ -28,16 +28,12 @@ | |||
| 28 | extern unsigned long tb_ticks_per_jiffy; | 28 | extern unsigned long tb_ticks_per_jiffy; |
| 29 | extern unsigned long tb_ticks_per_usec; | 29 | extern unsigned long tb_ticks_per_usec; |
| 30 | extern unsigned long tb_ticks_per_sec; | 30 | extern unsigned long tb_ticks_per_sec; |
| 31 | extern u64 tb_to_xs; | ||
| 32 | extern unsigned tb_to_us; | ||
| 33 | 31 | ||
| 34 | struct rtc_time; | 32 | struct rtc_time; |
| 35 | extern void to_tm(int tim, struct rtc_time * tm); | 33 | extern void to_tm(int tim, struct rtc_time * tm); |
| 36 | extern void GregorianDay(struct rtc_time *tm); | 34 | extern void GregorianDay(struct rtc_time *tm); |
| 37 | extern time_t last_rtc_update; | ||
| 38 | 35 | ||
| 39 | extern void generic_calibrate_decr(void); | 36 | extern void generic_calibrate_decr(void); |
| 40 | extern void wakeup_decrementer(void); | ||
| 41 | extern void snapshot_timebase(void); | 37 | extern void snapshot_timebase(void); |
| 42 | 38 | ||
| 43 | extern void set_dec_cpu6(unsigned int val); | 39 | extern void set_dec_cpu6(unsigned int val); |
| @@ -204,9 +200,6 @@ static inline unsigned long tb_ticks_since(unsigned long tstamp) | |||
| 204 | extern u64 mulhdu(u64, u64); | 200 | extern u64 mulhdu(u64, u64); |
| 205 | #endif | 201 | #endif |
| 206 | 202 | ||
| 207 | extern void smp_space_timers(unsigned int); | ||
| 208 | |||
| 209 | extern unsigned mulhwu_scale_factor(unsigned, unsigned); | ||
| 210 | extern void div128_by_32(u64 dividend_high, u64 dividend_low, | 203 | extern void div128_by_32(u64 dividend_high, u64 dividend_low, |
| 211 | unsigned divisor, struct div_result *dr); | 204 | unsigned divisor, struct div_result *dr); |
| 212 | 205 | ||
diff --git a/arch/powerpc/kernel/smp.c b/arch/powerpc/kernel/smp.c index 5c196d1086d9..8764daad309b 100644 --- a/arch/powerpc/kernel/smp.c +++ b/arch/powerpc/kernel/smp.c | |||
| @@ -288,8 +288,6 @@ void __init smp_prepare_cpus(unsigned int max_cpus) | |||
| 288 | max_cpus = NR_CPUS; | 288 | max_cpus = NR_CPUS; |
| 289 | else | 289 | else |
| 290 | max_cpus = 1; | 290 | max_cpus = 1; |
| 291 | |||
| 292 | smp_space_timers(max_cpus); | ||
| 293 | 291 | ||
| 294 | for_each_possible_cpu(cpu) | 292 | for_each_possible_cpu(cpu) |
| 295 | if (cpu != boot_cpuid) | 293 | if (cpu != boot_cpuid) |
diff --git a/arch/powerpc/kernel/time.c b/arch/powerpc/kernel/time.c index 5adebaf47f13..ccb8759c8532 100644 --- a/arch/powerpc/kernel/time.c +++ b/arch/powerpc/kernel/time.c | |||
| @@ -149,16 +149,6 @@ unsigned long tb_ticks_per_usec = 100; /* sane default */ | |||
| 149 | EXPORT_SYMBOL(tb_ticks_per_usec); | 149 | EXPORT_SYMBOL(tb_ticks_per_usec); |
| 150 | unsigned long tb_ticks_per_sec; | 150 | unsigned long tb_ticks_per_sec; |
| 151 | EXPORT_SYMBOL(tb_ticks_per_sec); /* for cputime_t conversions */ | 151 | EXPORT_SYMBOL(tb_ticks_per_sec); /* for cputime_t conversions */ |
| 152 | u64 tb_to_xs; | ||
| 153 | unsigned tb_to_us; | ||
| 154 | |||
| 155 | #define TICKLEN_SCALE NTP_SCALE_SHIFT | ||
| 156 | static u64 last_tick_len; /* units are ns / 2^TICKLEN_SCALE */ | ||
| 157 | static u64 ticklen_to_xs; /* 0.64 fraction */ | ||
| 158 | |||
| 159 | /* If last_tick_len corresponds to about 1/HZ seconds, then | ||
| 160 | last_tick_len << TICKLEN_SHIFT will be about 2^63. */ | ||
| 161 | #define TICKLEN_SHIFT (63 - 30 - TICKLEN_SCALE + SHIFT_HZ) | ||
| 162 | 152 | ||
| 163 | DEFINE_SPINLOCK(rtc_lock); | 153 | DEFINE_SPINLOCK(rtc_lock); |
| 164 | EXPORT_SYMBOL_GPL(rtc_lock); | 154 | EXPORT_SYMBOL_GPL(rtc_lock); |
| @@ -174,7 +164,6 @@ unsigned long ppc_proc_freq; | |||
| 174 | EXPORT_SYMBOL(ppc_proc_freq); | 164 | EXPORT_SYMBOL(ppc_proc_freq); |
| 175 | unsigned long ppc_tb_freq; | 165 | unsigned long ppc_tb_freq; |
| 176 | 166 | ||
| 177 | static u64 tb_last_jiffy __cacheline_aligned_in_smp; | ||
| 178 | static DEFINE_PER_CPU(u64, last_jiffy); | 167 | static DEFINE_PER_CPU(u64, last_jiffy); |
| 179 | 168 | ||
| 180 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING | 169 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING |
| @@ -446,7 +435,6 @@ EXPORT_SYMBOL(profile_pc); | |||
| 446 | 435 | ||
| 447 | static int __init iSeries_tb_recal(void) | 436 | static int __init iSeries_tb_recal(void) |
| 448 | { | 437 | { |
| 449 | struct div_result divres; | ||
| 450 | unsigned long titan, tb; | 438 | unsigned long titan, tb; |
| 451 | 439 | ||
| 452 | /* Make sure we only run on iSeries */ | 440 | /* Make sure we only run on iSeries */ |
| @@ -477,10 +465,7 @@ static int __init iSeries_tb_recal(void) | |||
| 477 | tb_ticks_per_jiffy = new_tb_ticks_per_jiffy; | 465 | tb_ticks_per_jiffy = new_tb_ticks_per_jiffy; |
| 478 | tb_ticks_per_sec = new_tb_ticks_per_sec; | 466 | tb_ticks_per_sec = new_tb_ticks_per_sec; |
| 479 | calc_cputime_factors(); | 467 | calc_cputime_factors(); |
| 480 | div128_by_32( XSEC_PER_SEC, 0, tb_ticks_per_sec, &divres ); | ||
| 481 | tb_to_xs = divres.result_low; | ||
| 482 | vdso_data->tb_ticks_per_sec = tb_ticks_per_sec; | 468 | vdso_data->tb_ticks_per_sec = tb_ticks_per_sec; |
| 483 | vdso_data->tb_to_xs = tb_to_xs; | ||
| 484 | setup_cputime_one_jiffy(); | 469 | setup_cputime_one_jiffy(); |
| 485 | } | 470 | } |
| 486 | else { | 471 | else { |
| @@ -643,27 +628,9 @@ void timer_interrupt(struct pt_regs * regs) | |||
| 643 | trace_timer_interrupt_exit(regs); | 628 | trace_timer_interrupt_exit(regs); |
| 644 | } | 629 | } |
| 645 | 630 | ||
| 646 | void wakeup_decrementer(void) | ||
| 647 | { | ||
| 648 | unsigned long ticks; | ||
| 649 | |||
| 650 | /* | ||
| 651 | * The timebase gets saved on sleep and restored on wakeup, | ||
| 652 | * so all we need to do is to reset the decrementer. | ||
| 653 | */ | ||
| 654 | ticks = tb_ticks_since(__get_cpu_var(last_jiffy)); | ||
| 655 | if (ticks < tb_ticks_per_jiffy) | ||
| 656 | ticks = tb_ticks_per_jiffy - ticks; | ||
| 657 | else | ||
| 658 | ticks = 1; | ||
| 659 | set_dec(ticks); | ||
| 660 | } | ||
| 661 | |||
| 662 | #ifdef CONFIG_SUSPEND | 631 | #ifdef CONFIG_SUSPEND |
| 663 | void generic_suspend_disable_irqs(void) | 632 | static void generic_suspend_disable_irqs(void) |
| 664 | { | 633 | { |
| 665 | preempt_disable(); | ||
| 666 | |||
| 667 | /* Disable the decrementer, so that it doesn't interfere | 634 | /* Disable the decrementer, so that it doesn't interfere |
| 668 | * with suspending. | 635 | * with suspending. |
| 669 | */ | 636 | */ |
| @@ -673,12 +640,9 @@ void generic_suspend_disable_irqs(void) | |||
| 673 | set_dec(0x7fffffff); | 640 | set_dec(0x7fffffff); |
| 674 | } | 641 | } |
| 675 | 642 | ||
| 676 | void generic_suspend_enable_irqs(void) | 643 | static void generic_suspend_enable_irqs(void) |
| 677 | { | 644 | { |
| 678 | wakeup_decrementer(); | ||
| 679 | |||
| 680 | local_irq_enable(); | 645 | local_irq_enable(); |
| 681 | preempt_enable(); | ||
| 682 | } | 646 | } |
| 683 | 647 | ||
| 684 | /* Overrides the weak version in kernel/power/main.c */ | 648 | /* Overrides the weak version in kernel/power/main.c */ |
| @@ -698,23 +662,6 @@ void arch_suspend_enable_irqs(void) | |||
| 698 | } | 662 | } |
| 699 | #endif | 663 | #endif |
| 700 | 664 | ||
| 701 | #ifdef CONFIG_SMP | ||
| 702 | void __init smp_space_timers(unsigned int max_cpus) | ||
| 703 | { | ||
| 704 | int i; | ||
| 705 | u64 previous_tb = per_cpu(last_jiffy, boot_cpuid); | ||
| 706 | |||
| 707 | /* make sure tb > per_cpu(last_jiffy, cpu) for all cpus always */ | ||
| 708 | previous_tb -= tb_ticks_per_jiffy; | ||
| 709 | |||
| 710 | for_each_possible_cpu(i) { | ||
| 711 | if (i == boot_cpuid) | ||
| 712 | continue; | ||
| 713 | per_cpu(last_jiffy, i) = previous_tb; | ||
| 714 | } | ||
| 715 | } | ||
| 716 | #endif | ||
| 717 | |||
