Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
5d72ed35
Commit
5d72ed35
authored
Jul 05, 2017
by
Zhang Rui
Browse files
Options
Browse Files
Download
Plain Diff
Merge branches 'thermal-core', 'thermal-intel' and 'thermal-soc' into next
parents
0d76d6e1
4ca0e75e
467aebee
Changes
15
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
338 additions
and
416 deletions
+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
No files found.
drivers/cpufreq/arm_big_little.c
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
5d72ed35
This diff is collapsed.
Click to expand it.
drivers/thermal/hisi_thermal.c
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
)
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment