Received: by 10.223.185.116 with SMTP id b49csp3629508wrg; Mon, 19 Feb 2018 03:24:51 -0800 (PST) X-Google-Smtp-Source: AH8x224T7JquZSZ8jTpG9a7VDwHzD+fgDoiIUOmUH3Ocob8lL40P7TneJgzKGNON2QVp9CpUfBVT X-Received: by 10.98.72.204 with SMTP id q73mr13930650pfi.48.1519039491063; Mon, 19 Feb 2018 03:24:51 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1519039491; cv=none; d=google.com; s=arc-20160816; b=OlVcxUOYIyKWqcHHUt+HmMRISHV7P+NpUNFH8GaWWgh/YBKQmYkfZrAG3gXro9mQj6 +J1Ai6NDdHZnDCBoGs8ZAyj3yoAp95fn3392v94nFWsho0aDK5RoWcJvs4rs2lQFCtNT momC/79m/FUKCq/FzF2AidMQr8cGP0weXAGSeKd2+1+3dlsWD8DAEdPG1I6FQ4UOYtto ibOwLXTFWjE7S4f11Sz8R4gYIqj+ppfNJ4TLW0JJDqerqsYS2D1UY7ADqFSgawMesUEk T2TNFOPmN14I6cWwIOoDQRnYRN+fwhLvRR8OtLVVk25C7j1cT3HuBlDAFZ8Mg+brrAm3 6Q8Q== 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=4kkoJ70qmiFDHBJQLQq+pLJDWNTDYwp4hBtfFXk66Rc=; b=y9WiQTlEM0rua8a0ugSH+5cMczd0khxuGelv+INDkJ9SYl0Z8QfEskfxbwGQuyBS4d /kVtu6xOrgQFNVIPc222YRwF5281w0/J21kWb9zo+XCtDii0lq2RoOBBRhO9GM0Imu7z 8UF40wq3YbP8gT98l4YZaFoN1Fq1RRSQjVOSW6T0AP4PRaJ1qecIx4r3hgDBoZoBnlYk 2KT1sDq29xHObxJaRK+cT47uFaW9mluNkZnFRn93PVQT5bjj5L6Besi8KkzF/ogk9oyg w6nMTA0d4anjaaf9tFo/wCQQwq4gv0C4/DERotvHNoIsk3ktQQ1TfHDO9Sa/1femNOGx Fh1w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@baylibre-com.20150623.gappssmtp.com header.s=20150623 header.b=U+uvCb8G; 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 b5-v6si1083547plr.335.2018.02.19.03.24.37; Mon, 19 Feb 2018 03:24:51 -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=U+uvCb8G; 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 S1752664AbeBSLWC (ORCPT + 99 others); Mon, 19 Feb 2018 06:22:02 -0500 Received: from mail-wr0-f195.google.com ([209.85.128.195]:38703 "EHLO mail-wr0-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752592AbeBSLV7 (ORCPT ); Mon, 19 Feb 2018 06:21:59 -0500 Received: by mail-wr0-f195.google.com with SMTP id n7so9233707wrn.5 for ; Mon, 19 Feb 2018 03:21:58 -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=4kkoJ70qmiFDHBJQLQq+pLJDWNTDYwp4hBtfFXk66Rc=; b=U+uvCb8Gq64EhV1iY8XrdCYfBHw08x23KBp+Q1zZ5/rDUPxKu5RCK7ZBVW4wYbgmlm cF66flTL04+lOJACL553Xy3CCUfvoQ7TQyrMs6XKW0MvyE21hOrVVS9qkmyAtio4gkE9 aWaqKWACmLrEYB9kGRRrJQLbVRkRbLMwmb+LeZxefIA5HV3MwVOC3AOhcrh6DE5gOOZb ldDkipSLrEOgAF0JJDuLE2LhenvV4mCtPML5CXw0A9cslM09NSo+6POmUbSxgJwjLRaP WhxhIv1BvsLQQZ6BVZGSiUWSVTbNoXBrdSjBABvWDCJaRxAWHDbVbNOMAhAneczvVwwn I4SA== 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=4kkoJ70qmiFDHBJQLQq+pLJDWNTDYwp4hBtfFXk66Rc=; b=XX6IA5FpJQGvfP4tTzo66NMX63GFhlMRjooLGY5xNIOkPZZnlbxUw42vlqFGDvTy5A mD2ybSPtHnAlUKduHNv59SPY4rJHSX3vx1SgCSVBGryrJRYKlc8HAjW3MmLwMRIWyn7B xyi4xkBd10cB5JR/WVoe4tFNn9jXDAIRQsHqVwG1fWR9wo9Ro3b4ITrr74AdQWKuKGE1 tocRWK3QotsHg3a1Os+fqqoUZXzljMkrzCR2dhC3eenQpmMk/bYyU66xFVoMqUkgkZhq 8QzM428OILwi2QG9Z+J0OCWRLCFpug1iVi+f6qz6u3VuuMsaP7azGNl0lRdZIYauJSY5 ra8w== X-Gm-Message-State: APf1xPD9Nd8R95f8sYiCnUk/zkUC/oChNRwr5Yr9jXZVSewvU8XjMafV zPrUbp6MISh5y5fPiYTlnrOjow== X-Received: by 10.223.198.7 with SMTP id n7mr13233351wrg.130.1519039317832; Mon, 19 Feb 2018 03:21:57 -0800 (PST) Received: from boomer.baylibre.local ([90.63.244.31]) by smtp.googlemail.com with ESMTPSA id n20sm8933978wrg.84.2018.02.19.03.21.56 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 19 Feb 2018 03:21:57 -0800 (PST) From: Jerome Brunet To: Neil Armstrong , Kevin Hilman Cc: Jerome Brunet , Stephen Boyd , Michael Turquette , Carlo Caione , linux-amlogic@lists.infradead.org, linux-clk@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 06/11] clk: meson: add ROUND_CLOSEST to the pll driver Date: Mon, 19 Feb 2018 12:21:41 +0100 Message-Id: <20180219112146.21746-7-jbrunet@baylibre.com> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20180219112146.21746-1-jbrunet@baylibre.com> References: <20180219112146.21746-1-jbrunet@baylibre.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Provide an option for the pll driver to round to the rate closest to the requested rate, instead of systematically rounding down. This may allow the provided rate to be closer to the requested rate when rounding up is not an issue Signed-off-by: Jerome Brunet --- drivers/clk/meson/clk-pll.c | 17 +++++++++++++---- drivers/clk/meson/clkc.h | 2 ++ 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/drivers/clk/meson/clk-pll.c b/drivers/clk/meson/clk-pll.c index d58961f35b71..65a7bd903551 100644 --- a/drivers/clk/meson/clk-pll.c +++ b/drivers/clk/meson/clk-pll.c @@ -105,7 +105,12 @@ static u16 __pll_params_with_frac(unsigned long rate, u64 val = (u64)rate * pllt->n; val <<= pllt->od + pllt->od2 + pllt->od3; - val = div_u64(val * frac_max, parent_rate); + + if (pll->flags & CLK_MESON_PLL_ROUND_CLOSEST) + val = DIV_ROUND_CLOSEST_ULL(val * frac_max, parent_rate); + else + val = div_u64(val * frac_max, parent_rate); + val -= pllt->m * frac_max; return min((u16)val, (u16)(frac_max - 1)); @@ -125,9 +130,13 @@ meson_clk_get_pll_settings(unsigned long rate, while (table[i].rate && table[i].rate <= rate) i++; - /* Select the setting of the rounded down rate */ - if (i != 0) - i--; + if (i != 0) { + if (MESON_PARM_APPLICABLE(&pll->frac) || + !(pll->flags & CLK_MESON_PLL_ROUND_CLOSEST) || + (abs(rate - table[i - 1].rate) < + abs(rate - table[i].rate))) + i--; + } return (struct pll_rate_table *)&table[i]; } diff --git a/drivers/clk/meson/clkc.h b/drivers/clk/meson/clkc.h index 9cdcd9b6c16c..8fe73c4edca8 100644 --- a/drivers/clk/meson/clkc.h +++ b/drivers/clk/meson/clkc.h @@ -71,6 +71,8 @@ struct pll_rate_table { .od = (_od), \ } +#define CLK_MESON_PLL_ROUND_CLOSEST BIT(0) + struct meson_clk_pll_data { struct parm m; struct parm n; -- 2.14.3