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
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
* Your use of this code is subject to the terms and conditions of the
* GNU general public license version 2. See "COPYING" or
* GNU general public license version 2. See "COPYING" or
* http://www.gnu.org/licenses/gpl.html
* http://www.gnu.org/licenses/gpl.html
...
@@ -44,7 +44,7 @@
...
@@ -44,7 +44,7 @@
#define PFX "powernow-k8: "
#define PFX "powernow-k8: "
#define BFX PFX "BIOS error: "
#define BFX PFX "BIOS error: "
#define VERSION "version 1.
40.2
"
#define VERSION "version 1.
50.3
"
#include "powernow-k8.h"
#include "powernow-k8.h"
/* serialize freq changes */
/* serialize freq changes */
...
@@ -231,7 +231,7 @@ static int write_new_vid(struct powernow_k8_data *data, u32 vid)
...
@@ -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.
* Reduce the vid by the max of step or reqvid.
* Decreasing vid codes represent increasing voltages:
* 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
)
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)
...
@@ -466,7 +466,7 @@ static int check_supported_cpu(unsigned int cpu)
eax
=
cpuid_eax
(
CPUID_PROCESSOR_SIGNATURE
);
eax
=
cpuid_eax
(
CPUID_PROCESSOR_SIGNATURE
);
if
(((
eax
&
CPUID_USE_XFAM_XMOD
)
!=
CPUID_USE_XFAM_XMOD
)
||
if
(((
eax
&
CPUID_USE_XFAM_XMOD
)
!=
CPUID_USE_XFAM_XMOD
)
||
((
eax
&
CPUID_XFAM
)
!=
CPUID_XFAM_K8
)
||
((
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
);
printk
(
KERN_INFO
PFX
"Processor cpuid %x not supported
\n
"
,
eax
);
goto
out
;
goto
out
;
}
}
...
@@ -695,6 +695,7 @@ static void powernow_k8_acpi_pst_values(struct powernow_k8_data *data, unsigned
...
@@ -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
->
irt
=
(
data
->
acpi_data
.
states
[
index
].
control
>>
IRT_SHIFT
)
&
IRT_MASK
;
data
->
rvo
=
(
data
->
acpi_data
.
states
[
index
].
control
>>
RVO_SHIFT
)
&
RVO_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
->
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
->
vidmvs
=
1
<<
((
data
->
acpi_data
.
states
[
index
].
control
>>
MVS_SHIFT
)
&
MVS_MASK
);
data
->
vstable
=
(
data
->
acpi_data
.
states
[
index
].
control
>>
VST_SHIFT
)
&
VST_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)
...
@@ -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
++
)
{
for
(
i
=
0
;
i
<
data
->
acpi_data
.
state_count
;
i
++
)
{
u32
fid
=
data
->
acpi_data
.
states
[
i
].
control
&
FID_MASK
;
if
(
data
->
exttype
)
{
u32
vid
=
(
data
->
acpi_data
.
states
[
i
].
control
>>
VID_SHIFT
)
&
VID_MASK
;
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
);
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)
...
@@ -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 */
/* 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
);
dprintk
(
"invalid vid %u, ignoring
\n
"
,
vid
);
powernow_table
[
i
].
frequency
=
CPUFREQ_ENTRY_INVALID
;
powernow_table
[
i
].
frequency
=
CPUFREQ_ENTRY_INVALID
;
continue
;
continue
;
...
@@ -929,15 +935,6 @@ static int powernowk8_target(struct cpufreq_policy *pol, unsigned targfreq, unsi
...
@@ -929,15 +935,6 @@ static int powernowk8_target(struct cpufreq_policy *pol, unsigned targfreq, unsi
down
(
&
fidvid_sem
);
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
);
powernow_k8_acpi_pst_values
(
data
,
newstate
);
if
(
transition_frequency
(
data
,
newstate
))
{
if
(
transition_frequency
(
data
,
newstate
))
{
...
@@ -977,7 +974,7 @@ static int __init powernowk8_cpu_init(struct cpufreq_policy *pol)
...
@@ -977,7 +974,7 @@ static int __init powernowk8_cpu_init(struct cpufreq_policy *pol)
{
{
struct
powernow_k8_data
*
data
;
struct
powernow_k8_data
*
data
;
cpumask_t
oldmask
=
CPU_MASK_ALL
;
cpumask_t
oldmask
=
CPU_MASK_ALL
;
int
rc
;
int
rc
,
i
;
if
(
!
check_supported_cpu
(
pol
->
cpu
))
if
(
!
check_supported_cpu
(
pol
->
cpu
))
return
-
ENODEV
;
return
-
ENODEV
;
...
@@ -1063,7 +1060,9 @@ static int __init powernowk8_cpu_init(struct cpufreq_policy *pol)
...
@@ -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
"
,
printk
(
"cpu_init done, current fid 0x%x, vid 0x%x
\n
"
,
data
->
currfid
,
data
->
currvid
);
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
;
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
* Your use of this code is subject to the terms and conditions of the
* GNU general public license version 2. See "COPYING" or
* GNU general public license version 2. See "COPYING" or
* http://www.gnu.org/licenses/gpl.html
* http://www.gnu.org/licenses/gpl.html
...
@@ -19,6 +19,7 @@ struct powernow_k8_data {
...
@@ -19,6 +19,7 @@ struct powernow_k8_data {
u32
vidmvs
;
/* usable value calculated from mvs */
u32
vidmvs
;
/* usable value calculated from mvs */
u32
vstable
;
/* voltage stabilization time, units 20 us */
u32
vstable
;
/* voltage stabilization time, units 20 us */
u32
plllock
;
/* pll lock time, units 1 us */
u32
plllock
;
/* pll lock time, units 1 us */
u32
exttype
;
/* extended interface = 1 */
/* keep track of the current fid / vid */
/* keep track of the current fid / vid */
u32
currvid
,
currfid
;
u32
currvid
,
currfid
;
...
@@ -41,7 +42,7 @@ struct powernow_k8_data {
...
@@ -41,7 +42,7 @@ struct powernow_k8_data {
#define CPUID_XFAM 0x0ff00000
/* extended family */
#define CPUID_XFAM 0x0ff00000
/* extended family */
#define CPUID_XFAM_K8 0
#define CPUID_XFAM_K8 0
#define CPUID_XMOD 0x000f0000
/* extended model */
#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_USE_XFAM_XMOD 0x00000f00
#define CPUID_GET_MAX_CAPABILITIES 0x80000000
#define CPUID_GET_MAX_CAPABILITIES 0x80000000
#define CPUID_FREQ_VOLT_CAPABILITIES 0x80000007
#define CPUID_FREQ_VOLT_CAPABILITIES 0x80000007
...
@@ -57,25 +58,26 @@ struct powernow_k8_data {
...
@@ -57,25 +58,26 @@ struct powernow_k8_data {
/* Field definitions within the FID VID Low Control MSR : */
/* Field definitions within the FID VID Low Control MSR : */
#define MSR_C_LO_INIT_FID_VID 0x00010000
#define MSR_C_LO_INIT_FID_VID 0x00010000
#define MSR_C_LO_NEW_VID 0x0000
1
f00
#define MSR_C_LO_NEW_VID 0x0000
3
f00
#define MSR_C_LO_NEW_FID 0x000000
2
f
#define MSR_C_LO_NEW_FID 0x000000
3
f
#define MSR_C_LO_VID_SHIFT 8
#define MSR_C_LO_VID_SHIFT 8
/* Field definitions within the FID VID High Control MSR : */
/* 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 : */
/* Field definitions within the FID VID Low Status MSR : */
#define MSR_S_LO_CHANGE_PENDING 0x80000000
/* cleared when completed */
#define MSR_S_LO_CHANGE_PENDING 0x80000000
/* cleared when completed */
#define MSR_S_LO_MAX_RAMP_VID 0x
1
f000000
#define MSR_S_LO_MAX_RAMP_VID 0x
3
f000000
#define MSR_S_LO_MAX_FID 0x003f0000
#define MSR_S_LO_MAX_FID 0x003f0000
#define MSR_S_LO_START_FID 0x00003f00
#define MSR_S_LO_START_FID 0x00003f00
#define MSR_S_LO_CURRENT_FID 0x0000003f
#define MSR_S_LO_CURRENT_FID 0x0000003f
/* Field definitions within the FID VID High Status MSR : */
/* Field definitions within the FID VID High Status MSR : */
#define MSR_S_HI_MAX_WORKING_VID 0x001f0000
#define MSR_S_HI_MIN_WORKING_VID 0x3f000000
#define MSR_S_HI_START_VID 0x00001f00
#define MSR_S_HI_MAX_WORKING_VID 0x003f0000
#define MSR_S_HI_CURRENT_VID 0x0000001f
#define MSR_S_HI_START_VID 0x00003f00
#define MSR_C_HI_STP_GNT_BENIGN 0x00000001
#define MSR_S_HI_CURRENT_VID 0x0000003f
#define MSR_C_HI_STP_GNT_BENIGN 0x00000001
/*
/*
* There are restrictions frequencies have to follow:
* There are restrictions frequencies have to follow:
...
@@ -99,13 +101,15 @@ struct powernow_k8_data {
...
@@ -99,13 +101,15 @@ struct powernow_k8_data {
#define MIN_FREQ_RESOLUTION 200
/* fids jump by 2 matching freq jumps by 200 */
#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 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 MIN_FREQ 800
/* Min and max freqs, per spec */
#define MAX_FREQ 5000
#define MAX_FREQ 5000
#define INVALID_FID_MASK 0xffffffc1
/* not a valid fid if these bits are set */
#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 */
#define STOP_GRANT_5NS 1
/* min poss memory access latency for voltage change */
...
@@ -121,12 +125,14 @@ struct powernow_k8_data {
...
@@ -121,12 +125,14 @@ struct powernow_k8_data {
#define IRT_SHIFT 30
#define IRT_SHIFT 30
#define RVO_SHIFT 28
#define RVO_SHIFT 28
#define EXT_TYPE_SHIFT 27
#define PLL_L_SHIFT 20
#define PLL_L_SHIFT 20
#define MVS_SHIFT 18
#define MVS_SHIFT 18
#define VST_SHIFT 11
#define VST_SHIFT 11
#define VID_SHIFT 6
#define VID_SHIFT 6
#define IRT_MASK 3
#define IRT_MASK 3
#define RVO_MASK 3
#define RVO_MASK 3
#define EXT_TYPE_MASK 1
#define PLL_L_MASK 0x7f
#define PLL_L_MASK 0x7f
#define MVS_MASK 3
#define MVS_MASK 3
#define VST_MASK 0x7f
#define VST_MASK 0x7f
...
...
drivers/cpufreq/cpufreq.c
View file @
33ac02aa
...
@@ -1130,7 +1130,7 @@ int cpufreq_driver_target(struct cpufreq_policy *policy,
...
@@ -1130,7 +1130,7 @@ int cpufreq_driver_target(struct cpufreq_policy *policy,
unsigned
int
target_freq
,
unsigned
int
target_freq
,
unsigned
int
relation
)
unsigned
int
relation
)
{
{
unsigned
int
ret
;
int
ret
;
policy
=
cpufreq_cpu_get
(
policy
->
cpu
);
policy
=
cpufreq_cpu_get
(
policy
->
cpu
);
if
(
!
policy
)
if
(
!
policy
)
...
@@ -1151,7 +1151,7 @@ EXPORT_SYMBOL_GPL(cpufreq_driver_target);
...
@@ -1151,7 +1151,7 @@ EXPORT_SYMBOL_GPL(cpufreq_driver_target);
static
int
__cpufreq_governor
(
struct
cpufreq_policy
*
policy
,
unsigned
int
event
)
static
int
__cpufreq_governor
(
struct
cpufreq_policy
*
policy
,
unsigned
int
event
)
{
{
int
ret
=
-
EINVAL
;
int
ret
;
if
(
!
try_module_get
(
policy
->
governor
->
owner
))
if
(
!
try_module_get
(
policy
->
governor
->
owner
))
return
-
EINVAL
;
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