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
d5eef605
Commit
d5eef605
authored
Jun 06, 2003
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge
bk://linux-dj.bkbits.net/cpufreq
into home.transmeta.com:/home/torvalds/v2.5/linux
parents
ea9fcb21
9f43b3a6
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
85 additions
and
45 deletions
+85
-45
arch/i386/kernel/cpu/cpufreq/acpi.c
arch/i386/kernel/cpu/cpufreq/acpi.c
+29
-11
arch/i386/kernel/cpu/cpufreq/longrun.c
arch/i386/kernel/cpu/cpufreq/longrun.c
+0
-1
arch/i386/kernel/cpu/cpufreq/powernow-k6.c
arch/i386/kernel/cpu/cpufreq/powernow-k6.c
+0
-1
arch/i386/kernel/cpu/cpufreq/powernow-k7.c
arch/i386/kernel/cpu/cpufreq/powernow-k7.c
+36
-18
arch/i386/kernel/dmi_scan.c
arch/i386/kernel/dmi_scan.c
+2
-0
drivers/acpi/processor.c
drivers/acpi/processor.c
+5
-2
drivers/cpufreq/proc_intf.c
drivers/cpufreq/proc_intf.c
+1
-4
kernel/cpufreq.c
kernel/cpufreq.c
+12
-8
No files found.
arch/i386/kernel/cpu/cpufreq/acpi.c
View file @
d5eef605
...
@@ -553,8 +553,9 @@ acpi_cpufreq_cpu_init (
...
@@ -553,8 +553,9 @@ acpi_cpufreq_cpu_init (
{
{
unsigned
int
i
;
unsigned
int
i
;
unsigned
int
cpu
=
policy
->
cpu
;
unsigned
int
cpu
=
policy
->
cpu
;
struct
acpi_processor
*
pr
=
NULL
;
struct
acpi_processor
*
pr
=
NULL
;
struct
acpi_processor_performance
*
perf
=
&
performance
[
policy
->
cpu
];
struct
acpi_processor_performance
*
perf
=
&
performance
[
policy
->
cpu
];
struct
acpi_device
*
device
;
unsigned
int
result
=
0
;
unsigned
int
result
=
0
;
ACPI_FUNCTION_TRACE
(
"acpi_cpufreq_cpu_init"
);
ACPI_FUNCTION_TRACE
(
"acpi_cpufreq_cpu_init"
);
...
@@ -596,6 +597,17 @@ acpi_cpufreq_cpu_init (
...
@@ -596,6 +597,17 @@ acpi_cpufreq_cpu_init (
acpi_cpufreq_add_file
(
pr
);
acpi_cpufreq_add_file
(
pr
);
if
(
acpi_bus_get_device
(
pr
->
handle
,
&
device
))
device
=
NULL
;
printk
(
KERN_INFO
"cpufreq: %s - ACPI performance management activated.
\n
"
,
device
?
acpi_device_bid
(
device
)
:
"CPU??"
);
for
(
i
=
0
;
i
<
pr
->
performance
->
state_count
;
i
++
)
printk
(
KERN_INFO
"cpufreq: %cP%d: %d MHz, %d mW, %d uS
\n
"
,
(
i
==
pr
->
performance
->
state
?
'*'
:
' '
),
i
,
(
u32
)
pr
->
performance
->
states
[
i
].
core_frequency
,
(
u32
)
pr
->
performance
->
states
[
i
].
power
,
(
u32
)
pr
->
performance
->
states
[
i
].
transition_latency
);
return_VALUE
(
result
);
return_VALUE
(
result
);
}
}
...
@@ -658,16 +670,21 @@ acpi_cpufreq_init (void)
...
@@ -658,16 +670,21 @@ acpi_cpufreq_init (void)
/* test it on one CPU */
/* test it on one CPU */
for
(
i
=
0
;
i
<
NR_CPUS
;
i
++
)
{
for
(
i
=
0
;
i
<
NR_CPUS
;
i
++
)
{
if
(
cpu_online
(
i
))
if
(
!
cpu_online
(
i
))
continue
;
continue
;
pr
=
performance
[
i
].
pr
;
pr
=
performance
[
i
].
pr
;
if
(
pr
&&
pr
->
flags
.
performance
)
if
(
pr
&&
pr
->
flags
.
performance
)
goto
found_capable_cpu
;
goto
found_capable_cpu
;
}
}
result
=
-
ENODEV
;
result
=
-
ENODEV
;
goto
err
;
goto
err
0
;
found_capable_cpu:
found_capable_cpu:
result
=
cpufreq_register_driver
(
&
acpi_cpufreq_driver
);
if
(
result
)
goto
err0
;
perf
=
pr
->
performance
;
perf
=
pr
->
performance
;
current_state
=
perf
->
state
;
current_state
=
perf
->
state
;
...
@@ -676,7 +693,7 @@ acpi_cpufreq_init (void)
...
@@ -676,7 +693,7 @@ acpi_cpufreq_init (void)
if
(
result
)
{
if
(
result
)
{
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
"Disabled P-States due to failure while switching.
\n
"
));
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
"Disabled P-States due to failure while switching.
\n
"
));
result
=
-
ENODEV
;
result
=
-
ENODEV
;
goto
err
;
goto
err
1
;
}
}
}
}
...
@@ -684,7 +701,7 @@ acpi_cpufreq_init (void)
...
@@ -684,7 +701,7 @@ acpi_cpufreq_init (void)
if
(
result
)
{
if
(
result
)
{
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
"Disabled P-States due to failure while switching.
\n
"
));
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
"Disabled P-States due to failure while switching.
\n
"
));
result
=
-
ENODEV
;
result
=
-
ENODEV
;
goto
err
;
goto
err
1
;
}
}
if
(
current_state
!=
0
)
{
if
(
current_state
!=
0
)
{
...
@@ -692,18 +709,17 @@ acpi_cpufreq_init (void)
...
@@ -692,18 +709,17 @@ acpi_cpufreq_init (void)
if
(
result
)
{
if
(
result
)
{
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
"Disabled P-States due to failure while switching.
\n
"
));
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
"Disabled P-States due to failure while switching.
\n
"
));
result
=
-
ENODEV
;
result
=
-
ENODEV
;
goto
err
;
goto
err
1
;
}
}
}
}
result
=
cpufreq_register_driver
(
&
acpi_cpufreq_driver
);
if
(
result
)
goto
err
;
return_VALUE
(
0
);
return_VALUE
(
0
);
/* error handling */
/* error handling */
err:
err1:
cpufreq_unregister_driver
(
&
acpi_cpufreq_driver
);
err0:
/* unregister struct acpi_processor_performance performance */
/* unregister struct acpi_processor_performance performance */
for
(
i
=
0
;
i
<
NR_CPUS
;
i
++
)
{
for
(
i
=
0
;
i
<
NR_CPUS
;
i
++
)
{
if
(
performance
[
i
].
pr
)
{
if
(
performance
[
i
].
pr
)
{
...
@@ -713,6 +729,8 @@ acpi_cpufreq_init (void)
...
@@ -713,6 +729,8 @@ acpi_cpufreq_init (void)
}
}
}
}
kfree
(
performance
);
kfree
(
performance
);
printk
(
KERN_INFO
"cpufreq: No CPUs supporting ACPI performance management found.
\n
"
);
return_VALUE
(
result
);
return_VALUE
(
result
);
}
}
...
...
arch/i386/kernel/cpu/cpufreq/longrun.c
View file @
d5eef605
...
@@ -224,7 +224,6 @@ static unsigned int __init longrun_determine_freqs(unsigned int *low_freq,
...
@@ -224,7 +224,6 @@ static unsigned int __init longrun_determine_freqs(unsigned int *low_freq,
static
int
longrun_cpu_init
(
struct
cpufreq_policy
*
policy
)
static
int
longrun_cpu_init
(
struct
cpufreq_policy
*
policy
)
{
{
int
result
=
0
;
int
result
=
0
;
struct
cpuinfo_x86
*
c
=
cpu_data
;
/* capability check */
/* capability check */
if
(
policy
->
cpu
!=
0
)
if
(
policy
->
cpu
!=
0
)
...
...
arch/i386/kernel/cpu/cpufreq/powernow-k6.c
View file @
d5eef605
...
@@ -142,7 +142,6 @@ static int powernow_k6_target (struct cpufreq_policy *policy,
...
@@ -142,7 +142,6 @@ static int powernow_k6_target (struct cpufreq_policy *policy,
static
int
powernow_k6_cpu_init
(
struct
cpufreq_policy
*
policy
)
static
int
powernow_k6_cpu_init
(
struct
cpufreq_policy
*
policy
)
{
{
struct
cpuinfo_x86
*
c
=
cpu_data
;
unsigned
int
i
;
unsigned
int
i
;
if
(
policy
->
cpu
!=
0
)
if
(
policy
->
cpu
!=
0
)
...
...
arch/i386/kernel/cpu/cpufreq/powernow-k7.c
View file @
d5eef605
...
@@ -208,13 +208,38 @@ static int get_ranges (unsigned char *pst)
...
@@ -208,13 +208,38 @@ static int get_ranges (unsigned char *pst)
}
}
static
void
change_FID
(
int
fid
)
{
union
msr_fidvidctl
fidvidctl
;
if
(
fidvidctl
.
bits
.
FID
!=
fid
)
{
rdmsrl
(
MSR_K7_FID_VID_CTL
,
fidvidctl
.
val
);
fidvidctl
.
bits
.
SGTC
=
latency
;
fidvidctl
.
bits
.
FID
=
fid
;
fidvidctl
.
bits
.
FIDC
=
1
;
wrmsrl
(
MSR_K7_FID_VID_CTL
,
fidvidctl
.
val
);
}
}
static
void
change_VID
(
int
vid
)
{
union
msr_fidvidctl
fidvidctl
;
if
(
fidvidctl
.
bits
.
VID
!=
vid
)
{
rdmsrl
(
MSR_K7_FID_VID_CTL
,
fidvidctl
.
val
);
fidvidctl
.
bits
.
VID
=
vid
;
fidvidctl
.
bits
.
VIDC
=
1
;
wrmsrl
(
MSR_K7_FID_VID_CTL
,
fidvidctl
.
val
);
}
}
static
void
change_speed
(
unsigned
int
index
)
static
void
change_speed
(
unsigned
int
index
)
{
{
u8
fid
,
vid
;
u8
fid
,
vid
;
struct
cpufreq_freqs
freqs
;
struct
cpufreq_freqs
freqs
;
union
msr_fidvidstatus
fidvidstatus
;
union
msr_fidvidstatus
fidvidstatus
;
union
msr_fidvidctl
fidvidctl
;
/* fid are the lower 8 bits of the index we stored into
/* fid are the lower 8 bits of the index we stored into
* the cpufreq frequency table in powernow_decode_bios,
* the cpufreq frequency table in powernow_decode_bios,
...
@@ -228,7 +253,6 @@ static void change_speed (unsigned int index)
...
@@ -228,7 +253,6 @@ static void change_speed (unsigned int index)
rdmsrl
(
MSR_K7_FID_VID_STATUS
,
fidvidstatus
.
val
);
rdmsrl
(
MSR_K7_FID_VID_STATUS
,
fidvidstatus
.
val
);
freqs
.
old
=
fsb
*
fid_codes
[
fidvidstatus
.
bits
.
CFID
]
*
100
;
freqs
.
old
=
fsb
*
fid_codes
[
fidvidstatus
.
bits
.
CFID
]
*
100
;
freqs
.
new
=
powernow_table
[
index
].
frequency
;
freqs
.
new
=
powernow_table
[
index
].
frequency
;
cpufreq_notify_transition
(
&
freqs
,
CPUFREQ_PRECHANGE
);
cpufreq_notify_transition
(
&
freqs
,
CPUFREQ_PRECHANGE
);
...
@@ -238,22 +262,16 @@ static void change_speed (unsigned int index)
...
@@ -238,22 +262,16 @@ static void change_speed (unsigned int index)
if
(
have_a0
==
1
)
/* A0 errata 5 */
if
(
have_a0
==
1
)
/* A0 errata 5 */
__asm__
(
"
\t
cli
\n
"
);
__asm__
(
"
\t
cli
\n
"
);
/* First change the frequency. */
if
(
freqs
.
old
>
freqs
.
new
)
{
if
(
fidvidctl
.
bits
.
FID
!=
fid
)
{
/* Going down, so change FID first */
rdmsrl
(
MSR_K7_FID_VID_CTL
,
fidvidctl
.
val
);
change_FID
(
fid
);
fidvidctl
.
bits
.
SGTC
=
latency
;
/* Stop grant timeout counter */
change_VID
(
vid
);
fidvidctl
.
bits
.
FID
=
fid
;
}
else
{
fidvidctl
.
bits
.
FIDC
=
1
;
/* Going up, so change VID first */
wrmsrl
(
MSR_K7_FID_VID_CTL
,
fidvidctl
.
val
);
change_VID
(
fid
);
}
change_FID
(
vid
);
/* Now change voltage. */
if
(
fidvidctl
.
bits
.
VID
!=
vid
)
{
rdmsrl
(
MSR_K7_FID_VID_CTL
,
fidvidctl
.
val
);
fidvidctl
.
bits
.
VID
=
vid
;
fidvidctl
.
bits
.
VIDC
=
1
;
wrmsrl
(
MSR_K7_FID_VID_CTL
,
fidvidctl
.
val
);
}
}
if
(
have_a0
==
1
)
if
(
have_a0
==
1
)
__asm__
(
"
\t
sti
\n
"
);
__asm__
(
"
\t
sti
\n
"
);
...
...
arch/i386/kernel/dmi_scan.c
View file @
d5eef605
...
@@ -12,6 +12,8 @@
...
@@ -12,6 +12,8 @@
#include <linux/bootmem.h>
#include <linux/bootmem.h>
unsigned
long
dmi_broken
;
unsigned
long
dmi_broken
;
EXPORT_SYMBOL
(
dmi_broken
);
int
is_sony_vaio_laptop
;
int
is_sony_vaio_laptop
;
int
is_unsafe_smbus
;
int
is_unsafe_smbus
;
...
...
drivers/acpi/processor.c
View file @
d5eef605
...
@@ -85,7 +85,7 @@ static int acpi_processor_info_open_fs(struct inode *inode, struct file *file);
...
@@ -85,7 +85,7 @@ static int acpi_processor_info_open_fs(struct inode *inode, struct file *file);
static
int
acpi_processor_throttling_open_fs
(
struct
inode
*
inode
,
struct
file
*
file
);
static
int
acpi_processor_throttling_open_fs
(
struct
inode
*
inode
,
struct
file
*
file
);
static
int
acpi_processor_power_open_fs
(
struct
inode
*
inode
,
struct
file
*
file
);
static
int
acpi_processor_power_open_fs
(
struct
inode
*
inode
,
struct
file
*
file
);
static
int
acpi_processor_limit_open_fs
(
struct
inode
*
inode
,
struct
file
*
file
);
static
int
acpi_processor_limit_open_fs
(
struct
inode
*
inode
,
struct
file
*
file
);
static
int
acpi_processor_get_limit_info
(
struct
acpi_processor
*
pr
);
static
struct
acpi_driver
acpi_processor_driver
=
{
static
struct
acpi_driver
acpi_processor_driver
=
{
.
name
=
ACPI_PROCESSOR_DRIVER_NAME
,
.
name
=
ACPI_PROCESSOR_DRIVER_NAME
,
...
@@ -769,7 +769,9 @@ acpi_processor_get_platform_limit (
...
@@ -769,7 +769,9 @@ acpi_processor_get_platform_limit (
}
}
pr
->
performance_platform_limit
=
(
int
)
ppc
;
pr
->
performance_platform_limit
=
(
int
)
ppc
;
acpi_processor_get_limit_info
(
pr
);
return_VALUE
(
0
);
return_VALUE
(
0
);
}
}
EXPORT_SYMBOL
(
acpi_processor_get_platform_limit
);
EXPORT_SYMBOL
(
acpi_processor_get_platform_limit
);
...
@@ -790,6 +792,7 @@ acpi_processor_register_performance (
...
@@ -790,6 +792,7 @@ acpi_processor_register_performance (
return_VALUE
(
-
EBUSY
);
return_VALUE
(
-
EBUSY
);
(
*
pr
)
->
performance
=
performance
;
(
*
pr
)
->
performance
=
performance
;
performance
->
pr
=
*
pr
;
return
0
;
return
0
;
}
}
EXPORT_SYMBOL
(
acpi_processor_register_performance
);
EXPORT_SYMBOL
(
acpi_processor_register_performance
);
...
...
drivers/cpufreq/proc_intf.c
View file @
d5eef605
...
@@ -209,10 +209,7 @@ static int __init cpufreq_proc_init (void)
...
@@ -209,10 +209,7 @@ static int __init cpufreq_proc_init (void)
{
{
struct
proc_dir_entry
*
entry
=
NULL
;
struct
proc_dir_entry
*
entry
=
NULL
;
if
(
!
cpufreq_driver
)
/* are these acceptable values? */
return
-
ENODEV
;
/* are these acceptable values? */
entry
=
create_proc_entry
(
"cpufreq"
,
S_IFREG
|
S_IRUGO
|
S_IWUSR
,
entry
=
create_proc_entry
(
"cpufreq"
,
S_IFREG
|
S_IRUGO
|
S_IWUSR
,
&
proc_root
);
&
proc_root
);
...
...
kernel/cpufreq.c
View file @
d5eef605
...
@@ -29,12 +29,9 @@
...
@@ -29,12 +29,9 @@
* level driver of CPUFreq support, and its locking mutex.
* level driver of CPUFreq support, and its locking mutex.
* cpu_max_freq is in kHz.
* cpu_max_freq is in kHz.
*/
*/
struct
cpufreq_driver
*
cpufreq_driver
;
st
atic
st
ruct
cpufreq_driver
*
cpufreq_driver
;
static
DECLARE_MUTEX
(
cpufreq_driver_sem
);
static
DECLARE_MUTEX
(
cpufreq_driver_sem
);
/* required for the proc interface, remove when that goes away */
EXPORT_SYMBOL_GPL
(
cpufreq_driver
);
/**
/**
* Two notifier lists: the "policy" list is involved in the
* Two notifier lists: the "policy" list is involved in the
* validation process for a new CPU frequency policy; the
* validation process for a new CPU frequency policy; the
...
@@ -54,10 +51,14 @@ static DECLARE_MUTEX (cpufreq_governor_sem);
...
@@ -54,10 +51,14 @@ static DECLARE_MUTEX (cpufreq_governor_sem);
static
struct
class_interface
cpufreq_interface
;
static
struct
class_interface
cpufreq_interface
;
static
int
cpufreq_cpu_get
(
unsigned
int
cpu
)
{
static
int
cpufreq_cpu_get
(
unsigned
int
cpu
)
{
if
(
cpu
>=
NR_CPUS
)
if
(
cpu
>=
NR_CPUS
)
return
0
;
return
0
;
if
(
!
cpufreq_driver
)
return
0
;
if
(
!
try_module_get
(
cpufreq_driver
->
owner
))
if
(
!
try_module_get
(
cpufreq_driver
->
owner
))
return
0
;
return
0
;
...
@@ -69,7 +70,8 @@ static int cpufreq_cpu_get(unsigned int cpu) {
...
@@ -69,7 +70,8 @@ static int cpufreq_cpu_get(unsigned int cpu) {
return
1
;
return
1
;
}
}
static
void
cpufreq_cpu_put
(
unsigned
int
cpu
)
{
static
void
cpufreq_cpu_put
(
unsigned
int
cpu
)
{
kobject_put
(
&
cpufreq_driver
->
policy
[
cpu
].
kobj
);
kobject_put
(
&
cpufreq_driver
->
policy
[
cpu
].
kobj
);
module_put
(
cpufreq_driver
->
owner
);
module_put
(
cpufreq_driver
->
owner
);
}
}
...
@@ -81,7 +83,8 @@ static void cpufreq_cpu_put(unsigned int cpu) {
...
@@ -81,7 +83,8 @@ static void cpufreq_cpu_put(unsigned int cpu) {
/**
/**
* cpufreq_parse_governor - parse a governor string
* cpufreq_parse_governor - parse a governor string
*/
*/
int
cpufreq_parse_governor
(
char
*
str_governor
,
unsigned
int
*
policy
,
struct
cpufreq_governor
**
governor
)
int
cpufreq_parse_governor
(
char
*
str_governor
,
unsigned
int
*
policy
,
struct
cpufreq_governor
**
governor
)
{
{
if
(
!
strnicmp
(
str_governor
,
"performance"
,
CPUFREQ_NAME_LEN
))
{
if
(
!
strnicmp
(
str_governor
,
"performance"
,
CPUFREQ_NAME_LEN
))
{
*
policy
=
CPUFREQ_POLICY_PERFORMANCE
;
*
policy
=
CPUFREQ_POLICY_PERFORMANCE
;
...
@@ -230,7 +233,8 @@ static ssize_t show_scaling_driver (struct cpufreq_policy * policy, char *buf)
...
@@ -230,7 +233,8 @@ static ssize_t show_scaling_driver (struct cpufreq_policy * policy, char *buf)
/**
/**
* show_scaling_available_governors - show the available CPUfreq governors
* show_scaling_available_governors - show the available CPUfreq governors
*/
*/
static
ssize_t
show_scaling_available_governors
(
struct
cpufreq_policy
*
policy
,
char
*
buf
)
static
ssize_t
show_scaling_available_governors
(
struct
cpufreq_policy
*
policy
,
char
*
buf
)
{
{
ssize_t
i
=
0
;
ssize_t
i
=
0
;
struct
cpufreq_governor
*
t
;
struct
cpufreq_governor
*
t
;
...
...
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