Commit 65dea119 authored by Rafael J. Wysocki's avatar Rafael J. Wysocki
Browse files

Merge back earlier cpufreq material for 7.1

parents 6a28fb8c 16fb8d8a
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -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
+24 −7
Original line number Diff line number Diff line
@@ -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;
+2 −2
Original line number Diff line number Diff line
@@ -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
+3 −2
Original line number Diff line number Diff line
@@ -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)						\
+1 −1
Original line number Diff line number Diff line
@@ -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;
Loading