Re: [PATCH v3 2/2] cppc_cpufreq: Remove HiSilicon CPPC workaround

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Reviewed-by: Xiongfeng Wang <wangxiongfeng2@xxxxxxxxxx>

On 2024/9/19 16:45, Jie Zhan wrote:
> 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@xxxxxxxxxxxxx>
> ---
>  drivers/cpufreq/cppc_cpufreq.c | 71 ----------------------------------
>  1 file changed, 71 deletions(-)
> 
> diff --git a/drivers/cpufreq/cppc_cpufreq.c b/drivers/cpufreq/cppc_cpufreq.c
> index e55192303a9f..0e95ad2303ea 100644
> --- a/drivers/cpufreq/cppc_cpufreq.c
> +++ b/drivers/cpufreq/cppc_cpufreq.c
> @@ -36,24 +36,6 @@ 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;
>  
>  static enum {
> @@ -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);
> @@ -841,57 +822,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;
> @@ -899,7 +829,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();
>  
> 




[Index of Archives]     [Linux IBM ACPI]     [Linux Power Management]     [Linux Kernel]     [Linux Laptop]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]
  Powered by Linux