Lines Matching +full:speed +full:- +full:bin
1 // SPDX-License-Identifier: GPL-2.0
10 * defines the voltage and frequency value based on the msm-id in SMEM
12 * The qcom-cpufreq-nvmem driver reads the msm-id and efuse value from the SoC
15 * operating-points-v2 table when it is parsed by the OPP framework.
23 #include <linux/nvmem-consumer.h>
31 #include <dt-bindings/arm/qcom,ids.h>
52 int *speed, int *pvs, int *pvs_ver, in get_krait_bin_format_a() argument
59 *speed = pte_efuse & 0xf; in get_krait_bin_format_a()
60 if (*speed == 0xf) in get_krait_bin_format_a()
61 *speed = (pte_efuse >> 4) & 0xf; in get_krait_bin_format_a()
63 if (*speed == 0xf) { in get_krait_bin_format_a()
64 *speed = 0; in get_krait_bin_format_a()
65 dev_warn(cpu_dev, "Speed bin: Defaulting to %d\n", *speed); in get_krait_bin_format_a()
67 dev_dbg(cpu_dev, "Speed bin: %d\n", *speed); in get_krait_bin_format_a()
76 dev_warn(cpu_dev, "PVS bin: Defaulting to %d\n", *pvs); in get_krait_bin_format_a()
78 dev_dbg(cpu_dev, "PVS bin: %d\n", *pvs); in get_krait_bin_format_a()
83 int *speed, int *pvs, int *pvs_ver, in get_krait_bin_format_b() argument
96 *speed = (pte_efuse >> 27) & 0xf; in get_krait_bin_format_b()
100 *speed = pte_efuse & 0x7; in get_krait_bin_format_b()
103 /* 4 bits of PVS are in efuse register bits 31, 8-6. */ in get_krait_bin_format_b()
105 *speed = pte_efuse & 0x7; in get_krait_bin_format_b()
110 dev_dbg(cpu_dev, "Speed bin: %d\n", *speed); in get_krait_bin_format_b()
112 dev_warn(cpu_dev, "Speed bin not set. Defaulting to 0!\n"); in get_krait_bin_format_b()
113 *speed = 0; in get_krait_bin_format_b()
120 dev_dbg(cpu_dev, "PVS bin: %d\n", *pvs); in get_krait_bin_format_b()
122 dev_warn(cpu_dev, "PVS bin not set. Defaulting to 0!\n"); in get_krait_bin_format_b()
151 drv->versions = 1 << (unsigned int)(*speedbin); in qcom_cpufreq_kryo_name_version()
155 drv->versions = 1 << ((unsigned int)(*speedbin) + 4); in qcom_cpufreq_kryo_name_version()
171 int speed = 0, pvs = 0, pvs_ver = 0; in qcom_cpufreq_krait_name_version() local
183 get_krait_bin_format_a(cpu_dev, &speed, &pvs, &pvs_ver, in qcom_cpufreq_krait_name_version()
187 get_krait_bin_format_b(cpu_dev, &speed, &pvs, &pvs_ver, in qcom_cpufreq_krait_name_version()
192 ret = -ENODEV; in qcom_cpufreq_krait_name_version()
196 snprintf(*pvs_name, sizeof("speedXX-pvsXX-vXX"), "speed%d-pvs%d-v%d", in qcom_cpufreq_krait_name_version()
197 speed, pvs, pvs_ver); in qcom_cpufreq_krait_name_version()
199 drv->versions = (1 << speed); in qcom_cpufreq_krait_name_version()
226 char pvs_name_buffer[] = "speedXX-pvsXX-vXX"; in qcom_cpufreq_probe()
234 return -ENODEV; in qcom_cpufreq_probe()
238 return -ENOENT; in qcom_cpufreq_probe()
240 ret = of_device_is_compatible(np, "operating-points-v2-kryo-cpu"); in qcom_cpufreq_probe()
243 return -ENOENT; in qcom_cpufreq_probe()
248 return -ENOMEM; in qcom_cpufreq_probe()
250 match = pdev->dev.platform_data; in qcom_cpufreq_probe()
251 drv->data = match->data; in qcom_cpufreq_probe()
252 if (!drv->data) { in qcom_cpufreq_probe()
253 ret = -ENODEV; in qcom_cpufreq_probe()
257 if (drv->data->get_version) { in qcom_cpufreq_probe()
265 ret = drv->data->get_version(cpu_dev, in qcom_cpufreq_probe()
275 drv->opp_tokens = kcalloc(num_possible_cpus(), sizeof(*drv->opp_tokens), in qcom_cpufreq_probe()
277 if (!drv->opp_tokens) { in qcom_cpufreq_probe()
278 ret = -ENOMEM; in qcom_cpufreq_probe()
289 ret = -ENODEV; in qcom_cpufreq_probe()
293 if (drv->data->get_version) { in qcom_cpufreq_probe()
294 config.supported_hw = &drv->versions; in qcom_cpufreq_probe()
301 if (drv->data->genpd_names) { in qcom_cpufreq_probe()
302 config.genpd_names = drv->data->genpd_names; in qcom_cpufreq_probe()
307 drv->opp_tokens[cpu] = dev_pm_opp_set_config(cpu_dev, &config); in qcom_cpufreq_probe()
308 if (drv->opp_tokens[cpu] < 0) { in qcom_cpufreq_probe()
309 ret = drv->opp_tokens[cpu]; in qcom_cpufreq_probe()
316 cpufreq_dt_pdev = platform_device_register_simple("cpufreq-dt", -1, in qcom_cpufreq_probe()
328 dev_pm_opp_clear_config(drv->opp_tokens[cpu]); in qcom_cpufreq_probe()
329 kfree(drv->opp_tokens); in qcom_cpufreq_probe()
344 dev_pm_opp_clear_config(drv->opp_tokens[cpu]); in qcom_cpufreq_remove()
346 kfree(drv->opp_tokens); in qcom_cpufreq_remove()
354 .name = "qcom-cpufreq-nvmem",
383 return -ENODEV; in qcom_cpufreq_init()
388 return -ENODEV; in qcom_cpufreq_init()
394 cpufreq_pdev = platform_device_register_data(NULL, "qcom-cpufreq-nvmem", in qcom_cpufreq_init()
395 -1, match, sizeof(*match)); in qcom_cpufreq_init()