| From 07181320df241b03c4b83113dd89b08985034d83 Mon Sep 17 00:00:00 2001 |
| From: Jie Zhan <zhanjie9@hisilicon.com> |
| Date: Sun, 29 Sep 2024 11:32:14 +0800 |
| Subject: [PATCH 1/3] cppc_cpufreq: Remove HiSilicon CPPC workaround |
| |
| Since commit 6c8d750f9784 ("cpufreq / cppc: Work around for Hisilicon CPPC |
| cpufreq"), we introduce a workround for HiSilicon platforms that do not |
| support performance feedback counters, whereas they can get the actual |
| frequency from the desired perf register. Later on, FIE is disabled in |
| that workaround as well. |
| |
| Now the workround can be handled by the common code. Desired perf would be |
| read and converted to frequency if feedback counters don't change. FIE |
| would be disabled if the CPPC regs are in PCC region. |
| |
| Hence, the workaround is no longer needed and can be safely removed, in an |
| effort to consolidate the driver procedure. |
| |
| Signed-off-by: Jie Zhan <zhanjie9@hisilicon.com> |
| Reviewed-by: Xiongfeng Wang <wangxiongfeng2@huawei.com> |
| Reviewed-by: Huisong Li <lihuisong@huawei.com> |
| [ Viresh: Move fie_disabled withing CONFIG option to fix warning ] |
| Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org> |
| --- |
| drivers/cpufreq/cppc_cpufreq.c | 73 +--------------------------------- |
| 1 file changed, 1 insertion(+), 72 deletions(-) |
| |
| diff --git a/drivers/cpufreq/cppc_cpufreq.c b/drivers/cpufreq/cppc_cpufreq.c |
| index 36ea181260c7..ca314b764675 100644 |
| --- a/drivers/cpufreq/cppc_cpufreq.c |
| +++ b/drivers/cpufreq/cppc_cpufreq.c |
| @@ -36,33 +36,15 @@ static LIST_HEAD(cpu_data_list); |
| |
| static bool boost_supported; |
| |
| -struct cppc_workaround_oem_info { |
| - char oem_id[ACPI_OEM_ID_SIZE + 1]; |
| - char oem_table_id[ACPI_OEM_TABLE_ID_SIZE + 1]; |
| - u32 oem_revision; |
| -}; |
| - |
| -static struct cppc_workaround_oem_info wa_info[] = { |
| - { |
| - .oem_id = "HISI ", |
| - .oem_table_id = "HIP07 ", |
| - .oem_revision = 0, |
| - }, { |
| - .oem_id = "HISI ", |
| - .oem_table_id = "HIP08 ", |
| - .oem_revision = 0, |
| - } |
| -}; |
| - |
| static struct cpufreq_driver cppc_cpufreq_driver; |
| |
| +#ifdef CONFIG_ACPI_CPPC_CPUFREQ_FIE |
| static enum { |
| FIE_UNSET = -1, |
| FIE_ENABLED, |
| FIE_DISABLED |
| } fie_disabled = FIE_UNSET; |
| |
| -#ifdef CONFIG_ACPI_CPPC_CPUFREQ_FIE |
| module_param(fie_disabled, int, 0444); |
| MODULE_PARM_DESC(fie_disabled, "Disable Frequency Invariance Engine (FIE)"); |
| |
| @@ -78,7 +60,6 @@ struct cppc_freq_invariance { |
| static DEFINE_PER_CPU(struct cppc_freq_invariance, cppc_freq_inv); |
| static struct kthread_worker *kworker_fie; |
| |
| -static unsigned int hisi_cppc_cpufreq_get_rate(unsigned int cpu); |
| static int cppc_perf_from_fbctrs(struct cppc_cpudata *cpu_data, |
| struct cppc_perf_fb_ctrs *fb_ctrs_t0, |
| struct cppc_perf_fb_ctrs *fb_ctrs_t1); |
| @@ -853,57 +834,6 @@ static struct cpufreq_driver cppc_cpufreq_driver = { |
| .name = "cppc_cpufreq", |
| }; |
| |
| -/* |
| - * HISI platform does not support delivered performance counter and |
| - * reference performance counter. It can calculate the performance using the |
| - * platform specific mechanism. We reuse the desired performance register to |
| - * store the real performance calculated by the platform. |
| - */ |
| -static unsigned int hisi_cppc_cpufreq_get_rate(unsigned int cpu) |
| -{ |
| - struct cpufreq_policy *policy = cpufreq_cpu_get(cpu); |
| - struct cppc_cpudata *cpu_data; |
| - u64 desired_perf; |
| - int ret; |
| - |
| - if (!policy) |
| - return -ENODEV; |
| - |
| - cpu_data = policy->driver_data; |
| - |
| - cpufreq_cpu_put(policy); |
| - |
| - ret = cppc_get_desired_perf(cpu, &desired_perf); |
| - if (ret < 0) |
| - return -EIO; |
| - |
| - return cppc_perf_to_khz(&cpu_data->perf_caps, desired_perf); |
| -} |
| - |
| -static void cppc_check_hisi_workaround(void) |
| -{ |
| - struct acpi_table_header *tbl; |
| - acpi_status status = AE_OK; |
| - int i; |
| - |
| - status = acpi_get_table(ACPI_SIG_PCCT, 0, &tbl); |
| - if (ACPI_FAILURE(status) || !tbl) |
| - return; |
| - |
| - for (i = 0; i < ARRAY_SIZE(wa_info); i++) { |
| - if (!memcmp(wa_info[i].oem_id, tbl->oem_id, ACPI_OEM_ID_SIZE) && |
| - !memcmp(wa_info[i].oem_table_id, tbl->oem_table_id, ACPI_OEM_TABLE_ID_SIZE) && |
| - wa_info[i].oem_revision == tbl->oem_revision) { |
| - /* Overwrite the get() callback */ |
| - cppc_cpufreq_driver.get = hisi_cppc_cpufreq_get_rate; |
| - fie_disabled = FIE_DISABLED; |
| - break; |
| - } |
| - } |
| - |
| - acpi_put_table(tbl); |
| -} |
| - |
| static int __init cppc_cpufreq_init(void) |
| { |
| int ret; |
| @@ -911,7 +841,6 @@ static int __init cppc_cpufreq_init(void) |
| if (!acpi_cpc_valid()) |
| return -ENODEV; |
| |
| - cppc_check_hisi_workaround(); |
| cppc_freq_invariance_init(); |
| populate_efficiency_class(); |
| |
| -- |
| 2.50.1.703.g449372360f-goog |
| |