Lines Matching refs:cpufreq_cdev

95 static unsigned long get_level(struct cpufreq_cooling_device *cpufreq_cdev,  in get_level()  argument
100 for (i = cpufreq_cdev->max_level - 1; i >= 0; i--) { in get_level()
101 if (freq > cpufreq_cdev->em->table[i].frequency) in get_level()
105 return cpufreq_cdev->max_level - i - 1; in get_level()
108 static u32 cpu_freq_to_power(struct cpufreq_cooling_device *cpufreq_cdev, in cpu_freq_to_power() argument
113 for (i = cpufreq_cdev->max_level - 1; i >= 0; i--) { in cpu_freq_to_power()
114 if (freq > cpufreq_cdev->em->table[i].frequency) in cpu_freq_to_power()
118 return cpufreq_cdev->em->table[i + 1].power; in cpu_freq_to_power()
121 static u32 cpu_power_to_freq(struct cpufreq_cooling_device *cpufreq_cdev, in cpu_power_to_freq() argument
126 for (i = cpufreq_cdev->max_level; i >= 0; i--) { in cpu_power_to_freq()
127 if (power >= cpufreq_cdev->em->table[i].power) in cpu_power_to_freq()
131 return cpufreq_cdev->em->table[i].frequency; in cpu_power_to_freq()
143 static u32 get_load(struct cpufreq_cooling_device *cpufreq_cdev, int cpu, in get_load() argument
148 struct time_in_idle *idle_time = &cpufreq_cdev->idle_time[cpu_idx]; in get_load()
173 static u32 get_dynamic_power(struct cpufreq_cooling_device *cpufreq_cdev, in get_dynamic_power() argument
178 raw_cpu_power = cpu_freq_to_power(cpufreq_cdev, freq); in get_dynamic_power()
179 return (raw_cpu_power * cpufreq_cdev->last_load) / 100; in get_dynamic_power()
210 struct cpufreq_cooling_device *cpufreq_cdev = cdev->devdata; in cpufreq_get_requested_power() local
211 struct cpufreq_policy *policy = cpufreq_cdev->policy; in cpufreq_get_requested_power()
226 load = get_load(cpufreq_cdev, cpu, i); in cpufreq_get_requested_power()
237 cpufreq_cdev->last_load = total_load; in cpufreq_get_requested_power()
239 *power = get_dynamic_power(cpufreq_cdev, freq); in cpufreq_get_requested_power()
269 struct cpufreq_cooling_device *cpufreq_cdev = cdev->devdata; in cpufreq_state2power() local
272 if (state > cpufreq_cdev->max_level) in cpufreq_state2power()
275 num_cpus = cpumask_weight(cpufreq_cdev->policy->cpus); in cpufreq_state2power()
277 idx = cpufreq_cdev->max_level - state; in cpufreq_state2power()
278 freq = cpufreq_cdev->em->table[idx].frequency; in cpufreq_state2power()
279 *power = cpu_freq_to_power(cpufreq_cdev, freq) * num_cpus; in cpufreq_state2power()
308 struct cpufreq_cooling_device *cpufreq_cdev = cdev->devdata; in cpufreq_power2state() local
309 struct cpufreq_policy *policy = cpufreq_cdev->policy; in cpufreq_power2state()
311 last_load = cpufreq_cdev->last_load ?: 1; in cpufreq_power2state()
313 target_freq = cpu_power_to_freq(cpufreq_cdev, normalised_power); in cpufreq_power2state()
315 *state = get_level(cpufreq_cdev, target_freq); in cpufreq_power2state()
321 static inline bool em_is_sane(struct cpufreq_cooling_device *cpufreq_cdev, in em_is_sane() argument
329 policy = cpufreq_cdev->policy; in em_is_sane()
337 nr_levels = cpufreq_cdev->max_level + 1; in em_is_sane()
349 static unsigned int get_state_freq(struct cpufreq_cooling_device *cpufreq_cdev, in get_state_freq() argument
357 if (cpufreq_cdev->em) { in get_state_freq()
358 idx = cpufreq_cdev->max_level - state; in get_state_freq()
359 return cpufreq_cdev->em->table[idx].frequency; in get_state_freq()
364 policy = cpufreq_cdev->policy; in get_state_freq()
366 idx = cpufreq_cdev->max_level - state; in get_state_freq()
388 struct cpufreq_cooling_device *cpufreq_cdev = cdev->devdata; in cpufreq_get_max_state() local
390 *state = cpufreq_cdev->max_level; in cpufreq_get_max_state()
407 struct cpufreq_cooling_device *cpufreq_cdev = cdev->devdata; in cpufreq_get_cur_state() local
409 *state = cpufreq_cdev->cpufreq_state; in cpufreq_get_cur_state()
427 struct cpufreq_cooling_device *cpufreq_cdev = cdev->devdata; in cpufreq_set_cur_state() local
434 if (state > cpufreq_cdev->max_level) in cpufreq_set_cur_state()
438 if (cpufreq_cdev->cpufreq_state == state) in cpufreq_set_cur_state()
441 cpufreq_cdev->cpufreq_state = state; in cpufreq_set_cur_state()
443 frequency = get_state_freq(cpufreq_cdev, state); in cpufreq_set_cur_state()
445 ret = freq_qos_update_request(&cpufreq_cdev->qos_req, frequency); in cpufreq_set_cur_state()
448 cpus = cpufreq_cdev->policy->cpus; in cpufreq_set_cur_state()
451 capacity /= cpufreq_cdev->policy->cpuinfo.max_freq; in cpufreq_set_cur_state()
488 struct cpufreq_cooling_device *cpufreq_cdev; in __cpufreq_cooling_register() local
514 cpufreq_cdev = kzalloc(sizeof(*cpufreq_cdev), GFP_KERNEL); in __cpufreq_cooling_register()
515 if (!cpufreq_cdev) in __cpufreq_cooling_register()
518 cpufreq_cdev->policy = policy; in __cpufreq_cooling_register()
520 cpufreq_cdev->idle_time = kcalloc(num_cpus, in __cpufreq_cooling_register()
521 sizeof(*cpufreq_cdev->idle_time), in __cpufreq_cooling_register()
523 if (!cpufreq_cdev->idle_time) { in __cpufreq_cooling_register()
529 cpufreq_cdev->max_level = i - 1; in __cpufreq_cooling_register()
536 cpufreq_cdev->id = ret; in __cpufreq_cooling_register()
539 cpufreq_cdev->id); in __cpufreq_cooling_register()
544 if (em_is_sane(cpufreq_cdev, em)) { in __cpufreq_cooling_register()
545 cpufreq_cdev->em = em; in __cpufreq_cooling_register()
559 &cpufreq_cdev->qos_req, FREQ_QOS_MAX, in __cpufreq_cooling_register()
560 get_state_freq(cpufreq_cdev, 0)); in __cpufreq_cooling_register()
568 cdev = thermal_of_cooling_device_register(np, dev_name, cpufreq_cdev, in __cpufreq_cooling_register()
574 list_add(&cpufreq_cdev->node, &cpufreq_cdev_list); in __cpufreq_cooling_register()
580 freq_qos_remove_request(&cpufreq_cdev->qos_req); in __cpufreq_cooling_register()
582 ida_simple_remove(&cpufreq_ida, cpufreq_cdev->id); in __cpufreq_cooling_register()
584 kfree(cpufreq_cdev->idle_time); in __cpufreq_cooling_register()
586 kfree(cpufreq_cdev); in __cpufreq_cooling_register()
663 struct cpufreq_cooling_device *cpufreq_cdev; in cpufreq_cooling_unregister() local
668 cpufreq_cdev = cdev->devdata; in cpufreq_cooling_unregister()
671 list_del(&cpufreq_cdev->node); in cpufreq_cooling_unregister()
675 freq_qos_remove_request(&cpufreq_cdev->qos_req); in cpufreq_cooling_unregister()
676 ida_simple_remove(&cpufreq_ida, cpufreq_cdev->id); in cpufreq_cooling_unregister()
677 kfree(cpufreq_cdev->idle_time); in cpufreq_cooling_unregister()
678 kfree(cpufreq_cdev); in cpufreq_cooling_unregister()