From patchwork Fri Jan 19 15:55:23 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jerome Brunet X-Patchwork-Id: 125185 Delivered-To: patch@linaro.org Received: by 10.46.66.141 with SMTP id h13csp352546ljf; Fri, 19 Jan 2018 07:57:34 -0800 (PST) X-Google-Smtp-Source: ACJfBouRnp1bFVV0LTLamGyn/dKFUu1+72iUl2Q0CY/96OjUIWSxmIKfk4W4AekMZNANZL8NE233 X-Received: by 10.98.248.75 with SMTP id c11mr7690501pfm.54.1516377454838; Fri, 19 Jan 2018 07:57:34 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1516377454; cv=none; d=google.com; s=arc-20160816; b=AR6nCI0WnqljDor6JUDkOjUbIRbONjTjDwOzXVBjc4rg1dwelJH25xgAfCdgqvohCh +HS+r/QRWYV3pYwgpYrohaKfRqNglENnZL3TOQz1Qm7PchQwlZ3LUhwCz7ivNUP2dLhl NM8fzbo1/o5AAAWqfwmEBFsL9gGBeH0Rt6XNrwWgNJgRP0fVn+bgRj8Q6M2xSbMUqlMs RnjPa99LXaZ2+5cV7mKKW+2Z3TG0IFs6bAbqJ8YP1djix4hYWSOjVlDavCKOZlDE8/ps FDb3fYi1vAqVR4M5ubajD388Wgez9pYDEQhk2qLKN6VMw3cCH73fjhn76beBQAAJ5Pt/ FG3Q== 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:dkim-signature:arc-authentication-results; bh=4724/3o8t3bh3HP6dUvswXdhaFjRmyLkXK8BEyrtt2E=; b=fCYekFZ1+HQLEn9/lSDtbHXIjkyDlaqbqOMuxLx2l3jUwaCuJlkigCTVN5VCrw2CiM thLqL147UVhywhDoMlAkdmnXQfhHzIKCc2oOX1vgHtF8IPUhtwzSDaQcwwvMoAUXWrS/ Mk3SdHeiJa96wc4SPieW26yEfCBtN9nf/wdVL3W5cVBl0195j90JOEwBcVNhDAbhhKqY S9DinlG855j3QjTpI4t+Dp0m3vOjqzqOsfStX1Zot6lgCsIpyvSG+Q6UG626GLll9q0h 1zlzCbrIvdHmNxhle0dI+8JrCVqxHYNG+M94tXOs9M6g3889f42o4l0iO2HCGi81Pv91 Wfsw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@baylibre-com.20150623.gappssmtp.com header.s=20150623 header.b=UJw7KJV5; 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 e4si9490104pfb.84.2018.01.19.07.57.34; Fri, 19 Jan 2018 07:57:34 -0800 (PST) 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=@baylibre-com.20150623.gappssmtp.com header.s=20150623 header.b=UJw7KJV5; 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 S932479AbeASP5a (ORCPT + 28 others); Fri, 19 Jan 2018 10:57:30 -0500 Received: from mail-wr0-f194.google.com ([209.85.128.194]:45481 "EHLO mail-wr0-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755766AbeASPzg (ORCPT ); Fri, 19 Jan 2018 10:55:36 -0500 Received: by mail-wr0-f194.google.com with SMTP id 16so1971823wry.12 for ; Fri, 19 Jan 2018 07:55:36 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=4724/3o8t3bh3HP6dUvswXdhaFjRmyLkXK8BEyrtt2E=; b=UJw7KJV5kVs4ZFopnuB0+nJNFJMaH7OavelhGArmhYbWJ6US9BGuGVisdGJdiI9TzH XuN4NHxi0BOJDy13eI99LZEVQR5ytdc7j00HH3+wxufYrYPIvCJw/x+FNne0oxy3U/5P TM+9n7bDwb6V8/7JzpvdJmpYL5r2Q0U9UbuXoQ7Ex60y/cEuqyeqv+f0AI6EAfX7zFKT SeODuvVENkJK+eePsu/lDt07TV1Zrg9Z72ixQNUKx52Uu+49pmYwrF25Mw0U7bDQP9mR Q1XEiN/YyOsmJdegwORJAY1gRBE+usgdtIODpAPLOEwDMmwhfZ8sWqomPKC0N44KiZSD 1O2w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=4724/3o8t3bh3HP6dUvswXdhaFjRmyLkXK8BEyrtt2E=; b=im97iloda41i8rUVESkkwSKr7HaGz+wUui9GWn/ZXZCb+/bgHzoSyXH5QXRGNT/DZN 47Ws6F/Vwx/17Cs5zKBHAJjoLmb4qVqWZIYe0tWLAYf/TwYCJNUy5YINpZkVL+NmPSd1 1FR5CjbhebKE9YvZfO/aq9D/6HyCMcbjadUKPCWiiq+86iOUSG3g8X3WCwtYVwyq0ClC RxHXJr3J3g6gMmj9R8aexcueSHxK2wS2mdFQ0RJobI0xJdpXxHfoNm0QzFQSSu3ATXAg AJ4E0TpOwwijbEErOZn/Uu283qij82XjyULKmWzTFB7uwFcZR5txOA93fr5NFXXb3JMB hrow== X-Gm-Message-State: AKwxyteSqkzCcQ25QLpytuIzWemcFy9kCS3m6hxOlasjeJRrqMTFyXjw mbuudCj0b6xfJAjOpaMCQ+WYAmsd X-Received: by 10.223.177.207 with SMTP id r15mr10591980wra.32.1516377335463; Fri, 19 Jan 2018 07:55:35 -0800 (PST) Received: from boomer.baylibre.local ([90.63.244.31]) by smtp.googlemail.com with ESMTPSA id w73sm25883027wrb.34.2018.01.19.07.55.34 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Fri, 19 Jan 2018 07:55:34 -0800 (PST) From: Jerome Brunet To: Neil Armstrong Cc: Jerome Brunet , Kevin Hilman , Carlo Caione , Michael Turquette , Stephen Boyd , linux-amlogic@lists.infradead.org, linux-clk@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 3/9] clk: meson: remove unnecessary rounding in the pll clock Date: Fri, 19 Jan 2018 16:55:23 +0100 Message-Id: <20180119155529.11532-4-jbrunet@baylibre.com> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20180119155529.11532-1-jbrunet@baylibre.com> References: <20180119155529.11532-1-jbrunet@baylibre.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The pll driver performs the rate calculation in Mhz, which adds an unnecessary rounding down to the Mhz of the rate. Use 64bits long integers to perform this calculation safely on meson8b and perform the calculation in Hz instead Fixes: 7a29a869434e ("clk: meson: Add support for Meson clock controller") Signed-off-by: Jerome Brunet --- drivers/clk/meson/clk-pll.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) -- 2.14.3 diff --git a/drivers/clk/meson/clk-pll.c b/drivers/clk/meson/clk-pll.c index 2614341fc4ad..087dfc532ba8 100644 --- a/drivers/clk/meson/clk-pll.c +++ b/drivers/clk/meson/clk-pll.c @@ -34,6 +34,7 @@ #include #include #include +#include #include #include #include @@ -51,8 +52,7 @@ static unsigned long meson_clk_pll_recalc_rate(struct clk_hw *hw, { struct meson_clk_pll *pll = to_meson_clk_pll(hw); struct parm *p; - unsigned long parent_rate_mhz = parent_rate / 1000000; - unsigned long rate_mhz; + u64 rate; u16 n, m, frac = 0, od, od2 = 0; u32 reg; @@ -74,17 +74,18 @@ static unsigned long meson_clk_pll_recalc_rate(struct clk_hw *hw, od2 = PARM_GET(p->width, p->shift, reg); } + rate = (u64)parent_rate * m; + p = &pll->frac; if (p->width) { reg = readl(pll->base + p->reg_off); frac = PARM_GET(p->width, p->shift, reg); - rate_mhz = (parent_rate_mhz * m + \ - (parent_rate_mhz * frac >> 12)) * 2 / n; - rate_mhz = rate_mhz >> od >> od2; - } else - rate_mhz = (parent_rate_mhz * m / n) >> od >> od2; - return rate_mhz * 1000000; + rate += mul_u64_u32_shr(parent_rate, frac, 12); + rate *= 2; + } + + return div_u64(rate, n) >> od >> od2; } static long meson_clk_pll_round_rate(struct clk_hw *hw, unsigned long rate,