Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
Kernel
提交
4eb5178c
K
Kernel
项目概览
openeuler
/
Kernel
接近 2 年 前同步成功
通知
8
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
Kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
4eb5178c
编写于
8月 23, 2013
作者:
R
Rafael J. Wysocki
浏览文件
操作
浏览文件
下载
差异文件
Merge back earlier 'pm-cpufreq' material.
上级
b36f4be3
5025d628
变更
59
展开全部
隐藏空白更改
内联
并排
Showing
59 changed file
with
691 addition
and
854 deletion
+691
-854
Documentation/cpu-freq/cpu-drivers.txt
Documentation/cpu-freq/cpu-drivers.txt
+0
-2
arch/x86/include/asm/processor.h
arch/x86/include/asm/processor.h
+0
-29
drivers/cpufreq/Kconfig.arm
drivers/cpufreq/Kconfig.arm
+24
-12
drivers/cpufreq/Makefile
drivers/cpufreq/Makefile
+1
-1
drivers/cpufreq/acpi-cpufreq.c
drivers/cpufreq/acpi-cpufreq.c
+3
-9
drivers/cpufreq/at32ap-cpufreq.c
drivers/cpufreq/at32ap-cpufreq.c
+0
-1
drivers/cpufreq/blackfin-cpufreq.c
drivers/cpufreq/blackfin-cpufreq.c
+0
-1
drivers/cpufreq/cpufreq-cpu0.c
drivers/cpufreq/cpufreq-cpu0.c
+4
-5
drivers/cpufreq/cpufreq-nforce2.c
drivers/cpufreq/cpufreq-nforce2.c
+0
-1
drivers/cpufreq/cpufreq.c
drivers/cpufreq/cpufreq.c
+393
-345
drivers/cpufreq/cpufreq_conservative.c
drivers/cpufreq/cpufreq_conservative.c
+1
-13
drivers/cpufreq/cpufreq_governor.c
drivers/cpufreq/cpufreq_governor.c
+1
-15
drivers/cpufreq/cpufreq_governor.h
drivers/cpufreq/cpufreq_governor.h
+3
-5
drivers/cpufreq/cpufreq_ondemand.c
drivers/cpufreq/cpufreq_ondemand.c
+14
-49
drivers/cpufreq/cpufreq_performance.c
drivers/cpufreq/cpufreq_performance.c
+1
-2
drivers/cpufreq/cpufreq_powersave.c
drivers/cpufreq/cpufreq_powersave.c
+1
-2
drivers/cpufreq/cpufreq_stats.c
drivers/cpufreq/cpufreq_stats.c
+8
-23
drivers/cpufreq/cris-artpec3-cpufreq.c
drivers/cpufreq/cris-artpec3-cpufreq.c
+0
-1
drivers/cpufreq/cris-etraxfs-cpufreq.c
drivers/cpufreq/cris-etraxfs-cpufreq.c
+0
-1
drivers/cpufreq/e_powersaver.c
drivers/cpufreq/e_powersaver.c
+2
-3
drivers/cpufreq/elanfreq.c
drivers/cpufreq/elanfreq.c
+0
-1
drivers/cpufreq/exynos-cpufreq.c
drivers/cpufreq/exynos-cpufreq.c
+1
-2
drivers/cpufreq/exynos-cpufreq.h
drivers/cpufreq/exynos-cpufreq.h
+21
-0
drivers/cpufreq/exynos5440-cpufreq.c
drivers/cpufreq/exynos5440-cpufreq.c
+3
-0
drivers/cpufreq/freq_table.c
drivers/cpufreq/freq_table.c
+1
-3
drivers/cpufreq/gx-suspmod.c
drivers/cpufreq/gx-suspmod.c
+2
-3
drivers/cpufreq/ia64-acpi-cpufreq.c
drivers/cpufreq/ia64-acpi-cpufreq.c
+2
-3
drivers/cpufreq/intel_pstate.c
drivers/cpufreq/intel_pstate.c
+0
-1
drivers/cpufreq/kirkwood-cpufreq.c
drivers/cpufreq/kirkwood-cpufreq.c
+0
-1
drivers/cpufreq/longhaul.c
drivers/cpufreq/longhaul.c
+0
-1
drivers/cpufreq/longrun.c
drivers/cpufreq/longrun.c
+0
-1
drivers/cpufreq/loongson2_cpufreq.c
drivers/cpufreq/loongson2_cpufreq.c
+0
-1
drivers/cpufreq/maple-cpufreq.c
drivers/cpufreq/maple-cpufreq.c
+0
-1
drivers/cpufreq/mperf.c
drivers/cpufreq/mperf.c
+0
-51
drivers/cpufreq/mperf.h
drivers/cpufreq/mperf.h
+0
-9
drivers/cpufreq/p4-clockmod.c
drivers/cpufreq/p4-clockmod.c
+0
-1
drivers/cpufreq/pasemi-cpufreq.c
drivers/cpufreq/pasemi-cpufreq.c
+0
-1
drivers/cpufreq/pcc-cpufreq.c
drivers/cpufreq/pcc-cpufreq.c
+0
-1
drivers/cpufreq/pmac32-cpufreq.c
drivers/cpufreq/pmac32-cpufreq.c
+0
-1
drivers/cpufreq/pmac64-cpufreq.c
drivers/cpufreq/pmac64-cpufreq.c
+2
-4
drivers/cpufreq/powernow-k6.c
drivers/cpufreq/powernow-k6.c
+0
-1
drivers/cpufreq/powernow-k7.c
drivers/cpufreq/powernow-k7.c
+6
-8
drivers/cpufreq/powernow-k8.c
drivers/cpufreq/powernow-k8.c
+3
-4
drivers/cpufreq/ppc-corenet-cpufreq.c
drivers/cpufreq/ppc-corenet-cpufreq.c
+0
-1
drivers/cpufreq/ppc_cbe_cpufreq.c
drivers/cpufreq/ppc_cbe_cpufreq.c
+0
-1
drivers/cpufreq/pxa2xx-cpufreq.c
drivers/cpufreq/pxa2xx-cpufreq.c
+2
-2
drivers/cpufreq/pxa3xx-cpufreq.c
drivers/cpufreq/pxa3xx-cpufreq.c
+4
-2
drivers/cpufreq/s3c2416-cpufreq.c
drivers/cpufreq/s3c2416-cpufreq.c
+0
-1
drivers/cpufreq/s3c24xx-cpufreq.c
drivers/cpufreq/s3c24xx-cpufreq.c
+4
-4
drivers/cpufreq/s3c64xx-cpufreq.c
drivers/cpufreq/s3c64xx-cpufreq.c
+0
-1
drivers/cpufreq/sc520_freq.c
drivers/cpufreq/sc520_freq.c
+0
-1
drivers/cpufreq/sh-cpufreq.c
drivers/cpufreq/sh-cpufreq.c
+0
-1
drivers/cpufreq/sparc-us2e-cpufreq.c
drivers/cpufreq/sparc-us2e-cpufreq.c
+2
-4
drivers/cpufreq/sparc-us3-cpufreq.c
drivers/cpufreq/sparc-us3-cpufreq.c
+2
-4
drivers/cpufreq/speedstep-centrino.c
drivers/cpufreq/speedstep-centrino.c
+0
-1
drivers/cpufreq/speedstep-ich.c
drivers/cpufreq/speedstep-ich.c
+0
-1
drivers/cpufreq/speedstep-smi.c
drivers/cpufreq/speedstep-smi.c
+0
-1
drivers/cpufreq/unicore2-cpufreq.c
drivers/cpufreq/unicore2-cpufreq.c
+1
-1
include/linux/cpufreq.h
include/linux/cpufreq.h
+179
-209
未找到文件。
Documentation/cpu-freq/cpu-drivers.txt
浏览文件 @
4eb5178c
...
@@ -50,8 +50,6 @@ What shall this struct cpufreq_driver contain?
...
@@ -50,8 +50,6 @@ What shall this struct cpufreq_driver contain?
cpufreq_driver.name - The name of this driver.
cpufreq_driver.name - The name of this driver.
cpufreq_driver.owner - THIS_MODULE;
cpufreq_driver.init - A pointer to the per-CPU initialization
cpufreq_driver.init - A pointer to the per-CPU initialization
function.
function.
...
...
arch/x86/include/asm/processor.h
浏览文件 @
4eb5178c
...
@@ -942,35 +942,6 @@ extern int set_tsc_mode(unsigned int val);
...
@@ -942,35 +942,6 @@ extern int set_tsc_mode(unsigned int val);
extern
u16
amd_get_nb_id
(
int
cpu
);
extern
u16
amd_get_nb_id
(
int
cpu
);
struct
aperfmperf
{
u64
aperf
,
mperf
;
};
static
inline
void
get_aperfmperf
(
struct
aperfmperf
*
am
)
{
WARN_ON_ONCE
(
!
boot_cpu_has
(
X86_FEATURE_APERFMPERF
));
rdmsrl
(
MSR_IA32_APERF
,
am
->
aperf
);
rdmsrl
(
MSR_IA32_MPERF
,
am
->
mperf
);
}
#define APERFMPERF_SHIFT 10
static
inline
unsigned
long
calc_aperfmperf_ratio
(
struct
aperfmperf
*
old
,
struct
aperfmperf
*
new
)
{
u64
aperf
=
new
->
aperf
-
old
->
aperf
;
u64
mperf
=
new
->
mperf
-
old
->
mperf
;
unsigned
long
ratio
=
aperf
;
mperf
>>=
APERFMPERF_SHIFT
;
if
(
mperf
)
ratio
=
div64_u64
(
aperf
,
mperf
);
return
ratio
;
}
extern
unsigned
long
arch_align_stack
(
unsigned
long
sp
);
extern
unsigned
long
arch_align_stack
(
unsigned
long
sp
);
extern
void
free_init_pages
(
char
*
what
,
unsigned
long
begin
,
unsigned
long
end
);
extern
void
free_init_pages
(
char
*
what
,
unsigned
long
begin
,
unsigned
long
end
);
...
...
drivers/cpufreq/Kconfig.arm
浏览文件 @
4eb5178c
...
@@ -17,37 +17,47 @@ config ARM_DT_BL_CPUFREQ
...
@@ -17,37 +17,47 @@ config ARM_DT_BL_CPUFREQ
big.LITTLE platform. This gets frequency tables from DT.
big.LITTLE platform. This gets frequency tables from DT.
config ARM_EXYNOS_CPUFREQ
config ARM_EXYNOS_CPUFREQ
bool "SAMSUNG EXYNOS SoCs"
bool
depends on ARCH_EXYNOS
select CPU_FREQ_TABLE
select CPU_FREQ_TABLE
default y
help
This adds the CPUFreq driver common part for Samsung
EXYNOS SoCs.
If in doubt, say N.
config ARM_EXYNOS4210_CPUFREQ
config ARM_EXYNOS4210_CPUFREQ
def_bool CPU_EXYNOS4210
bool "SAMSUNG EXYNOS4210"
depends on CPU_EXYNOS4210
default y
select ARM_EXYNOS_CPUFREQ
help
help
This adds the CPUFreq driver for Samsung EXYNOS4210
This adds the CPUFreq driver for Samsung EXYNOS4210
SoC (S5PV310 or S5PC210).
SoC (S5PV310 or S5PC210).
If in doubt, say N.
config ARM_EXYNOS4X12_CPUFREQ
config ARM_EXYNOS4X12_CPUFREQ
def_bool (SOC_EXYNOS4212 || SOC_EXYNOS4412)
bool "SAMSUNG EXYNOS4x12"
depends on (SOC_EXYNOS4212 || SOC_EXYNOS4412)
default y
select ARM_EXYNOS_CPUFREQ
help
help
This adds the CPUFreq driver for Samsung EXYNOS4X12
This adds the CPUFreq driver for Samsung EXYNOS4X12
SoC (EXYNOS4212 or EXYNOS4412).
SoC (EXYNOS4212 or EXYNOS4412).
If in doubt, say N.
config ARM_EXYNOS5250_CPUFREQ
config ARM_EXYNOS5250_CPUFREQ
def_bool SOC_EXYNOS5250
bool "SAMSUNG EXYNOS5250"
depends on SOC_EXYNOS5250
default y
select ARM_EXYNOS_CPUFREQ
help
help
This adds the CPUFreq driver for Samsung EXYNOS5250
This adds the CPUFreq driver for Samsung EXYNOS5250
SoC.
SoC.
If in doubt, say N.
config ARM_EXYNOS5440_CPUFREQ
config ARM_EXYNOS5440_CPUFREQ
def_bool SOC_EXYNOS5440
bool "SAMSUNG EXYNOS5440"
depends on SOC_EXYNOS5440
depends on HAVE_CLK && PM_OPP && OF
depends on HAVE_CLK && PM_OPP && OF
default y
select CPU_FREQ_TABLE
select CPU_FREQ_TABLE
help
help
This adds the CPUFreq driver for Samsung EXYNOS5440
This adds the CPUFreq driver for Samsung EXYNOS5440
...
@@ -55,6 +65,8 @@ config ARM_EXYNOS5440_CPUFREQ
...
@@ -55,6 +65,8 @@ config ARM_EXYNOS5440_CPUFREQ
different than previous exynos controllers so not using
different than previous exynos controllers so not using
the common exynos framework.
the common exynos framework.
If in doubt, say N.
config ARM_HIGHBANK_CPUFREQ
config ARM_HIGHBANK_CPUFREQ
tristate "Calxeda Highbank-based"
tristate "Calxeda Highbank-based"
depends on ARCH_HIGHBANK
depends on ARCH_HIGHBANK
...
...
drivers/cpufreq/Makefile
浏览文件 @
4eb5178c
...
@@ -23,7 +23,7 @@ obj-$(CONFIG_GENERIC_CPUFREQ_CPU0) += cpufreq-cpu0.o
...
@@ -23,7 +23,7 @@ obj-$(CONFIG_GENERIC_CPUFREQ_CPU0) += cpufreq-cpu0.o
# powernow-k8 can load then. ACPI is preferred to all other hardware-specific drivers.
# powernow-k8 can load then. ACPI is preferred to all other hardware-specific drivers.
# speedstep-* is preferred over p4-clockmod.
# speedstep-* is preferred over p4-clockmod.
obj-$(CONFIG_X86_ACPI_CPUFREQ)
+=
acpi-cpufreq.o
mperf.o
obj-$(CONFIG_X86_ACPI_CPUFREQ)
+=
acpi-cpufreq.o
obj-$(CONFIG_X86_POWERNOW_K8)
+=
powernow-k8.o
obj-$(CONFIG_X86_POWERNOW_K8)
+=
powernow-k8.o
obj-$(CONFIG_X86_PCC_CPUFREQ)
+=
pcc-cpufreq.o
obj-$(CONFIG_X86_PCC_CPUFREQ)
+=
pcc-cpufreq.o
obj-$(CONFIG_X86_POWERNOW_K6)
+=
powernow-k6.o
obj-$(CONFIG_X86_POWERNOW_K6)
+=
powernow-k6.o
...
...
drivers/cpufreq/acpi-cpufreq.c
浏览文件 @
4eb5178c
...
@@ -45,7 +45,6 @@
...
@@ -45,7 +45,6 @@
#include <asm/msr.h>
#include <asm/msr.h>
#include <asm/processor.h>
#include <asm/processor.h>
#include <asm/cpufeature.h>
#include <asm/cpufeature.h>
#include "mperf.h"
MODULE_AUTHOR
(
"Paul Diefenbaugh, Dominik Brodowski"
);
MODULE_AUTHOR
(
"Paul Diefenbaugh, Dominik Brodowski"
);
MODULE_DESCRIPTION
(
"ACPI Processor P-States Driver"
);
MODULE_DESCRIPTION
(
"ACPI Processor P-States Driver"
);
...
@@ -198,7 +197,7 @@ static ssize_t show_cpb(struct cpufreq_policy *policy, char *buf)
...
@@ -198,7 +197,7 @@ static ssize_t show_cpb(struct cpufreq_policy *policy, char *buf)
return
sprintf
(
buf
,
"%u
\n
"
,
boost_enabled
);
return
sprintf
(
buf
,
"%u
\n
"
,
boost_enabled
);
}
}
static
struct
freq_attr
cpb
=
__ATTR
(
cpb
,
0644
,
show_cpb
,
store_
cpb
);
cpufreq_freq_attr_rw
(
cpb
);
#endif
#endif
static
int
check_est_cpu
(
unsigned
int
cpuid
)
static
int
check_est_cpu
(
unsigned
int
cpuid
)
...
@@ -710,7 +709,7 @@ static int acpi_cpufreq_cpu_init(struct cpufreq_policy *policy)
...
@@ -710,7 +709,7 @@ static int acpi_cpufreq_cpu_init(struct cpufreq_policy *policy)
return
blacklisted
;
return
blacklisted
;
#endif
#endif
data
=
kzalloc
(
sizeof
(
struct
acpi_cpufreq_
data
),
GFP_KERNEL
);
data
=
kzalloc
(
sizeof
(
*
data
),
GFP_KERNEL
);
if
(
!
data
)
if
(
!
data
)
return
-
ENOMEM
;
return
-
ENOMEM
;
...
@@ -800,7 +799,7 @@ static int acpi_cpufreq_cpu_init(struct cpufreq_policy *policy)
...
@@ -800,7 +799,7 @@ static int acpi_cpufreq_cpu_init(struct cpufreq_policy *policy)
goto
err_unreg
;
goto
err_unreg
;
}
}
data
->
freq_table
=
kmalloc
(
sizeof
(
struct
cpufreq_frequency
_table
)
*
data
->
freq_table
=
kmalloc
(
sizeof
(
*
data
->
freq
_table
)
*
(
perf
->
state_count
+
1
),
GFP_KERNEL
);
(
perf
->
state_count
+
1
),
GFP_KERNEL
);
if
(
!
data
->
freq_table
)
{
if
(
!
data
->
freq_table
)
{
result
=
-
ENOMEM
;
result
=
-
ENOMEM
;
...
@@ -861,10 +860,6 @@ static int acpi_cpufreq_cpu_init(struct cpufreq_policy *policy)
...
@@ -861,10 +860,6 @@ static int acpi_cpufreq_cpu_init(struct cpufreq_policy *policy)
/* notify BIOS that we exist */
/* notify BIOS that we exist */
acpi_processor_notify_smm
(
THIS_MODULE
);
acpi_processor_notify_smm
(
THIS_MODULE
);
/* Check for APERF/MPERF support in hardware */
if
(
boot_cpu_has
(
X86_FEATURE_APERFMPERF
))
acpi_cpufreq_driver
.
getavg
=
cpufreq_get_measured_perf
;
pr_debug
(
"CPU%u - ACPI performance management activated.
\n
"
,
cpu
);
pr_debug
(
"CPU%u - ACPI performance management activated.
\n
"
,
cpu
);
for
(
i
=
0
;
i
<
perf
->
state_count
;
i
++
)
for
(
i
=
0
;
i
<
perf
->
state_count
;
i
++
)
pr_debug
(
" %cP%d: %d MHz, %d mW, %d uS
\n
"
,
pr_debug
(
" %cP%d: %d MHz, %d mW, %d uS
\n
"
,
...
@@ -941,7 +936,6 @@ static struct cpufreq_driver acpi_cpufreq_driver = {
...
@@ -941,7 +936,6 @@ static struct cpufreq_driver acpi_cpufreq_driver = {
.
exit
=
acpi_cpufreq_cpu_exit
,
.
exit
=
acpi_cpufreq_cpu_exit
,
.
resume
=
acpi_cpufreq_resume
,
.
resume
=
acpi_cpufreq_resume
,
.
name
=
"acpi-cpufreq"
,
.
name
=
"acpi-cpufreq"
,
.
owner
=
THIS_MODULE
,
.
attr
=
acpi_cpufreq_attr
,
.
attr
=
acpi_cpufreq_attr
,
};
};
...
...
drivers/cpufreq/at32ap-cpufreq.c
浏览文件 @
4eb5178c
...
@@ -108,7 +108,6 @@ static int __init at32_cpufreq_driver_init(struct cpufreq_policy *policy)
...
@@ -108,7 +108,6 @@ static int __init at32_cpufreq_driver_init(struct cpufreq_policy *policy)
static
struct
cpufreq_driver
at32_driver
=
{
static
struct
cpufreq_driver
at32_driver
=
{
.
name
=
"at32ap"
,
.
name
=
"at32ap"
,
.
owner
=
THIS_MODULE
,
.
init
=
at32_cpufreq_driver_init
,
.
init
=
at32_cpufreq_driver_init
,
.
verify
=
at32_verify_speed
,
.
verify
=
at32_verify_speed
,
.
target
=
at32_set_target
,
.
target
=
at32_set_target
,
...
...
drivers/cpufreq/blackfin-cpufreq.c
浏览文件 @
4eb5178c
...
@@ -225,7 +225,6 @@ static struct cpufreq_driver bfin_driver = {
...
@@ -225,7 +225,6 @@ static struct cpufreq_driver bfin_driver = {
.
get
=
bfin_getfreq_khz
,
.
get
=
bfin_getfreq_khz
,
.
init
=
__bfin_cpu_init
,
.
init
=
__bfin_cpu_init
,
.
name
=
"bfin cpufreq"
,
.
name
=
"bfin cpufreq"
,
.
owner
=
THIS_MODULE
,
.
attr
=
bfin_freq_attr
,
.
attr
=
bfin_freq_attr
,
};
};
...
...
drivers/cpufreq/cpufreq-cpu0.c
浏览文件 @
4eb5178c
...
@@ -69,7 +69,7 @@ static int cpu0_set_target(struct cpufreq_policy *policy,
...
@@ -69,7 +69,7 @@ static int cpu0_set_target(struct cpufreq_policy *policy,
cpufreq_notify_transition
(
policy
,
&
freqs
,
CPUFREQ_PRECHANGE
);
cpufreq_notify_transition
(
policy
,
&
freqs
,
CPUFREQ_PRECHANGE
);
if
(
cpu_reg
)
{
if
(
!
IS_ERR
(
cpu_reg
)
)
{
rcu_read_lock
();
rcu_read_lock
();
opp
=
opp_find_freq_ceil
(
cpu_dev
,
&
freq_Hz
);
opp
=
opp_find_freq_ceil
(
cpu_dev
,
&
freq_Hz
);
if
(
IS_ERR
(
opp
))
{
if
(
IS_ERR
(
opp
))
{
...
@@ -90,7 +90,7 @@ static int cpu0_set_target(struct cpufreq_policy *policy,
...
@@ -90,7 +90,7 @@ static int cpu0_set_target(struct cpufreq_policy *policy,
freqs
.
new
/
1000
,
volt
?
volt
/
1000
:
-
1
);
freqs
.
new
/
1000
,
volt
?
volt
/
1000
:
-
1
);
/* scaling up? scale voltage before frequency */
/* scaling up? scale voltage before frequency */
if
(
cpu_reg
&&
freqs
.
new
>
freqs
.
old
)
{
if
(
!
IS_ERR
(
cpu_reg
)
&&
freqs
.
new
>
freqs
.
old
)
{
ret
=
regulator_set_voltage_tol
(
cpu_reg
,
volt
,
tol
);
ret
=
regulator_set_voltage_tol
(
cpu_reg
,
volt
,
tol
);
if
(
ret
)
{
if
(
ret
)
{
pr_err
(
"failed to scale voltage up: %d
\n
"
,
ret
);
pr_err
(
"failed to scale voltage up: %d
\n
"
,
ret
);
...
@@ -102,14 +102,14 @@ static int cpu0_set_target(struct cpufreq_policy *policy,
...
@@ -102,14 +102,14 @@ static int cpu0_set_target(struct cpufreq_policy *policy,
ret
=
clk_set_rate
(
cpu_clk
,
freq_exact
);
ret
=
clk_set_rate
(
cpu_clk
,
freq_exact
);
if
(
ret
)
{
if
(
ret
)
{
pr_err
(
"failed to set clock rate: %d
\n
"
,
ret
);
pr_err
(
"failed to set clock rate: %d
\n
"
,
ret
);
if
(
cpu_reg
)
if
(
!
IS_ERR
(
cpu_reg
)
)
regulator_set_voltage_tol
(
cpu_reg
,
volt_old
,
tol
);
regulator_set_voltage_tol
(
cpu_reg
,
volt_old
,
tol
);
freqs
.
new
=
freqs
.
old
;
freqs
.
new
=
freqs
.
old
;
goto
post_notify
;
goto
post_notify
;
}
}
/* scaling down? scale voltage after frequency */
/* scaling down? scale voltage after frequency */
if
(
cpu_reg
&&
freqs
.
new
<
freqs
.
old
)
{
if
(
!
IS_ERR
(
cpu_reg
)
&&
freqs
.
new
<
freqs
.
old
)
{
ret
=
regulator_set_voltage_tol
(
cpu_reg
,
volt
,
tol
);
ret
=
regulator_set_voltage_tol
(
cpu_reg
,
volt
,
tol
);
if
(
ret
)
{
if
(
ret
)
{
pr_err
(
"failed to scale voltage down: %d
\n
"
,
ret
);
pr_err
(
"failed to scale voltage down: %d
\n
"
,
ret
);
...
@@ -210,7 +210,6 @@ static int cpu0_cpufreq_probe(struct platform_device *pdev)
...
@@ -210,7 +210,6 @@ static int cpu0_cpufreq_probe(struct platform_device *pdev)
}
}
pr_warn
(
"failed to get cpu0 regulator: %ld
\n
"
,
pr_warn
(
"failed to get cpu0 regulator: %ld
\n
"
,
PTR_ERR
(
cpu_reg
));
PTR_ERR
(
cpu_reg
));
cpu_reg
=
NULL
;
}
}
cpu_clk
=
devm_clk_get
(
cpu_dev
,
NULL
);
cpu_clk
=
devm_clk_get
(
cpu_dev
,
NULL
);
...
...
drivers/cpufreq/cpufreq-nforce2.c
浏览文件 @
4eb5178c
...
@@ -379,7 +379,6 @@ static struct cpufreq_driver nforce2_driver = {
...
@@ -379,7 +379,6 @@ static struct cpufreq_driver nforce2_driver = {
.
get
=
nforce2_get
,
.
get
=
nforce2_get
,
.
init
=
nforce2_cpu_init
,
.
init
=
nforce2_cpu_init
,
.
exit
=
nforce2_cpu_exit
,
.
exit
=
nforce2_cpu_exit
,
.
owner
=
THIS_MODULE
,
};
};
#ifdef MODULE
#ifdef MODULE
...
...
drivers/cpufreq/cpufreq.c
浏览文件 @
4eb5178c
此差异已折叠。
点击以展开。
drivers/cpufreq/cpufreq_conservative.c
浏览文件 @
4eb5178c
...
@@ -11,19 +11,7 @@
...
@@ -11,19 +11,7 @@
* published by the Free Software Foundation.
* published by the Free Software Foundation.
*/
*/
#include <linux/cpufreq.h>
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/kernel_stat.h>
#include <linux/kobject.h>
#include <linux/module.h>
#include <linux/mutex.h>
#include <linux/notifier.h>
#include <linux/percpu-defs.h>
#include <linux/slab.h>
#include <linux/slab.h>
#include <linux/sysfs.h>
#include <linux/types.h>
#include "cpufreq_governor.h"
#include "cpufreq_governor.h"
/* Conservative governor macros */
/* Conservative governor macros */
...
@@ -329,7 +317,7 @@ static int cs_init(struct dbs_data *dbs_data)
...
@@ -329,7 +317,7 @@ static int cs_init(struct dbs_data *dbs_data)
{
{
struct
cs_dbs_tuners
*
tuners
;
struct
cs_dbs_tuners
*
tuners
;
tuners
=
kzalloc
(
sizeof
(
struct
cs_dbs_
tuners
),
GFP_KERNEL
);
tuners
=
kzalloc
(
sizeof
(
*
tuners
),
GFP_KERNEL
);
if
(
!
tuners
)
{
if
(
!
tuners
)
{
pr_err
(
"%s: kzalloc failed
\n
"
,
__func__
);
pr_err
(
"%s: kzalloc failed
\n
"
,
__func__
);
return
-
ENOMEM
;
return
-
ENOMEM
;
...
...
drivers/cpufreq/cpufreq_governor.c
浏览文件 @
4eb5178c
...
@@ -16,15 +16,9 @@
...
@@ -16,15 +16,9 @@
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
#include <asm/cputime.h>
#include <linux/cpufreq.h>
#include <linux/cpumask.h>
#include <linux/export.h>
#include <linux/export.h>
#include <linux/kernel_stat.h>
#include <linux/kernel_stat.h>
#include <linux/mutex.h>
#include <linux/slab.h>
#include <linux/slab.h>
#include <linux/types.h>
#include <linux/workqueue.h>
#include "cpufreq_governor.h"
#include "cpufreq_governor.h"
...
@@ -53,7 +47,7 @@ void dbs_check_cpu(struct dbs_data *dbs_data, int cpu)
...
@@ -53,7 +47,7 @@ void dbs_check_cpu(struct dbs_data *dbs_data, int cpu)
policy
=
cdbs
->
cur_policy
;
policy
=
cdbs
->
cur_policy
;
/* Get Absolute Load
(in terms of freq for ondemand gov)
*/
/* Get Absolute Load */
for_each_cpu
(
j
,
policy
->
cpus
)
{
for_each_cpu
(
j
,
policy
->
cpus
)
{
struct
cpu_dbs_common_info
*
j_cdbs
;
struct
cpu_dbs_common_info
*
j_cdbs
;
u64
cur_wall_time
,
cur_idle_time
;
u64
cur_wall_time
,
cur_idle_time
;
...
@@ -104,14 +98,6 @@ void dbs_check_cpu(struct dbs_data *dbs_data, int cpu)
...
@@ -104,14 +98,6 @@ void dbs_check_cpu(struct dbs_data *dbs_data, int cpu)
load
=
100
*
(
wall_time
-
idle_time
)
/
wall_time
;
load
=
100
*
(
wall_time
-
idle_time
)
/
wall_time
;
if
(
dbs_data
->
cdata
->
governor
==
GOV_ONDEMAND
)
{
int
freq_avg
=
__cpufreq_driver_getavg
(
policy
,
j
);
if
(
freq_avg
<=
0
)
freq_avg
=
policy
->
cur
;
load
*=
freq_avg
;
}
if
(
load
>
max_load
)
if
(
load
>
max_load
)
max_load
=
load
;
max_load
=
load
;
}
}
...
...
drivers/cpufreq/cpufreq_governor.h
浏览文件 @
4eb5178c
...
@@ -18,10 +18,9 @@
...
@@ -18,10 +18,9 @@
#define _CPUFREQ_GOVERNOR_H
#define _CPUFREQ_GOVERNOR_H
#include <linux/cpufreq.h>
#include <linux/cpufreq.h>
#include <linux/kobject.h>
#include <linux/kernel_stat.h>
#include <linux/module.h>
#include <linux/mutex.h>
#include <linux/mutex.h>
#include <linux/workqueue.h>
#include <linux/sysfs.h>
/*
/*
* The polling frequency depends on the capability of the processor. Default
* The polling frequency depends on the capability of the processor. Default
...
@@ -169,7 +168,6 @@ struct od_dbs_tuners {
...
@@ -169,7 +168,6 @@ struct od_dbs_tuners {
unsigned
int
sampling_rate
;
unsigned
int
sampling_rate
;
unsigned
int
sampling_down_factor
;
unsigned
int
sampling_down_factor
;
unsigned
int
up_threshold
;
unsigned
int
up_threshold
;
unsigned
int
adj_up_threshold
;
unsigned
int
powersave_bias
;
unsigned
int
powersave_bias
;
unsigned
int
io_is_busy
;
unsigned
int
io_is_busy
;
};
};
...
@@ -223,7 +221,7 @@ struct od_ops {
...
@@ -223,7 +221,7 @@ struct od_ops {
void
(
*
powersave_bias_init_cpu
)(
int
cpu
);
void
(
*
powersave_bias_init_cpu
)(
int
cpu
);
unsigned
int
(
*
powersave_bias_target
)(
struct
cpufreq_policy
*
policy
,
unsigned
int
(
*
powersave_bias_target
)(
struct
cpufreq_policy
*
policy
,
unsigned
int
freq_next
,
unsigned
int
relation
);
unsigned
int
freq_next
,
unsigned
int
relation
);
void
(
*
freq_increase
)(
struct
cpufreq_policy
*
p
,
unsigned
int
freq
);
void
(
*
freq_increase
)(
struct
cpufreq_policy
*
p
olicy
,
unsigned
int
freq
);
};
};
struct
cs_ops
{
struct
cs_ops
{
...
...
drivers/cpufreq/cpufreq_ondemand.c
浏览文件 @
4eb5178c
...
@@ -12,28 +12,16 @@
...
@@ -12,28 +12,16 @@
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
#include <linux/cpufreq.h>
#include <linux/cpu.h>
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/kernel_stat.h>
#include <linux/kobject.h>
#include <linux/module.h>
#include <linux/mutex.h>
#include <linux/percpu-defs.h>
#include <linux/percpu-defs.h>
#include <linux/slab.h>
#include <linux/slab.h>
#include <linux/sysfs.h>
#include <linux/tick.h>
#include <linux/tick.h>
#include <linux/types.h>
#include <linux/cpu.h>
#include "cpufreq_governor.h"
#include "cpufreq_governor.h"
/* On-demand governor macros */
/* On-demand governor macros */
#define DEF_FREQUENCY_DOWN_DIFFERENTIAL (10)
#define DEF_FREQUENCY_UP_THRESHOLD (80)
#define DEF_FREQUENCY_UP_THRESHOLD (80)
#define DEF_SAMPLING_DOWN_FACTOR (1)
#define DEF_SAMPLING_DOWN_FACTOR (1)
#define MAX_SAMPLING_DOWN_FACTOR (100000)
#define MAX_SAMPLING_DOWN_FACTOR (100000)
#define MICRO_FREQUENCY_DOWN_DIFFERENTIAL (3)
#define MICRO_FREQUENCY_UP_THRESHOLD (95)
#define MICRO_FREQUENCY_UP_THRESHOLD (95)
#define MICRO_FREQUENCY_MIN_SAMPLE_RATE (10000)
#define MICRO_FREQUENCY_MIN_SAMPLE_RATE (10000)
#define MIN_FREQUENCY_UP_THRESHOLD (11)
#define MIN_FREQUENCY_UP_THRESHOLD (11)
...
@@ -144,31 +132,27 @@ static void ondemand_powersave_bias_init(void)
...
@@ -144,31 +132,27 @@ static void ondemand_powersave_bias_init(void)
}
}
}
}
static
void
dbs_freq_increase
(
struct
cpufreq_policy
*
p
,
unsigned
int
freq
)
static
void
dbs_freq_increase
(
struct
cpufreq_policy
*
p
olicy
,
unsigned
int
freq
)
{
{
struct
dbs_data
*
dbs_data
=
p
->
governor_data
;
struct
dbs_data
*
dbs_data
=
p
olicy
->
governor_data
;
struct
od_dbs_tuners
*
od_tuners
=
dbs_data
->
tuners
;
struct
od_dbs_tuners
*
od_tuners
=
dbs_data
->
tuners
;
if
(
od_tuners
->
powersave_bias
)
if
(
od_tuners
->
powersave_bias
)
freq
=
od_ops
.
powersave_bias_target
(
p
,
freq
,
freq
=
od_ops
.
powersave_bias_target
(
p
olicy
,
freq
,
CPUFREQ_RELATION_H
);
CPUFREQ_RELATION_H
);
else
if
(
p
->
cur
==
p
->
max
)
else
if
(
p
olicy
->
cur
==
policy
->
max
)
return
;
return
;
__cpufreq_driver_target
(
p
,
freq
,
od_tuners
->
powersave_bias
?
__cpufreq_driver_target
(
p
olicy
,
freq
,
od_tuners
->
powersave_bias
?
CPUFREQ_RELATION_L
:
CPUFREQ_RELATION_H
);
CPUFREQ_RELATION_L
:
CPUFREQ_RELATION_H
);
}
}
/*
/*
* Every sampling_rate, we check, if current idle time is less than 20%
* Every sampling_rate, we check, if current idle time is less than 20%
* (default), then we try to increase frequency. Every sampling_rate, we look
* (default), then we try to increase frequency. Else, we adjust the frequency
* for the lowest frequency which can sustain the load while keeping idle time
* proportional to load.
* over 30%. If such a frequency exist, we try to decrease to this frequency.
*
* Any frequency increase takes it to the maximum frequency. Frequency reduction
* happens at minimum steps of 5% (default) of current frequency
*/
*/
static
void
od_check_cpu
(
int
cpu
,
unsigned
int
load
_freq
)
static
void
od_check_cpu
(
int
cpu
,
unsigned
int
load
)
{
{
struct
od_cpu_dbs_info_s
*
dbs_info
=
&
per_cpu
(
od_cpu_dbs_info
,
cpu
);
struct
od_cpu_dbs_info_s
*
dbs_info
=
&
per_cpu
(
od_cpu_dbs_info
,
cpu
);
struct
cpufreq_policy
*
policy
=
dbs_info
->
cdbs
.
cur_policy
;
struct
cpufreq_policy
*
policy
=
dbs_info
->
cdbs
.
cur_policy
;
...
@@ -178,29 +162,17 @@ static void od_check_cpu(int cpu, unsigned int load_freq)
...
@@ -178,29 +162,17 @@ static void od_check_cpu(int cpu, unsigned int load_freq)
dbs_info
->
freq_lo
=
0
;
dbs_info
->
freq_lo
=
0
;
/* Check for frequency increase */
/* Check for frequency increase */
if
(
load
_freq
>
od_tuners
->
up_threshold
*
policy
->
cur
)
{
if
(
load
>
od_tuners
->
up_threshold
)
{
/* If switching to max speed, apply sampling_down_factor */
/* If switching to max speed, apply sampling_down_factor */
if
(
policy
->
cur
<
policy
->
max
)
if
(
policy
->
cur
<
policy
->
max
)
dbs_info
->
rate_mult
=
dbs_info
->
rate_mult
=
od_tuners
->
sampling_down_factor
;
od_tuners
->
sampling_down_factor
;
dbs_freq_increase
(
policy
,
policy
->
max
);
dbs_freq_increase
(
policy
,
policy
->
max
);
return
;
return
;
}
}
else
{
/* Calculate the next frequency proportional to load */
/* Check for frequency decrease */
/* if we cannot reduce the frequency anymore, break out early */
if
(
policy
->
cur
==
policy
->
min
)
return
;
/*
* The optimal frequency is the frequency that is the lowest that can
* support the current CPU usage without triggering the up policy. To be
* safe, we focus 10 points under the threshold.
*/
if
(
load_freq
<
od_tuners
->
adj_up_threshold
*
policy
->
cur
)
{
unsigned
int
freq_next
;
unsigned
int
freq_next
;
freq_next
=
load
_freq
/
od_tuners
->
adj_up_threshold
;
freq_next
=
load
*
policy
->
cpuinfo
.
max_freq
/
100
;
/* No longer fully busy, reset rate_mult */
/* No longer fully busy, reset rate_mult */
dbs_info
->
rate_mult
=
1
;
dbs_info
->
rate_mult
=
1
;
...
@@ -374,9 +346,6 @@ static ssize_t store_up_threshold(struct dbs_data *dbs_data, const char *buf,
...
@@ -374,9 +346,6 @@ static ssize_t store_up_threshold(struct dbs_data *dbs_data, const char *buf,
input
<
MIN_FREQUENCY_UP_THRESHOLD
)
{
input
<
MIN_FREQUENCY_UP_THRESHOLD
)
{
return
-
EINVAL
;
return
-
EINVAL
;
}
}
/* Calculate the new adj_up_threshold */
od_tuners
->
adj_up_threshold
+=
input
;
od_tuners
->
adj_up_threshold
-=
od_tuners
->
up_threshold
;
od_tuners
->
up_threshold
=
input
;
od_tuners
->
up_threshold
=
input
;
return
count
;
return
count
;
...
@@ -513,7 +482,7 @@ static int od_init(struct dbs_data *dbs_data)
...
@@ -513,7 +482,7 @@ static int od_init(struct dbs_data *dbs_data)
u64
idle_time
;
u64
idle_time
;
int
cpu
;
int
cpu
;
tuners
=
kzalloc
(
sizeof
(
struct
od_dbs_
tuners
),
GFP_KERNEL
);
tuners
=
kzalloc
(
sizeof
(
*
tuners
),
GFP_KERNEL
);
if
(
!
tuners
)
{
if
(
!
tuners
)
{
pr_err
(
"%s: kzalloc failed
\n
"
,
__func__
);
pr_err
(
"%s: kzalloc failed
\n
"
,
__func__
);
return
-
ENOMEM
;
return
-
ENOMEM
;
...
@@ -525,8 +494,6 @@ static int od_init(struct dbs_data *dbs_data)
...
@@ -525,8 +494,6 @@ static int od_init(struct dbs_data *dbs_data)
if
(
idle_time
!=
-
1ULL
)
{
if
(
idle_time
!=
-
1ULL
)
{
/* Idle micro accounting is supported. Use finer thresholds */
/* Idle micro accounting is supported. Use finer thresholds */
tuners
->
up_threshold
=
MICRO_FREQUENCY_UP_THRESHOLD
;
tuners
->
up_threshold
=
MICRO_FREQUENCY_UP_THRESHOLD
;
tuners
->
adj_up_threshold
=
MICRO_FREQUENCY_UP_THRESHOLD
-
MICRO_FREQUENCY_DOWN_DIFFERENTIAL
;
/*
/*
* In nohz/micro accounting case we set the minimum frequency
* In nohz/micro accounting case we set the minimum frequency
* not depending on HZ, but fixed (very low). The deferred
* not depending on HZ, but fixed (very low). The deferred
...
@@ -535,8 +502,6 @@ static int od_init(struct dbs_data *dbs_data)
...
@@ -535,8 +502,6 @@ static int od_init(struct dbs_data *dbs_data)
dbs_data
->
min_sampling_rate
=
MICRO_FREQUENCY_MIN_SAMPLE_RATE
;
dbs_data
->
min_sampling_rate
=
MICRO_FREQUENCY_MIN_SAMPLE_RATE
;
}
else
{
}
else
{
tuners
->
up_threshold
=
DEF_FREQUENCY_UP_THRESHOLD
;
tuners
->
up_threshold
=
DEF_FREQUENCY_UP_THRESHOLD
;
tuners
->
adj_up_threshold
=
DEF_FREQUENCY_UP_THRESHOLD
-
DEF_FREQUENCY_DOWN_DIFFERENTIAL
;
/* For correct statistics, we need 10 ticks for each measure */
/* For correct statistics, we need 10 ticks for each measure */
dbs_data
->
min_sampling_rate
=
MIN_SAMPLING_RATE_RATIO
*
dbs_data
->
min_sampling_rate
=
MIN_SAMPLING_RATE_RATIO
*
...
...
drivers/cpufreq/cpufreq_performance.c
浏览文件 @
4eb5178c
...
@@ -12,10 +12,9 @@
...
@@ -12,10 +12,9 @@
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/cpufreq.h>
#include <linux/cpufreq.h>
#include <linux/init.h>
#include <linux/init.h>
#include <linux/module.h>
static
int
cpufreq_governor_performance
(
struct
cpufreq_policy
*
policy
,
static
int
cpufreq_governor_performance
(
struct
cpufreq_policy
*
policy
,
unsigned
int
event
)
unsigned
int
event
)
...
...
drivers/cpufreq/cpufreq_powersave.c
浏览文件 @
4eb5178c
...
@@ -12,10 +12,9 @@
...
@@ -12,10 +12,9 @@
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/cpufreq.h>
#include <linux/cpufreq.h>
#include <linux/init.h>
#include <linux/init.h>
#include <linux/module.h>
static
int
cpufreq_governor_powersave
(
struct
cpufreq_policy
*
policy
,
static
int
cpufreq_governor_powersave
(
struct
cpufreq_policy
*
policy
,
unsigned
int
event
)
unsigned
int
event
)
...
...
drivers/cpufreq/cpufreq_stats.c
浏览文件 @
4eb5178c
...
@@ -9,17 +9,10 @@
...
@@ -9,17 +9,10 @@
* published by the Free Software Foundation.
* published by the Free Software Foundation.
*/
*/
#include <linux/kernel.h>
#include <linux/slab.h>
#include <linux/cpu.h>
#include <linux/cpu.h>
#include <linux/sysfs.h>
#include <linux/cpufreq.h>
#include <linux/cpufreq.h>
#include <linux/module.h>
#include <linux/module.h>
#include <linux/jiffies.h>
#include <linux/slab.h>
#include <linux/percpu.h>
#include <linux/kobject.h>
#include <linux/spinlock.h>
#include <linux/notifier.h>
#include <asm/cputime.h>
#include <asm/cputime.h>
static
spinlock_t
cpufreq_stats_lock
;
static
spinlock_t
cpufreq_stats_lock
;
...
@@ -200,22 +193,22 @@ static int cpufreq_stats_create_table(struct cpufreq_policy *policy,
...
@@ -200,22 +193,22 @@ static int cpufreq_stats_create_table(struct cpufreq_policy *policy,
{
{
unsigned
int
i
,
j
,
count
=
0
,
ret
=
0
;
unsigned
int
i
,
j
,
count
=
0
,
ret
=
0
;
struct
cpufreq_stats
*
stat
;
struct
cpufreq_stats
*
stat
;
struct
cpufreq_policy
*
data
;
struct
cpufreq_policy
*
current_policy
;
unsigned
int
alloc_size
;
unsigned
int
alloc_size
;
unsigned
int
cpu
=
policy
->
cpu
;
unsigned
int
cpu
=
policy
->
cpu
;
if
(
per_cpu
(
cpufreq_stats_table
,
cpu
))
if
(
per_cpu
(
cpufreq_stats_table
,
cpu
))
return
-
EBUSY
;
return
-
EBUSY
;
stat
=
kzalloc
(
sizeof
(
struct
cpufreq_stats
),
GFP_KERNEL
);
stat
=
kzalloc
(
sizeof
(
*
stat
),
GFP_KERNEL
);
if
((
stat
)
==
NULL
)
if
((
stat
)
==
NULL
)
return
-
ENOMEM
;
return
-
ENOMEM
;
data
=
cpufreq_cpu_get
(
cpu
);
current_policy
=
cpufreq_cpu_get
(
cpu
);
if
(
data
==
NULL
)
{
if
(
current_policy
==
NULL
)
{
ret
=
-
EINVAL
;
ret
=
-
EINVAL
;
goto
error_get_fail
;
goto
error_get_fail
;
}
}
ret
=
sysfs_create_group
(
&
data
->
kobj
,
&
stats_attr_group
);
ret
=
sysfs_create_group
(
&
current_policy
->
kobj
,
&
stats_attr_group
);
if
(
ret
)
if
(
ret
)
goto
error_out
;
goto
error_out
;
...
@@ -258,10 +251,10 @@ static int cpufreq_stats_create_table(struct cpufreq_policy *policy,
...
@@ -258,10 +251,10 @@ static int cpufreq_stats_create_table(struct cpufreq_policy *policy,
stat
->
last_time
=
get_jiffies_64
();
stat
->
last_time
=
get_jiffies_64
();
stat
->
last_index
=
freq_table_get_index
(
stat
,
policy
->
cur
);
stat
->
last_index
=
freq_table_get_index
(
stat
,
policy
->
cur
);
spin_unlock
(
&
cpufreq_stats_lock
);
spin_unlock
(
&
cpufreq_stats_lock
);
cpufreq_cpu_put
(
data
);
cpufreq_cpu_put
(
current_policy
);
return
0
;
return
0
;
error_out:
error_out:
cpufreq_cpu_put
(
data
);
cpufreq_cpu_put
(
current_policy
);
error_get_fail:
error_get_fail:
kfree
(
stat
);
kfree
(
stat
);
per_cpu
(
cpufreq_stats_table
,
cpu
)
=
NULL
;
per_cpu
(
cpufreq_stats_table
,
cpu
)
=
NULL
;
...
@@ -348,16 +341,10 @@ static int cpufreq_stat_cpu_callback(struct notifier_block *nfb,
...
@@ -348,16 +341,10 @@ static int cpufreq_stat_cpu_callback(struct notifier_block *nfb,
unsigned
int
cpu
=
(
unsigned
long
)
hcpu
;
unsigned
int
cpu
=
(
unsigned
long
)
hcpu
;
switch
(
action
)
{
switch
(
action
)
{
case
CPU_ONLINE
:
case
CPU_ONLINE_FROZEN
:
cpufreq_update_policy
(
cpu
);
break
;
case
CPU_DOWN_PREPARE
:
case
CPU_DOWN_PREPARE
:
case
CPU_DOWN_PREPARE_FROZEN
:
cpufreq_stats_free_sysfs
(
cpu
);
cpufreq_stats_free_sysfs
(
cpu
);
break
;
break
;
case
CPU_DEAD
:
case
CPU_DEAD
:
case
CPU_DEAD_FROZEN
:
cpufreq_stats_free_table
(
cpu
);
cpufreq_stats_free_table
(
cpu
);
break
;
break
;
}
}
...
@@ -390,8 +377,6 @@ static int __init cpufreq_stats_init(void)
...
@@ -390,8 +377,6 @@ static int __init cpufreq_stats_init(void)
return
ret
;
return
ret
;
register_hotcpu_notifier
(
&
cpufreq_stat_cpu_notifier
);
register_hotcpu_notifier
(
&
cpufreq_stat_cpu_notifier
);
for_each_online_cpu
(
cpu
)
cpufreq_update_policy
(
cpu
);
ret
=
cpufreq_register_notifier
(
&
notifier_trans_block
,
ret
=
cpufreq_register_notifier
(
&
notifier_trans_block
,
CPUFREQ_TRANSITION_NOTIFIER
);
CPUFREQ_TRANSITION_NOTIFIER
);
...
...
drivers/cpufreq/cris-artpec3-cpufreq.c
浏览文件 @
4eb5178c
...
@@ -111,7 +111,6 @@ static struct cpufreq_driver cris_freq_driver = {
...
@@ -111,7 +111,6 @@ static struct cpufreq_driver cris_freq_driver = {
.
init
=
cris_freq_cpu_init
,
.
init
=
cris_freq_cpu_init
,
.
exit
=
cris_freq_cpu_exit
,
.
exit
=
cris_freq_cpu_exit
,
.
name
=
"cris_freq"
,
.
name
=
"cris_freq"
,
.
owner
=
THIS_MODULE
,
.
attr
=
cris_freq_attr
,
.
attr
=
cris_freq_attr
,
};
};
...
...
drivers/cpufreq/cris-etraxfs-cpufreq.c
浏览文件 @
4eb5178c
...
@@ -108,7 +108,6 @@ static struct cpufreq_driver cris_freq_driver = {
...
@@ -108,7 +108,6 @@ static struct cpufreq_driver cris_freq_driver = {
.
init
=
cris_freq_cpu_init
,
.
init
=
cris_freq_cpu_init
,
.
exit
=
cris_freq_cpu_exit
,
.
exit
=
cris_freq_cpu_exit
,
.
name
=
"cris_freq"
,
.
name
=
"cris_freq"
,
.
owner
=
THIS_MODULE
,
.
attr
=
cris_freq_attr
,
.
attr
=
cris_freq_attr
,
};
};
...
...
drivers/cpufreq/e_powersaver.c
浏览文件 @
4eb5178c
...
@@ -54,7 +54,7 @@ static struct acpi_processor_performance *eps_acpi_cpu_perf;
...
@@ -54,7 +54,7 @@ static struct acpi_processor_performance *eps_acpi_cpu_perf;
/* Minimum necessary to get acpi_processor_get_bios_limit() working */
/* Minimum necessary to get acpi_processor_get_bios_limit() working */
static
int
eps_acpi_init
(
void
)
static
int
eps_acpi_init
(
void
)
{
{
eps_acpi_cpu_perf
=
kzalloc
(
sizeof
(
struct
acpi_processor_performance
),
eps_acpi_cpu_perf
=
kzalloc
(
sizeof
(
*
eps_acpi_cpu_perf
),
GFP_KERNEL
);
GFP_KERNEL
);
if
(
!
eps_acpi_cpu_perf
)
if
(
!
eps_acpi_cpu_perf
)
return
-
ENOMEM
;
return
-
ENOMEM
;
...
@@ -366,7 +366,7 @@ static int eps_cpu_init(struct cpufreq_policy *policy)
...
@@ -366,7 +366,7 @@ static int eps_cpu_init(struct cpufreq_policy *policy)
states
=
2
;
states
=
2
;
/* Allocate private data and frequency table for current cpu */
/* Allocate private data and frequency table for current cpu */
centaur
=
kzalloc
(
sizeof
(
struct
eps_cpu_data
)
centaur
=
kzalloc
(
sizeof
(
*
centaur
)
+
(
states
+
1
)
*
sizeof
(
struct
cpufreq_frequency_table
),
+
(
states
+
1
)
*
sizeof
(
struct
cpufreq_frequency_table
),
GFP_KERNEL
);
GFP_KERNEL
);
if
(
!
centaur
)
if
(
!
centaur
)
...
@@ -436,7 +436,6 @@ static struct cpufreq_driver eps_driver = {
...
@@ -436,7 +436,6 @@ static struct cpufreq_driver eps_driver = {
.
exit
=
eps_cpu_exit
,
.
exit
=
eps_cpu_exit
,
.
get
=
eps_get
,
.
get
=
eps_get
,
.
name
=
"e_powersaver"
,
.
name
=
"e_powersaver"
,
.
owner
=
THIS_MODULE
,
.
attr
=
eps_attr
,
.
attr
=
eps_attr
,
};
};
...
...
drivers/cpufreq/elanfreq.c
浏览文件 @
4eb5178c
...
@@ -274,7 +274,6 @@ static struct cpufreq_driver elanfreq_driver = {
...
@@ -274,7 +274,6 @@ static struct cpufreq_driver elanfreq_driver = {
.
init
=
elanfreq_cpu_init
,
.
init
=
elanfreq_cpu_init
,
.
exit
=
elanfreq_cpu_exit
,
.
exit
=
elanfreq_cpu_exit
,
.
name
=
"elanfreq"
,
.
name
=
"elanfreq"
,
.
owner
=
THIS_MODULE
,
.
attr
=
elanfreq_attr
,
.
attr
=
elanfreq_attr
,
};
};
...
...
drivers/cpufreq/exynos-cpufreq.c
浏览文件 @
4eb5178c
...
@@ -289,7 +289,7 @@ static int __init exynos_cpufreq_init(void)
...
@@ -289,7 +289,7 @@ static int __init exynos_cpufreq_init(void)
{
{
int
ret
=
-
EINVAL
;
int
ret
=
-
EINVAL
;
exynos_info
=
kzalloc
(
sizeof
(
struct
exynos_dvf
s_info
),
GFP_KERNEL
);
exynos_info
=
kzalloc
(
sizeof
(
*
exyno
s_info
),
GFP_KERNEL
);
if
(
!
exynos_info
)
if
(
!
exynos_info
)
return
-
ENOMEM
;
return
-
ENOMEM
;
...
@@ -332,7 +332,6 @@ static int __init exynos_cpufreq_init(void)
...
@@ -332,7 +332,6 @@ static int __init exynos_cpufreq_init(void)
regulator_put
(
arm_regulator
);
regulator_put
(
arm_regulator
);
err_vdd_arm:
err_vdd_arm:
kfree
(
exynos_info
);
kfree
(
exynos_info
);
pr_debug
(
"%s: failed initialization
\n
"
,
__func__
);
return
-
EINVAL
;
return
-
EINVAL
;
}
}
late_initcall
(
exynos_cpufreq_init
);
late_initcall
(
exynos_cpufreq_init
);
drivers/cpufreq/exynos-cpufreq.h
浏览文件 @
4eb5178c
...
@@ -43,6 +43,27 @@ struct exynos_dvfs_info {
...
@@ -43,6 +43,27 @@ struct exynos_dvfs_info {
bool
(
*
need_apll_change
)(
unsigned
int
,
unsigned
int
);
bool
(
*
need_apll_change
)(
unsigned
int
,
unsigned
int
);
};
};
#ifdef CONFIG_ARM_EXYNOS4210_CPUFREQ
extern
int
exynos4210_cpufreq_init
(
struct
exynos_dvfs_info
*
);
extern
int
exynos4210_cpufreq_init
(
struct
exynos_dvfs_info
*
);
#else
static
inline
int
exynos4210_cpufreq_init
(
struct
exynos_dvfs_info
*
info
)
{
return
-
EOPNOTSUPP
;
}
#endif
#ifdef CONFIG_ARM_EXYNOS4X12_CPUFREQ
extern
int
exynos4x12_cpufreq_init
(
struct
exynos_dvfs_info
*
);
extern
int
exynos4x12_cpufreq_init
(
struct
exynos_dvfs_info
*
);
#else
static
inline
int
exynos4x12_cpufreq_init
(
struct
exynos_dvfs_info
*
info
)
{
return
-
EOPNOTSUPP
;
}
#endif
#ifdef CONFIG_ARM_EXYNOS5250_CPUFREQ
extern
int
exynos5250_cpufreq_init
(
struct
exynos_dvfs_info
*
);
extern
int
exynos5250_cpufreq_init
(
struct
exynos_dvfs_info
*
);
#else
static
inline
int
exynos5250_cpufreq_init
(
struct
exynos_dvfs_info
*
info
)
{
return
-
EOPNOTSUPP
;
}
#endif
drivers/cpufreq/exynos5440-cpufreq.c
浏览文件 @
4eb5178c
...
@@ -238,6 +238,9 @@ static int exynos_target(struct cpufreq_policy *policy,
...
@@ -238,6 +238,9 @@ static int exynos_target(struct cpufreq_policy *policy,
freqs
.
old
=
dvfs_info
->
cur_frequency
;
freqs
.
old
=
dvfs_info
->
cur_frequency
;
freqs
.
new
=
freq_table
[
index
].
frequency
;
freqs
.
new
=
freq_table
[
index
].
frequency
;
if
(
freqs
.
old
==
freqs
.
new
)
goto
out
;
cpufreq_notify_transition
(
policy
,
&
freqs
,
CPUFREQ_PRECHANGE
);
cpufreq_notify_transition
(
policy
,
&
freqs
,
CPUFREQ_PRECHANGE
);
/* Set the target frequency in all C0_3_PSTATE register */
/* Set the target frequency in all C0_3_PSTATE register */
...
...
drivers/cpufreq/freq_table.c
浏览文件 @
4eb5178c
...
@@ -11,10 +11,8 @@
...
@@ -11,10 +11,8 @@
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/init.h>
#include <linux/cpufreq.h>
#include <linux/cpufreq.h>
#include <linux/module.h>
/*********************************************************************
/*********************************************************************
* FREQUENCY TABLE HELPERS *
* FREQUENCY TABLE HELPERS *
...
...
drivers/cpufreq/gx-suspmod.c
浏览文件 @
4eb5178c
...
@@ -183,7 +183,7 @@ static void gx_write_byte(int reg, int value)
...
@@ -183,7 +183,7 @@ static void gx_write_byte(int reg, int value)
* gx_detect_chipset:
* gx_detect_chipset:
*
*
**/
**/
static
__init
struct
pci_dev
*
gx_detect_chipset
(
void
)
static
struct
pci_dev
*
__init
gx_detect_chipset
(
void
)
{
{
struct
pci_dev
*
gx_pci
=
NULL
;
struct
pci_dev
*
gx_pci
=
NULL
;
...
@@ -446,7 +446,6 @@ static struct cpufreq_driver gx_suspmod_driver = {
...
@@ -446,7 +446,6 @@ static struct cpufreq_driver gx_suspmod_driver = {
.
target
=
cpufreq_gx_target
,
.
target
=
cpufreq_gx_target
,
.
init
=
cpufreq_gx_cpu_init
,
.
init
=
cpufreq_gx_cpu_init
,
.
name
=
"gx-suspmod"
,
.
name
=
"gx-suspmod"
,
.
owner
=
THIS_MODULE
,
};
};
static
int
__init
cpufreq_gx_init
(
void
)
static
int
__init
cpufreq_gx_init
(
void
)
...
@@ -466,7 +465,7 @@ static int __init cpufreq_gx_init(void)
...
@@ -466,7 +465,7 @@ static int __init cpufreq_gx_init(void)
pr_debug
(
"geode suspend modulation available.
\n
"
);
pr_debug
(
"geode suspend modulation available.
\n
"
);
params
=
kzalloc
(
sizeof
(
struct
gxfreq_
params
),
GFP_KERNEL
);
params
=
kzalloc
(
sizeof
(
*
params
),
GFP_KERNEL
);
if
(
params
==
NULL
)
if
(
params
==
NULL
)
return
-
ENOMEM
;
return
-
ENOMEM
;
...
...
drivers/cpufreq/ia64-acpi-cpufreq.c
浏览文件 @
4eb5178c
...
@@ -274,7 +274,7 @@ acpi_cpufreq_cpu_init (
...
@@ -274,7 +274,7 @@ acpi_cpufreq_cpu_init (
pr_debug
(
"acpi_cpufreq_cpu_init
\n
"
);
pr_debug
(
"acpi_cpufreq_cpu_init
\n
"
);
data
=
kzalloc
(
sizeof
(
struct
cpufreq_acpi_io
),
GFP_KERNEL
);
data
=
kzalloc
(
sizeof
(
*
data
),
GFP_KERNEL
);
if
(
!
data
)
if
(
!
data
)
return
(
-
ENOMEM
);
return
(
-
ENOMEM
);
...
@@ -304,7 +304,7 @@ acpi_cpufreq_cpu_init (
...
@@ -304,7 +304,7 @@ acpi_cpufreq_cpu_init (
}
}
/* alloc freq_table */
/* alloc freq_table */
data
->
freq_table
=
kmalloc
(
sizeof
(
struct
cpufreq_frequency
_table
)
*
data
->
freq_table
=
kmalloc
(
sizeof
(
*
data
->
freq
_table
)
*
(
data
->
acpi_data
.
state_count
+
1
),
(
data
->
acpi_data
.
state_count
+
1
),
GFP_KERNEL
);
GFP_KERNEL
);
if
(
!
data
->
freq_table
)
{
if
(
!
data
->
freq_table
)
{
...
@@ -409,7 +409,6 @@ static struct cpufreq_driver acpi_cpufreq_driver = {
...
@@ -409,7 +409,6 @@ static struct cpufreq_driver acpi_cpufreq_driver = {
.
init
=
acpi_cpufreq_cpu_init
,
.
init
=
acpi_cpufreq_cpu_init
,
.
exit
=
acpi_cpufreq_cpu_exit
,
.
exit
=
acpi_cpufreq_cpu_exit
,
.
name
=
"acpi-cpufreq"
,
.
name
=
"acpi-cpufreq"
,
.
owner
=
THIS_MODULE
,
.
attr
=
acpi_cpufreq_attr
,
.
attr
=
acpi_cpufreq_attr
,
};
};
...
...
drivers/cpufreq/intel_pstate.c
浏览文件 @
4eb5178c
...
@@ -665,7 +665,6 @@ static struct cpufreq_driver intel_pstate_driver = {
...
@@ -665,7 +665,6 @@ static struct cpufreq_driver intel_pstate_driver = {
.
init
=
intel_pstate_cpu_init
,
.
init
=
intel_pstate_cpu_init
,
.
exit
=
intel_pstate_cpu_exit
,
.
exit
=
intel_pstate_cpu_exit
,
.
name
=
"intel_pstate"
,
.
name
=
"intel_pstate"
,
.
owner
=
THIS_MODULE
,
};
};
static
int
__initdata
no_load
;
static
int
__initdata
no_load
;
...
...
drivers/cpufreq/kirkwood-cpufreq.c
浏览文件 @
4eb5178c
...
@@ -158,7 +158,6 @@ static struct cpufreq_driver kirkwood_cpufreq_driver = {
...
@@ -158,7 +158,6 @@ static struct cpufreq_driver kirkwood_cpufreq_driver = {
.
init
=
kirkwood_cpufreq_cpu_init
,
.
init
=
kirkwood_cpufreq_cpu_init
,
.
exit
=
kirkwood_cpufreq_cpu_exit
,
.
exit
=
kirkwood_cpufreq_cpu_exit
,
.
name
=
"kirkwood-cpufreq"
,
.
name
=
"kirkwood-cpufreq"
,
.
owner
=
THIS_MODULE
,
.
attr
=
kirkwood_cpufreq_attr
,
.
attr
=
kirkwood_cpufreq_attr
,
};
};
...
...
drivers/cpufreq/longhaul.c
浏览文件 @
4eb5178c
...
@@ -948,7 +948,6 @@ static struct cpufreq_driver longhaul_driver = {
...
@@ -948,7 +948,6 @@ static struct cpufreq_driver longhaul_driver = {
.
init
=
longhaul_cpu_init
,
.
init
=
longhaul_cpu_init
,
.
exit
=
longhaul_cpu_exit
,
.
exit
=
longhaul_cpu_exit
,
.
name
=
"longhaul"
,
.
name
=
"longhaul"
,
.
owner
=
THIS_MODULE
,
.
attr
=
longhaul_attr
,
.
attr
=
longhaul_attr
,
};
};
...
...
drivers/cpufreq/longrun.c
浏览文件 @
4eb5178c
...
@@ -286,7 +286,6 @@ static struct cpufreq_driver longrun_driver = {
...
@@ -286,7 +286,6 @@ static struct cpufreq_driver longrun_driver = {
.
get
=
longrun_get
,
.
get
=
longrun_get
,
.
init
=
longrun_cpu_init
,
.
init
=
longrun_cpu_init
,
.
name
=
"longrun"
,
.
name
=
"longrun"
,
.
owner
=
THIS_MODULE
,
};
};
static
const
struct
x86_cpu_id
longrun_ids
[]
=
{
static
const
struct
x86_cpu_id
longrun_ids
[]
=
{
...
...
drivers/cpufreq/loongson2_cpufreq.c
浏览文件 @
4eb5178c
...
@@ -158,7 +158,6 @@ static struct freq_attr *loongson2_table_attr[] = {
...
@@ -158,7 +158,6 @@ static struct freq_attr *loongson2_table_attr[] = {
};
};
static
struct
cpufreq_driver
loongson2_cpufreq_driver
=
{
static
struct
cpufreq_driver
loongson2_cpufreq_driver
=
{
.
owner
=
THIS_MODULE
,
.
name
=
"loongson2"
,
.
name
=
"loongson2"
,
.
init
=
loongson2_cpufreq_cpu_init
,
.
init
=
loongson2_cpufreq_cpu_init
,
.
verify
=
loongson2_cpufreq_verify
,
.
verify
=
loongson2_cpufreq_verify
,
...
...
drivers/cpufreq/maple-cpufreq.c
浏览文件 @
4eb5178c
...
@@ -190,7 +190,6 @@ static int maple_cpufreq_cpu_init(struct cpufreq_policy *policy)
...
@@ -190,7 +190,6 @@ static int maple_cpufreq_cpu_init(struct cpufreq_policy *policy)
static
struct
cpufreq_driver
maple_cpufreq_driver
=
{
static
struct
cpufreq_driver
maple_cpufreq_driver
=
{
.
name
=
"maple"
,
.
name
=
"maple"
,
.
owner
=
THIS_MODULE
,
.
flags
=
CPUFREQ_CONST_LOOPS
,
.
flags
=
CPUFREQ_CONST_LOOPS
,
.
init
=
maple_cpufreq_cpu_init
,
.
init
=
maple_cpufreq_cpu_init
,
.
verify
=
maple_cpufreq_verify
,
.
verify
=
maple_cpufreq_verify
,
...
...
drivers/cpufreq/mperf.c
已删除
100644 → 0
浏览文件 @
b36f4be3
#include <linux/kernel.h>
#include <linux/smp.h>
#include <linux/module.h>
#include <linux/init.h>
#include <linux/cpufreq.h>
#include <linux/slab.h>
#include "mperf.h"
static
DEFINE_PER_CPU
(
struct
aperfmperf
,
acfreq_old_perf
);
/* Called via smp_call_function_single(), on the target CPU */
static
void
read_measured_perf_ctrs
(
void
*
_cur
)
{
struct
aperfmperf
*
am
=
_cur
;
get_aperfmperf
(
am
);
}
/*
* Return the measured active (C0) frequency on this CPU since last call
* to this function.
* Input: cpu number
* Return: Average CPU frequency in terms of max frequency (zero on error)
*
* We use IA32_MPERF and IA32_APERF MSRs to get the measured performance
* over a period of time, while CPU is in C0 state.
* IA32_MPERF counts at the rate of max advertised frequency
* IA32_APERF counts at the rate of actual CPU frequency
* Only IA32_APERF/IA32_MPERF ratio is architecturally defined and
* no meaning should be associated with absolute values of these MSRs.
*/
unsigned
int
cpufreq_get_measured_perf
(
struct
cpufreq_policy
*
policy
,
unsigned
int
cpu
)
{
struct
aperfmperf
perf
;
unsigned
long
ratio
;
unsigned
int
retval
;
if
(
smp_call_function_single
(
cpu
,
read_measured_perf_ctrs
,
&
perf
,
1
))
return
0
;
ratio
=
calc_aperfmperf_ratio
(
&
per_cpu
(
acfreq_old_perf
,
cpu
),
&
perf
);
per_cpu
(
acfreq_old_perf
,
cpu
)
=
perf
;
retval
=
(
policy
->
cpuinfo
.
max_freq
*
ratio
)
>>
APERFMPERF_SHIFT
;
return
retval
;
}
EXPORT_SYMBOL_GPL
(
cpufreq_get_measured_perf
);
MODULE_LICENSE
(
"GPL"
);
drivers/cpufreq/mperf.h
已删除
100644 → 0
浏览文件 @
b36f4be3
/*
* (c) 2010 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
*/
unsigned
int
cpufreq_get_measured_perf
(
struct
cpufreq_policy
*
policy
,
unsigned
int
cpu
);
drivers/cpufreq/p4-clockmod.c
浏览文件 @
4eb5178c
...
@@ -279,7 +279,6 @@ static struct cpufreq_driver p4clockmod_driver = {
...
@@ -279,7 +279,6 @@ static struct cpufreq_driver p4clockmod_driver = {
.
exit
=
cpufreq_p4_cpu_exit
,
.
exit
=
cpufreq_p4_cpu_exit
,
.
get
=
cpufreq_p4_get
,
.
get
=
cpufreq_p4_get
,
.
name
=
"p4-clockmod"
,
.
name
=
"p4-clockmod"
,
.
owner
=
THIS_MODULE
,
.
attr
=
p4clockmod_attr
,
.
attr
=
p4clockmod_attr
,
};
};
...
...
drivers/cpufreq/pasemi-cpufreq.c
浏览文件 @
4eb5178c
...
@@ -297,7 +297,6 @@ static int pas_cpufreq_target(struct cpufreq_policy *policy,
...
@@ -297,7 +297,6 @@ static int pas_cpufreq_target(struct cpufreq_policy *policy,
static
struct
cpufreq_driver
pas_cpufreq_driver
=
{
static
struct
cpufreq_driver
pas_cpufreq_driver
=
{
.
name
=
"pas-cpufreq"
,
.
name
=
"pas-cpufreq"
,
.
owner
=
THIS_MODULE
,
.
flags
=
CPUFREQ_CONST_LOOPS
,
.
flags
=
CPUFREQ_CONST_LOOPS
,
.
init
=
pas_cpufreq_cpu_init
,
.
init
=
pas_cpufreq_cpu_init
,
.
exit
=
pas_cpufreq_cpu_exit
,
.
exit
=
pas_cpufreq_cpu_exit
,
...
...
drivers/cpufreq/pcc-cpufreq.c
浏览文件 @
4eb5178c
...
@@ -587,7 +587,6 @@ static struct cpufreq_driver pcc_cpufreq_driver = {
...
@@ -587,7 +587,6 @@ static struct cpufreq_driver pcc_cpufreq_driver = {
.
init
=
pcc_cpufreq_cpu_init
,
.
init
=
pcc_cpufreq_cpu_init
,
.
exit
=
pcc_cpufreq_cpu_exit
,
.
exit
=
pcc_cpufreq_cpu_exit
,
.
name
=
"pcc-cpufreq"
,
.
name
=
"pcc-cpufreq"
,
.
owner
=
THIS_MODULE
,
};
};
static
int
__init
pcc_cpufreq_init
(
void
)
static
int
__init
pcc_cpufreq_init
(
void
)
...
...
drivers/cpufreq/pmac32-cpufreq.c
浏览文件 @
4eb5178c
...
@@ -477,7 +477,6 @@ static struct cpufreq_driver pmac_cpufreq_driver = {
...
@@ -477,7 +477,6 @@ static struct cpufreq_driver pmac_cpufreq_driver = {
.
flags
=
CPUFREQ_PM_NO_WARN
,
.
flags
=
CPUFREQ_PM_NO_WARN
,
.
attr
=
pmac_cpu_freqs_attr
,
.
attr
=
pmac_cpu_freqs_attr
,
.
name
=
"powermac"
,
.
name
=
"powermac"
,
.
owner
=
THIS_MODULE
,
};
};
...
...
drivers/cpufreq/pmac64-cpufreq.c
浏览文件 @
4eb5178c
...
@@ -371,7 +371,6 @@ static int g5_cpufreq_cpu_init(struct cpufreq_policy *policy)
...
@@ -371,7 +371,6 @@ static int g5_cpufreq_cpu_init(struct cpufreq_policy *policy)
static
struct
cpufreq_driver
g5_cpufreq_driver
=
{
static
struct
cpufreq_driver
g5_cpufreq_driver
=
{
.
name
=
"powermac"
,
.
name
=
"powermac"
,
.
owner
=
THIS_MODULE
,
.
flags
=
CPUFREQ_CONST_LOOPS
,
.
flags
=
CPUFREQ_CONST_LOOPS
,
.
init
=
g5_cpufreq_cpu_init
,
.
init
=
g5_cpufreq_cpu_init
,
.
verify
=
g5_cpufreq_verify
,
.
verify
=
g5_cpufreq_verify
,
...
@@ -447,9 +446,8 @@ static int __init g5_neo2_cpufreq_init(struct device_node *cpus)
...
@@ -447,9 +446,8 @@ static int __init g5_neo2_cpufreq_init(struct device_node *cpus)
if
(
!
shdr
)
if
(
!
shdr
)
goto
bail_noprops
;
goto
bail_noprops
;
g5_fvt_table
=
(
struct
smu_sdbp_fvt
*
)
&
shdr
[
1
];
g5_fvt_table
=
(
struct
smu_sdbp_fvt
*
)
&
shdr
[
1
];
ssize
=
(
shdr
->
len
*
sizeof
(
u32
))
-
ssize
=
(
shdr
->
len
*
sizeof
(
u32
))
-
sizeof
(
*
shdr
);
sizeof
(
struct
smu_sdbp_header
);
g5_fvt_count
=
ssize
/
sizeof
(
*
g5_fvt_table
);
g5_fvt_count
=
ssize
/
sizeof
(
struct
smu_sdbp_fvt
);
g5_fvt_cur
=
0
;
g5_fvt_cur
=
0
;
/* Sanity checking */
/* Sanity checking */
...
...
drivers/cpufreq/powernow-k6.c
浏览文件 @
4eb5178c
...
@@ -207,7 +207,6 @@ static struct cpufreq_driver powernow_k6_driver = {
...
@@ -207,7 +207,6 @@ static struct cpufreq_driver powernow_k6_driver = {
.
exit
=
powernow_k6_cpu_exit
,
.
exit
=
powernow_k6_cpu_exit
,
.
get
=
powernow_k6_get
,
.
get
=
powernow_k6_get
,
.
name
=
"powernow-k6"
,
.
name
=
"powernow-k6"
,
.
owner
=
THIS_MODULE
,
.
attr
=
powernow_k6_attr
,
.
attr
=
powernow_k6_attr
,
};
};
...
...
drivers/cpufreq/powernow-k7.c
浏览文件 @
4eb5178c
...
@@ -177,7 +177,7 @@ static int get_ranges(unsigned char *pst)
...
@@ -177,7 +177,7 @@ static int get_ranges(unsigned char *pst)
unsigned
int
speed
;
unsigned
int
speed
;
u8
fid
,
vid
;
u8
fid
,
vid
;
powernow_table
=
kzalloc
((
sizeof
(
struct
cpufreq_frequency
_table
)
*
powernow_table
=
kzalloc
((
sizeof
(
*
powernow
_table
)
*
(
number_scales
+
1
)),
GFP_KERNEL
);
(
number_scales
+
1
)),
GFP_KERNEL
);
if
(
!
powernow_table
)
if
(
!
powernow_table
)
return
-
ENOMEM
;
return
-
ENOMEM
;
...
@@ -309,8 +309,7 @@ static int powernow_acpi_init(void)
...
@@ -309,8 +309,7 @@ static int powernow_acpi_init(void)
goto
err0
;
goto
err0
;
}
}
acpi_processor_perf
=
kzalloc
(
sizeof
(
struct
acpi_processor_performance
),
acpi_processor_perf
=
kzalloc
(
sizeof
(
*
acpi_processor_perf
),
GFP_KERNEL
);
GFP_KERNEL
);
if
(
!
acpi_processor_perf
)
{
if
(
!
acpi_processor_perf
)
{
retval
=
-
ENOMEM
;
retval
=
-
ENOMEM
;
goto
err0
;
goto
err0
;
...
@@ -346,7 +345,7 @@ static int powernow_acpi_init(void)
...
@@ -346,7 +345,7 @@ static int powernow_acpi_init(void)
goto
err2
;
goto
err2
;
}
}
powernow_table
=
kzalloc
((
sizeof
(
struct
cpufreq_frequency
_table
)
*
powernow_table
=
kzalloc
((
sizeof
(
*
powernow
_table
)
*
(
number_scales
+
1
)),
GFP_KERNEL
);
(
number_scales
+
1
)),
GFP_KERNEL
);
if
(
!
powernow_table
)
{
if
(
!
powernow_table
)
{
retval
=
-
ENOMEM
;
retval
=
-
ENOMEM
;
...
@@ -497,7 +496,7 @@ static int powernow_decode_bios(int maxfid, int startvid)
...
@@ -497,7 +496,7 @@ static int powernow_decode_bios(int maxfid, int startvid)
"relevant to this CPU).
\n
"
,
"relevant to this CPU).
\n
"
,
psb
->
numpst
);
psb
->
numpst
);
p
+=
sizeof
(
struct
psb_s
);
p
+=
sizeof
(
*
psb
);
pst
=
(
struct
pst_s
*
)
p
;
pst
=
(
struct
pst_s
*
)
p
;
...
@@ -510,12 +509,12 @@ static int powernow_decode_bios(int maxfid, int startvid)
...
@@ -510,12 +509,12 @@ static int powernow_decode_bios(int maxfid, int startvid)
(
maxfid
==
pst
->
maxfid
)
&&
(
maxfid
==
pst
->
maxfid
)
&&
(
startvid
==
pst
->
startvid
))
{
(
startvid
==
pst
->
startvid
))
{
print_pst_entry
(
pst
,
j
);
print_pst_entry
(
pst
,
j
);
p
=
(
char
*
)
pst
+
sizeof
(
struct
pst_s
);
p
=
(
char
*
)
pst
+
sizeof
(
*
pst
);
ret
=
get_ranges
(
p
);
ret
=
get_ranges
(
p
);
return
ret
;
return
ret
;
}
else
{
}
else
{
unsigned
int
k
;
unsigned
int
k
;
p
=
(
char
*
)
pst
+
sizeof
(
struct
pst_s
);
p
=
(
char
*
)
pst
+
sizeof
(
*
pst
);
for
(
k
=
0
;
k
<
number_scales
;
k
++
)
for
(
k
=
0
;
k
<
number_scales
;
k
++
)
p
+=
2
;
p
+=
2
;
}
}
...
@@ -717,7 +716,6 @@ static struct cpufreq_driver powernow_driver = {
...
@@ -717,7 +716,6 @@ static struct cpufreq_driver powernow_driver = {
.
init
=
powernow_cpu_init
,
.
init
=
powernow_cpu_init
,
.
exit
=
powernow_cpu_exit
,
.
exit
=
powernow_cpu_exit
,
.
name
=
"powernow-k7"
,
.
name
=
"powernow-k7"
,
.
owner
=
THIS_MODULE
,
.
attr
=
powernow_table_attr
,
.
attr
=
powernow_table_attr
,
};
};
...
...
drivers/cpufreq/powernow-k8.c
浏览文件 @
4eb5178c
...
@@ -623,7 +623,7 @@ static int fill_powernow_table(struct powernow_k8_data *data,
...
@@ -623,7 +623,7 @@ static int fill_powernow_table(struct powernow_k8_data *data,
if
(
check_pst_table
(
data
,
pst
,
maxvid
))
if
(
check_pst_table
(
data
,
pst
,
maxvid
))
return
-
EINVAL
;
return
-
EINVAL
;
powernow_table
=
kmalloc
((
sizeof
(
struct
cpufreq_frequency
_table
)
powernow_table
=
kmalloc
((
sizeof
(
*
powernow
_table
)
*
(
data
->
numps
+
1
)),
GFP_KERNEL
);
*
(
data
->
numps
+
1
)),
GFP_KERNEL
);
if
(
!
powernow_table
)
{
if
(
!
powernow_table
)
{
printk
(
KERN_ERR
PFX
"powernow_table memory alloc failure
\n
"
);
printk
(
KERN_ERR
PFX
"powernow_table memory alloc failure
\n
"
);
...
@@ -793,7 +793,7 @@ static int powernow_k8_cpu_init_acpi(struct powernow_k8_data *data)
...
@@ -793,7 +793,7 @@ static int powernow_k8_cpu_init_acpi(struct powernow_k8_data *data)
}
}
/* fill in data->powernow_table */
/* fill in data->powernow_table */
powernow_table
=
kmalloc
((
sizeof
(
struct
cpufreq_frequency
_table
)
powernow_table
=
kmalloc
((
sizeof
(
*
powernow
_table
)
*
(
data
->
acpi_data
.
state_count
+
1
)),
GFP_KERNEL
);
*
(
data
->
acpi_data
.
state_count
+
1
)),
GFP_KERNEL
);
if
(
!
powernow_table
)
{
if
(
!
powernow_table
)
{
pr_debug
(
"powernow_table memory alloc failure
\n
"
);
pr_debug
(
"powernow_table memory alloc failure
\n
"
);
...
@@ -1106,7 +1106,7 @@ static int powernowk8_cpu_init(struct cpufreq_policy *pol)
...
@@ -1106,7 +1106,7 @@ static int powernowk8_cpu_init(struct cpufreq_policy *pol)
if
(
rc
)
if
(
rc
)
return
-
ENODEV
;
return
-
ENODEV
;
data
=
kzalloc
(
sizeof
(
struct
powernow_k8_
data
),
GFP_KERNEL
);
data
=
kzalloc
(
sizeof
(
*
data
),
GFP_KERNEL
);
if
(
!
data
)
{
if
(
!
data
)
{
printk
(
KERN_ERR
PFX
"unable to alloc powernow_k8_data"
);
printk
(
KERN_ERR
PFX
"unable to alloc powernow_k8_data"
);
return
-
ENOMEM
;
return
-
ENOMEM
;
...
@@ -1240,7 +1240,6 @@ static struct cpufreq_driver cpufreq_amd64_driver = {
...
@@ -1240,7 +1240,6 @@ static struct cpufreq_driver cpufreq_amd64_driver = {
.
exit
=
powernowk8_cpu_exit
,
.
exit
=
powernowk8_cpu_exit
,
.
get
=
powernowk8_get
,
.
get
=
powernowk8_get
,
.
name
=
"powernow-k8"
,
.
name
=
"powernow-k8"
,
.
owner
=
THIS_MODULE
,
.
attr
=
powernow_k8_attr
,
.
attr
=
powernow_k8_attr
,
};
};
...
...
drivers/cpufreq/ppc-corenet-cpufreq.c
浏览文件 @
4eb5178c
...
@@ -300,7 +300,6 @@ static struct freq_attr *corenet_cpufreq_attr[] = {
...
@@ -300,7 +300,6 @@ static struct freq_attr *corenet_cpufreq_attr[] = {
static
struct
cpufreq_driver
ppc_corenet_cpufreq_driver
=
{
static
struct
cpufreq_driver
ppc_corenet_cpufreq_driver
=
{
.
name
=
"ppc_cpufreq"
,
.
name
=
"ppc_cpufreq"
,
.
owner
=
THIS_MODULE
,
.
flags
=
CPUFREQ_CONST_LOOPS
,
.
flags
=
CPUFREQ_CONST_LOOPS
,
.
init
=
corenet_cpufreq_cpu_init
,
.
init
=
corenet_cpufreq_cpu_init
,
.
exit
=
__exit_p
(
corenet_cpufreq_cpu_exit
),
.
exit
=
__exit_p
(
corenet_cpufreq_cpu_exit
),
...
...
drivers/cpufreq/ppc_cbe_cpufreq.c
浏览文件 @
4eb5178c
...
@@ -181,7 +181,6 @@ static struct cpufreq_driver cbe_cpufreq_driver = {
...
@@ -181,7 +181,6 @@ static struct cpufreq_driver cbe_cpufreq_driver = {
.
init
=
cbe_cpufreq_cpu_init
,
.
init
=
cbe_cpufreq_cpu_init
,
.
exit
=
cbe_cpufreq_cpu_exit
,
.
exit
=
cbe_cpufreq_cpu_exit
,
.
name
=
"cbe-cpufreq"
,
.
name
=
"cbe-cpufreq"
,
.
owner
=
THIS_MODULE
,
.
flags
=
CPUFREQ_CONST_LOOPS
,
.
flags
=
CPUFREQ_CONST_LOOPS
,
};
};
...
...
drivers/cpufreq/pxa2xx-cpufreq.c
浏览文件 @
4eb5178c
...
@@ -191,7 +191,7 @@ static int pxa_cpufreq_change_voltage(pxa_freqs_t *pxa_freq)
...
@@ -191,7 +191,7 @@ static int pxa_cpufreq_change_voltage(pxa_freqs_t *pxa_freq)
return
ret
;
return
ret
;
}
}
static
__init
void
pxa_cpufreq_init_voltages
(
void
)
static
void
__init
pxa_cpufreq_init_voltages
(
void
)
{
{
vcc_core
=
regulator_get
(
NULL
,
"vcc_core"
);
vcc_core
=
regulator_get
(
NULL
,
"vcc_core"
);
if
(
IS_ERR
(
vcc_core
))
{
if
(
IS_ERR
(
vcc_core
))
{
...
@@ -207,7 +207,7 @@ static int pxa_cpufreq_change_voltage(pxa_freqs_t *pxa_freq)
...
@@ -207,7 +207,7 @@ static int pxa_cpufreq_change_voltage(pxa_freqs_t *pxa_freq)
return
0
;
return
0
;
}
}
static
__init
void
pxa_cpufreq_init_voltages
(
void
)
{
}
static
void
__init
pxa_cpufreq_init_voltages
(
void
)
{
}
#endif
#endif
static
void
find_freq_tables
(
struct
cpufreq_frequency_table
**
freq_table
,
static
void
find_freq_tables
(
struct
cpufreq_frequency_table
**
freq_table
,
...
...
drivers/cpufreq/pxa3xx-cpufreq.c
浏览文件 @
4eb5178c
...
@@ -213,10 +213,12 @@ static int pxa3xx_cpufreq_init(struct cpufreq_policy *policy)
...
@@ -213,10 +213,12 @@ static int pxa3xx_cpufreq_init(struct cpufreq_policy *policy)
policy
->
cur
=
policy
->
min
=
policy
->
max
;
policy
->
cur
=
policy
->
min
=
policy
->
max
;
if
(
cpu_is_pxa300
()
||
cpu_is_pxa310
())
if
(
cpu_is_pxa300
()
||
cpu_is_pxa310
())
ret
=
setup_freqs_table
(
policy
,
ARRAY_AND_SIZE
(
pxa300_freqs
));
ret
=
setup_freqs_table
(
policy
,
pxa300_freqs
,
ARRAY_SIZE
(
pxa300_freqs
));
if
(
cpu_is_pxa320
())
if
(
cpu_is_pxa320
())
ret
=
setup_freqs_table
(
policy
,
ARRAY_AND_SIZE
(
pxa320_freqs
));
ret
=
setup_freqs_table
(
policy
,
pxa320_freqs
,
ARRAY_SIZE
(
pxa320_freqs
));
if
(
ret
)
{
if
(
ret
)
{
pr_err
(
"failed to setup frequency table
\n
"
);
pr_err
(
"failed to setup frequency table
\n
"
);
...
...
drivers/cpufreq/s3c2416-cpufreq.c
浏览文件 @
4eb5178c
...
@@ -524,7 +524,6 @@ static struct freq_attr *s3c2416_cpufreq_attr[] = {
...
@@ -524,7 +524,6 @@ static struct freq_attr *s3c2416_cpufreq_attr[] = {
};
};
static
struct
cpufreq_driver
s3c2416_cpufreq_driver
=
{
static
struct
cpufreq_driver
s3c2416_cpufreq_driver
=
{
.
owner
=
THIS_MODULE
,
.
flags
=
0
,
.
flags
=
0
,
.
verify
=
s3c2416_cpufreq_verify_speed
,
.
verify
=
s3c2416_cpufreq_verify_speed
,
.
target
=
s3c2416_cpufreq_set_target
,
.
target
=
s3c2416_cpufreq_set_target
,
...
...
drivers/cpufreq/s3c24xx-cpufreq.c
浏览文件 @
4eb5178c
...
@@ -392,7 +392,7 @@ static int s3c_cpufreq_init(struct cpufreq_policy *policy)
...
@@ -392,7 +392,7 @@ static int s3c_cpufreq_init(struct cpufreq_policy *policy)
return
0
;
return
0
;
}
}
static
__init
in
t
s3c_cpufreq_initclks
(
void
)
static
int
__ini
t
s3c_cpufreq_initclks
(
void
)
{
{
_clk_mpll
=
s3c_cpufreq_clk_get
(
NULL
,
"mpll"
);
_clk_mpll
=
s3c_cpufreq_clk_get
(
NULL
,
"mpll"
);
_clk_xtal
=
s3c_cpufreq_clk_get
(
NULL
,
"xtal"
);
_clk_xtal
=
s3c_cpufreq_clk_get
(
NULL
,
"xtal"
);
...
@@ -522,7 +522,7 @@ int __init s3c_cpufreq_setboard(struct s3c_cpufreq_board *board)
...
@@ -522,7 +522,7 @@ int __init s3c_cpufreq_setboard(struct s3c_cpufreq_board *board)
/* Copy the board information so that each board can make this
/* Copy the board information so that each board can make this
* initdata. */
* initdata. */
ours
=
kzalloc
(
sizeof
(
struct
s3c_cpufreq_board
),
GFP_KERNEL
);
ours
=
kzalloc
(
sizeof
(
*
ours
),
GFP_KERNEL
);
if
(
ours
==
NULL
)
{
if
(
ours
==
NULL
)
{
printk
(
KERN_ERR
"%s: no memory
\n
"
,
__func__
);
printk
(
KERN_ERR
"%s: no memory
\n
"
,
__func__
);
return
-
ENOMEM
;
return
-
ENOMEM
;
...
@@ -615,7 +615,7 @@ static int s3c_cpufreq_build_freq(void)
...
@@ -615,7 +615,7 @@ static int s3c_cpufreq_build_freq(void)
size
=
cpu_cur
.
info
->
calc_freqtable
(
&
cpu_cur
,
NULL
,
0
);
size
=
cpu_cur
.
info
->
calc_freqtable
(
&
cpu_cur
,
NULL
,
0
);
size
++
;
size
++
;
ftab
=
kmalloc
(
sizeof
(
struct
cpufreq_frequency_table
)
*
size
,
GFP_KERNEL
);
ftab
=
kmalloc
(
sizeof
(
*
ftab
)
*
size
,
GFP_KERNEL
);
if
(
!
ftab
)
{
if
(
!
ftab
)
{
printk
(
KERN_ERR
"%s: no memory for tables
\n
"
,
__func__
);
printk
(
KERN_ERR
"%s: no memory for tables
\n
"
,
__func__
);
return
-
ENOMEM
;
return
-
ENOMEM
;
...
@@ -691,7 +691,7 @@ int __init s3c_plltab_register(struct cpufreq_frequency_table *plls,
...
@@ -691,7 +691,7 @@ int __init s3c_plltab_register(struct cpufreq_frequency_table *plls,
struct
cpufreq_frequency_table
*
vals
;
struct
cpufreq_frequency_table
*
vals
;
unsigned
int
size
;
unsigned
int
size
;
size
=
sizeof
(
struct
cpufreq_frequency_table
)
*
(
plls_no
+
1
);
size
=
sizeof
(
*
vals
)
*
(
plls_no
+
1
);
vals
=
kmalloc
(
size
,
GFP_KERNEL
);
vals
=
kmalloc
(
size
,
GFP_KERNEL
);
if
(
vals
)
{
if
(
vals
)
{
...
...
drivers/cpufreq/s3c64xx-cpufreq.c
浏览文件 @
4eb5178c
...
@@ -263,7 +263,6 @@ static int s3c64xx_cpufreq_driver_init(struct cpufreq_policy *policy)
...
@@ -263,7 +263,6 @@ static int s3c64xx_cpufreq_driver_init(struct cpufreq_policy *policy)
}
}
static
struct
cpufreq_driver
s3c64xx_cpufreq_driver
=
{
static
struct
cpufreq_driver
s3c64xx_cpufreq_driver
=
{
.
owner
=
THIS_MODULE
,
.
flags
=
0
,
.
flags
=
0
,
.
verify
=
s3c64xx_cpufreq_verify_speed
,
.
verify
=
s3c64xx_cpufreq_verify_speed
,
.
target
=
s3c64xx_cpufreq_set_target
,
.
target
=
s3c64xx_cpufreq_set_target
,
...
...
drivers/cpufreq/sc520_freq.c
浏览文件 @
4eb5178c
...
@@ -147,7 +147,6 @@ static struct cpufreq_driver sc520_freq_driver = {
...
@@ -147,7 +147,6 @@ static struct cpufreq_driver sc520_freq_driver = {
.
init
=
sc520_freq_cpu_init
,
.
init
=
sc520_freq_cpu_init
,
.
exit
=
sc520_freq_cpu_exit
,
.
exit
=
sc520_freq_cpu_exit
,
.
name
=
"sc520_freq"
,
.
name
=
"sc520_freq"
,
.
owner
=
THIS_MODULE
,
.
attr
=
sc520_freq_attr
,
.
attr
=
sc520_freq_attr
,
};
};
...
...
drivers/cpufreq/sh-cpufreq.c
浏览文件 @
4eb5178c
...
@@ -160,7 +160,6 @@ static struct freq_attr *sh_freq_attr[] = {
...
@@ -160,7 +160,6 @@ static struct freq_attr *sh_freq_attr[] = {
};
};
static
struct
cpufreq_driver
sh_cpufreq_driver
=
{
static
struct
cpufreq_driver
sh_cpufreq_driver
=
{
.
owner
=
THIS_MODULE
,
.
name
=
"sh"
,
.
name
=
"sh"
,
.
get
=
sh_cpufreq_get
,
.
get
=
sh_cpufreq_get
,
.
target
=
sh_cpufreq_target
,
.
target
=
sh_cpufreq_target
,
...
...
drivers/cpufreq/sparc-us2e-cpufreq.c
浏览文件 @
4eb5178c
...
@@ -351,12 +351,11 @@ static int __init us2e_freq_init(void)
...
@@ -351,12 +351,11 @@ static int __init us2e_freq_init(void)
struct
cpufreq_driver
*
driver
;
struct
cpufreq_driver
*
driver
;
ret
=
-
ENOMEM
;
ret
=
-
ENOMEM
;
driver
=
kzalloc
(
sizeof
(
struct
cpufreq_
driver
),
GFP_KERNEL
);
driver
=
kzalloc
(
sizeof
(
*
driver
),
GFP_KERNEL
);
if
(
!
driver
)
if
(
!
driver
)
goto
err_out
;
goto
err_out
;
us2e_freq_table
=
kzalloc
(
us2e_freq_table
=
kzalloc
((
NR_CPUS
*
sizeof
(
*
us2e_freq_table
)),
(
NR_CPUS
*
sizeof
(
struct
us2e_freq_percpu_info
)),
GFP_KERNEL
);
GFP_KERNEL
);
if
(
!
us2e_freq_table
)
if
(
!
us2e_freq_table
)
goto
err_out
;
goto
err_out
;
...
@@ -366,7 +365,6 @@ static int __init us2e_freq_init(void)
...
@@ -366,7 +365,6 @@ static int __init us2e_freq_init(void)
driver
->
target
=
us2e_freq_target
;
driver
->
target
=
us2e_freq_target
;
driver
->
get
=
us2e_freq_get
;
driver
->
get
=
us2e_freq_get
;
driver
->
exit
=
us2e_freq_cpu_exit
;
driver
->
exit
=
us2e_freq_cpu_exit
;
driver
->
owner
=
THIS_MODULE
,
strcpy
(
driver
->
name
,
"UltraSPARC-IIe"
);
strcpy
(
driver
->
name
,
"UltraSPARC-IIe"
);
cpufreq_us2e_driver
=
driver
;
cpufreq_us2e_driver
=
driver
;
...
...
drivers/cpufreq/sparc-us3-cpufreq.c
浏览文件 @
4eb5178c
...
@@ -212,12 +212,11 @@ static int __init us3_freq_init(void)
...
@@ -212,12 +212,11 @@ static int __init us3_freq_init(void)
struct
cpufreq_driver
*
driver
;
struct
cpufreq_driver
*
driver
;
ret
=
-
ENOMEM
;
ret
=
-
ENOMEM
;
driver
=
kzalloc
(
sizeof
(
struct
cpufreq_
driver
),
GFP_KERNEL
);
driver
=
kzalloc
(
sizeof
(
*
driver
),
GFP_KERNEL
);
if
(
!
driver
)
if
(
!
driver
)
goto
err_out
;
goto
err_out
;
us3_freq_table
=
kzalloc
(
us3_freq_table
=
kzalloc
((
NR_CPUS
*
sizeof
(
*
us3_freq_table
)),
(
NR_CPUS
*
sizeof
(
struct
us3_freq_percpu_info
)),
GFP_KERNEL
);
GFP_KERNEL
);
if
(
!
us3_freq_table
)
if
(
!
us3_freq_table
)
goto
err_out
;
goto
err_out
;
...
@@ -227,7 +226,6 @@ static int __init us3_freq_init(void)
...
@@ -227,7 +226,6 @@ static int __init us3_freq_init(void)
driver
->
target
=
us3_freq_target
;
driver
->
target
=
us3_freq_target
;
driver
->
get
=
us3_freq_get
;
driver
->
get
=
us3_freq_get
;
driver
->
exit
=
us3_freq_cpu_exit
;
driver
->
exit
=
us3_freq_cpu_exit
;
driver
->
owner
=
THIS_MODULE
,
strcpy
(
driver
->
name
,
"UltraSPARC-III"
);
strcpy
(
driver
->
name
,
"UltraSPARC-III"
);
cpufreq_us3_driver
=
driver
;
cpufreq_us3_driver
=
driver
;
...
...
drivers/cpufreq/speedstep-centrino.c
浏览文件 @
4eb5178c
...
@@ -575,7 +575,6 @@ static struct cpufreq_driver centrino_driver = {
...
@@ -575,7 +575,6 @@ static struct cpufreq_driver centrino_driver = {
.
target
=
centrino_target
,
.
target
=
centrino_target
,
.
get
=
get_cur_freq
,
.
get
=
get_cur_freq
,
.
attr
=
centrino_attr
,
.
attr
=
centrino_attr
,
.
owner
=
THIS_MODULE
,
};
};
/*
/*
...
...
drivers/cpufreq/speedstep-ich.c
浏览文件 @
4eb5178c
...
@@ -378,7 +378,6 @@ static struct cpufreq_driver speedstep_driver = {
...
@@ -378,7 +378,6 @@ static struct cpufreq_driver speedstep_driver = {
.
init
=
speedstep_cpu_init
,
.
init
=
speedstep_cpu_init
,
.
exit
=
speedstep_cpu_exit
,
.
exit
=
speedstep_cpu_exit
,
.
get
=
speedstep_get
,
.
get
=
speedstep_get
,
.
owner
=
THIS_MODULE
,
.
attr
=
speedstep_attr
,
.
attr
=
speedstep_attr
,
};
};
...
...
drivers/cpufreq/speedstep-smi.c
浏览文件 @
4eb5178c
...
@@ -375,7 +375,6 @@ static struct cpufreq_driver speedstep_driver = {
...
@@ -375,7 +375,6 @@ static struct cpufreq_driver speedstep_driver = {
.
exit
=
speedstep_cpu_exit
,
.
exit
=
speedstep_cpu_exit
,
.
get
=
speedstep_get
,
.
get
=
speedstep_get
,
.
resume
=
speedstep_resume
,
.
resume
=
speedstep_resume
,
.
owner
=
THIS_MODULE
,
.
attr
=
speedstep_attr
,
.
attr
=
speedstep_attr
,
};
};
...
...
drivers/cpufreq/unicore2-cpufreq.c
浏览文件 @
4eb5178c
...
@@ -24,7 +24,7 @@ static struct cpufreq_driver ucv2_driver;
...
@@ -24,7 +24,7 @@ static struct cpufreq_driver ucv2_driver;
/* make sure that only the "userspace" governor is run
/* make sure that only the "userspace" governor is run
* -- anything else wouldn't make sense on this platform, anyway.
* -- anything else wouldn't make sense on this platform, anyway.
*/
*/
int
ucv2_verify_speed
(
struct
cpufreq_policy
*
policy
)
static
int
ucv2_verify_speed
(
struct
cpufreq_policy
*
policy
)
{
{
if
(
policy
->
cpu
)
if
(
policy
->
cpu
)
return
-
EINVAL
;
return
-
EINVAL
;
...
...
include/linux/cpufreq.h
浏览文件 @
4eb5178c
...
@@ -11,71 +11,36 @@
...
@@ -11,71 +11,36 @@
#ifndef _LINUX_CPUFREQ_H
#ifndef _LINUX_CPUFREQ_H
#define _LINUX_CPUFREQ_H
#define _LINUX_CPUFREQ_H
#include <asm/cputime.h>
#include <linux/cpumask.h>
#include <linux/mutex.h>
#include <linux/completion.h>
#include <linux/notifier.h>
#include <linux/threads.h>
#include <linux/kobject.h>
#include <linux/kobject.h>
#include <linux/notifier.h>
#include <linux/sysfs.h>
#include <linux/sysfs.h>
#include <linux/completion.h>
#include <linux/workqueue.h>
#include <linux/cpumask.h>
#include <asm/div64.h>
#define CPUFREQ_NAME_LEN 16
/* Print length for names. Extra 1 space for accomodating '\n' in prints */
#define CPUFREQ_NAME_PLEN (CPUFREQ_NAME_LEN + 1)
/*********************************************************************
/*********************************************************************
*
CPUFREQ NOTIFIER INTERFACE
*
*
CPUFREQ INTERFACE
*
*********************************************************************/
*********************************************************************/
/*
#define CPUFREQ_TRANSITION_NOTIFIER (0)
* Frequency values here are CPU kHz
#define CPUFREQ_POLICY_NOTIFIER (1)
*
#ifdef CONFIG_CPU_FREQ
int
cpufreq_register_notifier
(
struct
notifier_block
*
nb
,
unsigned
int
list
);
int
cpufreq_unregister_notifier
(
struct
notifier_block
*
nb
,
unsigned
int
list
);
extern
void
disable_cpufreq
(
void
);
#else
/* CONFIG_CPU_FREQ */
static
inline
int
cpufreq_register_notifier
(
struct
notifier_block
*
nb
,
unsigned
int
list
)
{
return
0
;
}
static
inline
int
cpufreq_unregister_notifier
(
struct
notifier_block
*
nb
,
unsigned
int
list
)
{
return
0
;
}
static
inline
void
disable_cpufreq
(
void
)
{
}
#endif
/* CONFIG_CPU_FREQ */
/* 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)
/* Frequency values here are CPU kHz so that hardware which doesn't run
* with some frequencies can complain without having to guess what per
* cent / per mille means.
* Maximum transition latency is in nanoseconds - if it's unknown,
* Maximum transition latency is in nanoseconds - if it's unknown,
* CPUFREQ_ETERNAL shall be used.
* CPUFREQ_ETERNAL shall be used.
*/
*/
#define CPUFREQ_ETERNAL (-1)
#define CPUFREQ_NAME_LEN 16
/* Print length for names. Extra 1 space for accomodating '\n' in prints */
#define CPUFREQ_NAME_PLEN (CPUFREQ_NAME_LEN + 1)
struct
cpufreq_governor
;
struct
cpufreq_governor
;
/* /sys/devices/system/cpu/cpufreq: entry point for global variables */
struct
cpufreq_freqs
{
extern
struct
kobject
*
cpufreq_global_kobject
;
unsigned
int
cpu
;
/* cpu nr */
int
cpufreq_get_global_kobject
(
void
)
;
unsigned
int
old
;
void
cpufreq_put_global_kobject
(
void
)
;
unsigned
int
new
;
int
cpufreq_sysfs_create_file
(
const
struct
attribute
*
attr
);
u8
flags
;
/* flags of cpufreq_driver, see below. */
void
cpufreq_sysfs_remove_file
(
const
struct
attribute
*
attr
)
;
}
;
#define CPUFREQ_ETERNAL (-1)
struct
cpufreq_cpuinfo
{
struct
cpufreq_cpuinfo
{
unsigned
int
max_freq
;
unsigned
int
max_freq
;
unsigned
int
min_freq
;
unsigned
int
min_freq
;
...
@@ -117,123 +82,103 @@ struct cpufreq_policy {
...
@@ -117,123 +82,103 @@ struct cpufreq_policy {
struct
cpufreq_real_policy
user_policy
;
struct
cpufreq_real_policy
user_policy
;
struct
list_head
policy_list
;
struct
kobject
kobj
;
struct
kobject
kobj
;
struct
completion
kobj_unregister
;
struct
completion
kobj_unregister
;
int
transition_ongoing
;
/* Tracks transition status */
int
transition_ongoing
;
/* Tracks transition status */
};
};
#define CPUFREQ_ADJUST (0)
#define CPUFREQ_INCOMPATIBLE (1)
#define CPUFREQ_NOTIFY (2)
#define CPUFREQ_START (3)
#define CPUFREQ_UPDATE_POLICY_CPU (4)
/* Only for ACPI */
/* Only for ACPI */
#define CPUFREQ_SHARED_TYPE_NONE (0)
/* None */
#define CPUFREQ_SHARED_TYPE_NONE (0)
/* None */
#define CPUFREQ_SHARED_TYPE_HW (1)
/* HW does needed coordination */
#define CPUFREQ_SHARED_TYPE_HW (1)
/* HW does needed coordination */
#define CPUFREQ_SHARED_TYPE_ALL (2)
/* All dependent CPUs should set freq */
#define CPUFREQ_SHARED_TYPE_ALL (2)
/* All dependent CPUs should set freq */
#define CPUFREQ_SHARED_TYPE_ANY (3)
/* Freq can be set from any dependent CPU*/
#define CPUFREQ_SHARED_TYPE_ANY (3)
/* Freq can be set from any dependent CPU*/
struct
cpufreq_policy
*
cpufreq_cpu_get
(
unsigned
int
cpu
);
void
cpufreq_cpu_put
(
struct
cpufreq_policy
*
policy
);
static
inline
bool
policy_is_shared
(
struct
cpufreq_policy
*
policy
)
static
inline
bool
policy_is_shared
(
struct
cpufreq_policy
*
policy
)
{
{
return
cpumask_weight
(
policy
->
cpus
)
>
1
;
return
cpumask_weight
(
policy
->
cpus
)
>
1
;
}
}
/*
******************* cpufreq transition notifiers ******************
*/
/*
/sys/devices/system/cpu/cpufreq: entry point for global variables
*/
extern
struct
kobject
*
cpufreq_global_kobject
;
#define CPUFREQ_PRECHANGE (0)
int
cpufreq_get_global_kobject
(
void
);
#define CPUFREQ_POSTCHANGE (1)
void
cpufreq_put_global_kobject
(
void
);
#define CPUFREQ_RESUMECHANGE (8)
int
cpufreq_sysfs_create_file
(
const
struct
attribute
*
attr
);
#define CPUFREQ_SUSPENDCHANGE (9)
void
cpufreq_sysfs_remove_file
(
const
struct
attribute
*
attr
);
struct
cpufreq_freqs
{
#ifdef CONFIG_CPU_FREQ
unsigned
int
cpu
;
/* cpu nr */
unsigned
int
cpufreq_get
(
unsigned
int
cpu
);
unsigned
int
old
;
unsigned
int
cpufreq_quick_get
(
unsigned
int
cpu
);
unsigned
int
new
;
unsigned
int
cpufreq_quick_get_max
(
unsigned
int
cpu
);
u8
flags
;
/* flags of cpufreq_driver, see below. */
void
disable_cpufreq
(
void
);
};
/**
u64
get_cpu_idle_time
(
unsigned
int
cpu
,
u64
*
wall
,
int
io_busy
);
* cpufreq_scale - "old * mult / div" calculation for large values (32-bit-arch
int
cpufreq_get_policy
(
struct
cpufreq_policy
*
policy
,
unsigned
int
cpu
);
* safe)
int
cpufreq_update_policy
(
unsigned
int
cpu
);
* @old: old value
bool
have_governor_per_policy
(
void
);
* @div: divisor
struct
kobject
*
get_governor_parent_kobj
(
struct
cpufreq_policy
*
policy
);
* @mult: multiplier
#else
*
static
inline
unsigned
int
cpufreq_get
(
unsigned
int
cpu
)
*
* new = old * mult / div
*/
static
inline
unsigned
long
cpufreq_scale
(
unsigned
long
old
,
u_int
div
,
u_int
mult
)
{
{
#if BITS_PER_LONG == 32
return
0
;
}
u64
result
=
((
u64
)
old
)
*
((
u64
)
mult
);
static
inline
unsigned
int
cpufreq_quick_get
(
unsigned
int
cpu
)
do_div
(
result
,
div
);
{
return
(
unsigned
long
)
result
;
return
0
;
}
#elif BITS_PER_LONG == 64
static
inline
unsigned
int
cpufreq_quick_get_max
(
unsigned
int
cpu
)
{
unsigned
long
result
=
old
*
((
u64
)
mult
);
return
0
;
result
/=
div
;
}
return
result
;
static
inline
void
disable_cpufreq
(
void
)
{
}
#endif
#endif
};
/*********************************************************************
/*********************************************************************
*
CPUFREQ GOVERNORS
*
*
CPUFREQ DRIVER INTERFACE
*
*********************************************************************/
*********************************************************************/
#define CPUFREQ_GOV_START 1
#define CPUFREQ_RELATION_L 0
/* lowest frequency at or above target */
#define CPUFREQ_GOV_STOP 2
#define CPUFREQ_RELATION_H 1
/* highest frequency below or at target */
#define CPUFREQ_GOV_LIMITS 3
#define CPUFREQ_GOV_POLICY_INIT 4
#define CPUFREQ_GOV_POLICY_EXIT 5
struct
cpufreq_governor
{
struct
freq_attr
{
char
name
[
CPUFREQ_NAME_LEN
];
struct
attribute
attr
;
int
initialized
;
ssize_t
(
*
show
)(
struct
cpufreq_policy
*
,
char
*
);
int
(
*
governor
)
(
struct
cpufreq_policy
*
policy
,
ssize_t
(
*
store
)(
struct
cpufreq_policy
*
,
const
char
*
,
size_t
count
);
unsigned
int
event
);
ssize_t
(
*
show_setspeed
)
(
struct
cpufreq_policy
*
policy
,
char
*
buf
);
int
(
*
store_setspeed
)
(
struct
cpufreq_policy
*
policy
,
unsigned
int
freq
);
unsigned
int
max_transition_latency
;
/* HW must be able to switch to
next freq faster than this value in nano secs or we
will fallback to performance governor */
struct
list_head
governor_list
;
struct
module
*
owner
;
};
};
/*
#define cpufreq_freq_attr_ro(_name) \
* Pass a target to the cpufreq driver.
static struct freq_attr _name = \
*/
__ATTR(_name, 0444, show_##_name, NULL)
extern
int
cpufreq_driver_target
(
struct
cpufreq_policy
*
policy
,
unsigned
int
target_freq
,
unsigned
int
relation
);
extern
int
__cpufreq_driver_target
(
struct
cpufreq_policy
*
policy
,
unsigned
int
target_freq
,
unsigned
int
relation
);
extern
int
__cpufreq_driver_getavg
(
struct
cpufreq_policy
*
policy
,
#define cpufreq_freq_attr_ro_perm(_name, _perm) \
unsigned
int
cpu
);
static struct freq_attr _name = \
__ATTR(_name, _perm, show_##_name, NULL)
int
cpufreq_register_governor
(
struct
cpufreq_governor
*
governor
);
#define cpufreq_freq_attr_rw(_name) \
void
cpufreq_unregister_governor
(
struct
cpufreq_governor
*
governor
);
static struct freq_attr _name = \
__ATTR(_name, 0644, show_##_name, store_##_name)
/*********************************************************************
struct
global_attr
{
* CPUFREQ DRIVER INTERFACE *
struct
attribute
attr
;
*********************************************************************/
ssize_t
(
*
show
)(
struct
kobject
*
kobj
,
struct
attribute
*
attr
,
char
*
buf
);
ssize_t
(
*
store
)(
struct
kobject
*
a
,
struct
attribute
*
b
,
const
char
*
c
,
size_t
count
);
};
#define CPUFREQ_RELATION_L 0
/* lowest frequency at or above target */
#define define_one_global_ro(_name) \
#define CPUFREQ_RELATION_H 1
/* highest frequency below or at target */
static struct global_attr _name = \
__ATTR(_name, 0444, show_##_name, NULL)
#define define_one_global_rw(_name) \
static struct global_attr _name = \
__ATTR(_name, 0644, show_##_name, store_##_name)
struct
freq_attr
;
struct
cpufreq_driver
{
struct
cpufreq_driver
{
struct
module
*
owner
;
char
name
[
CPUFREQ_NAME_LEN
];
char
name
[
CPUFREQ_NAME_LEN
];
u8
flags
;
u8
flags
;
/*
/*
...
@@ -258,8 +203,6 @@ struct cpufreq_driver {
...
@@ -258,8 +203,6 @@ struct cpufreq_driver {
unsigned
int
(
*
get
)
(
unsigned
int
cpu
);
unsigned
int
(
*
get
)
(
unsigned
int
cpu
);
/* optional */
/* optional */
unsigned
int
(
*
getavg
)
(
struct
cpufreq_policy
*
policy
,
unsigned
int
cpu
);
int
(
*
bios_limit
)
(
int
cpu
,
unsigned
int
*
limit
);
int
(
*
bios_limit
)
(
int
cpu
,
unsigned
int
*
limit
);
int
(
*
exit
)
(
struct
cpufreq_policy
*
policy
);
int
(
*
exit
)
(
struct
cpufreq_policy
*
policy
);
...
@@ -269,7 +212,6 @@ struct cpufreq_driver {
...
@@ -269,7 +212,6 @@ struct cpufreq_driver {
};
};
/* flags */
/* flags */
#define CPUFREQ_STICKY 0x01
/* the driver isn't removed even if
#define CPUFREQ_STICKY 0x01
/* the driver isn't removed even if
* all ->init() calls failed */
* all ->init() calls failed */
#define CPUFREQ_CONST_LOOPS 0x02
/* loops_per_jiffy or other kernel
#define CPUFREQ_CONST_LOOPS 0x02
/* loops_per_jiffy or other kernel
...
@@ -281,8 +223,7 @@ struct cpufreq_driver {
...
@@ -281,8 +223,7 @@ struct cpufreq_driver {
int
cpufreq_register_driver
(
struct
cpufreq_driver
*
driver_data
);
int
cpufreq_register_driver
(
struct
cpufreq_driver
*
driver_data
);
int
cpufreq_unregister_driver
(
struct
cpufreq_driver
*
driver_data
);
int
cpufreq_unregister_driver
(
struct
cpufreq_driver
*
driver_data
);
void
cpufreq_notify_transition
(
struct
cpufreq_policy
*
policy
,
const
char
*
cpufreq_get_current_driver
(
void
);
struct
cpufreq_freqs
*
freqs
,
unsigned
int
state
);
static
inline
void
cpufreq_verify_within_limits
(
struct
cpufreq_policy
*
policy
,
static
inline
void
cpufreq_verify_within_limits
(
struct
cpufreq_policy
*
policy
,
unsigned
int
min
,
unsigned
int
max
)
unsigned
int
min
,
unsigned
int
max
)
...
@@ -300,86 +241,117 @@ static inline void cpufreq_verify_within_limits(struct cpufreq_policy *policy,
...
@@ -300,86 +241,117 @@ static inline void cpufreq_verify_within_limits(struct cpufreq_policy *policy,
return
;
return
;
}
}
struct
freq_attr
{
/*********************************************************************
struct
attribute
attr
;
* CPUFREQ NOTIFIER INTERFACE *
ssize_t
(
*
show
)(
struct
cpufreq_policy
*
,
char
*
);
*********************************************************************/
ssize_t
(
*
store
)(
struct
cpufreq_policy
*
,
const
char
*
,
size_t
count
);
};
#define cpufreq_freq_attr_ro(_name) \
static struct freq_attr _name = \
__ATTR(_name, 0444, show_##_name, NULL)
#define cpufreq_freq_attr_ro_perm(_name, _perm) \
static struct freq_attr _name = \
__ATTR(_name, _perm, show_##_name, NULL)
#define cpufreq_freq_attr_rw(_name) \
static struct freq_attr _name = \
__ATTR(_name, 0644, show_##_name, store_##_name)
struct
global_attr
{
#define CPUFREQ_TRANSITION_NOTIFIER (0)
struct
attribute
attr
;
#define CPUFREQ_POLICY_NOTIFIER (1)
ssize_t
(
*
show
)(
struct
kobject
*
kobj
,
struct
attribute
*
attr
,
char
*
buf
);
ssize_t
(
*
store
)(
struct
kobject
*
a
,
struct
attribute
*
b
,
const
char
*
c
,
size_t
count
);
};
#define define_one_global_ro(_name) \
/* Transition notifiers */
static struct global_attr _name = \
#define CPUFREQ_PRECHANGE (0)
__ATTR(_name, 0444, show_##_name, NULL)
#define CPUFREQ_POSTCHANGE (1)
#define CPUFREQ_RESUMECHANGE (8)
#define CPUFREQ_SUSPENDCHANGE (9)
#define define_one_global_rw(_name) \
/* Policy Notifiers */
static struct global_attr _name = \
#define CPUFREQ_ADJUST (0)
__ATTR(_name, 0644, show_##_name, store_##_name)
#define CPUFREQ_INCOMPATIBLE (1)
#define CPUFREQ_NOTIFY (2)
#define CPUFREQ_START (3)
#define CPUFREQ_UPDATE_POLICY_CPU (4)
struct
cpufreq_policy
*
cpufreq_cpu_get
(
unsigned
int
cpu
);
#ifdef CONFIG_CPU_FREQ
void
cpufreq_cpu_put
(
struct
cpufreq_policy
*
data
);
int
cpufreq_register_notifier
(
struct
notifier_block
*
nb
,
unsigned
int
list
);
const
char
*
cpufreq_get_current_driver
(
void
);
int
cpufreq_unregister_notifier
(
struct
notifier_block
*
nb
,
unsigned
int
list
);
/*********************************************************************
void
cpufreq_notify_transition
(
struct
cpufreq_policy
*
policy
,
* CPUFREQ 2.6. INTERFACE *
struct
cpufreq_freqs
*
freqs
,
unsigned
int
state
);
*********************************************************************/
u64
get_cpu_idle_time
(
unsigned
int
cpu
,
u64
*
wall
,
int
io_busy
);
int
cpufreq_get_policy
(
struct
cpufreq_policy
*
policy
,
unsigned
int
cpu
);
int
cpufreq_update_policy
(
unsigned
int
cpu
);
bool
have_governor_per_policy
(
void
);
struct
kobject
*
get_governor_parent_kobj
(
struct
cpufreq_policy
*
policy
);
#ifdef CONFIG_CPU_FREQ
#else
/* CONFIG_CPU_FREQ */
/*
static
inline
int
cpufreq_register_notifier
(
struct
notifier_block
*
nb
,
* query the current CPU frequency (in kHz). If zero, cpufreq couldn't detect it
unsigned
int
list
)
*/
unsigned
int
cpufreq_get
(
unsigned
int
cpu
);
#else
static
inline
unsigned
int
cpufreq_get
(
unsigned
int
cpu
)
{
{
return
0
;
return
0
;
}
}
#endif
static
inline
int
cpufreq_unregister_notifier
(
struct
notifier_block
*
nb
,
unsigned
int
list
)
/*
* query the last known CPU freq (in kHz). If zero, cpufreq couldn't detect it
*/
#ifdef CONFIG_CPU_FREQ
unsigned
int
cpufreq_quick_get
(
unsigned
int
cpu
);
unsigned
int
cpufreq_quick_get_max
(
unsigned
int
cpu
);
#else
static
inline
unsigned
int
cpufreq_quick_get
(
unsigned
int
cpu
)
{
{
return
0
;
return
0
;
}
}
static
inline
unsigned
int
cpufreq_quick_get_max
(
unsigned
int
cpu
)
#endif
/* !CONFIG_CPU_FREQ */
/**
* cpufreq_scale - "old * mult / div" calculation for large values (32-bit-arch
* safe)
* @old: old value
* @div: divisor
* @mult: multiplier
*
*
* new = old * mult / div
*/
static
inline
unsigned
long
cpufreq_scale
(
unsigned
long
old
,
u_int
div
,
u_int
mult
)
{
{
return
0
;
#if BITS_PER_LONG == 32
}
u64
result
=
((
u64
)
old
)
*
((
u64
)
mult
);
do_div
(
result
,
div
);
return
(
unsigned
long
)
result
;
#elif BITS_PER_LONG == 64
unsigned
long
result
=
old
*
((
u64
)
mult
);
result
/=
div
;
return
result
;
#endif
#endif
}
/*********************************************************************
/*********************************************************************
*
CPUFREQ DEFAULT GOVERNOR
*
*
CPUFREQ GOVERNORS
*
*********************************************************************/
*********************************************************************/
/*
* 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)
/* Governor Events */
#define CPUFREQ_GOV_START 1
#define CPUFREQ_GOV_STOP 2
#define CPUFREQ_GOV_LIMITS 3
#define CPUFREQ_GOV_POLICY_INIT 4
#define CPUFREQ_GOV_POLICY_EXIT 5
struct
cpufreq_governor
{
char
name
[
CPUFREQ_NAME_LEN
];
int
initialized
;
int
(
*
governor
)
(
struct
cpufreq_policy
*
policy
,
unsigned
int
event
);
ssize_t
(
*
show_setspeed
)
(
struct
cpufreq_policy
*
policy
,
char
*
buf
);
int
(
*
store_setspeed
)
(
struct
cpufreq_policy
*
policy
,
unsigned
int
freq
);
unsigned
int
max_transition_latency
;
/* HW must be able to switch to
next freq faster than this value in nano secs or we
will fallback to performance governor */
struct
list_head
governor_list
;
struct
module
*
owner
;
};
/* Pass a target to the cpufreq driver */
int
cpufreq_driver_target
(
struct
cpufreq_policy
*
policy
,
unsigned
int
target_freq
,
unsigned
int
relation
);
int
__cpufreq_driver_target
(
struct
cpufreq_policy
*
policy
,
unsigned
int
target_freq
,
unsigned
int
relation
);
int
cpufreq_register_governor
(
struct
cpufreq_governor
*
governor
);
void
cpufreq_unregister_governor
(
struct
cpufreq_governor
*
governor
);
/* CPUFREQ DEFAULT GOVERNOR */
/*
/*
* Performance governor is fallback governor if any other gov failed to auto
* Performance governor is fallback governor if any other gov failed to auto
* load due latency restrictions
* load due latency restrictions
...
@@ -428,18 +400,16 @@ int cpufreq_frequency_table_target(struct cpufreq_policy *policy,
...
@@ -428,18 +400,16 @@ int cpufreq_frequency_table_target(struct cpufreq_policy *policy,
unsigned
int
relation
,
unsigned
int
relation
,
unsigned
int
*
index
);
unsigned
int
*
index
);
/* the following 3 funtions are for cpufreq core use only */
void
cpufreq_frequency_table_update_policy_cpu
(
struct
cpufreq_policy
*
policy
);
ssize_t
cpufreq_show_cpus
(
const
struct
cpumask
*
mask
,
char
*
buf
);
/* the following funtion is for cpufreq core use only */
struct
cpufreq_frequency_table
*
cpufreq_frequency_get_table
(
unsigned
int
cpu
);
struct
cpufreq_frequency_table
*
cpufreq_frequency_get_table
(
unsigned
int
cpu
);
/* the following are really really optional */
/* the following are really really optional */
extern
struct
freq_attr
cpufreq_freq_attr_scaling_available_freqs
;
extern
struct
freq_attr
cpufreq_freq_attr_scaling_available_freqs
;
void
cpufreq_frequency_table_get_attr
(
struct
cpufreq_frequency_table
*
table
,
void
cpufreq_frequency_table_get_attr
(
struct
cpufreq_frequency_table
*
table
,
unsigned
int
cpu
);
unsigned
int
cpu
);
void
cpufreq_frequency_table_update_policy_cpu
(
struct
cpufreq_policy
*
policy
);
void
cpufreq_frequency_table_put_attr
(
unsigned
int
cpu
);
void
cpufreq_frequency_table_put_attr
(
unsigned
int
cpu
);
ssize_t
cpufreq_show_cpus
(
const
struct
cpumask
*
mask
,
char
*
buf
);
#endif
/* _LINUX_CPUFREQ_H */
#endif
/* _LINUX_CPUFREQ_H */
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录