Re: [PATCH v15 3/3] cpufreq: mediatek-hw: Add support for CPUFREQ HW
flat view
From: Viresh Kumar <viresh.kumar@linaro.org>
Date: 2021-09-06 09:44:16
Also in:
linux-arm-kernel, linux-devicetree, linux-pm, lkml
Subsystem:
cpu frequency scaling framework, the rest · Maintainers:
"Rafael J. Wysocki", Viresh Kumar, Linus Torvalds
On 03-09-21, 16:39, Hector Yuan wrote:
From: "Hector.Yuan" <redacted> Introduce cpufreq HW driver which can support CPU frequency adjust in MT6779 platform. Signed-off-by: Hector.Yuan <redacted> --- drivers/cpufreq/Kconfig.arm | 12 ++ drivers/cpufreq/Makefile | 1 + drivers/cpufreq/mediatek-cpufreq-hw.c | 340 +++++++++++++++++++++++++++++++++ 3 files changed, 353 insertions(+) create mode 100644 drivers/cpufreq/mediatek-cpufreq-hw.c
Here as well, I have added below diff to the original patch. Lemme know if you don't like something.
diff --git a/drivers/cpufreq/mediatek-cpufreq-hw.c b/drivers/cpufreq/mediatek-cpufreq-hw.c
index 9c6df1b00f3e..0cf18dd46b92 100644
--- a/drivers/cpufreq/mediatek-cpufreq-hw.c
+++ b/drivers/cpufreq/mediatek-cpufreq-hw.c@@ -33,12 +33,6 @@ enum { REG_ARRAY_SIZE, }; -struct mtk_cpufreq_drv; - -struct mtk_cpufreq_drv { - const u16 *offsets; -}; - struct mtk_cpufreq_data { struct cpufreq_frequency_table *table; void __iomem *reg_bases[REG_ARRAY_SIZE];
@@ -126,8 +120,8 @@ static int mtk_cpu_create_freq_table(struct platform_device *pdev, struct mtk_cpufreq_data *data) { struct device *dev = &pdev->dev; - void __iomem *base_table; u32 temp, i, freq, prev_freq = 0; + void __iomem *base_table; data->table = devm_kcalloc(dev, LUT_MAX_ENTRIES + 1, sizeof(*data->table), GFP_KERNEL);
@@ -198,15 +192,13 @@ static int mtk_cpu_resources_init(struct platform_device *pdev, static int mtk_cpufreq_hw_cpu_init(struct cpufreq_policy *policy) { struct platform_device *pdev = cpufreq_get_driver_data(); - struct mtk_cpufreq_drv *drv = platform_get_drvdata(pdev); int sig, pwr_hw = CPUFREQ_HW_STATUS | SVS_HW_STATUS; struct mtk_cpufreq_data *data; - struct device *cpu_dev; unsigned int latency; int ret; /* Get the bases of cpufreq for domains */ - ret = mtk_cpu_resources_init(pdev, policy, drv->offsets); + ret = mtk_cpu_resources_init(pdev, policy, platform_get_drvdata(pdev)); if (ret) { dev_info(&pdev->dev, "CPUFreq resource init failed\n"); return ret;
@@ -218,9 +210,7 @@ static int mtk_cpufreq_hw_cpu_init(struct cpufreq_policy *policy) if (!latency) latency = CPUFREQ_ETERNAL; - /* us convert to ns */ policy->cpuinfo.transition_latency = latency; - policy->fast_switch_possible = true; /* HW should be in enabled state to proceed now */
@@ -237,12 +227,6 @@ static int mtk_cpufreq_hw_cpu_init(struct cpufreq_policy *policy) pr_info("SVS of CPU%d is not enabled\n", policy->cpu); } - cpu_dev = get_cpu_device(policy->cpu); - if (!cpu_dev) { - pr_info("failed to get cpu%d device\n", policy->cpu); - return -ENODEV; - } - return 0; }
@@ -261,9 +245,6 @@ static void mtk_cpufreq_register_em(struct cpufreq_policy *policy) struct em_data_callback em_cb = EM_DATA_CB(mtk_cpufreq_get_cpu_power); struct mtk_cpufreq_data *data = policy->driver_data; - if (!data->nr_opp) - return; - em_dev_register_perf_domain(get_cpu_device(policy->cpu), data->nr_opp, &em_cb, policy->cpus, true); }
@@ -285,22 +266,14 @@ static struct cpufreq_driver cpufreq_mtk_hw_driver = { static int mtk_cpufreq_hw_driver_probe(struct platform_device *pdev) { - struct mtk_cpufreq_drv *drv; - const u16 *offsets; + const void *data; int ret; - offsets = of_device_get_match_data(&pdev->dev); - if (!offsets) + data = of_device_get_match_data(&pdev->dev); + if (!data) return -EINVAL; - drv = kzalloc(sizeof(*drv), GFP_KERNEL); - if (!drv) - return -ENOMEM; - - drv->offsets = offsets; - - platform_set_drvdata(pdev, drv); - + platform_set_drvdata(pdev, (void *) data); cpufreq_mtk_hw_driver.driver_data = pdev; ret = cpufreq_register_driver(&cpufreq_mtk_hw_driver);
@@ -312,11 +285,6 @@ static int mtk_cpufreq_hw_driver_probe(struct platform_device *pdev) static int mtk_cpufreq_hw_driver_remove(struct platform_device *pdev) { - struct mtk_cpufreq_drv *drv = platform_get_drvdata(pdev); - - kfree(drv->offsets); - kfree(drv); - return cpufreq_unregister_driver(&cpufreq_mtk_hw_driver); }
_______________________________________________ Linux-mediatek mailing list Linux-mediatek@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-mediatek