From patchwork Fri Nov 4 13:17:27 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maxime Ripard X-Patchwork-Id: 13032905 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from alsa0.perex.cz (alsa0.perex.cz [77.48.224.243]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 4631AC433FE for ; Sat, 5 Nov 2022 07:07:39 +0000 (UTC) Received: from alsa1.perex.cz (alsa1.perex.cz [207.180.221.201]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by alsa0.perex.cz (Postfix) with ESMTPS id 74BF01675; Sat, 5 Nov 2022 08:06:47 +0100 (CET) DKIM-Filter: OpenDKIM Filter v2.11.0 alsa0.perex.cz 74BF01675 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=alsa-project.org; s=default; t=1667632057; bh=6IusAj9w3/tB8c67BjbXsxFLlirYjqevo85MFxaRu+Q=; h=From:Date:Subject:References:In-Reply-To:To:Cc:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From; b=szB5HnJNHK6SU5W09DfgV0mKs9DzeLycPVsaikkZslKkDaDtbr10zrMk1JaiknIm4 DhRV9/guOik5M/c4oZ5dOrw/X4jS2sNJeKcSMIueaoPaHcpaDCtz/2oPuTPnxLlD5I 3feeST+tMVZXtHqyzIdPE0UmSIfQk7m3RUyegf4Q= Received: from alsa1.perex.cz (localhost.localdomain [127.0.0.1]) by alsa1.perex.cz (Postfix) with ESMTP id BA5CBF805B2; Sat, 5 Nov 2022 08:03:43 +0100 (CET) Received: by alsa1.perex.cz (Postfix, from userid 50401) id A52B1F80448; Fri, 4 Nov 2022 14:18:16 +0100 (CET) Received: from new1-smtp.messagingengine.com (new1-smtp.messagingengine.com [66.111.4.221]) (using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by alsa1.perex.cz (Postfix) with ESMTPS id 2D612F8047D for ; Fri, 4 Nov 2022 14:18:10 +0100 (CET) DKIM-Filter: OpenDKIM Filter v2.11.0 alsa1.perex.cz 2D612F8047D Authentication-Results: alsa1.perex.cz; dkim=pass (2048-bit key) header.d=cerno.tech header.i=@cerno.tech header.b="gexMH46J"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="AbiPP7Hx" Received: from compute3.internal (compute3.nyi.internal [10.202.2.43]) by mailnew.nyi.internal (Postfix) with ESMTP id 5FD305804B2; Fri, 4 Nov 2022 09:18:09 -0400 (EDT) Received: from mailfrontend1 ([10.202.2.162]) by compute3.internal (MEProxy); Fri, 04 Nov 2022 09:18:09 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cerno.tech; h=cc :cc:content-transfer-encoding:content-type:date:date:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:sender:subject:subject:to:to; s=fm3; t=1667567889; x= 1667575089; bh=HSdFwQ3aW19zofmGUIyzD52AzOA8mMIUukqySVU5Fxw=; b=g exMH46JBY4nrfTxtsAVPMinzBNkX+8+g6BdrM/jCohcU7TfjvqLP0pv8xrPVI573 L32KLdvZgWspf84qIDSefyC55ognb8gtlpa4gyenbzihCDx9B+aeBh75uAKsuPc/ OMePI4Ukr7zyZf8TAWbbpTjlf1tGfjlMB5KhJq2OWRwSrsvReua9KUhfdINkY1HI 5+00U+dfoHwTRfbfqfqRWy+6Y2D5LQc3aw1yaF3AXQuMQMTXHPG90kHp+DvsjSbL 3f51o4E9huiwauUyMwg7M9+PCvOrGMJfpm+q7BjlKokD5jSnl0kEapRyCSSE36OC WUzsSr9BxIAmcSlZUqCnQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:date:date:feedback-id:feedback-id:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:sender:subject:subject:to:to:x-me-proxy:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm3; t=1667567889; x= 1667575089; bh=HSdFwQ3aW19zofmGUIyzD52AzOA8mMIUukqySVU5Fxw=; b=A biPP7HxWRM2nrGMfQZiT/vH7QrSVae2oXaq6/ibwrHHKDCL8eWdvnqH6TDSIqHgs Go01KRYa0XITm7jMTwJMfXDd/WrKe89YEtVhP4yR1OT2LIdtwWt8QaWfNHqzJBoY jSBDzq9m03pjrd/48dAPSa0BBuBEEPs1gZdyU+4mhnixFcoDGW7wSj5K9nklAuFv xM/kbaGWkC+f74B/lfSyGa9GU4qTj/iEIksYt1WPLs9pXrqNh4LV+6VyazMtGFS5 6qE3P4anbi0F2a9f7Ezp2HsTB1zsC/BAfWFhjNeONJz3wnYcsyyz5WZVeJkD5S8u kfLnT33QBGCbvRnT1HgWA== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvgedrvddugdegkecutefuodetggdotefrodftvf curfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfghnecu uegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenuc fjughrpefhfffugggtgffkfhgjvfevofesthekredtredtjeenucfhrhhomhepofgrgihi mhgvucftihhprghrugcuoehmrgigihhmvgestggvrhhnohdrthgvtghhqeenucggtffrrg htthgvrhhnpeduudduhfevjeetfeegvdffvdevvdejudegudekjeehtdelhfffveethfej ledtveenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepmhgrihhlfhhrohhmpe hmrgigihhmvgestggvrhhnohdrthgvtghh X-ME-Proxy: Feedback-ID: i8771445c:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Fri, 4 Nov 2022 09:18:08 -0400 (EDT) From: Maxime Ripard Date: Fri, 04 Nov 2022 14:17:27 +0100 Subject: [PATCH v2 10/65] clk: k210: pll: Add a determine_rate hook MIME-Version: 1.0 Message-Id: <20221018-clk-range-checks-fixes-v2-10-f6736dec138e@cerno.tech> References: <20221018-clk-range-checks-fixes-v2-0-f6736dec138e@cerno.tech> In-Reply-To: <20221018-clk-range-checks-fixes-v2-0-f6736dec138e@cerno.tech> To: =?unknown-8bit?q?Stephen_Boyd_=3Csboyd=40kernel=2Eorg=3E=2C?= =?unknown-8bit?q?_Maxime_Coquelin_=3Cmcoquelin=2Estm32=40gmail=2Ecom=3E=2C?= =?unknown-8bit?q?_Chen-Yu_Tsai_=3Cwens=40csie=2Eorg=3E=2C_Daniel_Vetter_=3Cd?= =?unknown-8bit?q?aniel=40ffwll=2Ech=3E=2C?= =?unknown-8bit?q?_Nicolas_Ferre_=3Cnicolas=2Eferre=40microchip=2Ecom=3E=2C?= =?unknown-8bit?q?_Thierry_Reding_=3Cthierry=2Ereding=40gmail=2Ecom=3E=2C?= =?unknown-8bit?q?_Jaroslav_Kysela_=3Cperex=40perex=2Ecz=3E=2C_Shawn_Guo_=3Cs?= =?unknown-8bit?q?hawnguo=40kernel=2Eorg=3E=2C?= =?unknown-8bit?q?_Fabio_Estevam_=3Cfestevam=40gmail=2Ecom=3E=2C_Ulf_Hansson_?= =?unknown-8bit?q?=3Culf=2Ehansson=40linaro=2Eorg=3E=2C?= =?unknown-8bit?q?_Claudiu_Beznea_=3Cclaudiu=2Ebeznea=40microchip=2Ecom=3E=2C?= =?unknown-8bit?q?_Michael_Turquette_=3Cmturquette=40baylibre=2Ecom=3E=2C?= =?unknown-8bit?q?_Dinh_Nguyen_=3Cdinguyen=40kernel=2Eorg=3E=2C_Paul_Cercueil?= =?unknown-8bit?q?_=3Cpaul=40crapouillou=2Enet=3E=2C?= =?unknown-8bit?q?_Chunyan_Zhang_=3Czhang=2Elyra=40gmail=2Ecom=3E=2C?= =?unknown-8bit?q?_Manivannan_Sadhasivam_=3Cmani=40kernel=2Eorg=3E=2C?= =?unknown-8bit?b?IEFuZHJlYXMgRsOkcmJlciA8YWZhZXJiZXJAc3VzZS5kZT4s?= =?unknown-8bit?q?_Jonathan_Hunter_=3Cjonathanh=40nvidia=2Ecom=3E=2C_Abel_Ves?= =?unknown-8bit?q?a_=3Cabelvesa=40kernel=2Eorg=3E=2C?= =?unknown-8bit?q?_Charles_Keepax_=3Cckeepax=40opensource=2Ecirrus=2Ecom=3E?= =?unknown-8bit?q?=2C?= =?unknown-8bit?q?_Alessandro_Zummo_=3Ca=2Ezummo=40towertech=2Eit=3E=2C?= =?unknown-8bit?q?_Peter_De_Schrijver_=3Cpdeschrijver=40nvidia=2Ecom=3E=2C?= =?unknown-8bit?q?_Orson_Zhai_=3Corsonzhai=40gmail=2Ecom=3E=2C?= =?unknown-8bit?q?_Alexandre_Torgue_=3Calexandre=2Etorgue=40foss=2Est=2Ecom?= =?unknown-8bit?q?=3E=2C?= =?unknown-8bit?q?_Prashant_Gaikwad_=3Cpgaikwad=40nvidia=2Ecom=3E=2C?= =?unknown-8bit?q?_Liam_Girdwood_=3Clgirdwood=40gmail=2Ecom=3E=2C?= =?unknown-8bit?q?_Alexandre_Belloni_=3Calexandre=2Ebelloni=40bootlin=2Ecom?= =?unknown-8bit?q?=3E=2C?= =?unknown-8bit?q?_Samuel_Holland_=3Csamuel=40sholland=2Eorg=3E=2C?= =?unknown-8bit?q?_Matthias_Brugger_=3Cmatthias=2Ebgg=40gmail=2Ecom=3E=2C?= =?unknown-8bit?q?_Richard_Fitzgerald_=3Crf=40opensource=2Ecirrus=2Ecom=3E=2C?= =?unknown-8bit?q?_Vinod_Koul_=3Cvkoul=40kernel=2Eorg=3E=2C_NXP_Linux_Team_?= =?unknown-8bit?q?=3Clinux-imx=40nxp=2Ecom=3E=2C?= =?unknown-8bit?q?_Sekhar_Nori_=3Cnsekhar=40ti=2Ecom=3E=2C_Kishon_Vijay_Abrah?= =?unknown-8bit?q?am_I_=3Ckishon=40kernel=2Eorg=3E=2C?= =?unknown-8bit?q?_Linus_Walleij_=3Clinus=2Ewalleij=40linaro=2Eorg=3E=2C_Taka?= =?unknown-8bit?q?shi_Iwai_=3Ctiwai=40suse=2Ecom=3E=2C?= =?unknown-8bit?q?_David_Airlie_=3Cairlied=40gmail=2Ecom=3E=2C?= =?unknown-8bit?q?_Luca_Ceresoli_=3Cluca=2Eceresoli=40bootlin=2Ecom=3E=2C?= =?unknown-8bit?q?_Jernej_Skrabec_=3Cjernej=2Eskrabec=40gmail=2Ecom=3E=2C?= =?unknown-8bit?q?_Pengutronix_Kernel_Team_=3Ckernel=40pengutronix=2Ede=3E=2C?= =?unknown-8bit?q?_Baolin_Wang_=3Cbaolin=2Ewang=40linux=2Ealibaba=2Ecom=3E=2C?= =?unknown-8bit?q?_David_Lechner_=3Cdavid=40lechnology=2Ecom=3E=2C?= =?unknown-8bit?q?_Sascha_Hauer_=3Cs=2Ehauer=40pengutronix=2Ede=3E=2C_Mark_Br?= =?unknown-8bit?q?own_=3Cbroonie=40kernel=2Eorg=3E=2C?= =?unknown-8bit?q?_Max_Filippov_=3Cjcmvbkbc=40gmail=2Ecom=3E=2C?= =?unknown-8bit?q?_Geert_Uytterhoeven_=3Cgeert+renesas=40glider=2Ebe=3E?= X-Mailer: b4 0.11.0-dev-99e3a X-Developer-Signature: v=1; a=openpgp-sha256; l=3687; i=maxime@cerno.tech; h=from:subject:message-id; bh=6IusAj9w3/tB8c67BjbXsxFLlirYjqevo85MFxaRu+Q=; b=owGbwMvMwCX2+D1vfrpE4FHG02pJDMmpAp9nzthWO/9t0mWP8nM3/zoJhbxUmy21Sfoov+JM69Pr Dvfqd5SyMIhxMciKKbLECJsviTs163UnG988mDmsTCBDGLg4BWAi07sYGVoy354y73h5YENih8nUsr g9MW+nWu4+9+yQcnpXSND8d0cYGf6tkbWT0VozTcysrrua6ZDO77JVH8/Or98hHfVx9uLcRcwA X-Developer-Key: i=maxime@cerno.tech; a=openpgp; fpr=BE5675C37E818C8B5764241C254BCFC56BF6CE8D X-Mailman-Approved-At: Sat, 05 Nov 2022 08:03:31 +0100 Cc: linux-rtc@vger.kernel.org, alsa-devel@alsa-project.org, linux-kernel@vger.kernel.org, patches@opensource.cirrus.com, linux-actions@lists.infradead.org, linux-mips@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-clk@vger.kernel.org, linux-renesas-soc@vger.kernel.org, linux-tegra@vger.kernel.org, linux-mediatek@lists.infradead.org, Maxime Ripard , linux-phy@lists.infradead.org, linux-sunxi@lists.linux.dev, linux-stm32@st-md-mailman.stormreply.com, linux-arm-kernel@lists.infradead.org, AngeloGioacchino Del Regno X-BeenThere: alsa-devel@alsa-project.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: "Alsa-devel mailing list for ALSA developers - http://www.alsa-project.org" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: alsa-devel-bounces@alsa-project.org Sender: "Alsa-devel" The K210 PLL clock implements a mux with a set_parent hook, but doesn't provide a determine_rate implementation. This is a bit odd, since set_parent() is there to, as its name implies, change the parent of a clock. However, the most likely candidate to trigger that parent change is a call to clk_set_rate(), with determine_rate() figuring out which parent is the best suited for a given rate. The other trigger would be a call to clk_set_parent(), but it's far less used, and it doesn't look like there's any obvious user for that clock. So, the set_parent hook is effectively unused, possibly because of an oversight. However, it could also be an explicit decision by the original author to avoid any reparenting but through an explicit call to clk_set_parent(). The latter case would be equivalent to setting the flag CLK_SET_RATE_NO_REPARENT, together with setting our determine_rate hook to __clk_mux_determine_rate(). Indeed, if no determine_rate implementation is provided, clk_round_rate() (through clk_core_round_rate_nolock()) will call itself on the parent if CLK_SET_RATE_PARENT is set, and will not change the clock rate otherwise. __clk_mux_determine_rate() has the exact same behavior when CLK_SET_RATE_NO_REPARENT is set. And if it was an oversight, then we are at least explicit about our behavior now and it can be further refined down the line. Signed-off-by: Maxime Ripard --- drivers/clk/clk-k210.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/drivers/clk/clk-k210.c b/drivers/clk/clk-k210.c index 67a7cb3503c3..279931a38127 100644 --- a/drivers/clk/clk-k210.c +++ b/drivers/clk/clk-k210.c @@ -537,6 +537,7 @@ static const struct clk_ops k210_pll2_ops = { .disable = k210_pll_disable, .is_enabled = k210_pll_is_enabled, .recalc_rate = k210_pll_get_rate, + .determine_rate = __clk_mux_determine_rate, .set_parent = k210_pll2_set_parent, .get_parent = k210_pll2_get_parent, }; @@ -544,7 +545,8 @@ static const struct clk_ops k210_pll2_ops = { static int __init k210_register_pll(struct device_node *np, struct k210_sysclk *ksc, enum k210_pll_id pllid, const char *name, - int num_parents, const struct clk_ops *ops) + int num_parents, const struct clk_ops *ops, + unsigned long flags) { struct k210_pll *pll = &ksc->plls[pllid]; struct clk_init_data init = {}; @@ -558,6 +560,7 @@ static int __init k210_register_pll(struct device_node *np, init.parent_data = parent_data; init.num_parents = num_parents; init.ops = ops; + init.flags = flags; pll->hw.init = &init; pll->ksc = ksc; @@ -574,19 +577,20 @@ static int __init k210_register_plls(struct device_node *np, k210_init_pll(ksc->regs, i, &ksc->plls[i]); /* PLL0 and PLL1 only have IN0 as parent */ - ret = k210_register_pll(np, ksc, K210_PLL0, "pll0", 1, &k210_pll_ops); + ret = k210_register_pll(np, ksc, K210_PLL0, "pll0", 1, &k210_pll_ops, 0); if (ret) { pr_err("%pOFP: register PLL0 failed\n", np); return ret; } - ret = k210_register_pll(np, ksc, K210_PLL1, "pll1", 1, &k210_pll_ops); + ret = k210_register_pll(np, ksc, K210_PLL1, "pll1", 1, &k210_pll_ops, 0); if (ret) { pr_err("%pOFP: register PLL1 failed\n", np); return ret; } /* PLL2 has IN0, PLL0 and PLL1 as parents */ - ret = k210_register_pll(np, ksc, K210_PLL2, "pll2", 3, &k210_pll2_ops); + ret = k210_register_pll(np, ksc, K210_PLL2, "pll2", 3, &k210_pll2_ops, + CLK_SET_RATE_NO_REPARENT); if (ret) { pr_err("%pOFP: register PLL2 failed\n", np); return ret;