Lines Matching +full:virtual +full:- +full:cpufreq
1 // SPDX-License-Identifier: GPL-2.0-only
7 #include <linux/cpufreq.h>
19 * +-------------+-------------------------------+--------+-------+
21 * +-------------+-------------------------------+--------+-------+
27 * +-------------+-------------------------------+--------+-------+
30 * +-------------+-------------------------------+--------+-------+
40 * +---------------------------------------------+--------+-------+
44 * +---------------------------------------------+--------+-------+
48 * +---------------------------------------------+--------+-------+
54 * +-------------+-------------------------------+--------+-------+
96 base + policy->cpu * PER_CPU_OFFSET + REG_SET_PERF_STATE_OFFSET); in virt_cpufreq_set_perf()
122 freqs.old = policy->cur; in virt_cpufreq_target()
138 cur_perf_domain = readl_relaxed(base + policy->cpu * in virt_cpufreq_get_sharing_cpus()
150 cpumask_set_cpu(cpu, policy->cpus); in virt_cpufreq_get_sharing_cpus()
161 num_perftbl_entries = per_cpu(perftbl_num_entries, policy->cpu); in virt_cpufreq_get_freq_info()
164 policy->cpuinfo.min_freq = 1; in virt_cpufreq_get_freq_info()
165 policy->cpuinfo.max_freq = virt_cpufreq_get_perftbl_entry(policy->cpu, 0); in virt_cpufreq_get_freq_info()
167 policy->min = policy->cpuinfo.min_freq; in virt_cpufreq_get_freq_info()
168 policy->max = policy->cpuinfo.max_freq; in virt_cpufreq_get_freq_info()
170 policy->cur = policy->max; in virt_cpufreq_get_freq_info()
176 return -ENOMEM; in virt_cpufreq_get_freq_info()
179 table[idx].frequency = virt_cpufreq_get_perftbl_entry(policy->cpu, idx); in virt_cpufreq_get_freq_info()
182 policy->freq_table = table; in virt_cpufreq_get_freq_info()
192 cpu_dev = get_cpu_device(policy->cpu); in virt_cpufreq_cpu_init()
194 return -ENODEV; in virt_cpufreq_cpu_init()
198 dev_warn(cpu_dev, "failed to get cpufreq info\n"); in virt_cpufreq_cpu_init()
212 * settings) need to be updated. This simplifies the VMM (Virtual in virt_cpufreq_cpu_init()
216 policy->dvfs_possible_from_any_cpu = false; in virt_cpufreq_cpu_init()
217 policy->fast_switch_possible = true; in virt_cpufreq_cpu_init()
227 topology_set_scale_freq_source(&virt_sfd, policy->cpus); in virt_cpufreq_cpu_init()
234 topology_clear_scale_freq_source(SCALE_FREQ_SOURCE_VIRT, policy->related_cpus); in virt_cpufreq_cpu_exit()
235 kfree(policy->freq_table); in virt_cpufreq_cpu_exit()
252 if (policy->freq_table) in virt_cpufreq_verify_policy()
253 return cpufreq_frequency_table_verify(policy, policy->freq_table); in virt_cpufreq_verify_policy()
260 .name = "virt-cpufreq",
285 return -ENODEV; in virt_cpufreq_driver_probe()
292 dev_err(&pdev->dev, "Virtual CPUFreq driver failed to register: %d\n", ret); in virt_cpufreq_driver_probe()
296 dev_dbg(&pdev->dev, "Virtual CPUFreq driver initialized\n"); in virt_cpufreq_driver_probe()
306 { .compatible = "qemu,virtual-cpufreq", .data = NULL},
315 .name = "virt-cpufreq",
332 MODULE_DESCRIPTION("Virtual cpufreq driver");