Lines Matching refs:cpufreq_cdev

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