mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-16 04:21:09 -04:00
Merge back earlier cpufreq material for 7.1
This commit is contained in:
@@ -1944,7 +1944,7 @@ static void cppc_find_dmi_mhz(const struct dmi_header *dm, void *private)
|
||||
}
|
||||
|
||||
/* Look up the max frequency in DMI */
|
||||
static u64 cppc_get_dmi_max_khz(void)
|
||||
u64 cppc_get_dmi_max_khz(void)
|
||||
{
|
||||
u16 mhz = 0;
|
||||
|
||||
@@ -1958,6 +1958,7 @@ static u64 cppc_get_dmi_max_khz(void)
|
||||
|
||||
return KHZ_PER_MHZ * mhz;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(cppc_get_dmi_max_khz);
|
||||
|
||||
/*
|
||||
* If CPPC lowest_freq and nominal_freq registers are exposed then we can
|
||||
|
||||
@@ -675,6 +675,29 @@ static inline u64 get_max_boost_ratio(unsigned int cpu, u64 *nominal_freq)
|
||||
}
|
||||
#endif
|
||||
|
||||
static void acpi_cpufreq_resolve_max_freq(struct cpufreq_policy *policy,
|
||||
unsigned int pss_max_freq)
|
||||
{
|
||||
#ifdef CONFIG_ACPI_CPPC_LIB
|
||||
u64 max_speed = cppc_get_dmi_max_khz();
|
||||
/*
|
||||
* Use DMI "Max Speed" if it looks plausible: must be
|
||||
* above _PSS P0 frequency and within 2x of it.
|
||||
*/
|
||||
if (max_speed > pss_max_freq && max_speed < pss_max_freq * 2) {
|
||||
policy->cpuinfo.max_freq = max_speed;
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
/*
|
||||
* If the maximum "boost" frequency is unknown, ask the arch
|
||||
* scale-invariance code to use the "nominal" performance for
|
||||
* CPU utilization scaling so as to prevent the schedutil
|
||||
* governor from selecting inadequate CPU frequencies.
|
||||
*/
|
||||
arch_set_max_freq_ratio(true);
|
||||
}
|
||||
|
||||
static int acpi_cpufreq_cpu_init(struct cpufreq_policy *policy)
|
||||
{
|
||||
struct cpufreq_frequency_table *freq_table;
|
||||
@@ -849,13 +872,7 @@ static int acpi_cpufreq_cpu_init(struct cpufreq_policy *policy)
|
||||
|
||||
policy->cpuinfo.max_freq = freq * max_boost_ratio >> SCHED_CAPACITY_SHIFT;
|
||||
} else {
|
||||
/*
|
||||
* If the maximum "boost" frequency is unknown, ask the arch
|
||||
* scale-invariance code to use the "nominal" performance for
|
||||
* CPU utilization scaling so as to prevent the schedutil
|
||||
* governor from selecting inadequate CPU frequencies.
|
||||
*/
|
||||
arch_set_max_freq_ratio(true);
|
||||
acpi_cpufreq_resolve_max_freq(policy, freq_table[0].frequency);
|
||||
}
|
||||
|
||||
policy->freq_table = freq_table;
|
||||
|
||||
@@ -2364,8 +2364,8 @@ int __cpufreq_driver_target(struct cpufreq_policy *policy,
|
||||
target_freq = __resolve_freq(policy, target_freq, policy->min,
|
||||
policy->max, relation);
|
||||
|
||||
pr_debug("target for CPU %u: %u kHz, relation %u, requested %u kHz\n",
|
||||
policy->cpu, target_freq, relation, old_target_freq);
|
||||
pr_debug("CPU %u: cur %u kHz -> target %u kHz (req %u kHz, rel %u)\n",
|
||||
policy->cpu, policy->cur, target_freq, old_target_freq, relation);
|
||||
|
||||
/*
|
||||
* This might look like a redundant call as we are checking it again
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
#include <linux/kernel_stat.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/mutex.h>
|
||||
#include <linux/sysfs.h>
|
||||
|
||||
/* Ondemand Sampling types */
|
||||
enum {OD_NORMAL_SAMPLE, OD_SUB_SAMPLE};
|
||||
@@ -57,7 +58,7 @@ static ssize_t file_name##_show \
|
||||
{ \
|
||||
struct dbs_data *dbs_data = to_dbs_data(attr_set); \
|
||||
struct _gov##_dbs_tuners *tuners = dbs_data->tuners; \
|
||||
return sprintf(buf, "%u\n", tuners->file_name); \
|
||||
return sysfs_emit(buf, "%u\n", tuners->file_name); \
|
||||
}
|
||||
|
||||
#define gov_show_one_common(file_name) \
|
||||
@@ -65,7 +66,7 @@ static ssize_t file_name##_show \
|
||||
(struct gov_attr_set *attr_set, char *buf) \
|
||||
{ \
|
||||
struct dbs_data *dbs_data = to_dbs_data(attr_set); \
|
||||
return sprintf(buf, "%u\n", dbs_data->file_name); \
|
||||
return sysfs_emit(buf, "%u\n", dbs_data->file_name); \
|
||||
}
|
||||
|
||||
#define gov_attr_ro(_name) \
|
||||
|
||||
@@ -3472,7 +3472,7 @@ static int intel_pstate_update_status(const char *buf, size_t size)
|
||||
{
|
||||
if (size == 3 && !strncmp(buf, "off", size)) {
|
||||
if (!intel_pstate_driver)
|
||||
return -EINVAL;
|
||||
return 0;
|
||||
|
||||
if (hwp_active)
|
||||
return -EBUSY;
|
||||
|
||||
@@ -156,6 +156,7 @@ extern int cppc_set_enable(int cpu, bool enable);
|
||||
extern int cppc_get_perf_caps(int cpu, struct cppc_perf_caps *caps);
|
||||
extern bool cppc_perf_ctrs_in_pcc_cpu(unsigned int cpu);
|
||||
extern bool cppc_perf_ctrs_in_pcc(void);
|
||||
extern u64 cppc_get_dmi_max_khz(void);
|
||||
extern unsigned int cppc_perf_to_khz(struct cppc_perf_caps *caps, unsigned int perf);
|
||||
extern unsigned int cppc_khz_to_perf(struct cppc_perf_caps *caps, unsigned int freq);
|
||||
extern bool acpi_cpc_valid(void);
|
||||
|
||||
@@ -232,7 +232,7 @@ static inline bool policy_is_inactive(struct cpufreq_policy *policy)
|
||||
|
||||
static inline bool policy_is_shared(struct cpufreq_policy *policy)
|
||||
{
|
||||
return cpumask_weight(policy->cpus) > 1;
|
||||
return cpumask_nth(1, policy->cpus) < nr_cpumask_bits;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_CPU_FREQ
|
||||
|
||||
Reference in New Issue
Block a user