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

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

Merge back earlier cpufreq material.

Conflicts:
	arch/mips/loongson/lemote-2f/clock.c
	drivers/cpufreq/intel_pstate.c
parents bf810222 8d65775d
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -128,7 +128,7 @@ Description: Discover cpuidle policy and mechanism

What:		/sys/devices/system/cpu/cpu#/cpufreq/*
Date:		pre-git history
Contact:	cpufreq@vger.kernel.org
Contact:	linux-pm@vger.kernel.org
Description:	Discover and change clock speed of CPUs

		Clock scaling allows you to change the clock speed of the
@@ -146,7 +146,7 @@ Description: Discover and change clock speed of CPUs

What:		/sys/devices/system/cpu/cpu#/cpufreq/freqdomain_cpus
Date:		June 2013
Contact:	cpufreq@vger.kernel.org
Contact:	linux-pm@vger.kernel.org
Description:	Discover CPUs in the same CPU frequency coordination domain

		freqdomain_cpus is the list of CPUs (online+offline) that share
+29 −0
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ Contents:
---------
1.  CPUFreq core and interfaces
2.  CPUFreq notifiers
3.  CPUFreq Table Generation with Operating Performance Point (OPP)

1. General Information
=======================
@@ -92,3 +93,31 @@ values:
cpu	- number of the affected CPU
old	- old frequency
new	- new frequency

3. CPUFreq Table Generation with Operating Performance Point (OPP)
==================================================================
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
	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
	providable to cpufreq.

	WARNING: Do not use this function in interrupt context.

	Example:
	 soc_pm_init()
	 {
		/* Do things */
		r = dev_pm_opp_init_cpufreq_table(dev, &freq_table);
		if (!r)
			cpufreq_frequency_table_cpuinfo(policy, freq_table);
		/* Do other things */
	 }

	NOTE: This function is available only if CONFIG_CPU_FREQ is enabled in
	addition to CONFIG_PM_OPP.

dev_pm_opp_free_cpufreq_table - Free up the table allocated by dev_pm_opp_init_cpufreq_table
+19 −0
Original line number Diff line number Diff line
@@ -228,3 +228,22 @@ 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
the frequency the CPU shall be set to.

The following macros can be used as iterators over cpufreq_frequency_table:

cpufreq_for_each_entry(pos, table) - iterates over all entries of frequency
table.

cpufreq-for_each_valid_entry(pos, table) - iterates over all entries,
excluding CPUFREQ_ENTRY_INVALID frequencies.
Use arguments "pos" - a cpufreq_frequency_table * as a loop cursor and
"table" - the cpufreq_frequency_table * you want to iterate over.

For example:

	struct cpufreq_frequency_table *pos, *driver_freq_table;

	cpufreq_for_each_entry(pos, driver_freq_table) {
		/* Do something with pos */
		pos->frequency = ...
	}
+2 −2
Original line number Diff line number Diff line
@@ -35,8 +35,8 @@ Mailing List
------------
There is a CPU frequency changing CVS commit and general list where
you can report bugs, problems or submit patches. To post a message,
send an email to cpufreq@vger.kernel.org, to subscribe go to
http://vger.kernel.org/vger-lists.html#cpufreq and follow the
send an email to linux-pm@vger.kernel.org, to subscribe go to
http://vger.kernel.org/vger-lists.html#linux-pm and follow the
instructions there.

Links
+5 −35
Original line number Diff line number Diff line
@@ -10,8 +10,7 @@ Contents
3. OPP Search Functions
4. OPP Availability Control Functions
5. OPP Data Retrieval Functions
6. Cpufreq Table Generation
7. Data Structures
6. Data Structures

1. Introduction
===============
@@ -72,7 +71,6 @@ operations until that OPP could be re-enabled if possible.
OPP library facilitates this concept in it's implementation. The following
operational functions operate only on available opps:
opp_find_freq_{ceil, floor}, dev_pm_opp_get_voltage, dev_pm_opp_get_freq, dev_pm_opp_get_opp_count
and dev_pm_opp_init_cpufreq_table

dev_pm_opp_find_freq_exact is meant to be used to find the opp pointer which can then
be used for dev_pm_opp_enable/disable functions to make an opp available as required.
@@ -96,10 +94,9 @@ using RCU read locks. The opp_find_freq_{exact,ceil,floor},
opp_get_{voltage, freq, opp_count} fall into this category.

opp_{add,enable,disable} are updaters which use mutex and implement it's own
RCU locking mechanisms. dev_pm_opp_init_cpufreq_table acts as an updater and uses
mutex to implment RCU updater strategy. These functions should *NOT* be called
under RCU locks and other contexts that prevent blocking functions in RCU or
mutex operations from working.
RCU locking mechanisms. These functions should *NOT* be called under RCU locks
and other contexts that prevent blocking functions in RCU or mutex operations
from working.

2. Initial OPP List Registration
================================
@@ -311,34 +308,7 @@ dev_pm_opp_get_opp_count - Retrieve the number of available opps for a device
		/* Do other things */
	 }

6. Cpufreq Table Generation
===========================
dev_pm_opp_init_cpufreq_table - cpufreq framework typically is initialized with
	cpufreq_frequency_table_cpuinfo 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
	providable to cpufreq.

	WARNING: Do not use this function in interrupt context.

	Example:
	 soc_pm_init()
	 {
		/* Do things */
		r = dev_pm_opp_init_cpufreq_table(dev, &freq_table);
		if (!r)
			cpufreq_frequency_table_cpuinfo(policy, freq_table);
		/* Do other things */
	 }

	NOTE: This function is available only if CONFIG_CPU_FREQ is enabled in
	addition to CONFIG_PM as power management feature is required to
	dynamically scale voltage and frequency in a system.

dev_pm_opp_free_cpufreq_table - Free up the table allocated by dev_pm_opp_init_cpufreq_table

7. Data Structures
6. Data Structures
==================
Typically an SoC contains multiple voltage domains which are variable. Each
domain is represented by a device pointer. The relationship to OPP can be
Loading