Merge branch 'xen/xenbus' of git://git.kernel.org/pub/scm/linux/kernel/git/jeremy/xen
[pandora-kernel.git] / Documentation / cpu-freq / user-guide.txt
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                              U S E R   G U I D E
7
8
9                     Dominik Brodowski  <linux@brodo.de>
10
11
12
13    Clock scaling allows you to change the clock speed of the CPUs on the
14     fly. This is a nice method to save battery power, because the lower
15             the clock speed, the less power the CPU consumes.
16
17
18 Contents:
19 ---------
20 1. Supported Architectures and Processors
21 1.1 ARM
22 1.2 x86
23 1.3 sparc64
24 1.4 ppc
25 1.5 SuperH
26 1.6 Blackfin
27
28 2. "Policy" / "Governor"?
29 2.1 Policy
30 2.2 Governor
31
32 3. How to change the CPU cpufreq policy and/or speed
33 3.1 Preferred interface: sysfs
34
35
36
37 1. Supported Architectures and Processors
38 =========================================
39
40 1.1 ARM
41 -------
42
43 The following ARM processors are supported by cpufreq:
44
45 ARM Integrator
46 ARM-SA1100
47 ARM-SA1110
48 Intel PXA
49
50
51 1.2 x86
52 -------
53
54 The following processors for the x86 architecture are supported by cpufreq:
55
56 AMD Elan - SC400, SC410
57 AMD mobile K6-2+
58 AMD mobile K6-3+
59 AMD mobile Duron
60 AMD mobile Athlon
61 AMD Opteron
62 AMD Athlon 64
63 Cyrix Media GXm
64 Intel mobile PIII and Intel mobile PIII-M on certain chipsets
65 Intel Pentium 4, Intel Xeon
66 Intel Pentium M (Centrino)
67 National Semiconductors Geode GX
68 Transmeta Crusoe
69 Transmeta Efficeon
70 VIA Cyrix 3 / C3
71 various processors on some ACPI 2.0-compatible systems [*]
72
73 [*] Only if "ACPI Processor Performance States" are available
74 to the ACPI<->BIOS interface.
75
76
77 1.3 sparc64
78 -----------
79
80 The following processors for the sparc64 architecture are supported by
81 cpufreq:
82
83 UltraSPARC-III
84
85
86 1.4 ppc
87 -------
88
89 Several "PowerBook" and "iBook2" notebooks are supported.
90
91
92 1.5 SuperH
93 ----------
94
95 All SuperH processors supporting rate rounding through the clock
96 framework are supported by cpufreq.
97
98 1.6 Blackfin
99 ------------
100
101 The following Blackfin processors are supported by cpufreq:
102
103 BF522, BF523, BF524, BF525, BF526, BF527, Rev 0.1 or higher
104 BF531, BF532, BF533, Rev 0.3 or higher
105 BF534, BF536, BF537, Rev 0.2 or higher
106 BF561, Rev 0.3 or higher
107 BF542, BF544, BF547, BF548, BF549, Rev 0.1 or higher
108
109
110 2. "Policy" / "Governor" ?
111 ==========================
112
113 Some CPU frequency scaling-capable processor switch between various
114 frequencies and operating voltages "on the fly" without any kernel or
115 user involvement. This guarantees very fast switching to a frequency
116 which is high enough to serve the user's needs, but low enough to save
117 power.
118
119
120 2.1 Policy
121 ----------
122
123 On these systems, all you can do is select the lower and upper
124 frequency limit as well as whether you want more aggressive
125 power-saving or more instantly available processing power.
126
127
128 2.2 Governor
129 ------------
130
131 On all other cpufreq implementations, these boundaries still need to
132 be set. Then, a "governor" must be selected. Such a "governor" decides
133 what speed the processor shall run within the boundaries. One such
134 "governor" is the "userspace" governor. This one allows the user - or
135 a yet-to-implement userspace program - to decide what specific speed
136 the processor shall run at.
137
138
139 3. How to change the CPU cpufreq policy and/or speed
140 ====================================================
141
142 3.1 Preferred Interface: sysfs
143 ------------------------------
144
145 The preferred interface is located in the sysfs filesystem. If you
146 mounted it at /sys, the cpufreq interface is located in a subdirectory
147 "cpufreq" within the cpu-device directory
148 (e.g. /sys/devices/system/cpu/cpu0/cpufreq/ for the first CPU).
149
150 cpuinfo_min_freq :              this file shows the minimum operating
151                                 frequency the processor can run at(in kHz) 
152 cpuinfo_max_freq :              this file shows the maximum operating
153                                 frequency the processor can run at(in kHz) 
154 cpuinfo_transition_latency      The time it takes on this CPU to
155                                 switch between two frequencies in nano
156                                 seconds. If unknown or known to be
157                                 that high that the driver does not
158                                 work with the ondemand governor, -1
159                                 (CPUFREQ_ETERNAL) will be returned.
160                                 Using this information can be useful
161                                 to choose an appropriate polling
162                                 frequency for a kernel governor or
163                                 userspace daemon. Make sure to not
164                                 switch the frequency too often
165                                 resulting in performance loss.
166 scaling_driver :                this file shows what cpufreq driver is
167                                 used to set the frequency on this CPU
168
169 scaling_available_governors :   this file shows the CPUfreq governors
170                                 available in this kernel. You can see the
171                                 currently activated governor in
172
173 scaling_governor,               and by "echoing" the name of another
174                                 governor you can change it. Please note
175                                 that some governors won't load - they only
176                                 work on some specific architectures or
177                                 processors.
178
179 cpuinfo_cur_freq :              Current frequency of the CPU as obtained from
180                                 the hardware, in KHz. This is the frequency
181                                 the CPU actually runs at.
182
183 scaling_available_frequencies : List of available frequencies, in KHz.
184
185 scaling_min_freq and
186 scaling_max_freq                show the current "policy limits" (in
187                                 kHz). By echoing new values into these
188                                 files, you can change these limits.
189                                 NOTE: when setting a policy you need to
190                                 first set scaling_max_freq, then
191                                 scaling_min_freq.
192
193 affected_cpus :                 List of CPUs that require software coordination
194                                 of frequency.
195
196 related_cpus :                  List of CPUs that need some sort of frequency
197                                 coordination, whether software or hardware.
198
199 scaling_driver :                Hardware driver for cpufreq.
200
201 scaling_cur_freq :              Current frequency of the CPU as determined by
202                                 the governor and cpufreq core, in KHz. This is
203                                 the frequency the kernel thinks the CPU runs
204                                 at.
205
206 bios_limit :                    If the BIOS tells the OS to limit a CPU to
207                                 lower frequencies, the user can read out the
208                                 maximum available frequency from this file.
209                                 This typically can happen through (often not
210                                 intended) BIOS settings, restrictions
211                                 triggered through a service processor or other
212                                 BIOS/HW based implementations.
213                                 This does not cover thermal ACPI limitations
214                                 which can be detected through the generic
215                                 thermal driver.
216
217 If you have selected the "userspace" governor which allows you to
218 set the CPU operating frequency to a specific value, you can read out
219 the current frequency in
220
221 scaling_setspeed.               By "echoing" a new frequency into this
222                                 you can change the speed of the CPU,
223                                 but only within the limits of
224                                 scaling_min_freq and scaling_max_freq.