[CPUFREQ] Recalibrate cpu_khz [2/2]
Some cpufreq drivers (at that time, only powernow-k7) need to recalibrate the cpu_khz at runtime. Signed-off-by: Bruno Ducrot <ducrot@poupinou.org> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Dave Jones <davej@redhat.com>
This commit is contained in:
Родитель
91350ed49b
Коммит
c5d28fb297
|
@ -6,6 +6,7 @@
|
|||
#include <linux/timex.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/jiffies.h>
|
||||
#include <linux/module.h>
|
||||
|
||||
#include <asm/io.h>
|
||||
#include <asm/timer.h>
|
||||
|
@ -24,7 +25,7 @@
|
|||
|
||||
#define CALIBRATE_TIME (5 * 1000020/HZ)
|
||||
|
||||
unsigned long __init calibrate_tsc(void)
|
||||
unsigned long calibrate_tsc(void)
|
||||
{
|
||||
mach_prepare_counter();
|
||||
|
||||
|
@ -139,7 +140,7 @@ bad_calibration:
|
|||
#endif
|
||||
|
||||
/* calculate cpu_khz */
|
||||
void __init init_cpu_khz(void)
|
||||
void init_cpu_khz(void)
|
||||
{
|
||||
if (cpu_has_tsc) {
|
||||
unsigned long tsc_quotient = calibrate_tsc();
|
||||
|
@ -158,3 +159,4 @@ void __init init_cpu_khz(void)
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -320,6 +320,26 @@ core_initcall(cpufreq_tsc);
|
|||
static inline void cpufreq_delayed_get(void) { return; }
|
||||
#endif
|
||||
|
||||
int recalibrate_cpu_khz(void)
|
||||
{
|
||||
#ifndef CONFIG_SMP
|
||||
unsigned long cpu_khz_old = cpu_khz;
|
||||
|
||||
if (cpu_has_tsc) {
|
||||
init_cpu_khz();
|
||||
cpu_data[0].loops_per_jiffy =
|
||||
cpufreq_scale(cpu_data[0].loops_per_jiffy,
|
||||
cpu_khz_old,
|
||||
cpu_khz);
|
||||
return 0;
|
||||
} else
|
||||
return -ENODEV;
|
||||
#else
|
||||
return -ENODEV;
|
||||
#endif
|
||||
}
|
||||
EXPORT_SYMBOL(recalibrate_cpu_khz);
|
||||
|
||||
static void mark_offset_tsc(void)
|
||||
{
|
||||
unsigned long lost,delay;
|
||||
|
|
|
@ -53,6 +53,7 @@ extern struct init_timer_opts timer_cyclone_init;
|
|||
|
||||
extern unsigned long calibrate_tsc(void);
|
||||
extern void init_cpu_khz(void);
|
||||
extern int recalibrate_cpu_khz(void);
|
||||
#ifdef CONFIG_HPET_TIMER
|
||||
extern struct init_timer_opts timer_hpet_init;
|
||||
extern unsigned long calibrate_tsc_hpet(unsigned long *tsc_hpet_quotient_ptr);
|
||||
|
|
Загрузка…
Ссылка в новой задаче