From patchwork Fri Apr 20 09:56:02 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jerome Brunet X-Patchwork-Id: 133865 Delivered-To: patch@linaro.org Received: by 10.46.66.142 with SMTP id h14csp75732ljf; Fri, 20 Apr 2018 02:56:42 -0700 (PDT) X-Google-Smtp-Source: AIpwx49OVSWs6UsRhT2N/J6UKn5INl7cTS5bCGwWWIUrs4CpcpNgDhjWgnCGiZoG063jguzu/3bK X-Received: by 10.99.125.75 with SMTP id m11mr7948655pgn.391.1524218202010; Fri, 20 Apr 2018 02:56:42 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1524218201; cv=none; d=google.com; s=arc-20160816; b=LxDCSEJkQwKqzX+Qe7jzATrcAF59DK3b9H5YqNRMkABxyqsm542/gbSy39WRkk+wf+ BGPoCdlQaj8NtorUPnXdR4x0WWbHrWD3lVeUiwuNIHC61TY7IU+IzcfRzComIxvpFKfB lD2VccSGN5BB1Y9QL7E9TTI5HG3wdD6zU2iGjUcs0zSYH5BHKrGH+i8jsPGAU2jdhqNm fa4pmGxZib/3E1AKCElRJ70WHd0IHvBn+mnzWR44CVGsMrdZGrffD2t9D9pyw3ekPr+Q NzxMJk7Qs8olrN5EnDJjJIK4JW9508qF8lvO8OmJK7hyWJeQx9lkPhdH3tmtCb+eAw0Z lV7w== 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=iPrwfZ7DzwN7hGK+/Xytwg1LtjtIlIenjfy+iPgBCF8=; b=q80YPPdTJ469btEBh/mXz6ePtV7Y1/JTzWTgMqNTUYinvDKm9QI/pxg1tqfTJBWKsz 6YTG0WNDEN75PpKkuRPtaHP9bkFs8lD93y2ED7qIFYaOvB8mYS0fdN/FQN7bZPJAxluX 4AGdKQL7TLaYJWzNGtjpLpKjSX7U33nH1RBUlltgGljlmd1ccjHTxTer14beauSVboXq /R12C/XhN/1h8zWhwuZlf1sZpS7ZntZ41l8/f/vdj9wq+F8Favd3SuAZVUUAmSoV+oSZ Hdxr0P4ZEPRDv2Q44+Zk7/wugVSUjAvbNV6PWABXxgpl+eAJnKTXdiV9drzC1F1SAxNx JOwg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@baylibre-com.20150623.gappssmtp.com header.s=20150623 header.b=d4qPkE/+; 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 b4si4590240pgu.79.2018.04.20.02.56.41; Fri, 20 Apr 2018 02:56:41 -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=@baylibre-com.20150623.gappssmtp.com header.s=20150623 header.b=d4qPkE/+; 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 S1754579AbeDTJ4i (ORCPT + 29 others); Fri, 20 Apr 2018 05:56:38 -0400 Received: from mail-wr0-f196.google.com ([209.85.128.196]:35889 "EHLO mail-wr0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754308AbeDTJ4L (ORCPT ); Fri, 20 Apr 2018 05:56:11 -0400 Received: by mail-wr0-f196.google.com with SMTP id m26-v6so3514533wrb.3 for ; Fri, 20 Apr 2018 02:56:11 -0700 (PDT) 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=iPrwfZ7DzwN7hGK+/Xytwg1LtjtIlIenjfy+iPgBCF8=; b=d4qPkE/+fD1k/tU/sLNJ+kv67ywzs7gT9mxPIoTgCSa8y82ODruF0l1iW2wVuM/hx4 8TbAoTrizeoX9PZsEC+Cc+aHLeNRbGNOn80ut4xyXyNdOh/GEE1Zo+yxnGyXkrpYeS8a MyaSxSurierjLxPROfd67XUpJ2smvlU5j7VqF8rmselEsoyBNEIJzDxaQWBVSPMbJ+Wa 77wVSpf7vlw1u9LeKduxOG/fMZeA9TAwKlDoCvJGgZb37VKoM95tGrAkG1Unf+0EvmEC C4eGHRpI+EZCuq4wxdoCcI29AYWgl6BLnaTIH9kxzzEQR3gy0DjIg7AoQXlfIkIe/OhD QqXQ== 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=iPrwfZ7DzwN7hGK+/Xytwg1LtjtIlIenjfy+iPgBCF8=; b=ZMy28EQ7l8lq4sj8AkEW9BqEJ5y0BvJF5e5PIwqd7dVGraXhf1BFls0g3Z4GHKEdQQ VwjV1gVzlbfZnL6ayobTy7no9bqC3bbUviT73Kg/B5XiNC9eqLsJYe6N3VB38VO+hIp9 S/ePto8AaL39sjD5b30c+1AmXCorB+N+vzGTV8kb8L7NbAM3/WuGRl93UIuwL0om6ZGM jYNx6WwNX/LsqA2TX2z5ItECwXgDru3peXo86ok66WeJn26P1y7zuZZs4dNfLJ59+GvX EJ2wZ52i9Z7gK/h+s49yXE5TCyKbkQBoaGBgib+OOxBO4F1oUkx5JxEFi6RUDcY6JOzO 8UJQ== X-Gm-Message-State: ALQs6tDUvI7XddIVIJgc8j3fnt3diAAMvJvRxOCXwJNZGnVkjYEfdSm+ HEMHop+3ozgrsvnLtP72CG6Vkw== X-Received: by 10.28.17.18 with SMTP id 18mr1517591wmr.125.1524218170470; Fri, 20 Apr 2018 02:56:10 -0700 (PDT) Received: from boomer.lan (cag06-3-82-243-161-21.fbx.proxad.net. [82.243.161.21]) by smtp.googlemail.com with ESMTPSA id t46-v6sm4477100wrc.95.2018.04.20.02.56.09 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Fri, 20 Apr 2018 02:56:09 -0700 (PDT) From: Jerome Brunet To: Neil Armstrong , Kevin Hilman Cc: Jerome Brunet , linux-amlogic@lists.infradead.org, linux-clk@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 1/2] clk: meson: mpll: add round closest support Date: Fri, 20 Apr 2018 11:56:02 +0200 Message-Id: <20180420095603.29964-2-jbrunet@baylibre.com> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20180420095603.29964-1-jbrunet@baylibre.com> References: <20180420095603.29964-1-jbrunet@baylibre.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Allow the mpll driver to round the requested rate up if CLK_MESON_MPLL_ROUND_CLOSEST is set and it provides a rate closer to the requested rate. Signed-off-by: Jerome Brunet --- drivers/clk/meson/clk-mpll.c | 25 ++++++++++++++++++++----- drivers/clk/meson/clkc.h | 3 +++ 2 files changed, 23 insertions(+), 5 deletions(-) -- 2.14.3 Acked-by: Neil Armstrong diff --git a/drivers/clk/meson/clk-mpll.c b/drivers/clk/meson/clk-mpll.c index 0df1227b65b3..4e5283eb892a 100644 --- a/drivers/clk/meson/clk-mpll.c +++ b/drivers/clk/meson/clk-mpll.c @@ -89,10 +89,23 @@ static long rate_from_params(unsigned long parent_rate, static void params_from_rate(unsigned long requested_rate, unsigned long parent_rate, unsigned int *sdm, - unsigned int *n2) + unsigned int *n2, + u8 flags) { uint64_t div = parent_rate; - unsigned long rem = do_div(div, requested_rate); + uint64_t frac = do_div(div, requested_rate); + unsigned long rem; + + frac *= SDM_DEN; + rem = do_div(frac, requested_rate); + + /* Should we round up ? */ + if (flags & CLK_MESON_MPLL_ROUND_CLOSEST + && rem > (requested_rate / 2)) { + frac = (frac + 1) % SDM_DEN; + if (frac == 0) + div += 1; + } if (div < N2_MIN) { *n2 = N2_MIN; @@ -102,7 +115,7 @@ static void params_from_rate(unsigned long requested_rate, *sdm = SDM_DEN - 1; } else { *n2 = div; - *sdm = DIV_ROUND_UP_ULL((u64)rem * SDM_DEN, requested_rate); + *sdm = frac; } } @@ -125,9 +138,11 @@ static long mpll_round_rate(struct clk_hw *hw, unsigned long rate, unsigned long *parent_rate) { + struct clk_regmap *clk = to_clk_regmap(hw); + struct meson_clk_mpll_data *mpll = meson_clk_mpll_data(clk); unsigned int sdm, n2; - params_from_rate(rate, *parent_rate, &sdm, &n2); + params_from_rate(rate, *parent_rate, &sdm, &n2, mpll->flags); return rate_from_params(*parent_rate, sdm, n2); } @@ -140,7 +155,7 @@ static int mpll_set_rate(struct clk_hw *hw, unsigned int sdm, n2; unsigned long flags = 0; - params_from_rate(rate, parent_rate, &sdm, &n2); + params_from_rate(rate, parent_rate, &sdm, &n2, mpll->flags); if (mpll->lock) spin_lock_irqsave(mpll->lock, flags); diff --git a/drivers/clk/meson/clkc.h b/drivers/clk/meson/clkc.h index 8fe73c4edca8..8cc265cd3d2b 100644 --- a/drivers/clk/meson/clkc.h +++ b/drivers/clk/meson/clkc.h @@ -97,8 +97,11 @@ struct meson_clk_mpll_data { struct parm ssen; struct parm misc; spinlock_t *lock; + u8 flags; }; +#define CLK_MESON_MPLL_ROUND_CLOSEST BIT(0) + struct meson_clk_audio_div_data { struct parm div; u8 flags;