Received: by 2002:ac0:a594:0:0:0:0:0 with SMTP id m20-v6csp328849imm; Tue, 15 May 2018 02:16:03 -0700 (PDT) X-Google-Smtp-Source: AB8JxZo4L3xzl82RMD/0DkqeUOA6UpQ8F02naTRy93Yp4t3O1zCURpcjraJoD0HENx08EoBIQ05G X-Received: by 2002:a17:902:d886:: with SMTP id b6-v6mr13025914plz.361.1526375763498; Tue, 15 May 2018 02:16:03 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1526375763; cv=none; d=google.com; s=arc-20160816; b=IPI/Kh0oVuTGsZe7LrIP5ShIyF4WyNqWRB7r/sj8/tVoXmPtzJq41MZMOHqcShDEQL Lm4t4hM9qaojdlhW/sQVvM2tLjxI6nfHx6qa5xS+WtksLG65Yd3Lb77JWpUdzwNn0aPH 0x3WEZz98eMPeaW2gMOpd7oZu+kWu/9JbkQEjUjJGNrktmwNUcnvvjtnGQZMBIpkN2qu zxI2DeGivQrvU2lDxvoacHu3yz0HCFA/bWPZf6rWEfuRrCyyt4W22IwkFXLI5dyPYvJp 8WeBFE3zv10cknWVDXJMUXHkthrcX92kOnKGutkacWri26J4LOMacgLFOe/XUclH3DgG FZbQ== 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:dmarc-filter:dkim-signature:dkim-signature :arc-authentication-results; bh=ybkLUTecoT17fzD+3AREEiX8V8KeCGVupob4b/q/YyM=; b=zd77s6eKI4dymTpd7fOk0ubNb/A2hFY9Jfp/uKOxbpjEPV15ln1NPkYK0fI3SkKciF te52RA6XSvjnL5iGcsee20SQ2+t4TaqzBVcrowauSjRzH9n3Vdrbr8go12KIXgyVbTy1 Fld25Y8Z9d1T/qFe324yYuI93++WRV/An6P6TAmNOkms4WKnWG1v5Ocnw9N7skCp9PW0 lhrb9wR/fDjhtCCSFB+H90g6MDYoCmJsW+o1fOTCMnxofNCXZ92TsBsTvMj3TuTSaDHu IG9leH6pOX6Mzip9cvI0Ho68DsY40tvena94//vxA7HzLmPL5SSBOH22H9R7qDatn/UB /RNQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@codeaurora.org header.s=default header.b=DM5r9MXl; dkim=pass header.i=@codeaurora.org header.s=default header.b=HqdoaJXf; 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 f12-v6si9279505pgn.479.2018.05.15.02.15.49; Tue, 15 May 2018 02:16:03 -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=@codeaurora.org header.s=default header.b=DM5r9MXl; dkim=pass header.i=@codeaurora.org header.s=default header.b=HqdoaJXf; 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 S1752783AbeEOJOU (ORCPT + 99 others); Tue, 15 May 2018 05:14:20 -0400 Received: from smtp.codeaurora.org ([198.145.29.96]:50620 "EHLO smtp.codeaurora.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752591AbeEOJOP (ORCPT ); Tue, 15 May 2018 05:14:15 -0400 Received: by smtp.codeaurora.org (Postfix, from userid 1000) id 4277060B23; Tue, 15 May 2018 09:14:14 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1526375654; bh=qxnvIgZec1BobCrsvY94G2d6QsCu6/tS7OuwxOh7pEo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=DM5r9MXltDp5Jz+Bdfb4n0uE6f10daIxvoeZawvWerSlKBDdvY+er9zM+qvx4MtbB S3NS2QRP1TYrDscj3JVkoSPmGp3z2lhR3IaJwriPhB3kC7fl1CyqSl4lbTgo+y9zQT nS5wXvs0E6HS+ininKVyp3ohFXB3upqY6vd0Yuao= X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on pdx-caf-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.8 required=2.0 tests=ALL_TRUSTED,BAYES_00, DKIM_SIGNED,T_DKIM_INVALID autolearn=no autolearn_force=no version=3.4.0 Received: from lx-ilial.mea.qualcomm.com (unknown [185.23.60.4]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: ilialin@smtp.codeaurora.org) by smtp.codeaurora.org (Postfix) with ESMTPSA id 16C2960C64; Tue, 15 May 2018 09:14:07 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1526375653; bh=qxnvIgZec1BobCrsvY94G2d6QsCu6/tS7OuwxOh7pEo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=HqdoaJXfPr+XwePtVCsFDWj5kJylxM+fByhx6CGI95i0H5LND58zObaHRI1SGPCHc sIsHfW/1F5IX5qsjBZKKjYYHYDF/hiRLjpQcuPtgL9WCdZkqqwADy7bG2pLF1Smm4M 17/m+4HNwz7TxATMRj50Y7sHsFW4+X95ay4HH0gQ= DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org 16C2960C64 Authentication-Results: pdx-caf-mail.web.codeaurora.org; dmarc=none (p=none dis=none) header.from=codeaurora.org Authentication-Results: pdx-caf-mail.web.codeaurora.org; spf=none smtp.mailfrom=ilialin@codeaurora.org From: Ilia Lin To: mturquette@baylibre.com, sboyd@kernel.org, robh@kernel.org, mark.rutland@arm.com, viresh.kumar@linaro.org, nm@ti.com, lgirdwood@gmail.com, broonie@kernel.org, andy.gross@linaro.org, david.brown@linaro.org, catalin.marinas@arm.com, will.deacon@arm.com, rjw@rjwysocki.net, linux-clk@vger.kernel.org Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-soc@vger.kernel.org, linux-arm-kernel@lists.infradead.org, rnayak@codeaurora.org, ilialin@codeaurora.org, amit.kucheria@linaro.org, nicolas.dechesne@linaro.org, celster@codeaurora.org, tfinkel@codeaurora.org Subject: [PATCH v7 05/14] clk: qcom: cpu-8996: Add support to switch to alternate PLL Date: Tue, 15 May 2018 12:13:27 +0300 Message-Id: <1526375616-16904-6-git-send-email-ilialin@codeaurora.org> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1526375616-16904-1-git-send-email-ilialin@codeaurora.org> References: <1526375616-16904-1-git-send-email-ilialin@codeaurora.org> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Rajendra Nayak Each of the CPU clusters on msm8996 are powered via a primary PLL and a secondary PLL. The primary PLL is what drives the CPU clk, except for times when we are reprogramming the PLL itself, when we temporarily switch to an alternate PLL. Use clock rate change notifiers to support this. Signed-off-by: Rajendra Nayak Signed-off-by: Ilia Lin --- drivers/clk/qcom/clk-cpu-8996.c | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/drivers/clk/qcom/clk-cpu-8996.c b/drivers/clk/qcom/clk-cpu-8996.c index beb97eb..390b369 100644 --- a/drivers/clk/qcom/clk-cpu-8996.c +++ b/drivers/clk/qcom/clk-cpu-8996.c @@ -61,6 +61,7 @@ * detect voltage droops. We do not add support for ACD as yet. */ +#include #include #include #include @@ -187,10 +188,14 @@ struct clk_cpu_8996_mux { u32 reg; u8 shift; u8 width; + struct notifier_block nb; struct clk_hw *pll; struct clk_regmap clkr; }; +#define to_clk_cpu_8996_mux_nb(_nb) \ + container_of(_nb, struct clk_cpu_8996_mux, nb) + static inline struct clk_cpu_8996_mux *to_clk_cpu_8996_mux_hw(struct clk_hw *hw) { @@ -236,6 +241,26 @@ static int clk_cpu_8996_mux_set_parent(struct clk_hw *hw, u8 index) return 0; } +int cpu_clk_notifier_cb(struct notifier_block *nb, unsigned long event, + void *data) +{ + int ret; + struct clk_cpu_8996_mux *cpuclk = to_clk_cpu_8996_mux_nb(nb); + + switch (event) { + case PRE_RATE_CHANGE: + ret = clk_cpu_8996_mux_set_parent(&cpuclk->clkr.hw, ALT_INDEX); + break; + case POST_RATE_CHANGE: + ret = clk_cpu_8996_mux_set_parent(&cpuclk->clkr.hw, PLL_INDEX); + break; + default: + ret = 0; + break; + } + + return notifier_from_errno(ret); +}; const struct clk_ops clk_cpu_8996_mux_ops = { .set_parent = clk_cpu_8996_mux_set_parent, .get_parent = clk_cpu_8996_mux_get_parent, @@ -279,6 +304,7 @@ static int clk_cpu_8996_mux_set_parent(struct clk_hw *hw, u8 index) .shift = 0, .width = 2, .pll = &pwrcl_pll.clkr.hw, + .nb.notifier_call = cpu_clk_notifier_cb, .clkr.hw.init = &(struct clk_init_data) { .name = "pwrcl_pmux", .parent_names = (const char *[]){ @@ -298,6 +324,7 @@ static int clk_cpu_8996_mux_set_parent(struct clk_hw *hw, u8 index) .shift = 0, .width = 2, .pll = &perfcl_pll.clkr.hw, + .nb.notifier_call = cpu_clk_notifier_cb, .clkr.hw.init = &(struct clk_init_data) { .name = "perfcl_pmux", .parent_names = (const char *[]){ @@ -356,6 +383,12 @@ struct clk_regmap *clks[] = { clk_alpha_pll_configure(&perfcl_alt_pll, regmap, &altpll_config); clk_alpha_pll_configure(&pwrcl_alt_pll, regmap, &altpll_config); + ret = clk_notifier_register(pwrcl_pmux.clkr.hw.clk, &pwrcl_pmux.nb); + if (ret) + return ret; + + ret = clk_notifier_register(perfcl_pmux.clkr.hw.clk, &perfcl_pmux.nb); + return ret; } -- 1.9.1