Lines Matching refs:cpufreq_cdev
84 * @cpufreq_cdev: cpufreq_cdev for which the property is required
89 static unsigned long get_level(struct cpufreq_cooling_device *cpufreq_cdev,
96 table = em_perf_state_from_pd(cpufreq_cdev->em);
97 for (i = cpufreq_cdev->max_level - 1; i >= 0; i--) {
103 return cpufreq_cdev->max_level - i - 1;
106 static u32 cpu_freq_to_power(struct cpufreq_cooling_device *cpufreq_cdev,
114 table = em_perf_state_from_pd(cpufreq_cdev->em);
115 for (i = cpufreq_cdev->max_level - 1; i >= 0; i--) {
127 static u32 cpu_power_to_freq(struct cpufreq_cooling_device *cpufreq_cdev,
136 table = em_perf_state_from_pd(cpufreq_cdev->em);
137 for (i = cpufreq_cdev->max_level; i > 0; i--) {
152 * @cpufreq_cdev: struct cpufreq_cooling_device for the cpu
160 static u32 get_load(struct cpufreq_cooling_device *cpufreq_cdev, int cpu,
168 static u32 get_load(struct cpufreq_cooling_device *cpufreq_cdev, int cpu,
173 struct time_in_idle *idle_time = &cpufreq_cdev->idle_time[cpu_idx];
193 * @cpufreq_cdev: &cpufreq_cooling_device for this cdev
197 * @cpufreq_cdev.
199 static u32 get_dynamic_power(struct cpufreq_cooling_device *cpufreq_cdev,
204 raw_cpu_power = cpu_freq_to_power(cpufreq_cdev, freq);
205 return (raw_cpu_power * cpufreq_cdev->last_load) / 100;
236 struct cpufreq_cooling_device *cpufreq_cdev = cdev->devdata;
237 struct cpufreq_policy *policy = cpufreq_cdev->policy;
245 load = get_load(cpufreq_cdev, cpu, i);
252 cpufreq_cdev->last_load = total_load;
254 *power = get_dynamic_power(cpufreq_cdev, freq);
277 struct cpufreq_cooling_device *cpufreq_cdev = cdev->devdata;
282 if (state > cpufreq_cdev->max_level)
285 num_cpus = cpumask_weight(cpufreq_cdev->policy->cpus);
287 idx = cpufreq_cdev->max_level - state;
290 table = em_perf_state_from_pd(cpufreq_cdev->em);
294 *power = cpu_freq_to_power(cpufreq_cdev, freq) * num_cpus;
319 struct cpufreq_cooling_device *cpufreq_cdev = cdev->devdata;
320 struct cpufreq_policy *policy = cpufreq_cdev->policy;
322 last_load = cpufreq_cdev->last_load ?: 1;
324 target_freq = cpu_power_to_freq(cpufreq_cdev, normalised_power);
326 *state = get_level(cpufreq_cdev, target_freq);
332 static inline bool em_is_sane(struct cpufreq_cooling_device *cpufreq_cdev,
340 policy = cpufreq_cdev->policy;
348 nr_levels = cpufreq_cdev->max_level + 1;
361 static inline int allocate_idle_time(struct cpufreq_cooling_device *cpufreq_cdev)
366 static inline void free_idle_time(struct cpufreq_cooling_device *cpufreq_cdev)
370 static int allocate_idle_time(struct cpufreq_cooling_device *cpufreq_cdev)
372 unsigned int num_cpus = cpumask_weight(cpufreq_cdev->policy->related_cpus);
374 cpufreq_cdev->idle_time = kcalloc(num_cpus,
375 sizeof(*cpufreq_cdev->idle_time),
377 if (!cpufreq_cdev->idle_time)
383 static void free_idle_time(struct cpufreq_cooling_device *cpufreq_cdev)
385 kfree(cpufreq_cdev->idle_time);
386 cpufreq_cdev->idle_time = NULL;
390 static unsigned int get_state_freq(struct cpufreq_cooling_device *cpufreq_cdev,
398 if (cpufreq_cdev->em) {
402 idx = cpufreq_cdev->max_level - state;
405 table = em_perf_state_from_pd(cpufreq_cdev->em);
414 policy = cpufreq_cdev->policy;
416 idx = cpufreq_cdev->max_level - state;
438 struct cpufreq_cooling_device *cpufreq_cdev = cdev->devdata;
440 *state = cpufreq_cdev->max_level;
457 struct cpufreq_cooling_device *cpufreq_cdev = cdev->devdata;
459 *state = cpufreq_cdev->cpufreq_state;
477 struct cpufreq_cooling_device *cpufreq_cdev = cdev->devdata;
482 if (state > cpufreq_cdev->max_level)
486 if (cpufreq_cdev->cpufreq_state == state)
489 frequency = get_state_freq(cpufreq_cdev, state);
491 ret = freq_qos_update_request(&cpufreq_cdev->qos_req, frequency);
493 cpufreq_cdev->cpufreq_state = state;
521 struct cpufreq_cooling_device *cpufreq_cdev;
546 cpufreq_cdev = kzalloc(sizeof(*cpufreq_cdev), GFP_KERNEL);
547 if (!cpufreq_cdev)
550 cpufreq_cdev->policy = policy;
552 ret = allocate_idle_time(cpufreq_cdev);
559 cpufreq_cdev->max_level = i - 1;
561 cooling_ops = &cpufreq_cdev->cooling_ops;
567 if (em_is_sane(cpufreq_cdev, em)) {
568 cpufreq_cdev->em = em;
582 &cpufreq_cdev->qos_req, FREQ_QOS_MAX,
583 get_state_freq(cpufreq_cdev, 0));
596 cdev = thermal_of_cooling_device_register(np, name, cpufreq_cdev,
606 freq_qos_remove_request(&cpufreq_cdev->qos_req);
608 free_idle_time(cpufreq_cdev);
610 kfree(cpufreq_cdev);
684 struct cpufreq_cooling_device *cpufreq_cdev;
689 cpufreq_cdev = cdev->devdata;
692 freq_qos_remove_request(&cpufreq_cdev->qos_req);
693 free_idle_time(cpufreq_cdev);
694 kfree(cpufreq_cdev);