Merge tag 'cpu-hotplug-3.15-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git...
[deliverable/linux.git] / Documentation / cpu-freq / cpu-drivers.txt
CommitLineData
1da177e4
LT
1 CPU frequency and voltage scaling code in the Linux(TM) kernel
2
3
4 L i n u x C P U F r e q
5
6 C P U D r i v e r s
7
8 - information for developers -
9
10
11 Dominik Brodowski <linux@brodo.de>
12
13
14
15 Clock scaling allows you to change the clock speed of the CPUs on the
16 fly. This is a nice method to save battery power, because the lower
17 the clock speed, the less power the CPU consumes.
18
19
20Contents:
21---------
221. What To Do?
231.1 Initialization
241.2 Per-CPU Initialization
251.3 verify
9c0ebcf7
VK
261.4 target/target_index or setpolicy?
271.5 target/target_index
1da177e4
LT
281.6 setpolicy
292. Frequency Table Helpers
30
31
32
331. What To Do?
34==============
35
36So, you just got a brand-new CPU / chipset with datasheets and want to
37add cpufreq support for this CPU / chipset? Great. Here are some hints
38on what is necessary:
39
40
411.1 Initialization
42------------------
43
44First of all, in an __initcall level 7 (module_init()) or later
45function check whether this kernel runs on the right CPU and the right
46chipset. If so, register a struct cpufreq_driver with the CPUfreq core
47using cpufreq_register_driver()
48
49What shall this struct cpufreq_driver contain?
50
51cpufreq_driver.name - The name of this driver.
52
1da177e4
LT
53cpufreq_driver.init - A pointer to the per-CPU initialization
54 function.
55
56cpufreq_driver.verify - A pointer to a "verification" function.
57
58cpufreq_driver.setpolicy _or_
9c0ebcf7
VK
59cpufreq_driver.target/
60target_index - See below on the differences.
1da177e4
LT
61
62And optionally
63
367dc4aa
DB
64cpufreq_driver.exit - A pointer to a per-CPU cleanup
65 function called during CPU_POST_DEAD
66 phase of cpu hotplug process.
67
68cpufreq_driver.stop_cpu - A pointer to a per-CPU stop function
69 called during CPU_DOWN_PREPARE phase of
70 cpu hotplug process.
1da177e4
LT
71
72cpufreq_driver.resume - A pointer to a per-CPU resume function
73 which is called with interrupts disabled
74 and _before_ the pre-suspend frequency
75 and/or policy is restored by a call to
9c0ebcf7 76 ->target/target_index or ->setpolicy.
1da177e4
LT
77
78cpufreq_driver.attr - A pointer to a NULL-terminated list of
79 "struct freq_attr" which allow to
80 export values to sysfs.
81
82
831.2 Per-CPU Initialization
84--------------------------
85
86Whenever a new CPU is registered with the device model, or after the
87cpufreq driver registers itself, the per-CPU initialization function
88cpufreq_driver.init is called. It takes a struct cpufreq_policy
89*policy as argument. What to do now?
90
91If necessary, activate the CPUfreq support on your CPU.
92
93Then, the driver must fill in the following values:
94
95policy->cpuinfo.min_freq _and_
96policy->cpuinfo.max_freq - the minimum and maximum frequency
97 (in kHz) which is supported by
98 this CPU
99policy->cpuinfo.transition_latency the time it takes on this CPU to
bbe237aa
MB
100 switch between two frequencies in
101 nanoseconds (if appropriate, else
102 specify CPUFREQ_ETERNAL)
1da177e4
LT
103
104policy->cur The current operating frequency of
105 this CPU (if appropriate)
106policy->min,
107policy->max,
108policy->policy and, if necessary,
109policy->governor must contain the "default policy" for
110 this CPU. A few moments later,
111 cpufreq_driver.verify and either
112 cpufreq_driver.setpolicy or
9c0ebcf7
VK
113 cpufreq_driver.target/target_index is called
114 with these values.
1da177e4 115
eb2f50ff
VK
116For setting some of these values (cpuinfo.min[max]_freq, policy->min[max]), the
117frequency table helpers might be helpful. See the section 2 for more information
118on them.
1da177e4 119
951fc5f4
VK
120SMP systems normally have same clock source for a group of cpus. For these the
121.init() would be called only once for the first online cpu. Here the .init()
122routine must initialize policy->cpus with mask of all possible cpus (Online +
123Offline) that share the clock. Then the core would copy this mask onto
124policy->related_cpus and will reset policy->cpus to carry only online cpus.
125
1da177e4
LT
126
1271.3 verify
128------------
129
130When the user decides a new policy (consisting of
131"policy,governor,min,max") shall be set, this policy must be validated
132so that incompatible values can be corrected. For verifying these
133values, a frequency table helper and/or the
134cpufreq_verify_within_limits(struct cpufreq_policy *policy, unsigned
135int min_freq, unsigned int max_freq) function might be helpful. See
136section 2 for details on frequency table helpers.
137
138You need to make sure that at least one valid frequency (or operating
139range) is within policy->min and policy->max. If necessary, increase
140policy->max first, and only if this is no solution, decrease policy->min.
141
142
9c0ebcf7 1431.4 target/target_index or setpolicy?
1da177e4
LT
144----------------------------
145
146Most cpufreq drivers or even most cpu frequency scaling algorithms
147only allow the CPU to be set to one frequency. For these, you use the
9c0ebcf7 148->target/target_index call.
1da177e4
LT
149
150Some cpufreq-capable processors switch the frequency between certain
151limits on their own. These shall use the ->setpolicy call
152
153
9c0ebcf7 1541.4. target/target_index
1da177e4
LT
155-------------
156
9c0ebcf7
VK
157The target_index call has two arguments: struct cpufreq_policy *policy,
158and unsigned int index (into the exposed frequency table).
159
160The CPUfreq driver must set the new frequency when called here. The
161actual frequency must be determined by freq_table[index].frequency.
162
163Deprecated:
164----------
1da177e4
LT
165The target call has three arguments: struct cpufreq_policy *policy,
166unsigned int target_frequency, unsigned int relation.
167
168The CPUfreq driver must set the new frequency when called here. The
169actual frequency must be determined using the following rules:
170
171- keep close to "target_freq"
172- policy->min <= new_freq <= policy->max (THIS MUST BE VALID!!!)
173- if relation==CPUFREQ_REL_L, try to select a new_freq higher than or equal
174 target_freq. ("L for lowest, but no lower than")
175- if relation==CPUFREQ_REL_H, try to select a new_freq lower than or equal
176 target_freq. ("H for highest, but no higher than")
177
51555c0e 178Here again the frequency table helper might assist you - see section 2
1da177e4
LT
179for details.
180
181
1821.5 setpolicy
183---------------
184
185The setpolicy call only takes a struct cpufreq_policy *policy as
186argument. You need to set the lower limit of the in-processor or
187in-chipset dynamic frequency switching to policy->min, the upper limit
188to policy->max, and -if supported- select a performance-oriented
189setting when policy->policy is CPUFREQ_POLICY_PERFORMANCE, and a
190powersaving-oriented setting when CPUFREQ_POLICY_POWERSAVE. Also check
25eb650a 191the reference implementation in drivers/cpufreq/longrun.c
1da177e4
LT
192
193
194
1952. Frequency Table Helpers
196==========================
197
198As most cpufreq processors only allow for being set to a few specific
199frequencies, a "frequency table" with some functions might assist in
200some work of the processor driver. Such a "frequency table" consists
3a7818e6 201of an array of struct cpufreq_frequency_table entries, with any value in
50701588 202"driver_data" you want to use, and the corresponding frequency in
1da177e4 203"frequency". At the end of the table, you need to add a
3a7818e6 204cpufreq_frequency_table entry with frequency set to CPUFREQ_TABLE_END. And
1da177e4
LT
205if you want to skip one entry in the table, set the frequency to
206CPUFREQ_ENTRY_INVALID. The entries don't need to be in ascending
207order.
208
209By calling cpufreq_frequency_table_cpuinfo(struct cpufreq_policy *policy,
210 struct cpufreq_frequency_table *table);
211the cpuinfo.min_freq and cpuinfo.max_freq values are detected, and
212policy->min and policy->max are set to the same values. This is
213helpful for the per-CPU initialization stage.
214
215int cpufreq_frequency_table_verify(struct cpufreq_policy *policy,
216 struct cpufreq_frequency_table *table);
217assures that at least one valid frequency is within policy->min and
218policy->max, and all other criteria are met. This is helpful for the
219->verify call.
220
221int cpufreq_frequency_table_target(struct cpufreq_policy *policy,
222 struct cpufreq_frequency_table *table,
223 unsigned int target_freq,
224 unsigned int relation,
225 unsigned int *index);
226
227is the corresponding frequency table helper for the ->target
228stage. Just pass the values to this function, and the unsigned int
229index returns the number of the frequency table entry which contains
50701588 230the frequency the CPU shall be set to.
This page took 0.627103 seconds and 5 git commands to generate.