Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
bcf41bfd
Commit
bcf41bfd
authored
Sep 04, 2003
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge
bk://linux-dj.bkbits.net/cpufreq
into home.osdl.org:/home/torvalds/v2.5/linux
parents
3377ea43
fa1d2434
Changes
29
Hide whitespace changes
Inline
Side-by-side
Showing
29 changed files
with
571 additions
and
390 deletions
+571
-390
Documentation/cpu-freq/cpu-drivers.txt
Documentation/cpu-freq/cpu-drivers.txt
+7
-1
arch/arm/Kconfig
arch/arm/Kconfig
+5
-29
arch/arm/mach-integrator/cpu.c
arch/arm/mach-integrator/cpu.c
+1
-1
arch/arm/mach-sa1100/cpu-sa1100.c
arch/arm/mach-sa1100/cpu-sa1100.c
+1
-1
arch/arm/mach-sa1100/cpu-sa1110.c
arch/arm/mach-sa1100/cpu-sa1110.c
+1
-1
arch/i386/kernel/cpu/cpufreq/acpi.c
arch/i386/kernel/cpu/cpufreq/acpi.c
+1
-1
arch/i386/kernel/cpu/cpufreq/elanfreq.c
arch/i386/kernel/cpu/cpufreq/elanfreq.c
+1
-1
arch/i386/kernel/cpu/cpufreq/gx-suspmod.c
arch/i386/kernel/cpu/cpufreq/gx-suspmod.c
+1
-1
arch/i386/kernel/cpu/cpufreq/longhaul.c
arch/i386/kernel/cpu/cpufreq/longhaul.c
+80
-257
arch/i386/kernel/cpu/cpufreq/longhaul.h
arch/i386/kernel/cpu/cpufreq/longhaul.h
+201
-0
arch/i386/kernel/cpu/cpufreq/longrun.c
arch/i386/kernel/cpu/cpufreq/longrun.c
+2
-1
arch/i386/kernel/cpu/cpufreq/p4-clockmod.c
arch/i386/kernel/cpu/cpufreq/p4-clockmod.c
+1
-1
arch/i386/kernel/cpu/cpufreq/powernow-k6.c
arch/i386/kernel/cpu/cpufreq/powernow-k6.c
+1
-1
arch/i386/kernel/cpu/cpufreq/powernow-k7.c
arch/i386/kernel/cpu/cpufreq/powernow-k7.c
+4
-1
arch/i386/kernel/cpu/cpufreq/speedstep-centrino.c
arch/i386/kernel/cpu/cpufreq/speedstep-centrino.c
+1
-3
arch/i386/kernel/cpu/cpufreq/speedstep-ich.c
arch/i386/kernel/cpu/cpufreq/speedstep-ich.c
+2
-3
arch/ppc/platforms/pmac_cpufreq.c
arch/ppc/platforms/pmac_cpufreq.c
+1
-2
arch/sh/kernel/cpufreq.c
arch/sh/kernel/cpufreq.c
+1
-1
arch/sparc64/kernel/us2e_cpufreq.c
arch/sparc64/kernel/us2e_cpufreq.c
+1
-1
arch/sparc64/kernel/us3_cpufreq.c
arch/sparc64/kernel/us3_cpufreq.c
+1
-1
drivers/cpufreq/Kconfig
drivers/cpufreq/Kconfig
+46
-1
drivers/cpufreq/Makefile
drivers/cpufreq/Makefile
+6
-1
drivers/cpufreq/cpufreq.c
drivers/cpufreq/cpufreq.c
+56
-59
drivers/cpufreq/cpufreq_performance.c
drivers/cpufreq/cpufreq_performance.c
+57
-0
drivers/cpufreq/cpufreq_powersave.c
drivers/cpufreq/cpufreq_powersave.c
+56
-0
drivers/cpufreq/cpufreq_userspace.c
drivers/cpufreq/cpufreq_userspace.c
+4
-4
drivers/cpufreq/proc_intf.c
drivers/cpufreq/proc_intf.c
+13
-13
include/linux/cpufreq.h
include/linux/cpufreq.h
+19
-3
kernel/Makefile
kernel/Makefile
+0
-1
No files found.
Documentation/cpu-freq/cpu-drivers.txt
View file @
bcf41bfd
...
...
@@ -64,6 +64,12 @@ And optionally
cpufreq_driver.exit - A pointer to a per-CPU cleanup function.
cpufreq_driver.resume - A pointer to a per-CPU resume function
which is called with interrupts disabled
and _before_ the pre-suspend frequency
and/or policy is restored by a call to
->target or ->setpolicy.
cpufreq_driver.attr - A pointer to a NULL-terminated list of
"struct freq_attr" which allow to
export values to sysfs.
...
...
@@ -119,7 +125,7 @@ section 2 for details on frequency table helpers.
You need to make sure that at least one valid frequency (or operating
range) is within policy->min and policy->max. If necessary, increase
policy->max fi
st, and only if this is no solution, decreas
policy->min.
policy->max fi
rst, and only if this is no solution, decrease
policy->min.
1.4 target or setpolicy?
...
...
arch/arm/Kconfig
View file @
bcf41bfd
...
...
@@ -542,39 +542,15 @@ config CPU_FREQ_SA1100
bool
depends on CPU_FREQ && SA1100_LART
default y
select CPU_FREQ_DEFAULT_GOV_USERSPACE
select CPU_FREQ_24_API if SYSCTL
config CPU_FREQ_SA1110
bool
depends on CPU_FREQ && (SA1100_ASSABET || SA1100_CERF || SA1100_PT_SYSTEM3)
default y
if (CPU_FREQ_SA1100 || CPU_FREQ_SA1110)
config CPU_FREQ_GOV_USERSPACE
tristate
depends on CPU_FREQ
default y
config CPU_FREQ_24_API
bool
depends on CPU_FREQ_GOV_USERSPACE && SYSCTL
default y
config CPU_FREQ_PROC_INTF
tristate "/proc/cpufreq interface (deprecated)"
depends on CPU_FREQ && PROC_FS
help
This enables the /proc/cpufreq interface for controlling
CPUFreq. Please note that it is recommended to use the sysfs
interface instead (which is built automatically).
For details, take a look at linux/Documentation/cpufreq.
If in doubt, say N.
endif
# CPUfreq on Integrator can use the generic cpufreq core
select CPU_FREQ_DEFAULT_GOV_USERSPACE
select CPU_FREQ_24_API if SYSCTL
config CPU_FREQ_INTEGRATOR
tristate "CPUfreq driver for ARM Integrator CPUs"
...
...
@@ -587,7 +563,7 @@ config CPU_FREQ_INTEGRATOR
If in doubt, say Y.
if (CPU_FREQ_INTEGRATOR)
if (CPU_FREQ_INTEGRATOR)
|| (CPU_FREQ_SA1110) || (CPU_FREQ_SA1100)
source "drivers/cpufreq/Kconfig"
...
...
arch/arm/mach-integrator/cpu.c
View file @
bcf41bfd
...
...
@@ -170,7 +170,7 @@ static int integrator_cpufreq_init(struct cpufreq_policy *policy)
vco
.
r
=
22
;
/* set default policy and cpuinfo */
policy
->
policy
=
CPUFREQ_POLICY_PERFORMANCE
;
policy
->
governor
=
CPUFREQ_DEFAULT_GOVERNOR
;
policy
->
cpuinfo
.
max_freq
=
160000
;
policy
->
cpuinfo
.
min_freq
=
12000
;
policy
->
cpuinfo
.
transition_latency
=
1000
;
/* 1 ms, assumed */
...
...
arch/arm/mach-sa1100/cpu-sa1100.c
View file @
bcf41bfd
...
...
@@ -222,7 +222,7 @@ static int __init sa1100_cpu_init(struct cpufreq_policy *policy)
if
(
policy
->
cpu
!=
0
)
return
-
EINVAL
;
policy
->
cur
=
policy
->
min
=
policy
->
max
=
sa11x0_getspeed
();
policy
->
policy
=
CPUFREQ_POLICY_POWERSAVE
;
policy
->
governor
=
CPUFREQ_DEFAULT_GOVERNOR
;
policy
->
cpuinfo
.
min_freq
=
59000
;
policy
->
cpuinfo
.
max_freq
=
287000
;
policy
->
cpuinfo
.
transition_latency
=
CPUFREQ_ETERNAL
;
...
...
arch/arm/mach-sa1100/cpu-sa1110.c
View file @
bcf41bfd
...
...
@@ -321,7 +321,7 @@ static int __init sa1110_cpu_init(struct cpufreq_policy *policy)
if
(
policy
->
cpu
!=
0
)
return
-
EINVAL
;
policy
->
cur
=
policy
->
min
=
policy
->
max
=
sa11x0_getspeed
();
policy
->
policy
=
CPUFREQ_POLICY_POWERSAVE
;
policy
->
governor
=
CPUFREQ_DEFAULT_GOVERNOR
;
policy
->
cpuinfo
.
min_freq
=
59000
;
policy
->
cpuinfo
.
max_freq
=
287000
;
policy
->
cpuinfo
.
transition_latency
=
CPUFREQ_ETERNAL
;
...
...
arch/i386/kernel/cpu/cpufreq/acpi.c
View file @
bcf41bfd
...
...
@@ -580,7 +580,7 @@ acpi_cpufreq_cpu_init (
if
(
perf
->
states
[
i
].
transition_latency
>
policy
->
cpuinfo
.
transition_latency
)
policy
->
cpuinfo
.
transition_latency
=
perf
->
states
[
i
].
transition_latency
;
}
policy
->
policy
=
CPUFREQ_POLICY_PERFORMANCE
;
policy
->
governor
=
CPUFREQ_DEFAULT_GOVERNOR
;
policy
->
cur
=
perf
->
states
[
pr
->
limit
.
state
.
px
].
core_frequency
*
1000
;
/* table init */
...
...
arch/i386/kernel/cpu/cpufreq/elanfreq.c
View file @
bcf41bfd
...
...
@@ -216,7 +216,7 @@ static int elanfreq_cpu_init(struct cpufreq_policy *policy)
}
/* cpuinfo and default policy values */
policy
->
policy
=
CPUFREQ_POLICY_PERFORMANCE
;
policy
->
governor
=
CPUFREQ_DEFAULT_GOVERNOR
;
policy
->
cpuinfo
.
transition_latency
=
CPUFREQ_ETERNAL
;
policy
->
cur
=
elanfreq_get_cpu_frequency
();
...
...
arch/i386/kernel/cpu/cpufreq/gx-suspmod.c
View file @
bcf41bfd
...
...
@@ -434,7 +434,7 @@ static int cpufreq_gx_cpu_init(struct cpufreq_policy *policy)
policy
->
min
=
maxfreq
/
POLICY_MIN_DIV
;
policy
->
max
=
maxfreq
;
policy
->
cur
=
curfreq
;
policy
->
policy
=
CPUFREQ_POLICY_PERFORMANCE
;
policy
->
governor
=
CPUFREQ_DEFAULT_GOVERNOR
;
policy
->
cpuinfo
.
min_freq
=
maxfreq
/
max_duration
;
policy
->
cpuinfo
.
max_freq
=
maxfreq
;
policy
->
cpuinfo
.
transition_latency
=
CPUFREQ_ETERNAL
;
...
...
arch/i386/kernel/cpu/cpufreq/longhaul.c
View file @
bcf41bfd
...
...
@@ -10,10 +10,11 @@
* +---------------------+----------+---------------------------------+
* | Marketing name | Codename | longhaul version / features. |
* +---------------------+----------+---------------------------------+
* | Samuel/CyrixIII |
C5A
| v1 : multipliers only |
* | Samuel/CyrixIII |
C5A
| v1 : multipliers only |
* | Samuel2/C3 | C3E/C5B | v1 : multiplier only |
* | Ezra | C5C | v2 : multipliers & voltage |
* | Ezra-T | C5M/C5N | v3 : multipliers, voltage & FSB |
* | Ezra | C5C | v2 : multipliers & voltage |
* | Ezra-T | C5M | v3 : multipliers, voltage & FSB |
* | Nehemiah | C5N | v3 : multipliers, voltage & FSB |
* +---------------------+----------+---------------------------------+
*
* BIG FAT DISCLAIMER: Work in progress code. Possibly *dangerous*
...
...
@@ -54,197 +55,6 @@ static unsigned int fsb;
#define __hlt() __asm__ __volatile__("hlt": : :"memory")
/*
* Clock ratio tables.
* The eblcr ones specify the ratio read from the CPU.
* The clock_ratio ones specify what to write to the CPU.
*/
/* VIA C3 Samuel 1 & Samuel 2 (stepping 0)*/
static
int
__initdata
longhaul1_clock_ratio
[
16
]
=
{
-
1
,
/* 0000 -> RESERVED */
30
,
/* 0001 -> 3.0x */
40
,
/* 0010 -> 4.0x */
-
1
,
/* 0011 -> RESERVED */
-
1
,
/* 0100 -> RESERVED */
35
,
/* 0101 -> 3.5x */
45
,
/* 0110 -> 4.5x */
55
,
/* 0111 -> 5.5x */
60
,
/* 1000 -> 6.0x */
70
,
/* 1001 -> 7.0x */
80
,
/* 1010 -> 8.0x */
50
,
/* 1011 -> 5.0x */
65
,
/* 1100 -> 6.5x */
75
,
/* 1101 -> 7.5x */
-
1
,
/* 1110 -> RESERVED */
-
1
,
/* 1111 -> RESERVED */
};
static
int
__initdata
samuel1_eblcr
[
16
]
=
{
50
,
/* 0000 -> RESERVED */
30
,
/* 0001 -> 3.0x */
40
,
/* 0010 -> 4.0x */
-
1
,
/* 0011 -> RESERVED */
55
,
/* 0100 -> 5.5x */
35
,
/* 0101 -> 3.5x */
45
,
/* 0110 -> 4.5x */
-
1
,
/* 0111 -> RESERVED */
-
1
,
/* 1000 -> RESERVED */
70
,
/* 1001 -> 7.0x */
80
,
/* 1010 -> 8.0x */
60
,
/* 1011 -> 6.0x */
-
1
,
/* 1100 -> RESERVED */
75
,
/* 1101 -> 7.5x */
-
1
,
/* 1110 -> RESERVED */
65
,
/* 1111 -> 6.5x */
};
/* VIA C3 Samuel2 Stepping 1->15 & VIA C3 Ezra */
static
int
__initdata
longhaul2_clock_ratio
[
16
]
=
{
100
,
/* 0000 -> 10.0x */
30
,
/* 0001 -> 3.0x */
40
,
/* 0010 -> 4.0x */
90
,
/* 0011 -> 9.0x */
95
,
/* 0100 -> 9.5x */
35
,
/* 0101 -> 3.5x */
45
,
/* 0110 -> 4.5x */
55
,
/* 0111 -> 5.5x */
60
,
/* 1000 -> 6.0x */
70
,
/* 1001 -> 7.0x */
80
,
/* 1010 -> 8.0x */
50
,
/* 1011 -> 5.0x */
65
,
/* 1100 -> 6.5x */
75
,
/* 1101 -> 7.5x */
85
,
/* 1110 -> 8.5x */
120
,
/* 1111 -> 12.0x */
};
static
int
__initdata
samuel2_eblcr
[
16
]
=
{
50
,
/* 0000 -> 5.0x */
30
,
/* 0001 -> 3.0x */
40
,
/* 0010 -> 4.0x */
100
,
/* 0011 -> 10.0x */
55
,
/* 0100 -> 5.5x */
35
,
/* 0101 -> 3.5x */
45
,
/* 0110 -> 4.5x */
110
,
/* 0111 -> 11.0x */
90
,
/* 1000 -> 9.0x */
70
,
/* 1001 -> 7.0x */
80
,
/* 1010 -> 8.0x */
60
,
/* 1011 -> 6.0x */
120
,
/* 1100 -> 12.0x */
75
,
/* 1101 -> 7.5x */
130
,
/* 1110 -> 13.0x */
65
,
/* 1111 -> 6.5x */
};
static
int
__initdata
ezra_eblcr
[
16
]
=
{
50
,
/* 0000 -> 5.0x */
30
,
/* 0001 -> 3.0x */
40
,
/* 0010 -> 4.0x */
100
,
/* 0011 -> 10.0x */
55
,
/* 0100 -> 5.5x */
35
,
/* 0101 -> 3.5x */
45
,
/* 0110 -> 4.5x */
95
,
/* 0111 -> 9.5x */
90
,
/* 1000 -> 9.0x */
70
,
/* 1001 -> 7.0x */
80
,
/* 1010 -> 8.0x */
60
,
/* 1011 -> 6.0x */
120
,
/* 1100 -> 12.0x */
75
,
/* 1101 -> 7.5x */
85
,
/* 1110 -> 8.5x */
65
,
/* 1111 -> 6.5x */
};
/* VIA C5M. */
static
int
__initdata
longhaul3_clock_ratio
[
32
]
=
{
100
,
/* 0000 -> 10.0x */
30
,
/* 0001 -> 3.0x */
40
,
/* 0010 -> 4.0x */
90
,
/* 0011 -> 9.0x */
95
,
/* 0100 -> 9.5x */
35
,
/* 0101 -> 3.5x */
45
,
/* 0110 -> 4.5x */
55
,
/* 0111 -> 5.5x */
60
,
/* 1000 -> 6.0x */
70
,
/* 1001 -> 7.0x */
80
,
/* 1010 -> 8.0x */
50
,
/* 1011 -> 5.0x */
65
,
/* 1100 -> 6.5x */
75
,
/* 1101 -> 7.5x */
85
,
/* 1110 -> 8.5x */
120
,
/* 1111 -> 12.0x */
-
1
,
/* 0000 -> RESERVED (10.0x) */
110
,
/* 0001 -> 11.0x */
120
,
/* 0010 -> 12.0x */
-
1
,
/* 0011 -> RESERVED (9.0x)*/
105
,
/* 0100 -> 10.5x */
115
,
/* 0101 -> 11.5x */
125
,
/* 0110 -> 12.5x */
135
,
/* 0111 -> 13.5x */
140
,
/* 1000 -> 14.0x */
150
,
/* 1001 -> 15.0x */
160
,
/* 1010 -> 16.0x */
130
,
/* 1011 -> 13.0x */
145
,
/* 1100 -> 14.5x */
155
,
/* 1101 -> 15.5x */
-
1
,
/* 1110 -> RESERVED (13.0x) */
-
1
,
/* 1111 -> RESERVED (12.0x) */
};
static
int
__initdata
c5m_eblcr
[
32
]
=
{
50
,
/* 0000 -> 5.0x */
30
,
/* 0001 -> 3.0x */
40
,
/* 0010 -> 4.0x */
100
,
/* 0011 -> 10.0x */
55
,
/* 0100 -> 5.5x */
35
,
/* 0101 -> 3.5x */
45
,
/* 0110 -> 4.5x */
95
,
/* 0111 -> 9.5x */
90
,
/* 1000 -> 9.0x */
70
,
/* 1001 -> 7.0x */
80
,
/* 1010 -> 8.0x */
60
,
/* 1011 -> 6.0x */
120
,
/* 1100 -> 12.0x */
75
,
/* 1101 -> 7.5x */
85
,
/* 1110 -> 8.5x */
65
,
/* 1111 -> 6.5x */
-
1
,
/* 0000 -> RESERVED (9.0x) */
110
,
/* 0001 -> 11.0x */
120
,
/* 0010 -> 12.0x */
-
1
,
/* 0011 -> RESERVED (10.0x)*/
135
,
/* 0100 -> 13.5x */
115
,
/* 0101 -> 11.5x */
125
,
/* 0110 -> 12.5x */
105
,
/* 0111 -> 10.5x */
130
,
/* 1000 -> 13.0x */
150
,
/* 1001 -> 15.0x */
160
,
/* 1010 -> 16.0x */
140
,
/* 1011 -> 14.0x */
-
1
,
/* 1100 -> RESERVED (12.0x) */
155
,
/* 1101 -> 15.5x */
-
1
,
/* 1110 -> RESERVED (13.0x) */
145
,
/* 1111 -> 14.5x */
};
/* Voltage scales. Div by 1000 to get actual voltage. */
static
int
__initdata
vrm85scales
[
32
]
=
{
1250
,
1200
,
1150
,
1100
,
1050
,
1800
,
1750
,
1700
,
1650
,
1600
,
1550
,
1500
,
1450
,
1400
,
1350
,
1300
,
1275
,
1225
,
1175
,
1125
,
1075
,
1825
,
1775
,
1725
,
1675
,
1625
,
1575
,
1525
,
1475
,
1425
,
1375
,
1325
,
};
static
int
__initdata
mobilevrmscales
[
32
]
=
{
2000
,
1950
,
1900
,
1850
,
1800
,
1750
,
1700
,
1650
,
1600
,
1550
,
1500
,
1450
,
1500
,
1350
,
1300
,
-
1
,
1275
,
1250
,
1225
,
1200
,
1175
,
1150
,
1125
,
1100
,
1075
,
1050
,
1025
,
1000
,
975
,
950
,
925
,
-
1
,
};
/* Clock ratios multiplied by 10 */
static
int
clock_ratio
[
32
];
static
int
eblcr_table
[
32
];
...
...
@@ -254,18 +64,24 @@ static int longhaul_version;
static
struct
cpufreq_frequency_table
*
longhaul_table
;
static
int
longhaul_get_cpu_fsb
(
void
)
static
unsigned
int
calc_speed
(
int
mult
,
int
fsb
)
{
return
((
mult
/
10
)
*
fsb
)
+
((
mult
%
10
)
*
(
fsb
/
2
));
}
static
unsigned
int
longhaul_get_cpu_fsb
(
void
)
{
unsigned
long
lo
,
hi
;
unsigned
int
eblcr_fsb_table
[]
=
{
66
,
133
,
100
,
-
1
};
unsigned
long
invalue
=
0
,
lo
,
hi
;
unsigned
int
invalue
=
0
;
if
(
fsb
==
0
)
{
rdmsr
(
MSR_IA32_EBL_CR_POWERON
,
lo
,
hi
);
invalue
=
(
lo
&
(
1
<<
18
|
1
<<
19
))
>>
18
;
return
eblcr_fsb_table
[
invalue
];
}
else
{
return
fsb
;
fsb
=
eblcr_fsb_table
[
invalue
];
}
return
fsb
;
}
...
...
@@ -292,26 +108,27 @@ static int longhaul_get_cpu_mult (void)
static
void
longhaul_setstate
(
unsigned
int
clock_ratio_index
)
{
int
vidindex
,
i
;
int
speed
,
mult
;
struct
cpufreq_freqs
freqs
;
union
msr_longhaul
longhaul
;
union
msr_bcr2
bcr2
;
if
(
clock_ratio
[
clock_ratio_index
]
==
-
1
)
mult
=
clock_ratio
[
clock_ratio_index
];
if
(
mult
==
-
1
)
return
;
if
(((
clock_ratio
[
clock_ratio_index
]
*
fsb
*
100
)
>
highest_speed
)
||
((
clock_ratio
[
clock_ratio_index
]
*
fsb
*
100
)
<
lowest_speed
))
speed
=
calc_speed
(
mult
,
fsb
);
if
((
speed
>
highest_speed
)
||
(
speed
<
lowest_speed
))
return
;
freqs
.
old
=
longhaul_get_cpu_mult
()
*
longhaul_get_cpu_fsb
()
*
100
;
freqs
.
new
=
clock_ratio
[
clock_ratio_index
]
*
fsb
*
100
;
freqs
.
old
=
calc_speed
(
longhaul_get_cpu_mult
(),
fsb
)
;
freqs
.
new
=
speed
;
freqs
.
cpu
=
0
;
/* longhaul.c is UP only driver */
cpufreq_notify_transition
(
&
freqs
,
CPUFREQ_PRECHANGE
);
dprintk
(
KERN_INFO
PFX
"FSB:%d Mult
(x10):%d
\n
"
,
fsb
*
100
,
clock_ratio
[
clock_ratio_index
]
);
dprintk
(
KERN_INFO
PFX
"FSB:%d Mult
:%d.%dx
\n
"
,
fsb
,
mult
/
10
,
mult
%
10
);
switch
(
longhaul_version
)
{
case
1
:
...
...
@@ -329,6 +146,14 @@ static void longhaul_setstate (unsigned int clock_ratio_index)
wrmsrl
(
MSR_VIA_BCR2
,
bcr2
.
val
);
break
;
/*
* Longhaul v2. (Ezra [C5C])
* We can scale voltage with this too, but that's currently
* disabled until we come up with a decent 'match freq to voltage'
* algorithm.
* We also need to do the voltage/freq setting in order depending
* on the direction of scaling (like we do in powernow-k7.c)
*/
case
2
:
rdmsrl
(
MSR_VIA_LONGHAUL
,
longhaul
.
val
);
longhaul
.
bits
.
SoftBusRatio
=
clock_ratio_index
&
0xf
;
...
...
@@ -337,39 +162,16 @@ static void longhaul_setstate (unsigned int clock_ratio_index)
/* We must program the revision key only with values we
* know about, not blindly copy it from 0:3 */
longhaul
.
bits
.
RevisionKey
=
1
;
if
(
can_scale_voltage
)
{
/* PB: TODO fix this up */
vidindex
=
(((
highest_speed
-
lowest_speed
)
/
(
fsb
/
2
))
-
((
highest_speed
-
((
clock_ratio
[
clock_ratio_index
]
*
fsb
*
100
)
/
1000
))
/
(
fsb
/
2
)));
for
(
i
=
0
;
i
<
32
;
i
++
)
{
dprintk
(
KERN_INFO
"VID hunting. Looking for %d, found %d
\n
"
,
minvid
+
(
vidindex
*
25
),
voltage_table
[
i
]);
if
(
voltage_table
[
i
]
==
(
minvid
+
(
vidindex
*
25
)))
break
;
}
if
(
i
==
32
)
goto
bad_voltage
;
dprintk
(
KERN_INFO
PFX
"Desired vid index=%d
\n
"
,
i
);
#if 0
longhaul.bits.SoftVID = i;
longhaul.bits.EnableSoftVID = 1;
#endif
}
/* FIXME: Do voltage and freq seperatly like we do in powernow-k7 */
bad_voltage:
wrmsrl
(
MSR_VIA_LONGHAUL
,
longhaul
.
val
);
__hlt
();
rdmsrl
(
MSR_VIA_LONGHAUL
,
longhaul
.
val
);
longhaul
.
bits
.
EnableSoftBusRatio
=
0
;
if
(
can_scale_voltage
)
longhaul
.
bits
.
EnableSoftVID
=
0
;
longhaul
.
bits
.
RevisionKey
=
1
;
wrmsrl
(
MSR_VIA_LONGHAUL
,
longhaul
.
val
);
break
;
/*
* Longhaul v3. (Ezra-T [C5M], Nehemiag [C5N])
* This can also do voltage scaling, but see above.
* Ezra-T was alleged to do FSB scaling too, but it never worked in practice.
*/
case
3
:
rdmsrl
(
MSR_VIA_LONGHAUL
,
longhaul
.
val
);
longhaul
.
bits
.
SoftBusRatio
=
clock_ratio_index
&
0xf
;
...
...
@@ -378,7 +180,6 @@ static void longhaul_setstate (unsigned int clock_ratio_index)
/* We must program the revision key only with values we
* know about, not blindly copy it from 0:3 */
longhaul
.
bits
.
RevisionKey
=
3
;
/* SoftVID & SoftBSEL */
wrmsrl
(
MSR_VIA_LONGHAUL
,
longhaul
.
val
);
__hlt
();
...
...
@@ -403,6 +204,8 @@ static int __init longhaul_get_ranges (void)
unsigned
int
j
,
k
=
0
;
union
msr_longhaul
longhaul
;
fsb
=
longhaul_get_cpu_fsb
();
switch
(
longhaul_version
)
{
case
1
:
/* Ugh, Longhaul v1 didn't have the min/max MSRs.
...
...
@@ -430,23 +233,25 @@ static int __init longhaul_get_ranges (void)
break
;
}
highest_speed
=
maxmult
*
fsb
*
100
;
lowest_speed
=
minmult
*
fsb
*
100
;
dprintk
(
KERN_INFO
PFX
"MinMult(x10)=%d MaxMult(x10)=%d
\n
"
,
minmult
,
maxmult
);
dprintk
(
KERN_INFO
PFX
"
Lowestspeed=%d Highestspeed=%d
\n
"
,
lowest_speed
,
highest_speed
);
dprintk
(
KERN_INFO
PFX
"MinMult=%d.%dx MaxMult=%d.%dx
\n
"
,
minmult
/
10
,
minmult
%
10
,
maxmult
/
10
,
maxmult
%
10
)
;
highest_speed
=
calc_speed
(
maxmult
,
fsb
);
lowest_speed
=
calc_speed
(
minmult
,
fsb
);
dprintk
(
KERN_INFO
PFX
"
FSB: %dMHz Lowestspeed=%dMHz Highestspeed=%dMHz
\n
"
,
fsb
,
lowest_speed
,
highest_speed
);
longhaul_table
=
kmalloc
((
numscales
+
1
)
*
sizeof
(
struct
cpufreq_frequency_table
),
GFP_KERNEL
);
if
(
!
longhaul_table
)
return
-
ENOMEM
;
for
(
j
=
0
;
(
j
<
numscales
);
j
++
)
{
if
(
clock_ratio
[
j
]
==
-
1
)
for
(
j
=
0
;
j
<
numscales
;
j
++
)
{
unsigned
int
ratio
;
ratio
=
clock_ratio
[
j
];
if
(
ratio
==
-
1
)
continue
;
if
(
((
unsigned
int
)
clock_ratio
[
j
]
>
maxmult
)
||
((
unsigned
int
)
clock_ratio
[
j
]
<
minmult
)
)
if
(
ratio
>
maxmult
||
ratio
<
minmult
)
continue
;
longhaul_table
[
k
].
frequency
=
clock_ratio
[
j
]
*
fsb
*
100
;
longhaul_table
[
k
].
frequency
=
calc_speed
(
ratio
,
fsb
)
;
longhaul_table
[
k
].
index
=
(
j
<<
8
);
k
++
;
}
...
...
@@ -541,10 +346,12 @@ static int longhaul_target (struct cpufreq_policy *policy,
static
int
longhaul_cpu_init
(
struct
cpufreq_policy
*
policy
)
{
struct
cpuinfo_x86
*
c
=
cpu_data
;
char
*
cpuname
=
NULL
;
int
ret
;
switch
(
c
->
x86_model
)
{
case
6
:
/* VIA C3 Samuel C5A */
case
6
:
cpuname
=
"C3 'Samuel' [C5A]"
;
longhaul_version
=
1
;
memcpy
(
clock_ratio
,
longhaul1_clock_ratio
,
sizeof
(
longhaul1_clock_ratio
));
memcpy
(
eblcr_table
,
samuel1_eblcr
,
sizeof
(
samuel1_eblcr
));
...
...
@@ -553,11 +360,13 @@ static int longhaul_cpu_init (struct cpufreq_policy *policy)
case
7
:
/* C5B / C5C */
switch
(
c
->
x86_mask
)
{
case
0
:
cpuname
=
"C3 'Samuel 2' [C5B]"
;
longhaul_version
=
1
;
memcpy
(
clock_ratio
,
longhaul1_clock_ratio
,
sizeof
(
longhaul1_clock_ratio
));
memcpy
(
eblcr_table
,
samuel2_eblcr
,
sizeof
(
samuel2_eblcr
));
break
;
case
1
...
15
:
cpuname
=
"C3 'Ezra' [C5C]"
;
longhaul_version
=
2
;
memcpy
(
clock_ratio
,
longhaul2_clock_ratio
,
sizeof
(
longhaul2_clock_ratio
));
memcpy
(
eblcr_table
,
ezra_eblcr
,
sizeof
(
ezra_eblcr
));
...
...
@@ -565,17 +374,26 @@ static int longhaul_cpu_init (struct cpufreq_policy *policy)
}
break
;
case
8
:
/* C5M/C5N */
return
-
ENODEV
;
// Waiting on updated docs from VIA before this is usable
case
8
:
cpuname
=
"C3 'Ezra-T [C5M]"
;
longhaul_version
=
3
;
numscales
=
32
;
memcpy
(
clock_ratio
,
longhaul3_clock_ratio
,
sizeof
(
longhaul3_clock_ratio
));
memcpy
(
eblcr_table
,
c5m_eblcr
,
sizeof
(
c5m_eblcr
));
break
;
/*
case 9:
cpuname = "C3 'Nehemiah' [C5N]";
longhaul_version=3;
numscales=32;
*/
default:
cpuname
=
"Unknown"
;
break
;
}
printk
(
KERN_INFO
PFX
"VIA
CPU detected. Longhaul version %d supported
\n
"
,
longhaul_version
);
printk
(
KERN_INFO
PFX
"VIA
%s CPU detected. Longhaul v%d supported.
\n
"
,
cpuname
,
longhaul_version
);
if
((
longhaul_version
==
2
||
longhaul_version
==
3
)
&&
(
dont_scale_voltage
==
0
))
longhaul_setup_voltagescaling
();
...
...
@@ -584,10 +402,9 @@ static int longhaul_cpu_init (struct cpufreq_policy *policy)
if
(
ret
!=
0
)
return
ret
;
policy
->
policy
=
CPUFREQ_POLICY_PERFORMANCE
;
policy
->
governor
=
CPUFREQ_DEFAULT_GOVERNOR
;
policy
->
cpuinfo
.
transition_latency
=
CPUFREQ_ETERNAL
;
policy
->
cur
=
(
unsigned
int
)
(
longhaul_get_cpu_fsb
()
*
longhaul_get_cpu_mult
()
*
100
);
policy
->
cur
=
calc_speed
(
longhaul_get_cpu_mult
(),
fsb
);
return
cpufreq_frequency_table_cpuinfo
(
policy
,
longhaul_table
);
}
...
...
@@ -604,14 +421,20 @@ static int __init longhaul_init (void)
{
struct
cpuinfo_x86
*
c
=
cpu_data
;
if
(
(
c
->
x86_vendor
!=
X86_VENDOR_CENTAUR
)
||
(
c
->
x86
!=
6
)
)
if
(
c
->
x86_vendor
!=
X86_VENDOR_CENTAUR
||
c
->
x86
!=
6
)
return
-
ENODEV
;
switch
(
c
->
x86_model
)
{
case
6
...
7
:
return
cpufreq_register_driver
(
&
longhaul_driver
);
case
8
:
return
-
ENODEV
;
printk
(
KERN_INFO
PFX
"Ezra-T unsupported: Waiting on updated docs "
"from VIA before this is usable.
\n
"
);
break
;
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
"
);
}
...
...
arch/i386/kernel/cpu/cpufreq/longhaul.h
View file @
bcf41bfd
...
...
@@ -47,3 +47,204 @@ union msr_longhaul {
unsigned
long
long
val
;
};
/*
* Clock ratio tables. Div/Mod by 10 to get ratio.
* The eblcr ones specify the ratio read from the CPU.
* The clock_ratio ones specify what to write to the CPU.
*/
/*
* VIA C3 Samuel 1 & Samuel 2 (stepping 0)
*/
static
int
__initdata
longhaul1_clock_ratio
[
16
]
=
{
-
1
,
/* 0000 -> RESERVED */
30
,
/* 0001 -> 3.0x */
40
,
/* 0010 -> 4.0x */
-
1
,
/* 0011 -> RESERVED */
-
1
,
/* 0100 -> RESERVED */
35
,
/* 0101 -> 3.5x */
45
,
/* 0110 -> 4.5x */
55
,
/* 0111 -> 5.5x */
60
,
/* 1000 -> 6.0x */
70
,
/* 1001 -> 7.0x */
80
,
/* 1010 -> 8.0x */
50
,
/* 1011 -> 5.0x */
65
,
/* 1100 -> 6.5x */
75
,
/* 1101 -> 7.5x */
-
1
,
/* 1110 -> RESERVED */
-
1
,
/* 1111 -> RESERVED */
};
static
int
__initdata
samuel1_eblcr
[
16
]
=
{
50
,
/* 0000 -> RESERVED */
30
,
/* 0001 -> 3.0x */
40
,
/* 0010 -> 4.0x */
-
1
,
/* 0011 -> RESERVED */
55
,
/* 0100 -> 5.5x */
35
,
/* 0101 -> 3.5x */
45
,
/* 0110 -> 4.5x */
-
1
,
/* 0111 -> RESERVED */
-
1
,
/* 1000 -> RESERVED */
70
,
/* 1001 -> 7.0x */
80
,
/* 1010 -> 8.0x */
60
,
/* 1011 -> 6.0x */
-
1
,
/* 1100 -> RESERVED */
75
,
/* 1101 -> 7.5x */
-
1
,
/* 1110 -> RESERVED */
65
,
/* 1111 -> 6.5x */
};
/*
* VIA C3 Samuel2 Stepping 1->15 & VIA C3 Ezra
*/
static
int
__initdata
longhaul2_clock_ratio
[
16
]
=
{
100
,
/* 0000 -> 10.0x */
30
,
/* 0001 -> 3.0x */
40
,
/* 0010 -> 4.0x */
90
,
/* 0011 -> 9.0x */
95
,
/* 0100 -> 9.5x */
35
,
/* 0101 -> 3.5x */
45
,
/* 0110 -> 4.5x */
55
,
/* 0111 -> 5.5x */
60
,
/* 1000 -> 6.0x */
70
,
/* 1001 -> 7.0x */
80
,
/* 1010 -> 8.0x */
50
,
/* 1011 -> 5.0x */
65
,
/* 1100 -> 6.5x */
75
,
/* 1101 -> 7.5x */
85
,
/* 1110 -> 8.5x */
120
,
/* 1111 -> 12.0x */
};
static
int
__initdata
samuel2_eblcr
[
16
]
=
{
50
,
/* 0000 -> 5.0x */
30
,
/* 0001 -> 3.0x */
40
,
/* 0010 -> 4.0x */
100
,
/* 0011 -> 10.0x */
55
,
/* 0100 -> 5.5x */
35
,
/* 0101 -> 3.5x */
45
,
/* 0110 -> 4.5x */
110
,
/* 0111 -> 11.0x */
90
,
/* 1000 -> 9.0x */
70
,
/* 1001 -> 7.0x */
80
,
/* 1010 -> 8.0x */
60
,
/* 1011 -> 6.0x */
120
,
/* 1100 -> 12.0x */
75
,
/* 1101 -> 7.5x */
130
,
/* 1110 -> 13.0x */
65
,
/* 1111 -> 6.5x */
};
static
int
__initdata
ezra_eblcr
[
16
]
=
{
50
,
/* 0000 -> 5.0x */
30
,
/* 0001 -> 3.0x */
40
,
/* 0010 -> 4.0x */
100
,
/* 0011 -> 10.0x */
55
,
/* 0100 -> 5.5x */
35
,
/* 0101 -> 3.5x */
45
,
/* 0110 -> 4.5x */
95
,
/* 0111 -> 9.5x */
90
,
/* 1000 -> 9.0x */
70
,
/* 1001 -> 7.0x */
80
,
/* 1010 -> 8.0x */
60
,
/* 1011 -> 6.0x */
120
,
/* 1100 -> 12.0x */
75
,
/* 1101 -> 7.5x */
85
,
/* 1110 -> 8.5x */
65
,
/* 1111 -> 6.5x */
};
/*
* VIA C3 (Ezra-T) [C5M].
*/
static
int
__initdata
longhaul3_clock_ratio
[
32
]
=
{
100
,
/* 0000 -> 10.0x */
30
,
/* 0001 -> 3.0x */
40
,
/* 0010 -> 4.0x */
90
,
/* 0011 -> 9.0x */
95
,
/* 0100 -> 9.5x */
35
,
/* 0101 -> 3.5x */
45
,
/* 0110 -> 4.5x */
55
,
/* 0111 -> 5.5x */
60
,
/* 1000 -> 6.0x */
70
,
/* 1001 -> 7.0x */
80
,
/* 1010 -> 8.0x */
50
,
/* 1011 -> 5.0x */
65
,
/* 1100 -> 6.5x */
75
,
/* 1101 -> 7.5x */
85
,
/* 1110 -> 8.5x */
120
,
/* 1111 -> 12.0x */
-
1
,
/* 0000 -> RESERVED (10.0x) */
110
,
/* 0001 -> 11.0x */
120
,
/* 0010 -> 12.0x */
-
1
,
/* 0011 -> RESERVED (9.0x)*/
105
,
/* 0100 -> 10.5x */
115
,
/* 0101 -> 11.5x */
125
,
/* 0110 -> 12.5x */
135
,
/* 0111 -> 13.5x */
140
,
/* 1000 -> 14.0x */
150
,
/* 1001 -> 15.0x */
160
,
/* 1010 -> 16.0x */
130
,
/* 1011 -> 13.0x */
145
,
/* 1100 -> 14.5x */
155
,
/* 1101 -> 15.5x */
-
1
,
/* 1110 -> RESERVED (13.0x) */
-
1
,
/* 1111 -> RESERVED (12.0x) */
};
static
int
__initdata
c5m_eblcr
[
32
]
=
{
50
,
/* 0000 -> 5.0x */
30
,
/* 0001 -> 3.0x */
40
,
/* 0010 -> 4.0x */
100
,
/* 0011 -> 10.0x */
55
,
/* 0100 -> 5.5x */
35
,
/* 0101 -> 3.5x */
45
,
/* 0110 -> 4.5x */
95
,
/* 0111 -> 9.5x */
90
,
/* 1000 -> 9.0x */
70
,
/* 1001 -> 7.0x */
80
,
/* 1010 -> 8.0x */
60
,
/* 1011 -> 6.0x */
120
,
/* 1100 -> 12.0x */
75
,
/* 1101 -> 7.5x */
85
,
/* 1110 -> 8.5x */
65
,
/* 1111 -> 6.5x */
-
1
,
/* 0000 -> RESERVED (9.0x) */
110
,
/* 0001 -> 11.0x */
120
,
/* 0010 -> 12.0x */
-
1
,
/* 0011 -> RESERVED (10.0x)*/
135
,
/* 0100 -> 13.5x */
115
,
/* 0101 -> 11.5x */
125
,
/* 0110 -> 12.5x */
105
,
/* 0111 -> 10.5x */
130
,
/* 1000 -> 13.0x */
150
,
/* 1001 -> 15.0x */
160
,
/* 1010 -> 16.0x */
140
,
/* 1011 -> 14.0x */
-
1
,
/* 1100 -> RESERVED (12.0x) */
155
,
/* 1101 -> 15.5x */
-
1
,
/* 1110 -> RESERVED (13.0x) */
145
,
/* 1111 -> 14.5x */
};
/*
* Voltage scales. Div/Mod by 1000 to get actual voltage.
* Which scale to use depends on the VRM type in use.
*/
static
int
__initdata
vrm85scales
[
32
]
=
{
1250
,
1200
,
1150
,
1100
,
1050
,
1800
,
1750
,
1700
,
1650
,
1600
,
1550
,
1500
,
1450
,
1400
,
1350
,
1300
,
1275
,
1225
,
1175
,
1125
,
1075
,
1825
,
1775
,
1725
,
1675
,
1625
,
1575
,
1525
,
1475
,
1425
,
1375
,
1325
,
};
static
int
__initdata
mobilevrmscales
[
32
]
=
{
2000
,
1950
,
1900
,
1850
,
1800
,
1750
,
1700
,
1650
,
1600
,
1550
,
1500
,
1450
,
1500
,
1350
,
1300
,
-
1
,
1275
,
1250
,
1225
,
1200
,
1175
,
1150
,
1125
,
1100
,
1075
,
1050
,
1025
,
1000
,
975
,
950
,
925
,
-
1
,
};
arch/i386/kernel/cpu/cpufreq/longrun.c
View file @
bcf41bfd
...
...
@@ -120,7 +120,8 @@ static int longrun_verify_policy(struct cpufreq_policy *policy)
policy
->
cpuinfo
.
min_freq
,
policy
->
cpuinfo
.
max_freq
);
if
(
policy
->
policy
==
CPUFREQ_POLICY_GOVERNOR
)
if
((
policy
->
policy
!=
CPUFREQ_POLICY_POWERSAVE
)
&&
(
policy
->
policy
!=
CPUFREQ_POLICY_PERFORMANCE
))
return
-
EINVAL
;
return
0
;
...
...
arch/i386/kernel/cpu/cpufreq/p4-clockmod.c
View file @
bcf41bfd
...
...
@@ -211,7 +211,7 @@ static int cpufreq_p4_cpu_init(struct cpufreq_policy *policy)
cpufreq_frequency_table_get_attr
(
p4clockmod_table
,
policy
->
cpu
);
/* cpuinfo and default policy values */
policy
->
policy
=
CPUFREQ_POLICY_PERFORMANCE
;
policy
->
governor
=
CPUFREQ_DEFAULT_GOVERNOR
;
policy
->
cpuinfo
.
transition_latency
=
1000
;
policy
->
cur
=
stock_freq
;
...
...
arch/i386/kernel/cpu/cpufreq/powernow-k6.c
View file @
bcf41bfd
...
...
@@ -157,7 +157,7 @@ static int powernow_k6_cpu_init(struct cpufreq_policy *policy)
}
/* cpuinfo and default policy values */
policy
->
policy
=
CPUFREQ_POLICY_PERFORMANCE
;
policy
->
governor
=
CPUFREQ_DEFAULT_GOVERNOR
;
policy
->
cpuinfo
.
transition_latency
=
CPUFREQ_ETERNAL
;
policy
->
cur
=
busfreq
*
max_multiplier
;
...
...
arch/i386/kernel/cpu/cpufreq/powernow-k7.c
View file @
bcf41bfd
/*
* AMD K7 Powernow driver.
* (C) 2003 Dave Jones <davej@codemonkey.org.uk> on behalf of SuSE Labs.
* (C) 2003 Dave Jones <davej@redhat.com>
*
* Licensed under the terms of the GNU GPL License version 2.
* Based upon datasheets & sample CPUs kindly provided by AMD.
...
...
@@ -325,6 +326,8 @@ static int powernow_decode_bios (int maxfid, int startvid)
p
+=
2
;
}
}
printk
(
KERN_INFO
PFX
"No PST tables match this cpuid (0x%x)
\n
"
,
etuple
);
printk
(
"This is indicative of a broken BIOS. Email davej@redhat.com
\n
"
);
return
-
EINVAL
;
}
p
++
;
...
...
@@ -372,7 +375,7 @@ static int __init powernow_cpu_init (struct cpufreq_policy *policy)
printk
(
KERN_INFO
PFX
"Minimum speed %d MHz. Maximum speed %d MHz.
\n
"
,
minimum_speed
,
maximum_speed
);
policy
->
policy
=
CPUFREQ_POLICY_PERFORMANCE
;
policy
->
governor
=
CPUFREQ_DEFAULT_GOVERNOR
;
policy
->
cpuinfo
.
transition_latency
=
latency
;
policy
->
cur
=
maximum_speed
;
...
...
arch/i386/kernel/cpu/cpufreq/speedstep-centrino.c
View file @
bcf41bfd
...
...
@@ -201,9 +201,7 @@ static int centrino_cpu_init(struct cpufreq_policy *policy)
freq
=
get_cur_freq
();
policy
->
policy
=
(
freq
==
centrino_model
->
max_freq
)
?
CPUFREQ_POLICY_PERFORMANCE
:
CPUFREQ_POLICY_POWERSAVE
;
policy
->
governor
=
CPUFREQ_DEFAULT_GOVERNOR
;
policy
->
cpuinfo
.
transition_latency
=
10
;
/* 10uS transition latency */
policy
->
cur
=
freq
;
...
...
arch/i386/kernel/cpu/cpufreq/speedstep-ich.c
View file @
bcf41bfd
...
...
@@ -299,8 +299,7 @@ static int speedstep_cpu_init(struct cpufreq_policy *policy)
(
speed
/
1000
));
/* cpuinfo and default policy values */
policy
->
policy
=
(
speed
==
speedstep_freqs
[
SPEEDSTEP_LOW
].
frequency
)
?
CPUFREQ_POLICY_POWERSAVE
:
CPUFREQ_POLICY_PERFORMANCE
;
policy
->
governor
=
CPUFREQ_DEFAULT_GOVERNOR
;
policy
->
cpuinfo
.
transition_latency
=
CPUFREQ_ETERNAL
;
policy
->
cur
=
speed
;
...
...
@@ -309,7 +308,7 @@ static int speedstep_cpu_init(struct cpufreq_policy *policy)
static
struct
cpufreq_driver
speedstep_driver
=
{
.
name
=
"speedstep"
,
.
name
=
"speedstep
-ich
"
,
.
verify
=
speedstep_verify
,
.
target
=
speedstep_target
,
.
init
=
speedstep_cpu_init
,
...
...
arch/ppc/platforms/pmac_cpufreq.c
View file @
bcf41bfd
...
...
@@ -257,8 +257,7 @@ pmac_cpufreq_cpu_init(struct cpufreq_policy *policy)
if
(
policy
->
cpu
!=
0
)
return
-
ENODEV
;
policy
->
policy
=
(
cur_freq
==
low_freq
)
?
CPUFREQ_POLICY_POWERSAVE
:
CPUFREQ_POLICY_PERFORMANCE
;
policy
->
governor
=
CPUFREQ_DEFAULT_GOVERNOR
;
policy
->
cpuinfo
.
transition_latency
=
CPUFREQ_ETERNAL
;
policy
->
cur
=
cur_freq
;
...
...
arch/sh/kernel/cpufreq.c
View file @
bcf41bfd
...
...
@@ -160,7 +160,7 @@ static int sh_cpufreq_cpu_init(struct cpufreq_policy *policy)
sh_freqs
[
SH_FREQ_MIN
].
frequency
=
min_freq
;
/* cpuinfo and default policy values */
policy
->
policy
=
CPUFREQ_POLICY_PERFORMANCE
;
policy
->
governor
=
CPUFREQ_DEFAULT_GOVERNOR
;
policy
->
cpuinfo
.
transition_latency
=
CPUFREQ_ETERNAL
;
policy
->
cur
=
max_freq
;
...
...
arch/sparc64/kernel/us2e_cpufreq.c
View file @
bcf41bfd
...
...
@@ -309,7 +309,7 @@ static int __init us2e_freq_cpu_init(struct cpufreq_policy *policy)
table
[
2
].
index
=
5
;
table
[
3
].
frequency
=
CPUFREQ_TABLE_END
;
policy
->
policy
=
CPUFREQ_POLICY_PERFORMANCE
;
policy
->
governor
=
CPUFREQ_DEFAULT_GOVERNOR
;
policy
->
cpuinfo
.
transition_latency
=
0
;
policy
->
cur
=
clock_tick
;
...
...
arch/sparc64/kernel/us3_cpufreq.c
View file @
bcf41bfd
...
...
@@ -163,7 +163,7 @@ static int __init us3_freq_cpu_init(struct cpufreq_policy *policy)
table
[
3
].
index
=
0
;
table
[
3
].
frequency
=
CPUFREQ_TABLE_END
;
policy
->
policy
=
CPUFREQ_POLICY_PERFORMANCE
;
policy
->
governor
=
CPUFREQ_DEFAULT_GOVERNOR
;
policy
->
cpuinfo
.
transition_latency
=
0
;
policy
->
cur
=
clock_tick
;
...
...
drivers/cpufreq/Kconfig
View file @
bcf41bfd
...
...
@@ -10,9 +10,54 @@ config CPU_FREQ_PROC_INTF
If in doubt, say N.
choice
prompt "Default CPUFreq governor"
depends on CPU_FREQ
default CPU_FREQ_DEFAULT_GOV_PERFORMANCE
help
This option sets which CPUFreq governor shall be loaded at
startup. If in doubt, select 'performance'.
config CPU_FREQ_DEFAULT_GOV_PERFORMANCE
bool "performance"
select CPU_FREQ_GOV_PERFORMANCE
help
Use the CPUFreq governor 'performance' as default. This sets
the frequency statically to the highest frequency supported by
the CPU.
config CPU_FREQ_DEFAULT_GOV_USERSPACE
bool "userspace"
select CPU_FREQ_GOV_USERSPACE
help
Use the CPUFreq governor 'userspace' as default. This allows
you to set the CPU frequency manually or when an userspace
programm shall be able to set the CPU dynamically without having
to enable the userspace governor manually.
endchoice
config CPU_FREQ_GOV_PERFORMANCE
tristate "'performance' governor"
depends on CPU_FREQ
help
This cpufreq governors set the frequency statically to the
highest available CPU frequency.
If in doubt, say Y.
config CPU_FREQ_GOV_POWERSAVE
tristate "'powersave' governor"
depends on CPU_FREQ
help
Theis cpufreq governors set the frequency statically to the
lowest available CPU frequency.
If in doubt, say Y.
config CPU_FREQ_GOV_USERSPACE
tristate "'userspace' governor for userspace frequency scaling"
depends on CPU_FREQ
depends on CPU_FREQ
help
Enable this cpufreq governor when you either want to set the
CPU frequency manually or when an userspace programm shall
...
...
drivers/cpufreq/Makefile
View file @
bcf41bfd
# CPUfreq core
obj-$(CONFIG_CPU_FREQ)
+=
cpufreq.o
# CPUfreq governors
obj-$(CONFIG_CPU_FREQ_GOV_USERSPACE)
+=
userspace.o
obj-$(CONFIG_CPU_FREQ_GOV_PERFORMANCE)
+=
cpufreq_performance.o
obj-$(CONFIG_CPU_FREQ_GOV_POWERSAVE)
+=
cpufreq_powersave.o
obj-$(CONFIG_CPU_FREQ_GOV_USERSPACE)
+=
cpufreq_userspace.o
# CPUfreq cross-arch helpers
obj-$(CONFIG_CPU_FREQ_TABLE)
+=
freq_table.o
...
...
kernel
/cpufreq.c
→
drivers/cpufreq
/cpufreq.c
View file @
bcf41bfd
...
...
@@ -109,13 +109,18 @@ static void cpufreq_cpu_put(struct cpufreq_policy *data)
int
cpufreq_parse_governor
(
char
*
str_governor
,
unsigned
int
*
policy
,
struct
cpufreq_governor
**
governor
)
{
if
(
!
strnicmp
(
str_governor
,
"performance"
,
CPUFREQ_NAME_LEN
))
{
*
policy
=
CPUFREQ_POLICY_PERFORMANCE
;
return
0
;
}
else
if
(
!
strnicmp
(
str_governor
,
"powersave"
,
CPUFREQ_NAME_LEN
))
{
*
policy
=
CPUFREQ_POLICY_POWERSAVE
;
return
0
;
}
else
{
if
(
!
cpufreq_driver
)
return
-
EINVAL
;
if
(
cpufreq_driver
->
setpolicy
)
{
if
(
!
strnicmp
(
str_governor
,
"performance"
,
CPUFREQ_NAME_LEN
))
{
*
policy
=
CPUFREQ_POLICY_PERFORMANCE
;
return
0
;
}
else
if
(
!
strnicmp
(
str_governor
,
"powersave"
,
CPUFREQ_NAME_LEN
))
{
*
policy
=
CPUFREQ_POLICY_POWERSAVE
;
return
0
;
}
return
-
EINVAL
;
}
else
{
struct
cpufreq_governor
*
t
;
down
(
&
cpufreq_governor_sem
);
if
(
!
cpufreq_driver
||
!
cpufreq_driver
->
target
)
...
...
@@ -123,7 +128,6 @@ int cpufreq_parse_governor (char *str_governor, unsigned int *policy,
list_for_each_entry
(
t
,
&
cpufreq_governor_list
,
governor_list
)
{
if
(
!
strnicmp
(
str_governor
,
t
->
name
,
CPUFREQ_NAME_LEN
))
{
*
governor
=
t
;
*
policy
=
CPUFREQ_POLICY_GOVERNOR
;
up
(
&
cpufreq_governor_sem
);
return
0
;
}
...
...
@@ -190,16 +194,13 @@ store_one(scaling_max_freq,max);
*/
static
ssize_t
show_scaling_governor
(
struct
cpufreq_policy
*
policy
,
char
*
buf
)
{
switch
(
policy
->
policy
)
{
case
CPUFREQ_POLICY_POWERSAVE
:
if
(
policy
->
policy
==
CPUFREQ_POLICY_POWERSAVE
)
return
sprintf
(
buf
,
"powersave
\n
"
);
case
CPUFREQ_POLICY_PERFORMANCE
:
else
if
(
policy
->
policy
==
CPUFREQ_POLICY_PERFORMANCE
)
return
sprintf
(
buf
,
"performance
\n
"
);
case
CPUFREQ_POLICY_GOVERNOR
:
else
if
(
policy
->
governor
)
return
snprintf
(
buf
,
CPUFREQ_NAME_LEN
,
"%s
\n
"
,
policy
->
governor
->
name
);
default:
return
-
EINVAL
;
}
return
-
EINVAL
;
}
...
...
@@ -246,15 +247,15 @@ static ssize_t show_scaling_available_governors (struct cpufreq_policy * policy,
ssize_t
i
=
0
;
struct
cpufreq_governor
*
t
;
i
+=
sprintf
(
buf
,
"performance powersave"
);
if
(
!
cpufreq_driver
->
target
)
if
(
!
cpufreq_driver
->
target
)
{
i
+=
sprintf
(
buf
,
"performance powersave"
);
goto
out
;
}
list_for_each_entry
(
t
,
&
cpufreq_governor_list
,
governor_list
)
{
if
(
i
>=
(
ssize_t
)
((
PAGE_SIZE
/
sizeof
(
char
))
-
(
CPUFREQ_NAME_LEN
+
2
)))
goto
out
;
i
+=
snprintf
(
&
buf
[
i
],
CPUFREQ_NAME_LEN
,
"
%s
"
,
t
->
name
);
i
+=
snprintf
(
&
buf
[
i
],
CPUFREQ_NAME_LEN
,
"
%s
"
,
t
->
name
);
}
out:
i
+=
sprintf
(
&
buf
[
i
],
"
\n
"
);
...
...
@@ -396,10 +397,12 @@ static int cpufreq_add_dev (struct sys_device * sys_dev)
spin_lock_irqsave
(
&
cpufreq_driver_lock
,
flags
);
cpufreq_cpu_data
[
cpu
]
=
policy
;
spin_unlock_irqrestore
(
&
cpufreq_driver_lock
,
flags
);
policy
->
governor
=
NULL
;
/* to assure that the starting sequence is
* run in cpufreq_set_policy */
up
(
&
policy
->
lock
);
/* set default policy */
ret
=
cpufreq_set_policy
(
&
new_policy
);
if
(
ret
)
goto
err_out_unregister
;
...
...
@@ -492,6 +495,13 @@ static int cpufreq_resume(struct sys_device * sysdev)
if
(
!
cpu_policy
)
return
-
EINVAL
;
if
(
cpufreq_driver
->
resume
)
ret
=
cpufreq_driver
->
resume
(
cpu_policy
);
if
(
ret
)
{
printk
(
KERN_ERR
"cpufreq: resume failed in ->resume step on CPU %u
\n
"
,
cpu_policy
->
cpu
);
goto
out
;
}
if
(
cpufreq_driver
->
setpolicy
)
ret
=
cpufreq_driver
->
setpolicy
(
cpu_policy
);
else
...
...
@@ -500,6 +510,12 @@ static int cpufreq_resume(struct sys_device * sysdev)
*/
ret
=
cpufreq_driver
->
target
(
cpu_policy
,
cpu_policy
->
cur
,
CPUFREQ_RELATION_H
);
if
(
ret
)
{
printk
(
KERN_ERR
"cpufreq: resume failed in ->setpolicy/target step on CPU %u
\n
"
,
cpu_policy
->
cpu
);
goto
out
;
}
out:
cpufreq_cpu_put
(
cpu_policy
);
return
ret
;
...
...
@@ -622,33 +638,18 @@ EXPORT_SYMBOL_GPL(cpufreq_driver_target);
static
int
__cpufreq_governor
(
struct
cpufreq_policy
*
policy
,
unsigned
int
event
)
{
int
ret
=
0
;
int
ret
=
-
EINVAL
;
switch
(
policy
->
policy
)
{
case
CPUFREQ_POLICY_POWERSAVE
:
if
((
event
==
CPUFREQ_GOV_LIMITS
)
||
(
event
==
CPUFREQ_GOV_START
))
{
ret
=
__cpufreq_driver_target
(
policy
,
policy
->
min
,
CPUFREQ_RELATION_L
);
}
break
;
case
CPUFREQ_POLICY_PERFORMANCE
:
if
((
event
==
CPUFREQ_GOV_LIMITS
)
||
(
event
==
CPUFREQ_GOV_START
))
{
ret
=
__cpufreq_driver_target
(
policy
,
policy
->
max
,
CPUFREQ_RELATION_H
);
}
break
;
case
CPUFREQ_POLICY_GOVERNOR
:
ret
=
-
EINVAL
;
if
(
!
try_module_get
(
policy
->
governor
->
owner
))
break
;
ret
=
policy
->
governor
->
governor
(
policy
,
event
);
/* we keep one module reference alive for each CPU governed by this CPU */
if
((
event
!=
CPUFREQ_GOV_START
)
||
ret
)
module_put
(
policy
->
governor
->
owner
);
if
((
event
==
CPUFREQ_GOV_STOP
)
&&
!
ret
)
module_put
(
policy
->
governor
->
owner
);
break
;
default:
ret
=
-
EINVAL
;
}
if
(
!
try_module_get
(
policy
->
governor
->
owner
))
return
-
EINVAL
;
ret
=
policy
->
governor
->
governor
(
policy
,
event
);
/* we keep one module reference alive for each CPU governed by this CPU */
if
((
event
!=
CPUFREQ_GOV_START
)
||
ret
)
module_put
(
policy
->
governor
->
owner
);
if
((
event
==
CPUFREQ_GOV_STOP
)
&&
!
ret
)
module_put
(
policy
->
governor
->
owner
);
return
ret
;
}
...
...
@@ -680,11 +681,6 @@ int cpufreq_register_governor(struct cpufreq_governor *governor)
if
(
!
governor
)
return
-
EINVAL
;
if
(
!
strnicmp
(
governor
->
name
,
"powersave"
,
CPUFREQ_NAME_LEN
))
return
-
EBUSY
;
if
(
!
strnicmp
(
governor
->
name
,
"performance"
,
CPUFREQ_NAME_LEN
))
return
-
EBUSY
;
down
(
&
cpufreq_governor_sem
);
list_for_each_entry
(
t
,
&
cpufreq_governor_list
,
governor_list
)
{
...
...
@@ -808,23 +804,24 @@ int cpufreq_set_policy(struct cpufreq_policy *policy)
data
->
policy
=
policy
->
policy
;
ret
=
cpufreq_driver
->
setpolicy
(
policy
);
}
else
{
if
((
policy
->
policy
!=
data
->
policy
)
||
((
policy
->
policy
==
CPUFREQ_POLICY_GOVERNOR
)
&&
(
policy
->
governor
!=
data
->
governor
)))
{
if
(
policy
->
governor
!=
data
->
governor
)
{
/* save old, working values */
unsigned
int
old_pol
=
data
->
policy
;
struct
cpufreq_governor
*
old_gov
=
data
->
governor
;
/* end old governor */
__cpufreq_governor
(
data
,
CPUFREQ_GOV_STOP
);
if
(
data
->
governor
)
__cpufreq_governor
(
data
,
CPUFREQ_GOV_STOP
);
/* start new governor */
data
->
policy
=
policy
->
policy
;
data
->
governor
=
policy
->
governor
;
if
(
__cpufreq_governor
(
data
,
CPUFREQ_GOV_START
))
{
/* new governor failed, so re-start old one */
data
->
policy
=
old_pol
;
data
->
governor
=
old_gov
;
__cpufreq_governor
(
data
,
CPUFREQ_GOV_START
);
if
(
old_gov
)
{
data
->
governor
=
old_gov
;
__cpufreq_governor
(
data
,
CPUFREQ_GOV_START
);
}
ret
=
-
EINVAL
;
goto
error_out
;
}
/* might be a policy change, too, so fall through */
}
...
...
drivers/cpufreq/cpufreq_performance.c
0 → 100644
View file @
bcf41bfd
/*
* linux/drivers/cpufreq/cpufreq_performance.c
*
* Copyright (C) 2002 - 2003 Dominik Brodowski <linux@brodo.de>
*
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
*/
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/cpufreq.h>
#include <linux/init.h>
static
int
cpufreq_governor_performance
(
struct
cpufreq_policy
*
policy
,
unsigned
int
event
)
{
switch
(
event
)
{
case
CPUFREQ_GOV_START
:
case
CPUFREQ_GOV_LIMITS
:
__cpufreq_driver_target
(
policy
,
policy
->
max
,
CPUFREQ_RELATION_H
);
break
;
default:
break
;
}
return
0
;
}
struct
cpufreq_governor
cpufreq_gov_performance
=
{
.
name
=
"performance"
,
.
governor
=
cpufreq_governor_performance
,
.
owner
=
THIS_MODULE
,
};
EXPORT_SYMBOL
(
cpufreq_gov_performance
);
static
int
__init
cpufreq_gov_performance_init
(
void
)
{
return
cpufreq_register_governor
(
&
cpufreq_gov_performance
);
}
static
void
__exit
cpufreq_gov_performance_exit
(
void
)
{
cpufreq_unregister_governor
(
&
cpufreq_gov_performance
);
}
MODULE_AUTHOR
(
"Dominik Brodowski <linux@brodo.de>"
);
MODULE_DESCRIPTION
(
"CPUfreq policy governor 'performance'"
);
MODULE_LICENSE
(
"GPL"
);
fs_initcall
(
cpufreq_gov_performance_init
);
module_exit
(
cpufreq_gov_performance_exit
);
drivers/cpufreq/cpufreq_powersave.c
0 → 100644
View file @
bcf41bfd
/*
* linux/drivers/cpufreq/cpufreq_powersave.c
*
* Copyright (C) 2002 - 2003 Dominik Brodowski <linux@brodo.de>
*
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
*/
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/cpufreq.h>
#include <linux/init.h>
static
int
cpufreq_governor_powersave
(
struct
cpufreq_policy
*
policy
,
unsigned
int
event
)
{
switch
(
event
)
{
case
CPUFREQ_GOV_START
:
case
CPUFREQ_GOV_LIMITS
:
__cpufreq_driver_target
(
policy
,
policy
->
min
,
CPUFREQ_RELATION_L
);
break
;
default:
break
;
}
return
0
;
}
static
struct
cpufreq_governor
cpufreq_gov_powersave
=
{
.
name
=
"powersave"
,
.
governor
=
cpufreq_governor_powersave
,
.
owner
=
THIS_MODULE
,
};
static
int
__init
cpufreq_gov_powersave_init
(
void
)
{
return
cpufreq_register_governor
(
&
cpufreq_gov_powersave
);
}
static
void
__exit
cpufreq_gov_powersave_exit
(
void
)
{
cpufreq_unregister_governor
(
&
cpufreq_gov_powersave
);
}
MODULE_AUTHOR
(
"Dominik Brodowski <linux@brodo.de>"
);
MODULE_DESCRIPTION
(
"CPUfreq policy governor 'powersave'"
);
MODULE_LICENSE
(
"GPL"
);
module_init
(
cpufreq_gov_powersave_init
);
module_exit
(
cpufreq_gov_powersave_exit
);
drivers/cpufreq/userspace.c
→
drivers/cpufreq/
cpufreq_
userspace.c
View file @
bcf41bfd
...
...
@@ -498,9 +498,9 @@ static int cpufreq_governor_userspace(struct cpufreq_policy *policy,
unsigned
int
cpu
=
policy
->
cpu
;
switch
(
event
)
{
case
CPUFREQ_GOV_START
:
if
((
!
cpu_online
(
cpu
))
||
(
!
try_module_get
(
THIS_MODULE
))
||
!
policy
->
cur
)
if
((
!
cpu_online
(
cpu
))
||
(
!
try_module_get
(
THIS_MODULE
)))
return
-
EINVAL
;
BUG_ON
(
!
policy
->
cur
);
down
(
&
userspace_sem
);
cpu_is_managed
[
cpu
]
=
1
;
cpu_min_freq
[
cpu
]
=
policy
->
min
;
...
...
@@ -551,7 +551,7 @@ static void cpufreq_sa11x0_compat(void)
#endif
st
atic
st
ruct
cpufreq_governor
cpufreq_gov_userspace
=
{
struct
cpufreq_governor
cpufreq_gov_userspace
=
{
.
name
=
"userspace"
,
.
governor
=
cpufreq_governor_userspace
,
.
owner
=
THIS_MODULE
,
...
...
@@ -587,5 +587,5 @@ MODULE_AUTHOR ("Dominik Brodowski <linux@brodo.de>, Russell King <rmk@arm.linux.
MODULE_DESCRIPTION
(
"CPUfreq policy governor 'userspace'"
);
MODULE_LICENSE
(
"GPL"
);
module_init
(
cpufreq_gov_userspace_init
);
fs_initcall
(
cpufreq_gov_userspace_init
);
module_exit
(
cpufreq_gov_userspace_exit
);
drivers/cpufreq/proc_intf.c
View file @
bcf41bfd
...
...
@@ -126,20 +126,20 @@ static int cpufreq_proc_read (
p
+=
sprintf
(
p
,
"CPU%3d %9d kHz (%3d %%) - %9d kHz (%3d %%) - "
,
i
,
policy
.
min
,
min_pctg
,
policy
.
max
,
max_pctg
);
switch
(
policy
.
policy
)
{
case
CPUFREQ_POLICY_POWERSAVE
:
p
+=
sprintf
(
p
,
"powersave
\n
"
);
break
;
case
CPUFREQ_POLICY_PERFORMANCE
:
p
+=
sprintf
(
p
,
"performance
\n
"
);
break
;
case
CPUFREQ_POLICY_GOVERNOR
:
if
(
policy
.
policy
)
{
switch
(
policy
.
policy
)
{
case
CPUFREQ_POLICY_POWERSAVE
:
p
+=
sprintf
(
p
,
"powersave
\n
"
);
break
;
case
CPUFREQ_POLICY_PERFORMANCE
:
p
+=
sprintf
(
p
,
"performance
\n
"
);
break
;
default:
p
+=
sprintf
(
p
,
"INVALID
\n
"
);
break
;
}
}
else
p
+=
snprintf
(
p
,
CPUFREQ_NAME_LEN
,
"%s
\n
"
,
policy
.
governor
->
name
);
break
;
default:
p
+=
sprintf
(
p
,
"INVALID
\n
"
);
break
;
}
}
end:
len
=
(
p
-
page
);
...
...
include/linux/cpufreq.h
View file @
bcf41bfd
...
...
@@ -36,11 +36,13 @@ int cpufreq_unregister_notifier(struct notifier_block *nb, unsigned int list);
#define CPUFREQ_POLICY_NOTIFIER (1)
/********************** cpufreq policy notifiers *********************/
/* if (cpufreq_driver->target) exists, the ->governor decides what frequency
* within the limits is used. If (cpufreq_driver->setpolicy> exists, these
* two generic policies are available:
*/
#define CPUFREQ_POLICY_POWERSAVE (1)
#define CPUFREQ_POLICY_PERFORMANCE (2)
#define CPUFREQ_POLICY_GOVERNOR (3)
/* Frequency values here are CPU kHz so that hardware which doesn't run
* with some frequencies can complain without having to guess what per
...
...
@@ -151,6 +153,7 @@ int cpufreq_governor(unsigned int cpu, unsigned int event);
int
cpufreq_register_governor
(
struct
cpufreq_governor
*
governor
);
void
cpufreq_unregister_governor
(
struct
cpufreq_governor
*
governor
);
/*********************************************************************
* CPUFREQ DRIVER INTERFACE *
*********************************************************************/
...
...
@@ -176,6 +179,7 @@ struct cpufreq_driver {
/* optional */
int
(
*
exit
)
(
struct
cpufreq_policy
*
policy
);
int
(
*
resume
)
(
struct
cpufreq_policy
*
policy
);
struct
freq_attr
**
attr
;
};
...
...
@@ -221,7 +225,6 @@ int cpufreq_parse_governor (char *str_governor, unsigned int *policy, struct cpu
/*********************************************************************
* CPUFREQ USERSPACE GOVERNOR *
*********************************************************************/
extern
struct
cpufreq_governor
cpufreq_gov_userspace
;
int
cpufreq_gov_userspace_init
(
void
);
int
cpufreq_setmax
(
unsigned
int
cpu
);
...
...
@@ -279,6 +282,19 @@ enum {
#endif
/* CONFIG_CPU_FREQ_GOV_USERSPACE */
/*********************************************************************
* CPUFREQ DEFAULT GOVERNOR *
*********************************************************************/
#ifdef CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE
extern
struct
cpufreq_governor
cpufreq_gov_performance
;
#define CPUFREQ_DEFAULT_GOVERNOR &cpufreq_gov_performance
#elif CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE
extern
struct
cpufreq_governor
cpufreq_gov_userspace
;
#define CPUFREQ_DEFAULT_GOVERNOR &cpufreq_gov_userspace
#endif
/*********************************************************************
* FREQUENCY TABLE HELPERS *
*********************************************************************/
...
...
kernel/Makefile
View file @
bcf41bfd
...
...
@@ -15,7 +15,6 @@ obj-$(CONFIG_UID16) += uid16.o
obj-$(CONFIG_MODULES)
+=
ksyms.o module.o
obj-$(CONFIG_KALLSYMS)
+=
kallsyms.o
obj-$(CONFIG_PM)
+=
power/
obj-$(CONFIG_CPU_FREQ)
+=
cpufreq.o
obj-$(CONFIG_BSD_PROCESS_ACCT)
+=
acct.o
obj-$(CONFIG_COMPAT)
+=
compat.o
obj-$(CONFIG_IKCONFIG)
+=
configs.o
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment