Received: by 2002:ac0:a594:0:0:0:0:0 with SMTP id m20-v6csp3150632imm; Thu, 17 May 2018 04:20:38 -0700 (PDT) X-Google-Smtp-Source: AB8JxZrO4wL8y+95UMyCqcdczpPsvBzMpe3Kh7a+R5lKe8C4Df+UxR3eb6uNHs0RFm+DaRjKC8W+ X-Received: by 2002:a17:902:bc4a:: with SMTP id t10-v6mr4797113plz.343.1526556038119; Thu, 17 May 2018 04:20:38 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1526556038; cv=none; d=google.com; s=arc-20160816; b=CZyU07jKVd071Z5nMGCfIBFTVpD8q9xkNinx0l/bMuT+9YUYR5Hqlq9W43ZyUnMNvg tBrfLT4sPwsEr4msoiOSkfzw9Kglj5HufQFQVYrPfJay+TRcrSn6XnxPnzveo5Y51+ur qUByB/SnxGlwbR3zQlV3T9tF3dHPs7SpaHjKlrYGJYcDxI48xHFYDXLw3dFrQBVQodiU wiK8hMOy5hHaegsp0WteoxrBH3mmn8DCjbeozkpMdG/4pTyJtJ3nVdx6iVveYjrpCCly CeTtEiKQ2Oq8B2gq+KugyLG9UI6xRMETgGtYgVuGJLE8TtUEU2uK29VzAk0T09bgFo3M iFFg== 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=At9ikht2CWambXFr4yhVQ+E7zhijIcRdqfMXTr8j7+I=; b=eb5X45DNcT8PNUmN1heZakdLNaidKIvQ7dRhVdNq6kEvCXeDOanYi2wSvwX6s3bjGZ JVM4NueljIQDnOaBl/694c5CAFThrV15/CoP/lIjbD/35a63FCIEIBcdWQ78uUYN5AZ+ P/fkA5/SLG7HKpriFdBPo88ZmG90Bz+c9uYCypF4zNrxaME0iDgM2gf9WF8oTgHjpZo7 mgGnKKYcbplyxw5TNcaoGT3lPK0rTj7nfLYvsG0/rWChLd8kBPu4JbxmS+71fQy4p6y2 QX43iDvJTrNlV9Qf6RWZBkcLw+KmGo2svo1QCrojgKGaduGB8OPptq+wOaewTpmxzkR9 FEIQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@codeaurora.org header.s=default header.b=jSY61BDS; dkim=pass header.i=@codeaurora.org header.s=default header.b=jwz6gAc0; 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 d6-v6si3788048pgc.140.2018.05.17.04.20.23; Thu, 17 May 2018 04:20:38 -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=jSY61BDS; dkim=pass header.i=@codeaurora.org header.s=default header.b=jwz6gAc0; 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 S1752224AbeEQLUE (ORCPT + 99 others); Thu, 17 May 2018 07:20:04 -0400 Received: from smtp.codeaurora.org ([198.145.29.96]:36038 "EHLO smtp.codeaurora.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751879AbeEQLUA (ORCPT ); Thu, 17 May 2018 07:20:00 -0400 Received: by smtp.codeaurora.org (Postfix, from userid 1000) id 2122760F92; Thu, 17 May 2018 11:19:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1526556000; bh=/r1w+Yc0St1u/INnDlvOev0yNepaMGc+87aSg5DVMDo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=jSY61BDSJBa7iID90OOLp/H8kRcIdHh4GZOg2Cu7zkwhc3k4rEktinWraBeJk+y8Z 4ibPuOSRXiP56CHbJe7nkgd1K+l76QrIg0IGLX9ph0OULwq0maQdrhuHW6Vnjr31j0 7UI3LOPR60al+Qo1093QlCtQJHa1yG9nOpzn6Zt8= 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 1D3AC60F6D; Thu, 17 May 2018 11:19:52 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1526555998; bh=/r1w+Yc0St1u/INnDlvOev0yNepaMGc+87aSg5DVMDo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=jwz6gAc0BBx82Px8UFCTDqUnSl2G94swiVMpxOc6zR65m7W54kppPZIWjw5kW7DOP 0c58qzipA1orNajprE0IizacIYptwYtAvT+80BhVlhfbKfRvVWQGecWnH+8aWSumDm wzSd5r9yy28r0L6dFZnXOh+fYAmIpSoz9dNRAT5U= DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org 1D3AC60F6D 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 v8 06/15] clk: qcom: cpu-8996: Add support to switch to alternate PLL Date: Thu, 17 May 2018 14:19:06 +0300 Message-Id: <1526555955-29960-7-git-send-email-ilialin@codeaurora.org> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1526555955-29960-1-git-send-email-ilialin@codeaurora.org> References: <1526555955-29960-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 d92cad93..620fdc2 100644 --- a/drivers/clk/qcom/clk-cpu-8996.c +++ b/drivers/clk/qcom/clk-cpu-8996.c @@ -52,6 +52,7 @@ * detect voltage droops. */ +#include #include #include #include @@ -178,10 +179,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) { @@ -227,6 +232,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, @@ -270,6 +295,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 *[]){ @@ -289,6 +315,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 *[]){ @@ -347,6 +374,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