diff options
author | Dominik Brodowski <linux@dominikbrodowski.net> | 2006-10-31 12:44:08 -0500 |
---|---|---|
committer | Dave Jones <davej@redhat.com> | 2006-11-06 19:17:40 -0500 |
commit | 4e74663c5d7eefc1f953b9b0bdacab09917b4eac (patch) | |
tree | f5a7e4f1ae4530ea4d355587b80c4ac85f555e95 /arch/i386/kernel/cpu/cpufreq/speedstep-lib.c | |
parent | e08f5f5bb5dfaaa28d69ffe37eb774533297657f (diff) |
[CPUFREQ] p4-clockmod: add more CPUs
Several more Intel CPUs are now capable using the p4-clockmod cpufreq
driver. As it is of limited use most of the time, print a big bold warning
if a better cpufreq driver might be available.
Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>
Signed-off-by: Dave Jones <davej@redhat.com>
Diffstat (limited to 'arch/i386/kernel/cpu/cpufreq/speedstep-lib.c')
-rw-r--r-- | arch/i386/kernel/cpu/cpufreq/speedstep-lib.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/arch/i386/kernel/cpu/cpufreq/speedstep-lib.c b/arch/i386/kernel/cpu/cpufreq/speedstep-lib.c index 4f46cac155c4..6623a564f6fd 100644 --- a/arch/i386/kernel/cpu/cpufreq/speedstep-lib.c +++ b/arch/i386/kernel/cpu/cpufreq/speedstep-lib.c | |||
@@ -123,6 +123,36 @@ static unsigned int pentiumM_get_frequency(void) | |||
123 | return (msr_tmp * 100 * 1000); | 123 | return (msr_tmp * 100 * 1000); |
124 | } | 124 | } |
125 | 125 | ||
126 | static unsigned int pentium_core_get_frequency(void) | ||
127 | { | ||
128 | u32 fsb = 0; | ||
129 | u32 msr_lo, msr_tmp; | ||
130 | |||
131 | rdmsr(MSR_FSB_FREQ, msr_lo, msr_tmp); | ||
132 | /* see table B-2 of 24547212.pdf */ | ||
133 | switch (msr_lo & 0x07) { | ||
134 | case 5: | ||
135 | fsb = 400; | ||
136 | break; | ||
137 | case 1: | ||
138 | fsb = 533; | ||
139 | break; | ||
140 | case 3: | ||
141 | fsb = 667; | ||
142 | break; | ||
143 | default: | ||
144 | printk(KERN_ERR "PCORE - MSR_FSB_FREQ undefined value"); | ||
145 | } | ||
146 | |||
147 | rdmsr(MSR_IA32_EBL_CR_POWERON, msr_lo, msr_tmp); | ||
148 | dprintk("PCORE - MSR_IA32_EBL_CR_POWERON: 0x%x 0x%x\n", msr_lo, msr_tmp); | ||
149 | |||
150 | msr_tmp = (msr_lo >> 22) & 0x1f; | ||
151 | dprintk("bits 22-26 are 0x%x, speed is %u\n", msr_tmp, (msr_tmp * fsb * 1000)); | ||
152 | |||
153 | return (msr_tmp * fsb * 1000); | ||
154 | } | ||
155 | |||
126 | 156 | ||
127 | static unsigned int pentium4_get_frequency(void) | 157 | static unsigned int pentium4_get_frequency(void) |
128 | { | 158 | { |
@@ -174,6 +204,8 @@ static unsigned int pentium4_get_frequency(void) | |||
174 | unsigned int speedstep_get_processor_frequency(unsigned int processor) | 204 | unsigned int speedstep_get_processor_frequency(unsigned int processor) |
175 | { | 205 | { |
176 | switch (processor) { | 206 | switch (processor) { |
207 | case SPEEDSTEP_PROCESSOR_PCORE: | ||
208 | return pentium_core_get_frequency(); | ||
177 | case SPEEDSTEP_PROCESSOR_PM: | 209 | case SPEEDSTEP_PROCESSOR_PM: |
178 | return pentiumM_get_frequency(); | 210 | return pentiumM_get_frequency(); |
179 | case SPEEDSTEP_PROCESSOR_P4D: | 211 | case SPEEDSTEP_PROCESSOR_P4D: |