Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp1174115yba; Thu, 9 May 2019 12:00:10 -0700 (PDT) X-Google-Smtp-Source: APXvYqywj54CTuKu4bop4O9dsesY8OyEQuEEJ5vmvCl5GhpIIDMNgePKfa3bdmP3FVG1/9KrCZKN X-Received: by 2002:a63:c106:: with SMTP id w6mr4142854pgf.422.1557428410772; Thu, 09 May 2019 12:00:10 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1557428410; cv=none; d=google.com; s=arc-20160816; b=ivoWQY9r9wYRprbooByaNDJ+ed8ScEhtOtqh6T/+UilKfBG2IQdR5WosDDSuXWm1Bd 6lvGiozrjV2vYjp1KDeU3ECQRpovdsnrGpFqbu3BnB/BbW58NemFQQkJthNDiwfCpmDA VKQlbHnN/BWXqFCPrBsc830yNhejhAbXl+ViMURSA3lR9CrQtgC0mjdvxPv/491wj4Fk vHU4B+jsUok5imYPenFomJCNKZDzv1hZ9Cuf+Z0SRF/LvG90D7A6MxxcFdiS9JGfdbBC 4N/2ArQ/XwDj0R7amP8YJIwtaTr/VmPJILG6yaDelbBodNsgDNtaxKyOareZSGjU8Zkm uUrQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=qqMRzEr2pz8FJz7/LU6pKYl8LX0Mkc7jp0/d1fELUkQ=; b=ybc0nLk/3dF3Is7xXnRzM3yLG2yUmYnz9S7M+Hh3Blmalw905SVc8ynmcdz5PGHZz/ /xjqVavTOgTo0/URthV8z10glaxcWnKX6RWfoj4FWRByzfqZ3huph8SKdxQOJPTjcner 6Dj0OOazle6PdVCHjhXwit74cRb//vOeb6Ntm0NseUrUEOF6TE7AwcM5joUoTVKPAl9k II/noxR5TudB6/eu4M+3G3HqpqrE6uMDnZX7ijawOA5x9PrBRLXJP01fLNdOeWKX7/fn VB7i/STwvMVXltznaQPadSn79Y5AOzk/G/Akeo1Vsy1kUIOgjaCz3DsHlIMilh2CYKuJ /e+g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b="TtTl/BwG"; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-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 d34si4998469pgd.558.2019.05.09.11.59.55; Thu, 09 May 2019 12:00:10 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b="TtTl/BwG"; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728845AbfEISxM (ORCPT + 99 others); Thu, 9 May 2019 14:53:12 -0400 Received: from mail.kernel.org ([198.145.29.99]:47564 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728819AbfEISxK (ORCPT ); Thu, 9 May 2019 14:53:10 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id DC33F217F5; Thu, 9 May 2019 18:53:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1557427989; bh=erub84zW5SlMt2EeVa3Z6abSx4S29rau3YDLlNndXu8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=TtTl/BwGZq9Uy3G2gJYhFpz+3QIJLgLXVeAipuZ1MaQ5XYiqECGd7zBTRCQaehMnB PxislkrIBWIdL5nxpc2FSZ0fpQO/ZoCdrdVVZ3ptXONQMdx+Z7TqZAB47sNuKQsXEP EPC1+aR4Iz8E0aQ6QU7M86nlUsgsJb1P83TMSd1Q= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Christian Neubert , Gregory CLEMENT , Viresh Kumar Subject: [PATCH 5.0 81/95] cpufreq: armada-37xx: fix frequency calculation for opp Date: Thu, 9 May 2019 20:42:38 +0200 Message-Id: <20190509181314.978124502@linuxfoundation.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190509181309.180685671@linuxfoundation.org> References: <20190509181309.180685671@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Gregory CLEMENT commit 8db82563451f976597ab7b282ec655e4390a4088 upstream. The frequency calculation was based on the current(max) frequency of the CPU. However for low frequency, the value used was already the parent frequency divided by a factor of 2. Instead of using this frequency, this fix directly get the frequency from the parent clock. Fixes: 92ce45fb875d ("cpufreq: Add DVFS support for Armada 37xx") Cc: Reported-by: Christian Neubert Signed-off-by: Gregory CLEMENT Signed-off-by: Viresh Kumar Signed-off-by: Greg Kroah-Hartman --- drivers/cpufreq/armada-37xx-cpufreq.c | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) --- a/drivers/cpufreq/armada-37xx-cpufreq.c +++ b/drivers/cpufreq/armada-37xx-cpufreq.c @@ -359,11 +359,11 @@ static int __init armada37xx_cpufreq_dri struct armada_37xx_dvfs *dvfs; struct platform_device *pdev; unsigned long freq; - unsigned int cur_frequency; + unsigned int cur_frequency, base_frequency; struct regmap *nb_pm_base, *avs_base; struct device *cpu_dev; int load_lvl, ret; - struct clk *clk; + struct clk *clk, *parent; nb_pm_base = syscon_regmap_lookup_by_compatible("marvell,armada-3700-nb-pm"); @@ -399,6 +399,22 @@ static int __init armada37xx_cpufreq_dri return PTR_ERR(clk); } + parent = clk_get_parent(clk); + if (IS_ERR(parent)) { + dev_err(cpu_dev, "Cannot get parent clock for CPU0\n"); + clk_put(clk); + return PTR_ERR(parent); + } + + /* Get parent CPU frequency */ + base_frequency = clk_get_rate(parent); + + if (!base_frequency) { + dev_err(cpu_dev, "Failed to get parent clock rate for CPU\n"); + clk_put(clk); + return -EINVAL; + } + /* Get nominal (current) CPU frequency */ cur_frequency = clk_get_rate(clk); if (!cur_frequency) { @@ -431,7 +447,7 @@ static int __init armada37xx_cpufreq_dri for (load_lvl = ARMADA_37XX_DVFS_LOAD_0; load_lvl < LOAD_LEVEL_NR; load_lvl++) { unsigned long u_volt = avs_map[dvfs->avs[load_lvl]] * 1000; - freq = cur_frequency / dvfs->divider[load_lvl]; + freq = base_frequency / dvfs->divider[load_lvl]; ret = dev_pm_opp_add(cpu_dev, freq, u_volt); if (ret) goto remove_opp;