Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
kernel_linux
提交
5d72ed35
K
kernel_linux
项目概览
OpenHarmony
/
kernel_linux
上一次同步 4 年多
通知
15
Star
8
Fork
2
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
kernel_linux
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
5d72ed35
编写于
7月 05, 2017
作者:
Z
Zhang Rui
浏览文件
操作
浏览文件
下载
差异文件
Merge branches 'thermal-core', 'thermal-intel' and 'thermal-soc' into next
上级
0d76d6e1
4ca0e75e
467aebee
变更
15
展开全部
隐藏空白更改
内联
并排
Showing
15 changed file
with
338 addition
and
416 deletion
+338
-416
drivers/cpufreq/arm_big_little.c
drivers/cpufreq/arm_big_little.c
+1
-1
drivers/cpufreq/cpufreq-dt.c
drivers/cpufreq/cpufreq-dt.c
+1
-1
drivers/cpufreq/cpufreq_stats.c
drivers/cpufreq/cpufreq_stats.c
+4
-9
drivers/cpufreq/dbx500-cpufreq.c
drivers/cpufreq/dbx500-cpufreq.c
+1
-1
drivers/cpufreq/mt8173-cpufreq.c
drivers/cpufreq/mt8173-cpufreq.c
+1
-3
drivers/cpufreq/qoriq-cpufreq.c
drivers/cpufreq/qoriq-cpufreq.c
+1
-2
drivers/thermal/broadcom/bcm2835_thermal.c
drivers/thermal/broadcom/bcm2835_thermal.c
+0
-1
drivers/thermal/cpu_cooling.c
drivers/thermal/cpu_cooling.c
+248
-361
drivers/thermal/hisi_thermal.c
drivers/thermal/hisi_thermal.c
+4
-1
drivers/thermal/imx_thermal.c
drivers/thermal/imx_thermal.c
+21
-6
drivers/thermal/int340x_thermal/acpi_thermal_rel.c
drivers/thermal/int340x_thermal/acpi_thermal_rel.c
+3
-3
drivers/thermal/int340x_thermal/int3403_thermal.c
drivers/thermal/int340x_thermal/int3403_thermal.c
+10
-2
drivers/thermal/ti-soc-thermal/ti-thermal-common.c
drivers/thermal/ti-soc-thermal/ti-thermal-common.c
+15
-7
include/linux/cpu_cooling.h
include/linux/cpu_cooling.h
+14
-18
include/linux/cpufreq.h
include/linux/cpufreq.h
+14
-0
未找到文件。
drivers/cpufreq/arm_big_little.c
浏览文件 @
5d72ed35
...
...
@@ -540,7 +540,7 @@ static void bL_cpufreq_ready(struct cpufreq_policy *policy)
&
power_coefficient
);
cdev
[
cur_cluster
]
=
of_cpufreq_power_cooling_register
(
np
,
policy
->
related_cpus
,
power_coefficient
,
NULL
);
policy
,
power_coefficient
,
NULL
);
if
(
IS_ERR
(
cdev
[
cur_cluster
]))
{
dev_err
(
cpu_dev
,
"running cpufreq without cooling device: %ld
\n
"
,
...
...
drivers/cpufreq/cpufreq-dt.c
浏览文件 @
5d72ed35
...
...
@@ -326,7 +326,7 @@ static void cpufreq_ready(struct cpufreq_policy *policy)
&
power_coefficient
);
priv
->
cdev
=
of_cpufreq_power_cooling_register
(
np
,
policy
->
related_cpus
,
power_coefficient
,
NULL
);
policy
,
power_coefficient
,
NULL
);
if
(
IS_ERR
(
priv
->
cdev
))
{
dev_err
(
priv
->
cpu_dev
,
"running cpufreq without cooling device: %ld
\n
"
,
...
...
drivers/cpufreq/cpufreq_stats.c
浏览文件 @
5d72ed35
...
...
@@ -170,11 +170,10 @@ void cpufreq_stats_create_table(struct cpufreq_policy *policy)
unsigned
int
i
=
0
,
count
=
0
,
ret
=
-
ENOMEM
;
struct
cpufreq_stats
*
stats
;
unsigned
int
alloc_size
;
struct
cpufreq_frequency_table
*
pos
,
*
table
;
struct
cpufreq_frequency_table
*
pos
;
/* We need cpufreq table for creating stats table */
table
=
policy
->
freq_table
;
if
(
unlikely
(
!
table
))
count
=
cpufreq_table_count_valid_entries
(
policy
);
if
(
!
count
)
return
;
/* stats already initialized */
...
...
@@ -185,10 +184,6 @@ void cpufreq_stats_create_table(struct cpufreq_policy *policy)
if
(
!
stats
)
return
;
/* Find total allocation size */
cpufreq_for_each_valid_entry
(
pos
,
table
)
count
++
;
alloc_size
=
count
*
sizeof
(
int
)
+
count
*
sizeof
(
u64
);
alloc_size
+=
count
*
count
*
sizeof
(
int
);
...
...
@@ -205,7 +200,7 @@ void cpufreq_stats_create_table(struct cpufreq_policy *policy)
stats
->
max_state
=
count
;
/* Find valid-unique entries */
cpufreq_for_each_valid_entry
(
pos
,
table
)
cpufreq_for_each_valid_entry
(
pos
,
policy
->
freq_
table
)
if
(
freq_table_get_index
(
stats
,
pos
->
frequency
)
==
-
1
)
stats
->
freq_table
[
i
++
]
=
pos
->
frequency
;
...
...
drivers/cpufreq/dbx500-cpufreq.c
浏览文件 @
5d72ed35
...
...
@@ -43,7 +43,7 @@ static int dbx500_cpufreq_exit(struct cpufreq_policy *policy)
static
void
dbx500_cpufreq_ready
(
struct
cpufreq_policy
*
policy
)
{
cdev
=
cpufreq_cooling_register
(
policy
->
cpus
);
cdev
=
cpufreq_cooling_register
(
policy
);
if
(
IS_ERR
(
cdev
))
pr_err
(
"Failed to register cooling device %ld
\n
"
,
PTR_ERR
(
cdev
));
else
...
...
drivers/cpufreq/mt8173-cpufreq.c
浏览文件 @
5d72ed35
...
...
@@ -320,9 +320,7 @@ static void mtk_cpufreq_ready(struct cpufreq_policy *policy)
of_property_read_u32
(
np
,
DYNAMIC_POWER
,
&
capacitance
);
info
->
cdev
=
of_cpufreq_power_cooling_register
(
np
,
policy
->
related_cpus
,
capacitance
,
NULL
);
policy
,
capacitance
,
NULL
);
if
(
IS_ERR
(
info
->
cdev
))
{
dev_err
(
info
->
cpu_dev
,
...
...
drivers/cpufreq/qoriq-cpufreq.c
浏览文件 @
5d72ed35
...
...
@@ -278,8 +278,7 @@ static void qoriq_cpufreq_ready(struct cpufreq_policy *policy)
struct
device_node
*
np
=
of_get_cpu_node
(
policy
->
cpu
,
NULL
);
if
(
of_find_property
(
np
,
"#cooling-cells"
,
NULL
))
{
cpud
->
cdev
=
of_cpufreq_cooling_register
(
np
,
policy
->
related_cpus
);
cpud
->
cdev
=
of_cpufreq_cooling_register
(
np
,
policy
);
if
(
IS_ERR
(
cpud
->
cdev
)
&&
PTR_ERR
(
cpud
->
cdev
)
!=
-
ENOSYS
)
{
pr_err
(
"cpu%d is not running as cooling device: %ld
\n
"
,
...
...
drivers/thermal/broadcom/bcm2835_thermal.c
浏览文件 @
5d72ed35
...
...
@@ -245,7 +245,6 @@ static int bcm2835_thermal_probe(struct platform_device *pdev)
*/
err
=
tz
->
ops
->
get_trip_temp
(
tz
,
0
,
&
trip_temp
);
if
(
err
<
0
)
{
err
=
PTR_ERR
(
tz
);
dev_err
(
&
pdev
->
dev
,
"Not able to read trip_temp: %d
\n
"
,
err
);
...
...
drivers/thermal/cpu_cooling.c
浏览文件 @
5d72ed35
此差异已折叠。
点击以展开。
drivers/thermal/hisi_thermal.c
浏览文件 @
5d72ed35
...
...
@@ -397,8 +397,11 @@ static int hisi_thermal_suspend(struct device *dev)
static
int
hisi_thermal_resume
(
struct
device
*
dev
)
{
struct
hisi_thermal_data
*
data
=
dev_get_drvdata
(
dev
);
int
ret
;
clk_prepare_enable
(
data
->
clk
);
ret
=
clk_prepare_enable
(
data
->
clk
);
if
(
ret
)
return
ret
;
data
->
irq_enabled
=
true
;
hisi_thermal_enable_bind_irq_sensor
(
data
);
...
...
drivers/thermal/imx_thermal.c
浏览文件 @
5d72ed35
...
...
@@ -8,6 +8,7 @@
*/
#include <linux/clk.h>
#include <linux/cpufreq.h>
#include <linux/cpu_cooling.h>
#include <linux/delay.h>
#include <linux/device.h>
...
...
@@ -88,6 +89,7 @@ static struct thermal_soc_data thermal_imx6sx_data = {
};
struct
imx_thermal_data
{
struct
cpufreq_policy
*
policy
;
struct
thermal_zone_device
*
tz
;
struct
thermal_cooling_device
*
cdev
;
enum
thermal_device_mode
mode
;
...
...
@@ -525,13 +527,18 @@ static int imx_thermal_probe(struct platform_device *pdev)
regmap_write
(
map
,
MISC0
+
REG_SET
,
MISC0_REFTOP_SELBIASOFF
);
regmap_write
(
map
,
TEMPSENSE0
+
REG_SET
,
TEMPSENSE0_POWER_DOWN
);
data
->
cdev
=
cpufreq_cooling_register
(
cpu_present_mask
);
data
->
policy
=
cpufreq_cpu_get
(
0
);
if
(
!
data
->
policy
)
{
pr_debug
(
"%s: CPUFreq policy not found
\n
"
,
__func__
);
return
-
EPROBE_DEFER
;
}
data
->
cdev
=
cpufreq_cooling_register
(
data
->
policy
);
if
(
IS_ERR
(
data
->
cdev
))
{
ret
=
PTR_ERR
(
data
->
cdev
);
if
(
ret
!=
-
EPROBE_DEFER
)
dev_err
(
&
pdev
->
dev
,
"failed to register cpufreq cooling device: %d
\n
"
,
ret
);
dev_err
(
&
pdev
->
dev
,
"failed to register cpufreq cooling device: %d
\n
"
,
ret
);
cpufreq_cpu_put
(
data
->
policy
);
return
ret
;
}
...
...
@@ -542,6 +549,7 @@ static int imx_thermal_probe(struct platform_device *pdev)
dev_err
(
&
pdev
->
dev
,
"failed to get thermal clk: %d
\n
"
,
ret
);
cpufreq_cooling_unregister
(
data
->
cdev
);
cpufreq_cpu_put
(
data
->
policy
);
return
ret
;
}
...
...
@@ -556,6 +564,7 @@ static int imx_thermal_probe(struct platform_device *pdev)
if
(
ret
)
{
dev_err
(
&
pdev
->
dev
,
"failed to enable thermal clk: %d
\n
"
,
ret
);
cpufreq_cooling_unregister
(
data
->
cdev
);
cpufreq_cpu_put
(
data
->
policy
);
return
ret
;
}
...
...
@@ -571,6 +580,7 @@ static int imx_thermal_probe(struct platform_device *pdev)
"failed to register thermal zone device %d
\n
"
,
ret
);
clk_disable_unprepare
(
data
->
thermal_clk
);
cpufreq_cooling_unregister
(
data
->
cdev
);
cpufreq_cpu_put
(
data
->
policy
);
return
ret
;
}
...
...
@@ -599,6 +609,7 @@ static int imx_thermal_probe(struct platform_device *pdev)
clk_disable_unprepare
(
data
->
thermal_clk
);
thermal_zone_device_unregister
(
data
->
tz
);
cpufreq_cooling_unregister
(
data
->
cdev
);
cpufreq_cpu_put
(
data
->
policy
);
return
ret
;
}
...
...
@@ -620,6 +631,7 @@ static int imx_thermal_remove(struct platform_device *pdev)
thermal_zone_device_unregister
(
data
->
tz
);
cpufreq_cooling_unregister
(
data
->
cdev
);
cpufreq_cpu_put
(
data
->
policy
);
return
0
;
}
...
...
@@ -648,8 +660,11 @@ static int imx_thermal_resume(struct device *dev)
{
struct
imx_thermal_data
*
data
=
dev_get_drvdata
(
dev
);
struct
regmap
*
map
=
data
->
tempmon
;
int
ret
;
clk_prepare_enable
(
data
->
thermal_clk
);
ret
=
clk_prepare_enable
(
data
->
thermal_clk
);
if
(
ret
)
return
ret
;
/* Enabled thermal sensor after resume */
regmap_write
(
map
,
TEMPSENSE0
+
REG_CLR
,
TEMPSENSE0_POWER_DOWN
);
regmap_write
(
map
,
TEMPSENSE0
+
REG_SET
,
TEMPSENSE0_MEASURE_TEMP
);
...
...
drivers/thermal/int340x_thermal/acpi_thermal_rel.c
浏览文件 @
5d72ed35
...
...
@@ -62,8 +62,8 @@ static int acpi_thermal_rel_release(struct inode *inode, struct file *file)
* acpi_parse_trt - Thermal Relationship Table _TRT for passive cooling
*
* @handle: ACPI handle of the device contains _TRT
* @
a
rt_count: the number of valid entries resulted from parsing _TRT
* @
artp: pointer to pointer of array of art
entries in parsing result
* @
t
rt_count: the number of valid entries resulted from parsing _TRT
* @
trtp: pointer to pointer of array of _TRT
entries in parsing result
* @create_dev: whether to create platform devices for target and source
*
*/
...
...
@@ -208,7 +208,7 @@ int acpi_parse_art(acpi_handle handle, int *art_count, struct art **artp,
if
(
art
->
target
)
{
result
=
acpi_bus_get_device
(
art
->
target
,
&
adev
);
if
(
result
)
pr_warn
(
"Failed to get
source
ACPI device
\n
"
);
pr_warn
(
"Failed to get
target
ACPI device
\n
"
);
}
}
...
...
drivers/thermal/int340x_thermal/int3403_thermal.c
浏览文件 @
5d72ed35
...
...
@@ -238,8 +238,16 @@ static int int3403_add(struct platform_device *pdev)
status
=
acpi_evaluate_integer
(
priv
->
adev
->
handle
,
"PTYP"
,
NULL
,
&
priv
->
type
);
if
(
ACPI_FAILURE
(
status
))
{
result
=
-
EINVAL
;
goto
err
;
unsigned
long
long
tmp
;
status
=
acpi_evaluate_integer
(
priv
->
adev
->
handle
,
"_TMP"
,
NULL
,
&
tmp
);
if
(
ACPI_FAILURE
(
status
))
{
result
=
-
EINVAL
;
goto
err
;
}
else
{
priv
->
type
=
INT3403_TYPE_SENSOR
;
}
}
platform_set_drvdata
(
pdev
,
priv
);
...
...
drivers/thermal/ti-soc-thermal/ti-thermal-common.c
浏览文件 @
5d72ed35
...
...
@@ -28,6 +28,7 @@
#include <linux/kernel.h>
#include <linux/workqueue.h>
#include <linux/thermal.h>
#include <linux/cpufreq.h>
#include <linux/cpumask.h>
#include <linux/cpu_cooling.h>
#include <linux/of.h>
...
...
@@ -37,6 +38,7 @@
/* common data structures */
struct
ti_thermal_data
{
struct
cpufreq_policy
*
policy
;
struct
thermal_zone_device
*
ti_thermal
;
struct
thermal_zone_device
*
pcb_tz
;
struct
thermal_cooling_device
*
cool_dev
;
...
...
@@ -247,15 +249,19 @@ int ti_thermal_register_cpu_cooling(struct ti_bandgap *bgp, int id)
if
(
!
data
)
return
-
EINVAL
;
data
->
policy
=
cpufreq_cpu_get
(
0
);
if
(
!
data
->
policy
)
{
pr_debug
(
"%s: CPUFreq policy not found
\n
"
,
__func__
);
return
-
EPROBE_DEFER
;
}
/* Register cooling device */
data
->
cool_dev
=
cpufreq_cooling_register
(
cpu_present_mask
);
data
->
cool_dev
=
cpufreq_cooling_register
(
data
->
policy
);
if
(
IS_ERR
(
data
->
cool_dev
))
{
int
ret
=
PTR_ERR
(
data
->
cool_dev
);
if
(
ret
!=
-
EPROBE_DEFER
)
dev_err
(
bgp
->
dev
,
"Failed to register cpu cooling device %d
\n
"
,
ret
);
dev_err
(
bgp
->
dev
,
"Failed to register cpu cooling device %d
\n
"
,
ret
);
cpufreq_cpu_put
(
data
->
policy
);
return
ret
;
}
...
...
@@ -270,8 +276,10 @@ int ti_thermal_unregister_cpu_cooling(struct ti_bandgap *bgp, int id)
data
=
ti_bandgap_get_sensor_data
(
bgp
,
id
);
if
(
data
)
if
(
data
)
{
cpufreq_cooling_unregister
(
data
->
cool_dev
);
cpufreq_cpu_put
(
data
->
policy
);
}
return
0
;
}
include/linux/cpu_cooling.h
浏览文件 @
5d72ed35
...
...
@@ -28,47 +28,49 @@
#include <linux/thermal.h>
#include <linux/cpumask.h>
struct
cpufreq_policy
;
typedef
int
(
*
get_static_t
)(
cpumask_t
*
cpumask
,
int
interval
,
unsigned
long
voltage
,
u32
*
power
);
#ifdef CONFIG_CPU_THERMAL
/**
* cpufreq_cooling_register - function to create cpufreq cooling device.
* @
clip_cpus: cpumask of cpus where the frequency constraints will happen
* @
policy: cpufreq policy.
*/
struct
thermal_cooling_device
*
cpufreq_cooling_register
(
const
struct
cpumask
*
clip_cpus
);
cpufreq_cooling_register
(
struct
cpufreq_policy
*
policy
);
struct
thermal_cooling_device
*
cpufreq_power_cooling_register
(
const
struct
cpumask
*
clip_cpus
,
cpufreq_power_cooling_register
(
struct
cpufreq_policy
*
policy
,
u32
capacitance
,
get_static_t
plat_static_func
);
/**
* of_cpufreq_cooling_register - create cpufreq cooling device based on DT.
* @np: a valid struct device_node to the cooling device device tree node.
* @
clip_cpus: cpumask of cpus where the frequency constraints will happen
* @
policy: cpufreq policy.
*/
#ifdef CONFIG_THERMAL_OF
struct
thermal_cooling_device
*
of_cpufreq_cooling_register
(
struct
device_node
*
np
,
const
struct
cpumask
*
clip_cpus
);
struct
cpufreq_policy
*
policy
);
struct
thermal_cooling_device
*
of_cpufreq_power_cooling_register
(
struct
device_node
*
np
,
const
struct
cpumask
*
clip_cpus
,
struct
cpufreq_policy
*
policy
,
u32
capacitance
,
get_static_t
plat_static_func
);
#else
static
inline
struct
thermal_cooling_device
*
of_cpufreq_cooling_register
(
struct
device_node
*
np
,
const
struct
cpumask
*
clip_cpus
)
struct
cpufreq_policy
*
policy
)
{
return
ERR_PTR
(
-
ENOSYS
);
}
static
inline
struct
thermal_cooling_device
*
of_cpufreq_power_cooling_register
(
struct
device_node
*
np
,
const
struct
cpumask
*
clip_cpus
,
struct
cpufreq_policy
*
policy
,
u32
capacitance
,
get_static_t
plat_static_func
)
{
...
...
@@ -82,15 +84,14 @@ of_cpufreq_power_cooling_register(struct device_node *np,
*/
void
cpufreq_cooling_unregister
(
struct
thermal_cooling_device
*
cdev
);
unsigned
long
cpufreq_cooling_get_level
(
unsigned
int
cpu
,
unsigned
int
freq
);
#else
/* !CONFIG_CPU_THERMAL */
static
inline
struct
thermal_cooling_device
*
cpufreq_cooling_register
(
const
struct
cpumask
*
clip_cpus
)
cpufreq_cooling_register
(
struct
cpufreq_policy
*
policy
)
{
return
ERR_PTR
(
-
ENOSYS
);
}
static
inline
struct
thermal_cooling_device
*
cpufreq_power_cooling_register
(
const
struct
cpumask
*
clip_cpus
,
cpufreq_power_cooling_register
(
struct
cpufreq_policy
*
policy
,
u32
capacitance
,
get_static_t
plat_static_func
)
{
return
NULL
;
...
...
@@ -98,14 +99,14 @@ cpufreq_power_cooling_register(const struct cpumask *clip_cpus,
static
inline
struct
thermal_cooling_device
*
of_cpufreq_cooling_register
(
struct
device_node
*
np
,
const
struct
cpumask
*
clip_cpus
)
struct
cpufreq_policy
*
policy
)
{
return
ERR_PTR
(
-
ENOSYS
);
}
static
inline
struct
thermal_cooling_device
*
of_cpufreq_power_cooling_register
(
struct
device_node
*
np
,
const
struct
cpumask
*
clip_cpus
,
struct
cpufreq_policy
*
policy
,
u32
capacitance
,
get_static_t
plat_static_func
)
{
...
...
@@ -117,11 +118,6 @@ void cpufreq_cooling_unregister(struct thermal_cooling_device *cdev)
{
return
;
}
static
inline
unsigned
long
cpufreq_cooling_get_level
(
unsigned
int
cpu
,
unsigned
int
freq
)
{
return
THERMAL_CSTATE_INVALID
;
}
#endif
/* CONFIG_CPU_THERMAL */
#endif
/* __CPU_COOLING_H__ */
include/linux/cpufreq.h
浏览文件 @
5d72ed35
...
...
@@ -862,6 +862,20 @@ static inline int cpufreq_frequency_table_target(struct cpufreq_policy *policy,
return
-
EINVAL
;
}
}
static
inline
int
cpufreq_table_count_valid_entries
(
const
struct
cpufreq_policy
*
policy
)
{
struct
cpufreq_frequency_table
*
pos
;
int
count
=
0
;
if
(
unlikely
(
!
policy
->
freq_table
))
return
0
;
cpufreq_for_each_valid_entry
(
pos
,
policy
->
freq_table
)
count
++
;
return
count
;
}
#else
static
inline
int
cpufreq_boost_trigger_state
(
int
state
)
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录