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
Kirill Smelkov
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