Received: by 2002:ac0:a594:0:0:0:0:0 with SMTP id m20-v6csp4347048imm; Mon, 14 May 2018 06:21:20 -0700 (PDT) X-Google-Smtp-Source: AB8JxZr8Ahpu55AfgpDjfxsCR5ove+PBiMRS+J/biL2omOzs0Ano0i5ro+a3gcXlMcFg9StGPr5H X-Received: by 2002:a17:902:6ac6:: with SMTP id i6-v6mr10191354plt.31.1526304080474; Mon, 14 May 2018 06:21:20 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1526304080; cv=none; d=google.com; s=arc-20160816; b=bwlSz7ZXirTBGDfMPI1W+Ceb9/VfnXL0A4sOQOcO1dZZAH2oTtpsBuobf0e7/Rax0o jpLZdmW2sOj7NXtPazf626b1RLIQhkF40mC+wohynzfCAGE2wKzkmkY/HlYlF+s1maP0 UeKgC9/JMnTtEk9xs0Xs6gS0SuFW8r8MzyfFeIr2ILayhOWFRHV/80JX3xQNSYG0AL7B QJkUFIoLailZ4SXWYgIGnYcyvtAqjVb7lO1Vm/7UWyV98tGccqvPFCE6tQiT4EI//s7r 1GyZ1lVHLqyB9NXIFGrzcAC+MGAYrXTnsoSV+N6adsOKAi/+kXsvT6Dr/tojiZajzXlX ZOtw== 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=QohhNd5DVZWHwHbcTHuH5aU50vFJGOfb90mA9xoWKiP+5CRH8RoH+isq4z2PWe8gRO hTyLwY7knw/RXo6VbFiXk+tKV9Ae9FjAw5LFeqIMYDKUzutZ5MtJDT9DjWVzqCoXOLFE eCNRwB3qAlYC2UqIlaskkXblCWIdqElJ/oJh7dOOJsjIFj37mUxtTkz8THokRy1TR/o0 QvMGlMvO+4gUd/tyqE5pYwXKZFhlwWVq9GqPqlHODeqSAi1THQpTsUHTx1sQzo9TCxie RKUIWiGPrsOAsRlI9Xgm4uGdQ4sPAd3wz5y2rC3VgWL6oNHUL+K6ayXBcw48DidY6ve2 UQdw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@codeaurora.org header.s=default header.b=oHm4iPqR; dkim=pass header.i=@codeaurora.org header.s=default header.b=UzzzMlPc; 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 r5-v6si9353197plo.479.2018.05.14.06.20.44; Mon, 14 May 2018 06:21:20 -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=oHm4iPqR; dkim=pass header.i=@codeaurora.org header.s=default header.b=UzzzMlPc; 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 S932265AbeENNMm (ORCPT + 99 others); Mon, 14 May 2018 09:12:42 -0400 Received: from smtp.codeaurora.org ([198.145.29.96]:44562 "EHLO smtp.codeaurora.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932241AbeENNMj (ORCPT ); Mon, 14 May 2018 09:12:39 -0400 Received: by smtp.codeaurora.org (Postfix, from userid 1000) id 8E11460B23; Mon, 14 May 2018 13:12:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1526303558; bh=qxnvIgZec1BobCrsvY94G2d6QsCu6/tS7OuwxOh7pEo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=oHm4iPqRyQ5xmPWOzlsDnQiFxc5G5EfnXTCmzx8LVywAqMQ3KoQp7pD+vZabpXMY6 sgjMshXPUt0Z+YO0PM4CPSl6zOsWHtzN2VqKpMG54Gk/jWPMG0vYF7epz8NpzKY61H 3rqeV7m9jOFynHdC+LwSD+lWtl1dyUDStE2At8dY= 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 8212B60AF9; Mon, 14 May 2018 13:12:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1526303556; bh=qxnvIgZec1BobCrsvY94G2d6QsCu6/tS7OuwxOh7pEo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=UzzzMlPcNbOapn7C4Zy/8BFao8d6rqvvoOEWd+EValR728PYhFo6xpf01F844lRg/ LITxBYZwdGU1tWRxo/wyElqDkg4Y2AGYotjmPV0kkeevUYucyR6yyEcTfn5Gw47qtu MtDJUSU2nTC0n+D4s++TjzEj2o0wpNGfuS++sq1I= DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org 8212B60AF9 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 v6 05/14] clk: qcom: cpu-8996: Add support to switch to alternate PLL Date: Mon, 14 May 2018 16:11:51 +0300 Message-Id: <1526303520-5843-6-git-send-email-ilialin@codeaurora.org> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1526303520-5843-1-git-send-email-ilialin@codeaurora.org> References: <1526303520-5843-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