Lines Matching +full:performance +full:- +full:domains
1 // SPDX-License-Identifier: GPL-2.0
59 policy = cpufreq_cpu_get_raw(cpu_dev->id); in mtk_cpufreq_get_cpu_power()
63 data = policy->driver_data; in mtk_cpufreq_get_cpu_power()
65 for (i = 0; i < data->nr_opp; i++) { in mtk_cpufreq_get_cpu_power()
66 if (data->table[i].frequency < *KHz) in mtk_cpufreq_get_cpu_power()
69 i--; in mtk_cpufreq_get_cpu_power()
71 *KHz = data->table[i].frequency; in mtk_cpufreq_get_cpu_power()
72 *mW = readl_relaxed(data->reg_bases[REG_EM_POWER_TBL] + in mtk_cpufreq_get_cpu_power()
81 struct mtk_cpufreq_data *data = policy->driver_data; in mtk_cpufreq_hw_target_index()
83 writel_relaxed(index, data->reg_bases[REG_FREQ_PERF_STATE]); in mtk_cpufreq_hw_target_index()
98 data = policy->driver_data; in mtk_cpufreq_hw_get()
100 index = readl_relaxed(data->reg_bases[REG_FREQ_PERF_STATE]); in mtk_cpufreq_hw_get()
101 index = min(index, LUT_MAX_ENTRIES - 1); in mtk_cpufreq_hw_get()
103 return data->table[index].frequency; in mtk_cpufreq_hw_get()
109 struct mtk_cpufreq_data *data = policy->driver_data; in mtk_cpufreq_hw_fast_switch()
114 writel_relaxed(index, data->reg_bases[REG_FREQ_PERF_STATE]); in mtk_cpufreq_hw_fast_switch()
116 return policy->freq_table[index].frequency; in mtk_cpufreq_hw_fast_switch()
122 struct device *dev = &pdev->dev; in mtk_cpu_create_freq_table()
126 data->table = devm_kcalloc(dev, LUT_MAX_ENTRIES + 1, in mtk_cpu_create_freq_table()
127 sizeof(*data->table), GFP_KERNEL); in mtk_cpu_create_freq_table()
128 if (!data->table) in mtk_cpu_create_freq_table()
129 return -ENOMEM; in mtk_cpu_create_freq_table()
131 base_table = data->reg_bases[REG_FREQ_LUT_TABLE]; in mtk_cpu_create_freq_table()
140 data->table[i].frequency = freq; in mtk_cpu_create_freq_table()
142 dev_dbg(dev, "index=%d freq=%d\n", i, data->table[i].frequency); in mtk_cpu_create_freq_table()
147 data->table[i].frequency = CPUFREQ_TABLE_END; in mtk_cpu_create_freq_table()
148 data->nr_opp = i; in mtk_cpu_create_freq_table()
158 struct device *dev = &pdev->dev; in mtk_cpu_resources_init()
165 return -ENOMEM; in mtk_cpu_resources_init()
167 index = of_perf_domain_get_sharing_cpumask(policy->cpu, "performance-domains", in mtk_cpu_resources_init()
168 "#performance-domain-cells", in mtk_cpu_resources_init()
169 policy->cpus); in mtk_cpu_resources_init()
178 data->reg_bases[i] = base + offsets[i]; in mtk_cpu_resources_init()
182 dev_info(dev, "Domain-%d failed to create freq table\n", index); in mtk_cpu_resources_init()
186 policy->freq_table = data->table; in mtk_cpu_resources_init()
187 policy->driver_data = data; in mtk_cpu_resources_init()
200 /* Get the bases of cpufreq for domains */ in mtk_cpufreq_hw_cpu_init()
203 dev_info(&pdev->dev, "CPUFreq resource init failed\n"); in mtk_cpufreq_hw_cpu_init()
207 data = policy->driver_data; in mtk_cpufreq_hw_cpu_init()
209 latency = readl_relaxed(data->reg_bases[REG_FREQ_LATENCY]) * 1000; in mtk_cpufreq_hw_cpu_init()
213 policy->cpuinfo.transition_latency = latency; in mtk_cpufreq_hw_cpu_init()
214 policy->fast_switch_possible = true; in mtk_cpufreq_hw_cpu_init()
217 writel_relaxed(0x1, data->reg_bases[REG_FREQ_ENABLE]); in mtk_cpufreq_hw_cpu_init()
218 if (readl_poll_timeout(data->reg_bases[REG_FREQ_HW_STATE], sig, in mtk_cpufreq_hw_cpu_init()
223 policy->cpu); in mtk_cpufreq_hw_cpu_init()
224 return -ENODEV; in mtk_cpufreq_hw_cpu_init()
227 pr_info("SVS of CPU%d is not enabled\n", policy->cpu); in mtk_cpufreq_hw_cpu_init()
235 struct mtk_cpufreq_data *data = policy->driver_data; in mtk_cpufreq_hw_cpu_exit()
238 writel_relaxed(0x0, data->reg_bases[REG_FREQ_ENABLE]); in mtk_cpufreq_hw_cpu_exit()
246 struct mtk_cpufreq_data *data = policy->driver_data; in mtk_cpufreq_register_em()
248 em_dev_register_perf_domain(get_cpu_device(policy->cpu), data->nr_opp, in mtk_cpufreq_register_em()
249 &em_cb, policy->cpus, true); in mtk_cpufreq_register_em()
263 .name = "mtk-cpufreq-hw",
272 data = of_device_get_match_data(&pdev->dev); in mtk_cpufreq_hw_driver_probe()
274 return -EINVAL; in mtk_cpufreq_hw_driver_probe()
281 dev_err(&pdev->dev, "CPUFreq HW driver failed to register\n"); in mtk_cpufreq_hw_driver_probe()
292 { .compatible = "mediatek,cpufreq-hw", .data = &cpufreq_mtk_offsets },
300 .name = "mtk-cpufreq-hw",
307 MODULE_DESCRIPTION("Mediatek cpufreq-hw driver");