From patchwork Tue Jul 25 07:37:02 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Quentin Schulz X-Patchwork-Id: 108617 Delivered-To: patch@linaro.org Received: by 10.140.101.44 with SMTP id t41csp260204qge; Tue, 25 Jul 2017 00:41:14 -0700 (PDT) X-Received: by 10.98.9.135 with SMTP id 7mr18854941pfj.15.1500968474630; Tue, 25 Jul 2017 00:41:14 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1500968474; cv=none; d=google.com; s=arc-20160816; b=SXoR9btftqsj8XTSyoViRCcDWEr/0ZrfaCmXWaOh+UHElMd+jnGpEdAM3oOyZGpdaO 8eaPLkYr2ZNASXHcBpIbh9qDPTuqzkoKa/O5/s66pw1r7a17UlB488f/tPlSMqXRCzrd S24iOcXDSWqLtoZGSQ/+1XSooxvaJsQzA44oNgirZ1dMItpKFCfkEaO3sIuK7edZFgxi 7jE1NoWmOg8rJT234ODshcjsA+xowIIo9r3Sf7BWEJ8R7YghEGV32TyqOvsydGcjJGZE DA6TDduIVvx1/YHeVPUs7WE1MoUD5IR2cj/ulSSuaqfYvId83DxbMh7PZKVbAu78+n9Y HEdQ== 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:references :in-reply-to:message-id:date:subject:cc:to:from :arc-authentication-results; bh=Xl7/r2g+cSJ53jVTx5fjHJTao5J0oxMU37bA5owi44U=; b=SJ2g0vKeBmfb/uqCTzGWD4qb1R7aaTB3970Icxh8y+V1gD5BMFJfJsZQZmDxxikJQc upk2aoqhBV4/ztTaWLkzHv/xouPovGrisniZBgqdHvhZeGjRWy9GPm1QQaDSojfNJaZR 1Er/wGzSmAPoIn4Nl7Y3gqht9lTjDbSGAjEbZp/Hu/up7R566NeTlxZS6z53HO5y+pnt iL18DxUW5hoqf5+94ikPQVyXnZskLE5ADLfpk9/Z5Y0rzweciVcBz4bJnQ+AMxnOcVgT U5diX90lKpQpC59uJPJzJDU71ERkigdk0pRxqFPN3Pg1W/xr6vu1JniIdI1rKGdmLx+K +Shg== ARC-Authentication-Results: i=1; mx.google.com; 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 o61si8236163pld.425.2017.07.25.00.41.14; Tue, 25 Jul 2017 00:41:14 -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; 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 S1751479AbdGYHlL (ORCPT + 26 others); Tue, 25 Jul 2017 03:41:11 -0400 Received: from mail.free-electrons.com ([62.4.15.54]:42283 "EHLO mail.free-electrons.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750857AbdGYHlF (ORCPT ); Tue, 25 Jul 2017 03:41:05 -0400 Received: by mail.free-electrons.com (Postfix, from userid 110) id A24D821E7F; Tue, 25 Jul 2017 09:41:02 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on mail.free-electrons.com X-Spam-Level: X-Spam-Status: No, score=-1.0 required=5.0 tests=ALL_TRUSTED,SHORTCIRCUIT, URIBL_BLOCKED shortcircuit=ham autolearn=disabled version=3.4.0 Received: from localhost.localdomain (LStLambert-657-1-97-87.w90-63.abo.wanadoo.fr [90.63.216.87]) by mail.free-electrons.com (Postfix) with ESMTPSA id 3650E208E2; Tue, 25 Jul 2017 09:40:52 +0200 (CEST) From: Quentin Schulz To: mturquette@baylibre.com, sboyd@codeaurora.org, robh+dt@kernel.org, mark.rutland@arm.com, lgirdwood@gmail.com, broonie@kernel.org, nicolas.ferre@microchip.com, alexandre.belloni@free-electrons.com, linux@armlinux.org.uk, boris.brezillon@free-electrons.com, perex@perex.cz, tiwai@suse.com Cc: cyrille.pitchen@wedev4u.fr, thomas.petazzoni@free-electrons.com, linux-clk@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, alsa-devel@alsa-project.org, linux-arm-kernel@lists.infradead.org, Quentin Schulz Subject: [PATCH v4 1/9] clk: at91: clk-generated: remove useless divisor loop Date: Tue, 25 Jul 2017 09:37:02 +0200 Message-Id: X-Mailer: git-send-email 2.11.0 In-Reply-To: References: In-Reply-To: References: Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The driver requests the current clk rate of each of its parent clocks to decide whether a clock rate is suitable or not. It does not request determine_rate from a parent clock which could request a rate change in parent clock (i.e. there is no parent rate propagation). We know the rate we want (passed along req argument of the function) and the parent clock rate, thus we know the closest rounded divisor, we don't need to iterate over the available divisors to find the best one for a given clock. Signed-off-by: Quentin Schulz Acked-by: Boris Brezillon --- drivers/clk/at91/clk-generated.c | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) -- git-series 0.9.1 diff --git a/drivers/clk/at91/clk-generated.c b/drivers/clk/at91/clk-generated.c index f0b7ae9..ef4b4e0 100644 --- a/drivers/clk/at91/clk-generated.c +++ b/drivers/clk/at91/clk-generated.c @@ -124,19 +124,18 @@ static int clk_generated_determine_rate(struct clk_hw *hw, (gck->range.max && min_rate > gck->range.max)) continue; - for (div = 1; div < GENERATED_MAX_DIV + 2; div++) { - tmp_rate = DIV_ROUND_CLOSEST(parent_rate, div); - tmp_diff = abs(req->rate - tmp_rate); - - if (best_diff < 0 || best_diff > tmp_diff) { - best_rate = tmp_rate; - best_diff = tmp_diff; - req->best_parent_rate = parent_rate; - req->best_parent_hw = parent; - } - - if (!best_diff || tmp_rate < req->rate) - break; + div = DIV_ROUND_CLOSEST(parent_rate, req->rate); + if (!div) + tmp_rate = parent_rate; + else + tmp_rate = parent_rate / div; + tmp_diff = abs(req->rate - tmp_rate); + + if (best_diff < 0 || best_diff > tmp_diff) { + best_rate = tmp_rate; + best_diff = tmp_diff; + req->best_parent_rate = parent_rate; + req->best_parent_hw = parent; } if (!best_diff)