Lines Matching +full:power +full:- +full:controller
2 Power allocator governor tunables
6 -----------
19 PID Controller
20 --------------
22 The power allocator governor implements a
23 Proportional-Integral-Derivative controller (PID controller) with
24 temperature as the control input and power as the controlled output:
29 - e = desired_temperature - current_temperature
30 - err_integral is the sum of previous errors
31 - diff_err = e - previous_error
39 | +----------+ +---+
40 | +----->| diff_err |-->| X |------+
41 | | +----------+ +---+ |
47 +---+ | +-------+ +---+ +---+ +---+ +----------+
48 | S |-----+----->| sum e |----->| X |--->| S |-->| S |-->|power |
49 +---+ | +-------+ +---+ +---+ +---+ |allocation|
50 ^ | ^ +----------+
52 | | +---+ | | |
53 | +------->| X |-------------------+ v v
54 | +---+ granted performance
60 Sustainable power
61 -----------------
63 An estimate of the sustainable dissipatable power (in mW) should be
65 sustained power that can be dissipated at the desired control
66 temperature. This is the maximum sustained power for allocation at
67 the desired maximum temperature. The actual sustained power can vary
68 for a number of reasons. The closed loop controller will take care of
70 to the speed-grade of the silicon. `sustainable_power` is therefore
72 the thermal ramp. For reference, the sustainable power of a 4" phone
77 thermal-zone. For example::
79 thermal-zones {
81 polling-delay = <1000>;
82 polling-delay-passive = <100>;
83 sustainable-power = <2500>;
99 -------------
101 The implementation of the PID controller in the power allocator
113 value of `k_pu` will result in the governor granting very high power
118 2 * sustainable_power / (desired_temperature - switch_on_temp)
120 This means that at `switch_on_temp` the output of the controller's
124 sustainable_power / (desired_temperature - switch_on_temp)
127 controller equation we have::
136 an estimate, which is the reason for closed-loop control such as this.
140 P_max = 2 * sustainable_power * (T_set - T) / (T_set - T_on) +
145 - T_set is the desired temperature
146 - T is the current temperature
147 - T_on is the switch on temperature
152 P_max = 2 * sustainable_power * (T_set - T_on) / (T_set - T_on) +
156 Therefore, the proportional term alone linearly decreases power from
161 -----------------------
164 allows the PID controller to compensate for long term drift and for
166 the exact power that the governor requests. When the temperature
169 added to the output of the controller. Typically `k_i` is set low (1
173 ---
178 Cooling device power API
182 "power" API in their `cooling_device_ops`. It consists on three ops:
187 struct thermal_zone_device *tz, u32 *power);
194 @power:
195 pointer in which to store the calculated power
197 `get_requested_power()` calculates the power requested by the device
198 in milliwatts and stores it in @power . It should return 0 on
199 success, -E* on failure. This is currently used by the power
200 allocator governor to calculate how much power to give to each cooling
207 u32 *power);
215 @power:
216 pointer in which to store the equivalent power
218 Convert cooling device state @state into power consumption in
219 milliwatts and store it in @power. It should return 0 on success, -E*
221 maximum power that an actor can consume.
225 int power2state(struct thermal_cooling_device *cdev, u32 power,
230 @power:
231 power in milliwatts
236 most @power mW and store it in @state. It should return 0 on success,
237 -E* on failure. This is currently used by the thermal core to convert
238 a given power set by the power allocator governor to a state that the
244 ----------------------
247 devices. They express the relative power efficiency of different
248 cooling devices. Higher weight can be used to express higher power
259 as the `contribution` property of each map in the `cooling-maps` node.
261 Limitations of the power allocator governor
264 The power allocator governor's PID controller works best if there is a
269 governor, step-wise will also misbehave if you call its throttle()