• Home
  • Raw
  • Download

Lines Matching +full:idle +full:- +full:state

1 // SPDX-License-Identifier: GPL-2.0
20 * struct cpuidle_cooling_device - data for the idle cooling device
21 * @ii_dev: an atomic to keep track of the last task exiting the idle cycle
22 * @state: a normalized integer giving the state of the cooling device
26 unsigned long state; member
32 * cpuidle_cooling_runtime - Running time computation
33 * @idle_duration_us: CPU idle time to inject in microseconds
34 * @state: a percentile based number
36 * The running duration is computed from the idle injection duration
37 * which is fixed. If we reach 100% of idle injection ratio, that
39 * injection, that means we have equal duration for idle and for
44 * running = idle x ((100 / ratio) - 1)
48 * running = (idle x 100) / ratio - idle
51 * with 10ms of idle injection and 10ms of running duration.
56 unsigned long state) in cpuidle_cooling_runtime() argument
58 if (!state) in cpuidle_cooling_runtime()
61 return ((idle_duration_us * 100) / state) - idle_duration_us; in cpuidle_cooling_runtime()
65 * cpuidle_cooling_get_max_state - Get the maximum state
67 * @state : a pointer to the state variable to be filled
75 unsigned long *state) in cpuidle_cooling_get_max_state() argument
79 * cycle and the idle cycle could be different. We want to in cpuidle_cooling_get_max_state()
80 * unify that to an 0..100 interval, so the set state in cpuidle_cooling_get_max_state()
83 * The state 100% will make the cluster 100% ... idle. A 0% in cpuidle_cooling_get_max_state()
84 * injection ratio means no idle injection at all and 50% in cpuidle_cooling_get_max_state()
85 * means for 10ms of idle injection, we have 10ms of running in cpuidle_cooling_get_max_state()
88 *state = 100; in cpuidle_cooling_get_max_state()
94 * cpuidle_cooling_get_cur_state - Get the current cooling state
96 * @state: a pointer to the state
98 * The function just copies the state value from the private thermal
99 * cooling device structure, the mapping is 1 <-> 1.
104 unsigned long *state) in cpuidle_cooling_get_cur_state() argument
106 struct cpuidle_cooling_device *idle_cdev = cdev->devdata; in cpuidle_cooling_get_cur_state()
108 *state = idle_cdev->state; in cpuidle_cooling_get_cur_state()
114 * cpuidle_cooling_set_cur_state - Set the current cooling state
116 * @state: the target state
119 * in turn wakes up all the idle injection tasks belonging to the idle
120 * cooling device. In any case, it updates the internal state for the
126 unsigned long state) in cpuidle_cooling_set_cur_state() argument
128 struct cpuidle_cooling_device *idle_cdev = cdev->devdata; in cpuidle_cooling_set_cur_state()
129 struct idle_inject_device *ii_dev = idle_cdev->ii_dev; in cpuidle_cooling_set_cur_state()
130 unsigned long current_state = idle_cdev->state; in cpuidle_cooling_set_cur_state()
133 idle_cdev->state = state; in cpuidle_cooling_set_cur_state()
137 runtime_us = cpuidle_cooling_runtime(idle_duration_us, state); in cpuidle_cooling_set_cur_state()
141 if (current_state == 0 && state > 0) { in cpuidle_cooling_set_cur_state()
143 } else if (current_state > 0 && !state) { in cpuidle_cooling_set_cur_state()
151 * cpuidle_cooling_ops - thermal cooling device ops
165 * structure, the idle injection, initialize them and register the
184 ret = -ENOMEM; in __cpuidle_cooling_register()
194 ii_dev = idle_inject_register(drv->cpumask); in __cpuidle_cooling_register()
196 ret = -EINVAL; in __cpuidle_cooling_register()
200 of_property_read_u32(np, "duration-us", &idle_duration_us); in __cpuidle_cooling_register()
201 of_property_read_u32(np, "exit-latency-us", &latency_us); in __cpuidle_cooling_register()
206 idle_cdev->ii_dev = ii_dev; in __cpuidle_cooling_register()
208 snprintf(dev_name, sizeof(dev_name), "thermal-idle-%d", id); in __cpuidle_cooling_register()
217 pr_debug("%s: Idle injection set with idle duration=%u, latency=%u\n", in __cpuidle_cooling_register()
233 * cpuidle_cooling_register - Idle cooling device initialization function
248 for_each_cpu(cpu, drv->cpumask) { in cpuidle_cooling_register()
252 cooling_node = of_get_child_by_name(cpu_node, "thermal-idle"); in cpuidle_cooling_register()
257 pr_debug("'thermal-idle' node not found for cpu%d\n", cpu); in cpuidle_cooling_register()