Received: by 2002:ac0:98c7:0:0:0:0:0 with SMTP id g7-v6csp2574443imd; Fri, 2 Nov 2018 13:54:42 -0700 (PDT) X-Google-Smtp-Source: AJdET5f9m5iUc3VTXSDxqLDRwRptQBaU4KX4umW+9I1rVtyODenPT+P/VBw2vlX02AigiFWTtI1z X-Received: by 2002:a17:902:9044:: with SMTP id w4-v6mr1531931plz.32.1541192082530; Fri, 02 Nov 2018 13:54:42 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1541192082; cv=none; d=google.com; s=arc-20160816; b=YnmvXreRpC/uRWnqQMejUpPmVH37rqGtPdDCLiapdhYTNowoXLj7nEyskQaWpqxyjw DHFte+ckspc1gLDTkzSe4/0UIRRI0sYc7U57s13xXX2usETTyBUQ8XXDRueRi6K3x+nl xGVoXMFbiDhmDV5bRW5XFamUfD8OuKtEEK3Y2PeIU8i38QrAhTECFy9+Mqr36049yDDY DeW45kxA6QfGC7NJ77CodijDsDu3HC6R0o2Gqx+sd2weizftHtZE0CZWj6bg6r0yO7wR VeBsJ4TGQhfftwy7TVGTyB5+OrAGoCGicr0TUBrAVlrJzebrBHrB83A7hRFaz0m09hLn I8UQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:date:subject:user-agent:message-id :references:cc:in-reply-to:from:to:content-transfer-encoding :mime-version:dkim-signature; bh=Y1079xmhFrV54XBdctlBDcG6zZFZxd3pca4gMlFKyok=; b=PT5eawx5Y4RdN16siBqjEXEwisewyuOaye98r6LtxrXjUuoiZ7M+g71lq5ljxyd9z9 TeEPoZDOwUvFbPrJn0b/plUvHkAitWNNPcmvdvYKhLLtR8YOXM5LXQBTJA9lfFJ3dVUG cONUrnFqUOD4B97jOM9cnbtlv62Fynm7OfgikHkGcUcKmnxuuA6nIXtIYICEyM8CJgK9 gAaURh7stchcMWtM1lMVCrC7Nk7xO65npVfi3Tp3+27yG3SDqFF5Na0xyYZCIVs0DHXx bjNSusnTY6+gtQT75mjHvzZHwat74G8rC3BKPTu8aBmNBMnSAoaMj3sWc8XiY80y9XBV nRIA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=bHRMyBwM; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id h71-v6si24160018pgc.122.2018.11.02.13.54.27; Fri, 02 Nov 2018 13:54:42 -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=bHRMyBwM; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728170AbeKCGBU (ORCPT + 99 others); Sat, 3 Nov 2018 02:01:20 -0400 Received: from mail.kernel.org ([198.145.29.99]:39862 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725957AbeKCGBU (ORCPT ); Sat, 3 Nov 2018 02:01:20 -0400 Received: from localhost (unknown [104.132.0.74]) (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 4326A2082E; Fri, 2 Nov 2018 20:52:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1541191961; bh=vJRDmfrp0jtDatYmo3aRaTmkmqRI/Xv0Ugemt64LReY=; h=To:From:In-Reply-To:Cc:References:Subject:Date:From; b=bHRMyBwMQfuEcZMAOsrXP9A88ZbyQnDUAH8K6XojqHQ2n37vqa8xPMhbDPO3NHD60 fMeuXs2YplK8sttWkllAq4DzWjtWD2bbh0SgqSmGbMeS2B3a+rOPcXFIYzlR2QWbRs 3zAcwkBYA0A94HvaPQJafgYnfABpBUy+P0yr9Yc0= Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable To: Amit Nischal , Michael Turquette From: Stephen Boyd In-Reply-To: <1534141987-29601-3-git-send-email-anischal@codeaurora.org> Cc: Andy Gross , David Brown , Rajendra Nayak , Odelu Kukatla , Taniya Das , linux-arm-msm@vger.kernel.org, linux-soc@vger.kernel.org, linux-clk@vger.kernel.org, linux-kernel@vger.kernel.org, Amit Nischal References: <1534141987-29601-1-git-send-email-anischal@codeaurora.org> <1534141987-29601-3-git-send-email-anischal@codeaurora.org> Message-ID: <154119196058.88331.1952304286743529280@swboyd.mtv.corp.google.com> User-Agent: alot/0.7 Subject: Re: [PATCH v3 2/4] clk: qcom: Add clk_rcg2_gfx3d_ops for SDM845 Date: Fri, 02 Nov 2018 13:52:40 -0700 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Quoting Amit Nischal (2018-08-12 23:33:05) > diff --git a/drivers/clk/qcom/clk-rcg2.c b/drivers/clk/qcom/clk-rcg2.c > index 52208d4..a57ce00 100644 > --- a/drivers/clk/qcom/clk-rcg2.c > +++ b/drivers/clk/qcom/clk-rcg2.c > @@ -866,7 +866,7 @@ static int clk_rcg2_shared_set_rate_and_parent(struct= clk_hw *hw, > return clk_rcg2_shared_set_rate(hw, rate, parent_rate); > } > = > -static int clk_rcg2_shared_enable(struct clk_hw *hw) > +static int __clk_rcg2_shared_enable(struct clk_hw *hw) Name this clk_rcg2_force_enable() please. Also add a comment above like: /* Set RCG force enable bit and flush out any configuration settings */ > { > struct clk_rcg2 *rcg =3D to_clk_rcg2(hw); > int ret; > @@ -879,7 +879,14 @@ static int clk_rcg2_shared_enable(struct clk_hw *hw) > if (ret) > return ret; > = > - ret =3D update_config(rcg); > + return update_config(rcg); > +} > + > +static int clk_rcg2_shared_enable(struct clk_hw *hw) > +{ > + int ret; > + > + ret =3D __clk_rcg2_shared_enable(hw); > if (ret) > return ret; > = > @@ -929,3 +936,78 @@ static void clk_rcg2_shared_disable(struct clk_hw *h= w) > .set_rate_and_parent =3D clk_rcg2_shared_set_rate_and_parent, > }; > EXPORT_SYMBOL_GPL(clk_rcg2_shared_ops); > + > +static int clk_rcg2_gfx3d_enable(struct clk_hw *hw) > +{ > + return __clk_rcg2_shared_enable(hw); > +} And then drop this wrapper and just use clk_rcg2_force_enable() in the clk_ops structure. > + > +static int clk_rcg2_gfx3d_determine_rate(struct clk_hw *hw, > + struct clk_rate_request *req) > +{ > + struct clk_rate_request parent_req =3D { }; > + struct clk_hw *p; > + unsigned long rate =3D req->rate; > + int ret; > + > + rate =3D clamp(rate, req->min_rate, req->max_rate); Doesn't the core already clamp the rate for you? Seems wasteful to do it again. > + > + /* Get fixed parent - GPU_CC_PLL0_OUT_EVEN */ I hope this doesn't change in the future! Any way to make this detectable by storing the parent index somewhere so this op can work with any future index selection instead of hardcoding '1' here? > + p =3D clk_hw_get_parent_by_index(hw, 1); > + > + /* Parent should always run at twice of the requested rate */ > + parent_req.rate =3D 2 * rate; > + > + ret =3D __clk_determine_rate(req->best_parent_hw, &parent_req); > + if (ret) > + return ret; > + > + req->best_parent_hw =3D p; > + req->best_parent_rate =3D parent_req.rate; > + req->rate =3D parent_req.rate / 2; > + > + return 0; > +} > + > +static int clk_rcg2_gfx3d_set_rate(struct clk_hw *hw, unsigned long rate, > + unsigned long parent_rate) > +{ > + struct clk_rcg2 *rcg =3D to_clk_rcg2(hw); > + int ret; > + u32 cfg; > + > + /* Configure fixed SRC and DIV */ > + cfg =3D rcg->parent_map[1].cfg << CFG_SRC_SEL_SHIFT; This would need to be dynamic too instead of hardcoding '1'. > + cfg |=3D 0x3 << CFG_SRC_DIV_SHIFT; > + > + ret =3D regmap_write(rcg->clkr.regmap, rcg->cmd_rcgr + CFG_REG, c= fg); > + if (ret) > + return ret; > + > + /* > + * In case clock is disabled, update the SRC and DIV only > + * and return without configuration update. Add: When the clk is enabled, we'll configure the rate to be what we requested here. This allows other users of this clk (i.e. GPU) to change the rate when this clk is disabled from our perspective. > + */ > + if (!__clk_is_enabled(hw->clk)) > + return 0; > + > + return update_config(rcg); > +}