Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/rzhang/linux
Pull thermal management updates from Zhang Rui: - Convert thermal documents to ReST (Mauro Carvalho Chehab) - Fix a cyclic depedency in between thermal core and governors (Daniel Lezcano) - Fix processor_thermal_device driver to re-evaluate power limits after resume (Srinivas Pandruvada, Zhang Rui) * 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/rzhang/linux: drivers: thermal: processor_thermal_device: Fix build warning docs: thermal: convert to ReST thermal/drivers/core: Use governor table to initialize thermal/drivers/core: Add init section table for self-encapsulation drivers: thermal: processor_thermal: Read PPCC on resume
This commit is contained in:
@@ -117,14 +117,4 @@ static struct thermal_governor thermal_gov_fair_share = {
|
||||
.name = "fair_share",
|
||||
.throttle = fair_share_throttle,
|
||||
};
|
||||
|
||||
int thermal_gov_fair_share_register(void)
|
||||
{
|
||||
return thermal_register_governor(&thermal_gov_fair_share);
|
||||
}
|
||||
|
||||
void thermal_gov_fair_share_unregister(void)
|
||||
{
|
||||
thermal_unregister_governor(&thermal_gov_fair_share);
|
||||
}
|
||||
|
||||
THERMAL_GOVERNOR_DECLARE(thermal_gov_fair_share);
|
||||
|
@@ -116,13 +116,4 @@ static struct thermal_governor thermal_gov_bang_bang = {
|
||||
.name = "bang_bang",
|
||||
.throttle = bang_bang_control,
|
||||
};
|
||||
|
||||
int thermal_gov_bang_bang_register(void)
|
||||
{
|
||||
return thermal_register_governor(&thermal_gov_bang_bang);
|
||||
}
|
||||
|
||||
void thermal_gov_bang_bang_unregister(void)
|
||||
{
|
||||
thermal_unregister_governor(&thermal_gov_bang_bang);
|
||||
}
|
||||
THERMAL_GOVERNOR_DECLARE(thermal_gov_bang_bang);
|
||||
|
@@ -443,6 +443,22 @@ static void proc_thermal_pci_remove(struct pci_dev *pdev)
|
||||
pci_disable_device(pdev);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM_SLEEP
|
||||
static int proc_thermal_resume(struct device *dev)
|
||||
{
|
||||
struct proc_thermal_device *proc_dev;
|
||||
|
||||
proc_dev = dev_get_drvdata(dev);
|
||||
proc_thermal_read_ppcc(proc_dev);
|
||||
|
||||
return 0;
|
||||
}
|
||||
#else
|
||||
#define proc_thermal_resume NULL
|
||||
#endif
|
||||
|
||||
static SIMPLE_DEV_PM_OPS(proc_thermal_pm, NULL, proc_thermal_resume);
|
||||
|
||||
static const struct pci_device_id proc_thermal_pci_ids[] = {
|
||||
{ PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_PROC_BDW_THERMAL)},
|
||||
{ PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_PROC_HSB_THERMAL)},
|
||||
@@ -465,6 +481,7 @@ static struct pci_driver proc_thermal_pci_driver = {
|
||||
.probe = proc_thermal_pci_probe,
|
||||
.remove = proc_thermal_pci_remove,
|
||||
.id_table = proc_thermal_pci_ids,
|
||||
.driver.pm = &proc_thermal_pm,
|
||||
};
|
||||
|
||||
static const struct acpi_device_id int3401_device_ids[] = {
|
||||
@@ -479,6 +496,7 @@ static struct platform_driver int3401_driver = {
|
||||
.driver = {
|
||||
.name = "int3401 thermal",
|
||||
.acpi_match_table = int3401_device_ids,
|
||||
.pm = &proc_thermal_pm,
|
||||
},
|
||||
};
|
||||
|
||||
|
@@ -651,13 +651,4 @@ static struct thermal_governor thermal_gov_power_allocator = {
|
||||
.unbind_from_tz = power_allocator_unbind,
|
||||
.throttle = power_allocator_throttle,
|
||||
};
|
||||
|
||||
int thermal_gov_power_allocator_register(void)
|
||||
{
|
||||
return thermal_register_governor(&thermal_gov_power_allocator);
|
||||
}
|
||||
|
||||
void thermal_gov_power_allocator_unregister(void)
|
||||
{
|
||||
thermal_unregister_governor(&thermal_gov_power_allocator);
|
||||
}
|
||||
THERMAL_GOVERNOR_DECLARE(thermal_gov_power_allocator);
|
||||
|
@@ -206,13 +206,4 @@ static struct thermal_governor thermal_gov_step_wise = {
|
||||
.name = "step_wise",
|
||||
.throttle = step_wise_throttle,
|
||||
};
|
||||
|
||||
int thermal_gov_step_wise_register(void)
|
||||
{
|
||||
return thermal_register_governor(&thermal_gov_step_wise);
|
||||
}
|
||||
|
||||
void thermal_gov_step_wise_unregister(void)
|
||||
{
|
||||
thermal_unregister_governor(&thermal_gov_step_wise);
|
||||
}
|
||||
THERMAL_GOVERNOR_DECLARE(thermal_gov_step_wise);
|
||||
|
@@ -243,36 +243,42 @@ int thermal_build_list_of_policies(char *buf)
|
||||
return count;
|
||||
}
|
||||
|
||||
static int __init thermal_register_governors(void)
|
||||
{
|
||||
int result;
|
||||
|
||||
result = thermal_gov_step_wise_register();
|
||||
if (result)
|
||||
return result;
|
||||
|
||||
result = thermal_gov_fair_share_register();
|
||||
if (result)
|
||||
return result;
|
||||
|
||||
result = thermal_gov_bang_bang_register();
|
||||
if (result)
|
||||
return result;
|
||||
|
||||
result = thermal_gov_user_space_register();
|
||||
if (result)
|
||||
return result;
|
||||
|
||||
return thermal_gov_power_allocator_register();
|
||||
}
|
||||
|
||||
static void __init thermal_unregister_governors(void)
|
||||
{
|
||||
thermal_gov_step_wise_unregister();
|
||||
thermal_gov_fair_share_unregister();
|
||||
thermal_gov_bang_bang_unregister();
|
||||
thermal_gov_user_space_unregister();
|
||||
thermal_gov_power_allocator_unregister();
|
||||
struct thermal_governor **governor;
|
||||
|
||||
for_each_governor_table(governor)
|
||||
thermal_unregister_governor(*governor);
|
||||
}
|
||||
|
||||
static int __init thermal_register_governors(void)
|
||||
{
|
||||
int ret = 0;
|
||||
struct thermal_governor **governor;
|
||||
|
||||
for_each_governor_table(governor) {
|
||||
ret = thermal_register_governor(*governor);
|
||||
if (ret) {
|
||||
pr_err("Failed to register governor: '%s'",
|
||||
(*governor)->name);
|
||||
break;
|
||||
}
|
||||
|
||||
pr_info("Registered thermal governor '%s'",
|
||||
(*governor)->name);
|
||||
}
|
||||
|
||||
if (ret) {
|
||||
struct thermal_governor **gov;
|
||||
|
||||
for_each_governor_table(gov) {
|
||||
if (gov == governor)
|
||||
break;
|
||||
thermal_unregister_governor(*gov);
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@@ -15,6 +15,21 @@
|
||||
/* Initial state of a cooling device during binding */
|
||||
#define THERMAL_NO_TARGET -1UL
|
||||
|
||||
/* Init section thermal table */
|
||||
extern struct thermal_governor *__governor_thermal_table[];
|
||||
extern struct thermal_governor *__governor_thermal_table_end[];
|
||||
|
||||
#define THERMAL_TABLE_ENTRY(table, name) \
|
||||
static typeof(name) *__thermal_table_entry_##name \
|
||||
__used __section(__##table##_thermal_table) = &name
|
||||
|
||||
#define THERMAL_GOVERNOR_DECLARE(name) THERMAL_TABLE_ENTRY(governor, name)
|
||||
|
||||
#define for_each_governor_table(__governor) \
|
||||
for (__governor = __governor_thermal_table; \
|
||||
__governor < __governor_thermal_table_end; \
|
||||
__governor++)
|
||||
|
||||
/*
|
||||
* This structure is used to describe the behavior of
|
||||
* a certain cooling device on a certain trip point
|
||||
@@ -74,46 +89,6 @@ thermal_cooling_device_stats_update(struct thermal_cooling_device *cdev,
|
||||
unsigned long new_state) {}
|
||||
#endif /* CONFIG_THERMAL_STATISTICS */
|
||||
|
||||
#ifdef CONFIG_THERMAL_GOV_STEP_WISE
|
||||
int thermal_gov_step_wise_register(void);
|
||||
void thermal_gov_step_wise_unregister(void);
|
||||
#else
|
||||
static inline int thermal_gov_step_wise_register(void) { return 0; }
|
||||
static inline void thermal_gov_step_wise_unregister(void) {}
|
||||
#endif /* CONFIG_THERMAL_GOV_STEP_WISE */
|
||||
|
||||
#ifdef CONFIG_THERMAL_GOV_FAIR_SHARE
|
||||
int thermal_gov_fair_share_register(void);
|
||||
void thermal_gov_fair_share_unregister(void);
|
||||
#else
|
||||
static inline int thermal_gov_fair_share_register(void) { return 0; }
|
||||
static inline void thermal_gov_fair_share_unregister(void) {}
|
||||
#endif /* CONFIG_THERMAL_GOV_FAIR_SHARE */
|
||||
|
||||
#ifdef CONFIG_THERMAL_GOV_BANG_BANG
|
||||
int thermal_gov_bang_bang_register(void);
|
||||
void thermal_gov_bang_bang_unregister(void);
|
||||
#else
|
||||
static inline int thermal_gov_bang_bang_register(void) { return 0; }
|
||||
static inline void thermal_gov_bang_bang_unregister(void) {}
|
||||
#endif /* CONFIG_THERMAL_GOV_BANG_BANG */
|
||||
|
||||
#ifdef CONFIG_THERMAL_GOV_USER_SPACE
|
||||
int thermal_gov_user_space_register(void);
|
||||
void thermal_gov_user_space_unregister(void);
|
||||
#else
|
||||
static inline int thermal_gov_user_space_register(void) { return 0; }
|
||||
static inline void thermal_gov_user_space_unregister(void) {}
|
||||
#endif /* CONFIG_THERMAL_GOV_USER_SPACE */
|
||||
|
||||
#ifdef CONFIG_THERMAL_GOV_POWER_ALLOCATOR
|
||||
int thermal_gov_power_allocator_register(void);
|
||||
void thermal_gov_power_allocator_unregister(void);
|
||||
#else
|
||||
static inline int thermal_gov_power_allocator_register(void) { return 0; }
|
||||
static inline void thermal_gov_power_allocator_unregister(void) {}
|
||||
#endif /* CONFIG_THERMAL_GOV_POWER_ALLOCATOR */
|
||||
|
||||
/* device tree support */
|
||||
#ifdef CONFIG_THERMAL_OF
|
||||
int of_parse_thermal_zones(void);
|
||||
|
@@ -44,14 +44,4 @@ static struct thermal_governor thermal_gov_user_space = {
|
||||
.name = "user_space",
|
||||
.throttle = notify_user_space,
|
||||
};
|
||||
|
||||
int thermal_gov_user_space_register(void)
|
||||
{
|
||||
return thermal_register_governor(&thermal_gov_user_space);
|
||||
}
|
||||
|
||||
void thermal_gov_user_space_unregister(void)
|
||||
{
|
||||
thermal_unregister_governor(&thermal_gov_user_space);
|
||||
}
|
||||
|
||||
THERMAL_GOVERNOR_DECLARE(thermal_gov_user_space);
|
||||
|
Reference in New Issue
Block a user