From patchwork Wed Oct 23 12:18:51 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sudeep Holla X-Patchwork-Id: 177271 Delivered-To: patch@linaro.org Received: by 2002:a92:409a:0:0:0:0:0 with SMTP id d26csp638145ill; Wed, 23 Oct 2019 05:19:18 -0700 (PDT) X-Google-Smtp-Source: APXvYqwLt/bgr+IpmlHBeDlJl9aqwqq1zxvSpTQT676xsRHlaszgMvp3NiLMxKWIeNMcK8QxDtub X-Received: by 2002:a17:906:5010:: with SMTP id s16mr13561251ejj.67.1571833158493; Wed, 23 Oct 2019 05:19:18 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1571833158; cv=none; d=google.com; s=arc-20160816; b=iqmR4yChsuuJCx6y+IA74lRb4dwKVabL4Ma+tNc8XU2KewsyTMXCnJikZ5Vkj8oybB mmR2M9QcgFsuwaNSNGfmzsBGdynjmZAJTOkKExg2eJI0KdqHYHO6KMwhp/lfVYioKAP/ a5kWjCZOLr0OrRbtnfYtwh7UmDTXLRKm0l3MYLx3pNRKS4dT5ErgO5H3ejYAyX9Kakiv MAX9xWukX8V4OTbtGb4xKLCouY+0akdy8451+ElfSjZOva0kLj3VDfoDlGdtJ4OaYuET sMFdGOmZ8Zw77iv2EdCH5foqVfPTzSkZqJhG9bU1p9FxDe4RcixmL8m0WuEjFHYo5ds3 WC4g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from; bh=3l/DVOj7f9uNjZPeeWQJIoO3YrkLBmOCaSUd9fP7npA=; b=XEAezjLDgME0+P0yaMjSsf4UFNIp5brUEMbijWj4yclzoxRnXOJiP8W49qooozqX0z ES9BCkM8Sd2UQiG2ltbjuz3EfcBXfnP51pqXakaNKdpfZhWxhGpnNylCOmRq7f3TRPRX hWj3Xn4T/FCBbNfY0huW8w1FlknQ413Y3RAvVt9JmQCR+3XdPTuRmHQyGw4xT1G/qc5v Pwr8Mdw2/Dg6F3MfIW45lRe1YAh+/k9pqZd/g1HjvwlnVNmTR00HgrbaI41aMvKEmQfp NzNtEpmUn6LSBz7WosNVK+7dhXConJ1KWULgiXsVr+6THhoZOGztDM+HTg9FDyW2yddM 1BEw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-pm-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-pm-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id d5si13835030edq.60.2019.10.23.05.19.18; Wed, 23 Oct 2019 05:19:18 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-pm-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-pm-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-pm-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730796AbfJWMTR (ORCPT + 10 others); Wed, 23 Oct 2019 08:19:17 -0400 Received: from [217.140.110.172] ([217.140.110.172]:49946 "EHLO foss.arm.com" rhost-flags-FAIL-FAIL-OK-OK) by vger.kernel.org with ESMTP id S1726636AbfJWMTR (ORCPT ); Wed, 23 Oct 2019 08:19:17 -0400 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 94AE3494; Wed, 23 Oct 2019 05:18:56 -0700 (PDT) Received: from usa.arm.com (e107155-lin.cambridge.arm.com [10.1.196.42]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id C6EED3F6C4; Wed, 23 Oct 2019 05:18:55 -0700 (PDT) From: Sudeep Holla To: Viresh Kumar , "Rafael J . Wysocki" Cc: Sudeep Holla , linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 2/2] cpufreq: vexpress-spc: find and skip duplicates when merging frequencies Date: Wed, 23 Oct 2019 13:18:51 +0100 Message-Id: <20191023121851.26277-1-sudeep.holla@arm.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20191023110811.15086-2-sudeep.holla@arm.com> References: <20191023110811.15086-2-sudeep.holla@arm.com> Sender: linux-pm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pm@vger.kernel.org Currently the cpufreq core aborts the validation and return error immediately when it encounter duplicate frequency table entries. This change was introduced long back since commit da0c6dc00c69 ("cpufreq: Handle sorted frequency tables more efficiently"). However, this missed the testing with modified firmware for long time. Inorder to make it work with default settings, we need to ensure the merged table for bL switcher contains no duplicates. Find the duplicates and skip them when merging the frequenct tables of A15 and A7 clusters. Cc: Viresh Kumar Cc: "Rafael J. Wysocki" Signed-off-by: Sudeep Holla --- drivers/cpufreq/vexpress-spc-cpufreq.c | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) v1->v2: - Removed loop unrolling for clusters -- 2.17.1 diff --git a/drivers/cpufreq/vexpress-spc-cpufreq.c b/drivers/cpufreq/vexpress-spc-cpufreq.c index 093ef8d3a8d4..506e3f2bf53a 100644 --- a/drivers/cpufreq/vexpress-spc-cpufreq.c +++ b/drivers/cpufreq/vexpress-spc-cpufreq.c @@ -242,6 +242,19 @@ static inline u32 get_table_max(struct cpufreq_frequency_table *table) return max_freq; } +static bool search_frequency(struct cpufreq_frequency_table *table, int size, + unsigned int freq) +{ + int count; + + for (count = 0; count < size; count++) { + if (table[count].frequency == freq) + return true; + } + + return false; +} + static int merge_cluster_tables(void) { int i, j, k = 0, count = 1; @@ -257,10 +270,13 @@ static int merge_cluster_tables(void) freq_table[MAX_CLUSTERS] = table; /* Add in reverse order to get freqs in increasing order */ - for (i = MAX_CLUSTERS - 1; i >= 0; i--) { + for (i = MAX_CLUSTERS - 1; i >= 0; i--, count = k) { for (j = 0; freq_table[i][j].frequency != CPUFREQ_TABLE_END; - j++, k++) { - table[k].frequency = + j++) { + if (i == A15_CLUSTER && + search_frequency(table, count, freq_table[i][j].frequency)) + continue; /* skip duplicates */ + table[k++].frequency = VIRT_FREQ(i, freq_table[i][j].frequency); } }