From nobody Tue Sep 29 02:02:42 2026 Received: from mail-pg1-f179.google.com (mail-pg1-f179.google.com [209.85.215.179]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 84015486E71 for ; Thu, 13 Aug 2026 15:31:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.179 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786635081; cv=none; b=ZBqzwTmca/1DNsxBMFfZRJsRv9gdMjwF4APCoZEzWga2UeZ2Av0Z4akq7yfloTef8kjKpZFBJoAJPRm4KGRlQXhSYQTuKRcMrGdGqYjiNPFrQjRgO/VdmvA9W1h0uO/QbjgpNAxkBmE0+2ANkiquRQu3+0FFrxvQrib1mqr8ysc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786635081; c=relaxed/simple; bh=VmWbf+toWEJsE06Na14vN8Hlg4tQaRf9yR83ocbu2no=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=IVsXR9M6OMbHTtFxor2heSZdfP8BVya92I2c66bob5I60yc036XUyX4s3tANn0VxbyUghMOMpb2psDbkuTi5TxkBuX6BMeTsCJsb09h/jcW2xxUQv3BHqXMrEyow6EEWfR1ohydPmt7w697travqJx0i50fr/SUzo4wnIffc/rk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=nqny1AKp; arc=none smtp.client-ip=209.85.215.179 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="nqny1AKp" Received: by mail-pg1-f179.google.com with SMTP id 41be03b00d2f7-ca7bea5e5b3so758874a12.1 for ; Thu, 13 Aug 2026 08:31:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786635080; x=1787239880; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to:content-type; bh=lm7VmGRk9PxJZxv0GuzFpDT3tfIPdeIoyGQVz1zDLXY=; b=nqny1AKp68Z1Qh+LF+5w6SAVev1+3eQjuRtszCvDJomC0eJXdQ+jNQ0rlzqtwOsQ4K aDR5D0ryXYGWKAxIMIJZD3zLMkt5LKAaqgydfo0J82rVAaVpYMnQ/yJjVb2HuwqgpPRE hdnfGOcpMl4t3OtwYKsLAllFKHUQcmk6qeNV0j33SAlAXBGs2iUdXRJBLUJjJi/jGKYR xcyUluomDUgNNP8AIJmm2aJsfvYk/t2Y4+GSuJOoM+nZuHLs/UK6JXhlziyBfNi4wCWT FbOttW0NgJCfn7wuHpKv0ZpWtg4ecLtQzHCbHapxMT24P0aXMExy4Yv6bDMknt0xp3fI +Fdw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786635080; x=1787239880; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=lm7VmGRk9PxJZxv0GuzFpDT3tfIPdeIoyGQVz1zDLXY=; b=q0Pwa0jhg9S5iiCCq4ctwK51Nb4zksNfG2YtsYkKovvgy9Unws6coRwimgIdj29Jdv Ij4nUDor+wGSuSn0Mwb/mGvvPpwBP7wOK36RHDMuRKIT2MVqLPZVco0KRlB5YH5kjSl9 CDYKU2qGKvZeoR69GJOf7jrB33zzBg4dc5hEQKf//RlmN/HiC/NNLGvQxrTy+1mNgx4S AC7batBmMePVD4quknkVjGyNkHCaYCMfNqu6gpTDHfs1vR3K/5UpJjQSz7Q9QgVUKJEh VO+y/ToNt0HESPi22an4Ztf/MRXuWLjWkxV9bUF4ldyQAhlXGsC/xmGvL0xJ93mbHBZ9 JvSw== X-Forwarded-Encrypted: i=1; AHgh+RrsvQN5YysWKev+9o5GFYqXacEo29IMU4oZ6nk3Ql+GFh9DVYBE22KO2+O6CsNFk0X3sRrn4oOom84M880=@vger.kernel.org X-Gm-Message-State: AOJu0YxWvpfDhaai3I9aC9WAjh7Q1TNUBVZSJpWZcYzzGQQwOx5Pqhtt xNCBXZNyaGzo4UaPfWpFr3b624sg6CAoqRED8D6sjxcnOS2kEE++kTXi/PD+LWgREyk= X-Gm-Gg: AR+sD11dCZJeaBeblDVTNq7nMmnffTbl6g1D7Dr2o13yV5GBcwRH5+iaRtKGG5XetJx ItFVaBWgLIh0RXz1hUkWCG+shKDIrDBKzkjguTlj68KiHn2/YDfVPleLwa27raKuQdHyZMLrFFF ENqvCQp1wJSP3hc48X2R0xvihskt01P4V6roOmssSPpAPz+mO+8ZYmCi38ZVWzUz+/zBF8N42mC QrxEAzctFekBg9P6KjhAnaf5bJYBNjwT4oE81Fpo2mnNd0sLMcch3uKv9NRLFeGqGlrkP+vqckV sfV7476Sy/wqK24zDdxipQoKdWSqOkx5XdpOgE4ayPk5fScDZLy8nP+FDzGXzEpIE5YGALDPb1j 3/YV95t4f1hjSIfFSOWRoW6VLsW17moDEQz3/zyMBsJAkuRcp38p6lg4I7Jab7pGyqGENyn210M baabfgKDwAIY8Zsj52nIbBNNHc3B5WLRGPohUeq1jDsWprD9WbKPelhTrCycu2w4ECc9jShlllV opM4Xw= X-Received: by 2002:a05:6a20:9143:b0:3c4:3321:5009 with SMTP id adf61e73a8af0-3cc55305f99mr7932500637.29.1786635079708; Thu, 13 Aug 2026 08:31:19 -0700 (PDT) Received: from haichao.tail057a43.ts.net ([2001:da8:e000:1206:3b7:6da1:c188:d14f]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-cbef71081b5sm1234318a12.21.2026.08.13.08.31.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 13 Aug 2026 08:31:19 -0700 (PDT) From: Ruoyu Wang To: linux-clk@vger.kernel.org Cc: mturquette@baylibre.com, sboyd@kernel.org, bmasney@redhat.com, matthias.bgg@gmail.com, angelogioacchino.delregno@collabora.com, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, linux-kernel@vger.kernel.org, Ruoyu Wang Subject: [PATCH] clk: mediatek: mt7629: Properly use CLK_IS_CRITICAL flag Date: Thu, 13 Aug 2026 23:31:13 +0800 Message-ID: <20260813153113.3952621-1-ruoyuw560@gmail.com> X-Mailer: git-send-email 2.51.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The MT7629 clock driver calls clk_prepare_enable() for six clocks that must remain running. These calls create permanent references owned by the driver. In topckgen and apmixedsys, provider registration can fail after the references are acquired, leaving them unreleased. Mark ARMPLL, main_core_en, the AXI, memory and DDRPHY selectors, and the UART0 gate with CLK_IS_CRITICAL, and remove the manual enable calls. The common clock framework then keeps these clocks enabled without driver-owned references. This preserves their always-on behavior and avoids leaking references when provider registration fails. This issue was found by a static analysis checker and confirmed by manual source review. Fixes: 3b5e748615e7 ("clk: mediatek: add clock support for MT7629 SoC") Signed-off-by: Ruoyu Wang --- drivers/clk/mediatek/clk-mt7629.c | 36 ++++++++++++++----------------- 1 file changed, 16 insertions(+), 20 deletions(-) diff --git a/drivers/clk/mediatek/clk-mt7629.c b/drivers/clk/mediatek/clk-m= t7629.c index e154771b1b8bba..627e8017fa642f 100644 --- a/drivers/clk/mediatek/clk-mt7629.c +++ b/drivers/clk/mediatek/clk-mt7629.c @@ -48,8 +48,9 @@ _pd_reg, _pd_shift, _tuner_reg, _pcw_reg, _pcw_shift, \ NULL, "clk20m") =20 -#define GATE_APMIXED(_id, _name, _parent, _shift) \ - GATE_MTK(_id, _name, _parent, &apmixed_cg_regs, _shift, &mtk_clk_gate_ops= _no_setclr_inv) +#define GATE_APMIXED_AO(_id, _name, _parent, _shift) \ + GATE_MTK_FLAGS(_id, _name, _parent, &apmixed_cg_regs, _shift, \ + &mtk_clk_gate_ops_no_setclr_inv, CLK_IS_CRITICAL) =20 #define GATE_INFRA(_id, _name, _parent, _shift) \ GATE_MTK(_id, _name, _parent, &infra_cg_regs, _shift, &mtk_clk_gate_ops_s= etclr) @@ -57,6 +58,10 @@ #define GATE_PERI0(_id, _name, _parent, _shift) \ GATE_MTK(_id, _name, _parent, &peri0_cg_regs, _shift, &mtk_clk_gate_ops_s= etclr) =20 +#define GATE_PERI0_AO(_id, _name, _parent, _shift) \ + GATE_MTK_FLAGS(_id, _name, _parent, &peri0_cg_regs, _shift, \ + &mtk_clk_gate_ops_setclr, CLK_IS_CRITICAL) + #define GATE_PERI1(_id, _name, _parent, _shift) \ GATE_MTK(_id, _name, _parent, &peri1_cg_regs, _shift, &mtk_clk_gate_ops_s= etclr) =20 @@ -311,7 +316,7 @@ static const struct mtk_gate_regs peri1_cg_regs =3D { =20 static const struct mtk_pll_data plls[] =3D { PLL(CLK_APMIXED_ARMPLL, "armpll", 0x0200, 0x020C, 0, - 0, 21, 0x0204, 24, 0, 0x0204, 0), + PLL_AO, 21, 0x0204, 24, 0, 0x0204, 0), PLL(CLK_APMIXED_MAINPLL, "mainpll", 0x0210, 0x021C, 0, HAVE_RST_BAR, 21, 0x0214, 24, 0, 0x0214, 0), PLL(CLK_APMIXED_UNIV2PLL, "univ2pll", 0x0220, 0x022C, 0, @@ -325,7 +330,7 @@ static const struct mtk_pll_data plls[] =3D { }; =20 static const struct mtk_gate apmixed_clks[] =3D { - GATE_APMIXED(CLK_APMIXED_MAIN_CORE_EN, "main_core_en", "mainpll", 5), + GATE_APMIXED_AO(CLK_APMIXED_MAIN_CORE_EN, "main_core_en", "mainpll", 5), }; =20 static const struct mtk_gate infra_clks[] =3D { @@ -437,7 +442,7 @@ static const struct mtk_gate peri_clks[] =3D { GATE_PERI0(CLK_PERI_PWM_PD, "peri_pwm_pd", "pwm_qtr_26m", 9), GATE_PERI0(CLK_PERI_AP_DMA_PD, "peri_ap_dma_pd", "faxi", 12), GATE_PERI0(CLK_PERI_MSDC30_1_PD, "peri_msdc30_1", "msdc30_1", 14), - GATE_PERI0(CLK_PERI_UART0_PD, "peri_uart0_pd", "faxi", 17), + GATE_PERI0_AO(CLK_PERI_UART0_PD, "peri_uart0_pd", "faxi", 17), GATE_PERI0(CLK_PERI_UART1_PD, "peri_uart1_pd", "faxi", 18), GATE_PERI0(CLK_PERI_UART2_PD, "peri_uart2_pd", "faxi", 19), GATE_PERI0(CLK_PERI_UART3_PD, "peri_uart3_pd", "faxi", 20), @@ -459,12 +464,12 @@ static struct mtk_composite infra_muxes[] =3D { =20 static struct mtk_composite top_muxes[] =3D { /* CLK_CFG_0 */ - MUX_GATE(CLK_TOP_AXI_SEL, "axi_sel", axi_parents, - 0x040, 0, 3, 7), - MUX_GATE(CLK_TOP_MEM_SEL, "mem_sel", mem_parents, - 0x040, 8, 1, 15), - MUX_GATE(CLK_TOP_DDRPHYCFG_SEL, "ddrphycfg_sel", ddrphycfg_parents, - 0x040, 16, 1, 23), + MUX_GATE_FLAGS(CLK_TOP_AXI_SEL, "axi_sel", axi_parents, + 0x040, 0, 3, 7, CLK_IS_CRITICAL), + MUX_GATE_FLAGS(CLK_TOP_MEM_SEL, "mem_sel", mem_parents, + 0x040, 8, 1, 15, CLK_IS_CRITICAL), + MUX_GATE_FLAGS(CLK_TOP_DDRPHYCFG_SEL, "ddrphycfg_sel", ddrphycfg_parents, + 0x040, 16, 1, 23, CLK_IS_CRITICAL), MUX_GATE(CLK_TOP_ETH_SEL, "eth_sel", eth_parents, 0x040, 24, 3, 31), /* CLK_CFG_1 */ @@ -568,10 +573,6 @@ static int mtk_topckgen_init(struct platform_device *p= dev) ARRAY_SIZE(top_muxes), base, &mt7629_clk_lock, clk_data); =20 - clk_prepare_enable(clk_data->hws[CLK_TOP_AXI_SEL]->clk); - clk_prepare_enable(clk_data->hws[CLK_TOP_MEM_SEL]->clk); - clk_prepare_enable(clk_data->hws[CLK_TOP_DDRPHYCFG_SEL]->clk); - return of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data); } =20 @@ -620,8 +621,6 @@ static int mtk_pericfg_init(struct platform_device *pde= v) if (r) return r; =20 - clk_prepare_enable(clk_data->hws[CLK_PERI_UART0_PD]->clk); - return 0; } =20 @@ -640,9 +639,6 @@ static int mtk_apmixedsys_init(struct platform_device *= pdev) mtk_clk_register_gates(&pdev->dev, node, apmixed_clks, ARRAY_SIZE(apmixed_clks), clk_data); =20 - clk_prepare_enable(clk_data->hws[CLK_APMIXED_ARMPLL]->clk); - clk_prepare_enable(clk_data->hws[CLK_APMIXED_MAIN_CORE_EN]->clk); - return of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data); } =20 --=20 2.51.0