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
33ac02aa
Commit
33ac02aa
authored
Jul 29, 2005
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge master.kernel.org:/pub/scm/linux/kernel/git/davej/cpufreq
parents
e0d7ff16
2bcad935
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
38 additions
and
33 deletions
+38
-33
arch/i386/kernel/cpu/cpufreq/powernow-k8.c
arch/i386/kernel/cpu/cpufreq/powernow-k8.c
+17
-18
arch/i386/kernel/cpu/cpufreq/powernow-k8.h
arch/i386/kernel/cpu/cpufreq/powernow-k8.h
+19
-13
drivers/cpufreq/cpufreq.c
drivers/cpufreq/cpufreq.c
+2
-2
No files found.
arch/i386/kernel/cpu/cpufreq/powernow-k8.c
View file @
33ac02aa
/*
* (c) 2003, 2004 Advanced Micro Devices, Inc.
* (c) 2003, 2004
, 2005
Advanced Micro Devices, Inc.
* Your use of this code is subject to the terms and conditions of the
* GNU general public license version 2. See "COPYING" or
* http://www.gnu.org/licenses/gpl.html
...
...
@@ -44,7 +44,7 @@
#define PFX "powernow-k8: "
#define BFX PFX "BIOS error: "
#define VERSION "version 1.
40.2
"
#define VERSION "version 1.
50.3
"
#include "powernow-k8.h"
/* serialize freq changes */
...
...
@@ -231,7 +231,7 @@ static int write_new_vid(struct powernow_k8_data *data, u32 vid)
/*
* Reduce the vid by the max of step or reqvid.
* Decreasing vid codes represent increasing voltages:
* vid of 0 is 1.550V, vid of 0x1e is 0.800V, vid of
0x1f
is off.
* vid of 0 is 1.550V, vid of 0x1e is 0.800V, vid of
VID_OFF
is off.
*/
static
int
decrease_vid_code_by_step
(
struct
powernow_k8_data
*
data
,
u32
reqvid
,
u32
step
)
{
...
...
@@ -466,7 +466,7 @@ static int check_supported_cpu(unsigned int cpu)
eax
=
cpuid_eax
(
CPUID_PROCESSOR_SIGNATURE
);
if
(((
eax
&
CPUID_USE_XFAM_XMOD
)
!=
CPUID_USE_XFAM_XMOD
)
||
((
eax
&
CPUID_XFAM
)
!=
CPUID_XFAM_K8
)
||
((
eax
&
CPUID_XMOD
)
>
CPUID_XMOD_REV_
E
))
{
((
eax
&
CPUID_XMOD
)
>
CPUID_XMOD_REV_
F
))
{
printk
(
KERN_INFO
PFX
"Processor cpuid %x not supported
\n
"
,
eax
);
goto
out
;
}
...
...
@@ -695,6 +695,7 @@ static void powernow_k8_acpi_pst_values(struct powernow_k8_data *data, unsigned
data
->
irt
=
(
data
->
acpi_data
.
states
[
index
].
control
>>
IRT_SHIFT
)
&
IRT_MASK
;
data
->
rvo
=
(
data
->
acpi_data
.
states
[
index
].
control
>>
RVO_SHIFT
)
&
RVO_MASK
;
data
->
exttype
=
(
data
->
acpi_data
.
states
[
index
].
control
>>
EXT_TYPE_SHIFT
)
&
EXT_TYPE_MASK
;
data
->
plllock
=
(
data
->
acpi_data
.
states
[
index
].
control
>>
PLL_L_SHIFT
)
&
PLL_L_MASK
;
data
->
vidmvs
=
1
<<
((
data
->
acpi_data
.
states
[
index
].
control
>>
MVS_SHIFT
)
&
MVS_MASK
);
data
->
vstable
=
(
data
->
acpi_data
.
states
[
index
].
control
>>
VST_SHIFT
)
&
VST_MASK
;
...
...
@@ -734,8 +735,13 @@ static int powernow_k8_cpu_init_acpi(struct powernow_k8_data *data)
}
for
(
i
=
0
;
i
<
data
->
acpi_data
.
state_count
;
i
++
)
{
u32
fid
=
data
->
acpi_data
.
states
[
i
].
control
&
FID_MASK
;
u32
vid
=
(
data
->
acpi_data
.
states
[
i
].
control
>>
VID_SHIFT
)
&
VID_MASK
;
if
(
data
->
exttype
)
{
u32
fid
=
data
->
acpi_data
.
states
[
i
].
status
&
FID_MASK
;
u32
vid
=
(
data
->
acpi_data
.
states
[
i
].
status
>>
VID_SHIFT
)
&
VID_MASK
;
}
else
{
u32
fid
=
data
->
acpi_data
.
states
[
i
].
control
&
FID_MASK
;
u32
vid
=
(
data
->
acpi_data
.
states
[
i
].
control
>>
VID_SHIFT
)
&
VID_MASK
;
}
dprintk
(
" %d : fid 0x%x, vid 0x%x
\n
"
,
i
,
fid
,
vid
);
...
...
@@ -752,7 +758,7 @@ static int powernow_k8_cpu_init_acpi(struct powernow_k8_data *data)
}
/* verify voltage is OK - BIOSs are using "off" to indicate invalid */
if
(
vid
==
0x1f
)
{
if
(
vid
==
VID_OFF
)
{
dprintk
(
"invalid vid %u, ignoring
\n
"
,
vid
);
powernow_table
[
i
].
frequency
=
CPUFREQ_ENTRY_INVALID
;
continue
;
...
...
@@ -929,15 +935,6 @@ static int powernowk8_target(struct cpufreq_policy *pol, unsigned targfreq, unsi
down
(
&
fidvid_sem
);
for_each_cpu_mask
(
i
,
cpu_core_map
[
pol
->
cpu
])
{
/* make sure the sibling is initialized */
if
(
!
powernow_data
[
i
])
{
ret
=
0
;
up
(
&
fidvid_sem
);
goto
err_out
;
}
}
powernow_k8_acpi_pst_values
(
data
,
newstate
);
if
(
transition_frequency
(
data
,
newstate
))
{
...
...
@@ -977,7 +974,7 @@ static int __init powernowk8_cpu_init(struct cpufreq_policy *pol)
{
struct
powernow_k8_data
*
data
;
cpumask_t
oldmask
=
CPU_MASK_ALL
;
int
rc
;
int
rc
,
i
;
if
(
!
check_supported_cpu
(
pol
->
cpu
))
return
-
ENODEV
;
...
...
@@ -1063,7 +1060,9 @@ static int __init powernowk8_cpu_init(struct cpufreq_policy *pol)
printk
(
"cpu_init done, current fid 0x%x, vid 0x%x
\n
"
,
data
->
currfid
,
data
->
currvid
);
powernow_data
[
pol
->
cpu
]
=
data
;
for_each_cpu_mask
(
i
,
cpu_core_map
[
pol
->
cpu
])
{
powernow_data
[
i
]
=
data
;
}
return
0
;
...
...
arch/i386/kernel/cpu/cpufreq/powernow-k8.h
View file @
33ac02aa
/*
* (c) 2003, 2004 Advanced Micro Devices, Inc.
* (c) 2003, 2004
, 2005
Advanced Micro Devices, Inc.
* Your use of this code is subject to the terms and conditions of the
* GNU general public license version 2. See "COPYING" or
* http://www.gnu.org/licenses/gpl.html
...
...
@@ -19,6 +19,7 @@ struct powernow_k8_data {
u32
vidmvs
;
/* usable value calculated from mvs */
u32
vstable
;
/* voltage stabilization time, units 20 us */
u32
plllock
;
/* pll lock time, units 1 us */
u32
exttype
;
/* extended interface = 1 */
/* keep track of the current fid / vid */
u32
currvid
,
currfid
;
...
...
@@ -41,7 +42,7 @@ struct powernow_k8_data {
#define CPUID_XFAM 0x0ff00000
/* extended family */
#define CPUID_XFAM_K8 0
#define CPUID_XMOD 0x000f0000
/* extended model */
#define CPUID_XMOD_REV_
E 0x0002
0000
#define CPUID_XMOD_REV_
F 0x0004
0000
#define CPUID_USE_XFAM_XMOD 0x00000f00
#define CPUID_GET_MAX_CAPABILITIES 0x80000000
#define CPUID_FREQ_VOLT_CAPABILITIES 0x80000007
...
...
@@ -57,25 +58,26 @@ struct powernow_k8_data {
/* Field definitions within the FID VID Low Control MSR : */
#define MSR_C_LO_INIT_FID_VID 0x00010000
#define MSR_C_LO_NEW_VID 0x0000
1
f00
#define MSR_C_LO_NEW_FID 0x000000
2
f
#define MSR_C_LO_NEW_VID 0x0000
3
f00
#define MSR_C_LO_NEW_FID 0x000000
3
f
#define MSR_C_LO_VID_SHIFT 8
/* Field definitions within the FID VID High Control MSR : */
#define MSR_C_HI_STP_GNT_TO
0x000fffff
#define MSR_C_HI_STP_GNT_TO
0x000fffff
/* Field definitions within the FID VID Low Status MSR : */
#define MSR_S_LO_CHANGE_PENDING 0x80000000
/* cleared when completed */
#define MSR_S_LO_MAX_RAMP_VID 0x
1
f000000
#define MSR_S_LO_CHANGE_PENDING 0x80000000
/* cleared when completed */
#define MSR_S_LO_MAX_RAMP_VID 0x
3
f000000
#define MSR_S_LO_MAX_FID 0x003f0000
#define MSR_S_LO_START_FID 0x00003f00
#define MSR_S_LO_CURRENT_FID 0x0000003f
/* Field definitions within the FID VID High Status MSR : */
#define MSR_S_HI_MAX_WORKING_VID 0x001f0000
#define MSR_S_HI_START_VID 0x00001f00
#define MSR_S_HI_CURRENT_VID 0x0000001f
#define MSR_C_HI_STP_GNT_BENIGN 0x00000001
#define MSR_S_HI_MIN_WORKING_VID 0x3f000000
#define MSR_S_HI_MAX_WORKING_VID 0x003f0000
#define MSR_S_HI_START_VID 0x00003f00
#define MSR_S_HI_CURRENT_VID 0x0000003f
#define MSR_C_HI_STP_GNT_BENIGN 0x00000001
/*
* There are restrictions frequencies have to follow:
...
...
@@ -99,13 +101,15 @@ struct powernow_k8_data {
#define MIN_FREQ_RESOLUTION 200
/* fids jump by 2 matching freq jumps by 200 */
#define MAX_FID 0x2a
/* Spec only gives FID values as far as 5 GHz */
#define LEAST_VID 0x
1
e
/* Lowest (numerically highest) useful vid value */
#define LEAST_VID 0x
3
e
/* Lowest (numerically highest) useful vid value */
#define MIN_FREQ 800
/* Min and max freqs, per spec */
#define MAX_FREQ 5000
#define INVALID_FID_MASK 0xffffffc1
/* not a valid fid if these bits are set */
#define INVALID_VID_MASK 0xffffffe0
/* not a valid vid if these bits are set */
#define INVALID_VID_MASK 0xffffffc0
/* not a valid vid if these bits are set */
#define VID_OFF 0x3f
#define STOP_GRANT_5NS 1
/* min poss memory access latency for voltage change */
...
...
@@ -121,12 +125,14 @@ struct powernow_k8_data {
#define IRT_SHIFT 30
#define RVO_SHIFT 28
#define EXT_TYPE_SHIFT 27
#define PLL_L_SHIFT 20
#define MVS_SHIFT 18
#define VST_SHIFT 11
#define VID_SHIFT 6
#define IRT_MASK 3
#define RVO_MASK 3
#define EXT_TYPE_MASK 1
#define PLL_L_MASK 0x7f
#define MVS_MASK 3
#define VST_MASK 0x7f
...
...
drivers/cpufreq/cpufreq.c
View file @
33ac02aa
...
...
@@ -1130,7 +1130,7 @@ int cpufreq_driver_target(struct cpufreq_policy *policy,
unsigned
int
target_freq
,
unsigned
int
relation
)
{
unsigned
int
ret
;
int
ret
;
policy
=
cpufreq_cpu_get
(
policy
->
cpu
);
if
(
!
policy
)
...
...
@@ -1151,7 +1151,7 @@ EXPORT_SYMBOL_GPL(cpufreq_driver_target);
static
int
__cpufreq_governor
(
struct
cpufreq_policy
*
policy
,
unsigned
int
event
)
{
int
ret
=
-
EINVAL
;
int
ret
;
if
(
!
try_module_get
(
policy
->
governor
->
owner
))
return
-
EINVAL
;
...
...
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