Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

Merge back earlier cpufreq changes for v4.8.

parents 5edb5649 f6709b8a
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -96,7 +96,7 @@ new - new frequency
For details about OPP, see Documentation/power/opp.txt

dev_pm_opp_init_cpufreq_table - cpufreq framework typically is initialized with
	cpufreq_frequency_table_cpuinfo which is provided with the list of
	cpufreq_table_validate_and_show() which is provided with the list of
	frequencies that are available for operation. This function provides
	a ready to use conversion routine to translate the OPP layer's internal
	information about the available frequencies into a format readily
@@ -110,7 +110,7 @@ dev_pm_opp_init_cpufreq_table - cpufreq framework typically is initialized with
		/* Do things */
		r = dev_pm_opp_init_cpufreq_table(dev, &freq_table);
		if (!r)
			cpufreq_frequency_table_cpuinfo(policy, freq_table);
			cpufreq_table_validate_and_show(policy, freq_table);
		/* Do other things */
	 }

+4 −6
Original line number Diff line number Diff line
@@ -231,7 +231,7 @@ if you want to skip one entry in the table, set the frequency to
CPUFREQ_ENTRY_INVALID. The entries don't need to be in ascending
order.

By calling cpufreq_frequency_table_cpuinfo(struct cpufreq_policy *policy,
By calling cpufreq_table_validate_and_show(struct cpufreq_policy *policy,
					struct cpufreq_frequency_table *table);
the cpuinfo.min_freq and cpuinfo.max_freq values are detected, and
policy->min and policy->max are set to the same values. This is
@@ -244,14 +244,12 @@ policy->max, and all other criteria are met. This is helpful for the
->verify call.

int cpufreq_frequency_table_target(struct cpufreq_policy *policy,
                                   struct cpufreq_frequency_table *table,
                                   unsigned int target_freq,
                                   unsigned int relation,
                                   unsigned int *index);
                                   unsigned int relation);

is the corresponding frequency table helper for the ->target
stage. Just pass the values to this function, and the unsigned int
index returns the number of the frequency table entry which contains
stage. Just pass the values to this function, and this function
returns the number of the frequency table entry which contains
the frequency the CPU shall be set to.

The following macros can be used as iterators over cpufreq_frequency_table:
+34 −38
Original line number Diff line number Diff line
@@ -85,27 +85,21 @@ static void spu_gov_cancel_work(struct spu_gov_info_struct *info)
	cancel_delayed_work_sync(&info->work);
}

static int spu_gov_govern(struct cpufreq_policy *policy, unsigned int event)
static int spu_gov_start(struct cpufreq_policy *policy)
{
	unsigned int cpu = policy->cpu;
	struct spu_gov_info_struct *info, *affected_info;
	struct spu_gov_info_struct *info = &per_cpu(spu_gov_info, cpu);
	struct spu_gov_info_struct *affected_info;
	int i;
	int ret = 0;

	info = &per_cpu(spu_gov_info, cpu);

	switch (event) {
	case CPUFREQ_GOV_START:
	if (!cpu_online(cpu)) {
		printk(KERN_ERR "cpu %d is not online\n", cpu);
			ret = -EINVAL;
			break;
		return -EINVAL;
	}

	if (!policy->cur) {
		printk(KERN_ERR "no cpu specified in policy\n");
			ret = -EINVAL;
			break;
		return -EINVAL;
	}

	/* initialize spu_gov_info for all affected cpus */
@@ -119,9 +113,15 @@ static int spu_gov_govern(struct cpufreq_policy *policy, unsigned int event)
	/* setup timer */
	spu_gov_init_work(info);

		break;
	return 0;
}

static void spu_gov_stop(struct cpufreq_policy *policy)
{
	unsigned int cpu = policy->cpu;
	struct spu_gov_info_struct *info = &per_cpu(spu_gov_info, cpu);
	int i;

	case CPUFREQ_GOV_STOP:
	/* cancel timer */
	spu_gov_cancel_work(info);

@@ -130,16 +130,12 @@ static int spu_gov_govern(struct cpufreq_policy *policy, unsigned int event)
		info = &per_cpu(spu_gov_info, i);
		info->policy = NULL;
	}

		break;
	}

	return ret;
}

static struct cpufreq_governor spu_governor = {
	.name = "spudemand",
	.governor = spu_gov_govern,
	.start = spu_gov_start,
	.stop = spu_gov_stop,
	.owner = THIS_MODULE,
};

+4 −9
Original line number Diff line number Diff line
@@ -31,23 +31,18 @@ config CPU_FREQ_BOOST_SW
	depends on THERMAL

config CPU_FREQ_STAT
	tristate "CPU frequency translation statistics"
	bool "CPU frequency transition statistics"
	default y
	help
	  This driver exports CPU frequency statistics information through sysfs
	  file system.

	  To compile this driver as a module, choose M here: the
	  module will be called cpufreq_stats.
	  Export CPU frequency statistics information through sysfs.

	  If in doubt, say N.

config CPU_FREQ_STAT_DETAILS
	bool "CPU frequency translation statistics details"
	bool "CPU frequency transition statistics details"
	depends on CPU_FREQ_STAT
	help
	  This will show detail CPU frequency translation table in sysfs file
	  system.
	  Show detailed CPU frequency transition table in sysfs.

	  If in doubt, say N.

+4 −6
Original line number Diff line number Diff line
@@ -48,9 +48,8 @@ static unsigned int amd_powersave_bias_target(struct cpufreq_policy *policy,
	struct policy_dbs_info *policy_dbs = policy->governor_data;
	struct dbs_data *od_data = policy_dbs->dbs_data;
	struct od_dbs_tuners *od_tuners = od_data->tuners;
	struct od_policy_dbs_info *od_info = to_dbs_info(policy_dbs);

	if (!od_info->freq_table)
	if (!policy->freq_table)
		return freq_next;

	rdmsr_on_cpu(policy->cpu, MSR_AMD64_FREQ_SENSITIVITY_ACTUAL,
@@ -92,10 +91,9 @@ static unsigned int amd_powersave_bias_target(struct cpufreq_policy *policy,
		else {
			unsigned int index;

			cpufreq_frequency_table_target(policy,
				od_info->freq_table, policy->cur - 1,
				CPUFREQ_RELATION_H, &index);
			freq_next = od_info->freq_table[index].frequency;
			index = cpufreq_frequency_table_target(policy,
				policy->cur - 1, CPUFREQ_RELATION_H);
			freq_next = policy->freq_table[index].frequency;
		}

		data->freq_prev = freq_next;
Loading