From mboxrd@z Thu Jan 1 00:00:00 1970 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 bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (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 4EF57C5B543 for ; Sun, 8 Jun 2025 00:25:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:References: Message-ID:Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=8glWNBaWuTtLIZ3KG4IYCs6nDp9zooORGtqoYdOouSY=; b=DjLPNuxG5Aaipg Zbum3AgJBnW0sB3r5mkJe04wxLF+2iProINEjOsAwo5TLLPt5ddKG4VQPoXkfu2zNmN/2blko7O+R msYZ3CzPOHsrL2UDkTrm9CUS+pMYgpxuzyas+dWF+pQ5hyrH41EuPh5T2NB4XYG5F68X8xMC3piIC nVZNlpmLHSnJMgSVwA1HAtMFkTe1lrjWqC8TPF7+/Gf+Xw2G0LI7ojCLnP43yuQ4kJxtfglHxQdZW nvLtonKVMdO8tNcvo0tDXLOeFEWkIYrLI7lofyR+9FBQswKIPEqDBvDZZqjitfgPWs0PV/l3vpoTQ /vy4fUKCoOuak1p8dUWQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1uO3qY-00000002ERt-0rsH; Sun, 08 Jun 2025 00:25:10 +0000 Received: from smtp.gentoo.org ([2001:470:ea4a:1:5054:ff:fec7:86e4]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1uO3qV-00000002ERX-2EMk for linux-riscv@lists.infradead.org; Sun, 08 Jun 2025 00:25:08 +0000 Received: from localhost (unknown [116.232.147.71]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (prime256v1) server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: dlan) by smtp.gentoo.org (Postfix) with ESMTPSA id 8F8BA335D15; Sun, 08 Jun 2025 00:25:04 +0000 (UTC) Date: Sun, 8 Jun 2025 00:24:53 +0000 From: Yixun Lan To: Alex Elder Cc: mturquette@baylibre.com, sboyd@kernel.org, heylenay@4d2.org, inochiama@outlook.com, linux-clk@vger.kernel.org, spacemit@lists.linux.dev, linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, Guodong Xu Subject: Re: [PATCH] clk: spacemit: mark K1 pll1_d8 as critical Message-ID: <20250608002453-GYA108101@gentoo> References: <20250607202759.4180579-1-elder@riscstar.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20250607202759.4180579-1-elder@riscstar.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250607_172507_609066_6AA54D1A X-CRM114-Status: GOOD ( 22.83 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org Hi Alex, On 15:27 Sat 07 Jun , Alex Elder wrote: > The pll1_d8 clock is enabled by the boot loader, and is ultimately a > parent for numerous clocks. Guodong Xu was recently testing DMA, ~~~~~~~~~this is still vague, numerous isn't equal to critical > adding a reset property, and discovered that the needed reset was > not yet ready during initial probe. It dropped its clock reference, > which dropped parent references, and along the way it dropped the sole > reference to pll1_d8 (from its prior clk_get()). Clock pll1_d8 got > disabled, which resulted in a non-functioning system. > So, I'm trying to understand the problem, and would like to evaluate if the "critical" flag is necessary.. It occurs to me, the DMA driver should request and enable clock first, then request and issue a reset, it probably could be solved by proper order? so what's the real problem here? is DMA or reset? dropped the clock? or does driver fail to request a reset before clock is ready? > Mark that clock critical so it doesn't get turned off in this case. > We might be able to turn this flag off someday, but for now it > resolves the problem Guodong encountered. > > Define a new macro CCU_FACTOR_GATE_DEFINE() to allow clock flags to > be supplied for a CCU_FACTOR_GATE clock. > > Fixes: 1b72c59db0add ("clk: spacemit: Add clock support for SpacemiT K1 SoC") > Signed-off-by: Alex Elder > Tested-by: Guodong Xu > --- > drivers/clk/spacemit/ccu-k1.c | 3 ++- > drivers/clk/spacemit/ccu_mix.h | 21 +++++++++++++-------- > 2 files changed, 15 insertions(+), 9 deletions(-) > > diff --git a/drivers/clk/spacemit/ccu-k1.c b/drivers/clk/spacemit/ccu-k1.c > index cdde37a052353..df65009a07bb1 100644 > --- a/drivers/clk/spacemit/ccu-k1.c > +++ b/drivers/clk/spacemit/ccu-k1.c > @@ -170,7 +170,8 @@ CCU_FACTOR_GATE_DEFINE(pll1_d4, CCU_PARENT_HW(pll1), APBS_PLL1_SWCR2, BIT(3), 4, > CCU_FACTOR_GATE_DEFINE(pll1_d5, CCU_PARENT_HW(pll1), APBS_PLL1_SWCR2, BIT(4), 5, 1); > CCU_FACTOR_GATE_DEFINE(pll1_d6, CCU_PARENT_HW(pll1), APBS_PLL1_SWCR2, BIT(5), 6, 1); > CCU_FACTOR_GATE_DEFINE(pll1_d7, CCU_PARENT_HW(pll1), APBS_PLL1_SWCR2, BIT(6), 7, 1); > -CCU_FACTOR_GATE_DEFINE(pll1_d8, CCU_PARENT_HW(pll1), APBS_PLL1_SWCR2, BIT(7), 8, 1); > +CCU_FACTOR_GATE_FLAGS_DEFINE(pll1_d8, CCU_PARENT_HW(pll1), APBS_PLL1_SWCR2, BIT(7), 8, 1, > + CLK_IS_CRITICAL); > CCU_FACTOR_GATE_DEFINE(pll1_d11_223p4, CCU_PARENT_HW(pll1), APBS_PLL1_SWCR2, BIT(15), 11, 1); > CCU_FACTOR_GATE_DEFINE(pll1_d13_189, CCU_PARENT_HW(pll1), APBS_PLL1_SWCR2, BIT(16), 13, 1); > CCU_FACTOR_GATE_DEFINE(pll1_d23_106p8, CCU_PARENT_HW(pll1), APBS_PLL1_SWCR2, BIT(20), 23, 1); > diff --git a/drivers/clk/spacemit/ccu_mix.h b/drivers/clk/spacemit/ccu_mix.h > index 51d19f5d6aacb..668c8139339e1 100644 > --- a/drivers/clk/spacemit/ccu_mix.h > +++ b/drivers/clk/spacemit/ccu_mix.h > @@ -101,16 +101,21 @@ static struct ccu_mix _name = { \ > } \ > } > > +#define CCU_FACTOR_GATE_FLAGS_DEFINE(_name, _parent, _reg_ctrl, _mask_gate, _div, \ > + _mul, _flags) \ > +struct ccu_mix _name = { \ > + .gate = CCU_GATE_INIT(_mask_gate), \ > + .factor = CCU_FACTOR_INIT(_div, _mul), \ > + .common = { \ > + .reg_ctrl = _reg_ctrl, \ > + CCU_MIX_INITHW(_name, _parent, spacemit_ccu_factor_gate_ops, _flags) \ > + } \ > +} > + > #define CCU_FACTOR_GATE_DEFINE(_name, _parent, _reg_ctrl, _mask_gate, _div, \ > _mul) \ > -static struct ccu_mix _name = { \ > - .gate = CCU_GATE_INIT(_mask_gate), \ > - .factor = CCU_FACTOR_INIT(_div, _mul), \ > - .common = { \ > - .reg_ctrl = _reg_ctrl, \ > - CCU_MIX_INITHW(_name, _parent, spacemit_ccu_factor_gate_ops, 0) \ > - } \ > -} > + CCU_FACTOR_GATE_FLAGS_DEFINE(_name, _parent, _reg_ctrl, _mask_gate, _div, \ > + _mul, 0) > > #define CCU_MUX_GATE_DEFINE(_name, _parents, _reg_ctrl, _shift, _width, \ > _mask_gate, _flags) \ > -- > 2.45.2 > -- Yixun Lan (dlan) _______________________________________________ linux-riscv mailing list linux-riscv@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-riscv