Commit 308f5c73 authored by Dave Jones's avatar Dave Jones

Merge bk://linux-dj.bkbits.net/cpufreq

into delerium.codemonkey.org.uk:/mnt/data/src/bk/cpufreq
parents 20e743bb 5a9e6dcf
......@@ -75,7 +75,6 @@
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/sched.h>
#include <linux/init.h>
#include <linux/smp.h>
#include <linux/cpufreq.h>
......
......@@ -19,6 +19,7 @@
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/moduleparam.h>
#include <linux/init.h>
#include <linux/cpufreq.h>
#include <linux/slab.h>
......@@ -30,25 +31,25 @@
#include "longhaul.h"
#define DEBUG
#ifdef DEBUG
#define dprintk(msg...) printk(msg)
#else
#define dprintk(msg...) do { } while(0)
#endif
#define PFX "longhaul: "
static unsigned int numscales=16, numvscales;
static unsigned int fsb;
static int minvid, maxvid;
static int can_scale_voltage;
static int vrmrev;
/* Module parameters */
static int dont_scale_voltage;
static unsigned int fsb;
static int debug;
static int debug;
static void dprintk(const char *msg, ...)
{
if (debug == 1)
printk(msg);
}
#define __hlt() __asm__ __volatile__("hlt": : :"memory")
......@@ -78,11 +79,7 @@ static int longhaul_get_cpu_mult (void)
rdmsr (MSR_IA32_EBL_CR_POWERON, lo, hi);
invalue = (lo & (1<<22|1<<23|1<<24|1<<25)) >>22;
if (longhaul_version==2) {
if (lo & (1<<27))
invalue+=16;
}
if (longhaul_version==4) {
if (longhaul_version==2 || longhaul_version==4) {
if (lo & (1<<27))
invalue+=16;
}
......@@ -118,8 +115,7 @@ static void longhaul_setstate (unsigned int clock_ratio_index)
cpufreq_notify_transition(&freqs, CPUFREQ_PRECHANGE);
dprintk (KERN_INFO PFX "FSB:%d Mult:%d.%dx\n", fsb,
mult/10, mult%10);
dprintk (KERN_INFO PFX "FSB:%d Mult:%d.%dx\n", fsb, mult/10, mult%10);
switch (longhaul_version) {
case 1:
......@@ -501,7 +497,6 @@ static int __init longhaul_cpu_init (struct cpufreq_policy *policy)
}
break;
default:
cpuname = "Unknown";
break;
......@@ -530,7 +525,7 @@ static int __init longhaul_cpu_init (struct cpufreq_policy *policy)
return 0;
}
static int __exit longhaul_cpu_exit(struct cpufreq_policy *policy)
static int __devexit longhaul_cpu_exit(struct cpufreq_policy *policy)
{
cpufreq_frequency_table_put_attr(policy->cpu);
return 0;
......@@ -546,7 +541,7 @@ static struct cpufreq_driver longhaul_driver = {
.target = longhaul_target,
.get = longhaul_get,
.init = longhaul_cpu_init,
.exit = longhaul_cpu_exit,
.exit = __devexit_p(longhaul_cpu_exit),
.name = "longhaul",
.owner = THIS_MODULE,
.attr = longhaul_attr,
......@@ -560,12 +555,8 @@ static int __init longhaul_init (void)
return -ENODEV;
switch (c->x86_model) {
case 6 ... 8:
case 6 ... 9:
return cpufreq_register_driver(&longhaul_driver);
case 9:
printk (KERN_INFO PFX "Nehemiah unsupported: Waiting on working silicon "
"from VIA before this is usable.\n");
break;
default:
printk (KERN_INFO PFX "Unknown VIA CPU. Contact davej@codemonkey.org.uk\n");
}
......@@ -579,7 +570,11 @@ static void __exit longhaul_exit (void)
kfree(longhaul_table);
}
MODULE_PARM (dont_scale_voltage, "i");
module_param (dont_scale_voltage, int, 0644);
MODULE_PARM_DESC(dont_scale_voltage, "Don't scale voltage of processor");
module_param (debug, int, 0644);
MODULE_PARM_DESC(debug, "Dump debugging information.");
MODULE_AUTHOR ("Dave Jones <davej@codemonkey.org.uk>");
MODULE_DESCRIPTION ("Longhaul driver for VIA Cyrix processors.");
......
......@@ -27,7 +27,6 @@
#include <linux/smp.h>
#include <linux/cpufreq.h>
#include <linux/slab.h>
#include <linux/sched.h>
#include <asm/processor.h>
#include <asm/msr.h>
......@@ -35,7 +34,7 @@
#include "speedstep-lib.h"
#define PFX "cpufreq: "
#define PFX "p4-clockmod: "
/*
* Duty Cycle (3bits), note DC_DISABLE is not specified in
......
......@@ -95,7 +95,7 @@ static int fid_codes[32] = {
* configuration purpose.
*/
static int powernow_acpi_force;
static int acpi_force;
static struct cpufreq_frequency_table *powernow_table;
......@@ -144,6 +144,11 @@ static int check_powernow(void)
}
cpuid(0x80000007, &eax, &ebx, &ecx, &edx);
/* Check we can actually do something before we say anything.*/
if (!(edx & (1 << 1 | 1 << 2)))
return 0;
printk (KERN_INFO PFX "PowerNOW! Technology present. Can scale: ");
if (edx & 1 << 1) {
......@@ -159,11 +164,6 @@ static int check_powernow(void)
can_scale_vid=1;
}
if (!(edx & (1 << 1 | 1 << 2))) {
printk ("nothing.\n");
return 0;
}
printk (".\n");
return 1;
}
......@@ -572,7 +572,7 @@ static int __init powernow_cpu_init (struct cpufreq_policy *policy)
}
dprintk(KERN_INFO PFX "FSB: %3d.%03d MHz\n", fsb/1000, fsb%1000);
if ((dmi_broken & BROKEN_CPUFREQ) || powernow_acpi_force) {
if ((dmi_broken & BROKEN_CPUFREQ) || acpi_force) {
printk (KERN_INFO PFX "PSB/PST known to be broken. Trying ACPI instead\n");
result = powernow_acpi_init();
} else {
......@@ -653,8 +653,7 @@ static void __exit powernow_exit (void)
kfree(powernow_table);
}
module_param(powernow_acpi_force, int, 0444);
module_param(acpi_force, int, 0444);
MODULE_PARM_DESC(acpi_force, "Force ACPI to be used");
MODULE_AUTHOR ("Dave Jones <davej@codemonkey.org.uk>");
......
......@@ -736,7 +736,7 @@ static int powernow_k8_cpu_init_acpi(struct powernow_k8_data *data)
/* verify only 1 entry from the lo frequency table */
if ((fid < HI_FID_TABLE_BOTTOM) && (cntlofreq++)) {
printk(KERN_ERR PFX "Too many lo freq table entries\n");
goto err_out;
goto err_out_mem;
}
if (powernow_table[i].frequency != (data->acpi_data.states[i].core_frequency * 1000)) {
......@@ -757,6 +757,10 @@ static int powernow_k8_cpu_init_acpi(struct powernow_k8_data *data)
print_basics(data);
powernow_k8_acpi_pst_values(data, 0);
return 0;
err_out_mem:
kfree(powernow_table);
err_out:
acpi_processor_unregister_performance(&data->acpi_data, data->cpu);
......@@ -945,7 +949,7 @@ static int __init powernowk8_cpu_init(struct cpufreq_policy *pol)
if ((num_online_cpus() != 1) || (num_possible_cpus() != 1)) {
printk(KERN_INFO PFX "MP systems not supported by PSB BIOS structure\n");
kfree(data);
return 0;
return -ENODEV;
}
rc = find_psb_table(data);
if (rc) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment