Received: by 2002:a05:6a10:af89:0:0:0:0 with SMTP id iu9csp5463533pxb; Wed, 26 Jan 2022 12:35:19 -0800 (PST) X-Google-Smtp-Source: ABdhPJySlCE1YXfD6gahI0ssfkYGBiI6yDlgPVZlxyQEgkiGuX++nsULQUCDnnhLXu56m4ReywAn X-Received: by 2002:a05:6a00:21c9:: with SMTP id t9mr3727pfj.63.1643229319275; Wed, 26 Jan 2022 12:35:19 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1643229319; cv=none; d=google.com; s=arc-20160816; b=evhQmWv5emknHsZZq60hTwH1z3CWT8NDtag0NJf6HvgkpIwocuClUFrMFd52kEf4Mu M0ixzmR4O3XuNp3xXCj/2EBncnAzUOC2adoql0B81gQNyqTBtuOeOU5c4D46qbgwU8CH dwSX/08QUpju3/MVRd6n39eEePDAq5YCcBSGYqxg+0uBYeu5J3d8Z2WFZcoPDNwv3e+7 3AneaZKXKuJWb0i/XhZViYYkdfs4K+/ZWcKqn+YLPFneuXA00ULPhldY8dZ9Lz/qHND+ iqe2O64zv2/sX1SDWfDr6scT8ckacIFDYQM/fOoSKiGRkmMIzkaZaeAxU04x6NNO3ZVU m4YQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:references:in-reply-to:message-id :date:subject:cc:to:from; bh=B0I/tEyb7y5Srx8Vko2WqFWGcj79PJEOuZ4T8RJ5fPE=; b=oyuyB1/tT68m9MqYUfIWy68nnUNL+6jZDawkgRXR4L+b3vGQOsn9pauOOsckw1gJzb de2+gVzE/De8RkBGIJiBkWJ++oGnZmT94JSIv/KbKCfrWmckR0lRswBxAHuPEM6G5E/5 Wy0MjI5perL9ZOkOjEYg30ARYZIisMVIhjj94kOHpcQ6553AGPVwVgJ4FDRYz4EpUvnD UQczkoNWhYQhXOewKGGp5G3fbEJxSVXAjNXgCoji68L72Soy1vGSBy8BNOBc+U671Z8A 0u6oYq1/E8b0qmDvUUxthOEN23xcRKt7WMHyrELUNxvKMxDpvy3BHGIHdR48uxhhn0xl m2iQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=mediatek.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id t2si243307plg.360.2022.01.26.12.35.07; Wed, 26 Jan 2022 12:35:19 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=mediatek.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238522AbiAZIho (ORCPT + 99 others); Wed, 26 Jan 2022 03:37:44 -0500 Received: from mailgw01.mediatek.com ([60.244.123.138]:35976 "EHLO mailgw01.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S230519AbiAZIhn (ORCPT ); Wed, 26 Jan 2022 03:37:43 -0500 X-UUID: 0bf26c1694c445c5a00fa6f56753a0b3-20220126 X-UUID: 0bf26c1694c445c5a00fa6f56753a0b3-20220126 Received: from mtkmbs10n2.mediatek.inc [(172.21.101.183)] by mailgw01.mediatek.com (envelope-from ) (Generic MTA with TLSv1.2 ECDHE-RSA-AES256-GCM-SHA384 256/256) with ESMTP id 1614965601; Wed, 26 Jan 2022 16:37:41 +0800 Received: from mtkexhb02.mediatek.inc (172.21.101.103) by mtkmbs07n1.mediatek.inc (172.21.101.16) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Wed, 26 Jan 2022 16:37:41 +0800 Received: from mtkcas11.mediatek.inc (172.21.101.40) by mtkexhb02.mediatek.inc (172.21.101.103) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Wed, 26 Jan 2022 16:37:41 +0800 Received: from mtksdccf07.mediatek.inc (172.21.84.99) by mtkcas11.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Wed, 26 Jan 2022 16:37:41 +0800 From: Miles Chen To: CC: , , , , , , , Subject: Re: [PATCH 29/31] clk: mediatek: mt8195: Implement error handling in probe functions Date: Wed, 26 Jan 2022 16:37:41 +0800 Message-ID: <20220126083741.18563-1-miles.chen@mediatek.com> X-Mailer: git-send-email 2.18.0 In-Reply-To: <20220122091731.283592-30-wenst@chromium.org> References: <20220122091731.283592-30-wenst@chromium.org> MIME-Version: 1.0 Content-Type: text/plain X-MTK: N Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org > Until now the mediatek clk driver library did not have any way to > unregister clks, and so all drivers did not do proper cleanup in > their error paths. > > Now that the library does have APIs to unregister clks, use them > in the error path of the probe functions for the mt8195 clk drivers > to do proper cleanup. > > Signed-off-by: Chen-Yu Tsai Reviewed-by: Miles Chen > --- > drivers/clk/mediatek/clk-mt8195-apmixedsys.c | 13 ++++-- > drivers/clk/mediatek/clk-mt8195-apusys_pll.c | 11 ++++- > drivers/clk/mediatek/clk-mt8195-topckgen.c | 49 +++++++++++++++----- > drivers/clk/mediatek/clk-mt8195-vdo0.c | 4 +- > drivers/clk/mediatek/clk-mt8195-vdo1.c | 4 +- > 5 files changed, 63 insertions(+), 18 deletions(-) > > diff --git a/drivers/clk/mediatek/clk-mt8195-apmixedsys.c b/drivers/clk/mediatek/clk-mt8195-apmixedsys.c > index 5b1b7dc447eb..af8d80f25f30 100644 > --- a/drivers/clk/mediatek/clk-mt8195-apmixedsys.c > +++ b/drivers/clk/mediatek/clk-mt8195-apmixedsys.c > @@ -120,17 +120,24 @@ static int clk_mt8195_apmixed_probe(struct platform_device *pdev) > if (!clk_data) > return -ENOMEM; > > - mtk_clk_register_plls(node, plls, ARRAY_SIZE(plls), clk_data); > - r = mtk_clk_register_gates(node, apmixed_clks, ARRAY_SIZE(apmixed_clks), clk_data); > + r = mtk_clk_register_plls(node, plls, ARRAY_SIZE(plls), clk_data); > if (r) > goto free_apmixed_data; > > + r = mtk_clk_register_gates(node, apmixed_clks, ARRAY_SIZE(apmixed_clks), clk_data); > + if (r) > + goto unregister_plls; > + > r = of_clk_add_provider(node, of_clk_src_onecell_get, clk_data); > if (r) > - goto free_apmixed_data; > + goto unregister_gates; > > return r; > > +unregister_gates: > + mtk_clk_register_gates(node, apmixed_clks, ARRAY_SIZE(apmixed_clks), clk_data); > +unregister_plls: > + mtk_clk_register_plls(node, plls, ARRAY_SIZE(plls), clk_data); > free_apmixed_data: > mtk_free_clk_data(clk_data); > return r; > diff --git a/drivers/clk/mediatek/clk-mt8195-apusys_pll.c b/drivers/clk/mediatek/clk-mt8195-apusys_pll.c > index db449ff877d7..1fff6f3d2dc7 100644 > --- a/drivers/clk/mediatek/clk-mt8195-apusys_pll.c > +++ b/drivers/clk/mediatek/clk-mt8195-apusys_pll.c > @@ -66,13 +66,20 @@ static int clk_mt8195_apusys_pll_probe(struct platform_device *pdev) > if (!clk_data) > return -ENOMEM; > > - mtk_clk_register_plls(node, apusys_plls, ARRAY_SIZE(apusys_plls), clk_data); > - r = of_clk_add_provider(node, of_clk_src_onecell_get, clk_data); > + r = mtk_clk_register_plls(node, apusys_plls, ARRAY_SIZE(apusys_plls), clk_data); > if (r) > goto free_apusys_pll_data; > > + r = of_clk_add_provider(node, of_clk_src_onecell_get, clk_data); > + if (r) > + goto unregister_plls; > + > + platform_set_drvdata(pdev, clk_data); > + > return r; > > +unregister_plls: > + mtk_clk_unregister_plls(apusys_plls, ARRAY_SIZE(apusys_plls), clk_data); > free_apusys_pll_data: > mtk_free_clk_data(clk_data); > return r; > diff --git a/drivers/clk/mediatek/clk-mt8195-topckgen.c b/drivers/clk/mediatek/clk-mt8195-topckgen.c > index 3e2aba9c40bb..3631f49a5e5a 100644 > --- a/drivers/clk/mediatek/clk-mt8195-topckgen.c > +++ b/drivers/clk/mediatek/clk-mt8195-topckgen.c > @@ -1239,25 +1239,52 @@ static int clk_mt8195_topck_probe(struct platform_device *pdev) > goto free_top_data; > } > > - mtk_clk_register_fixed_clks(top_fixed_clks, ARRAY_SIZE(top_fixed_clks), > - top_clk_data); > - mtk_clk_register_factors(top_divs, ARRAY_SIZE(top_divs), top_clk_data); > - mtk_clk_register_muxes(top_mtk_muxes, ARRAY_SIZE(top_mtk_muxes), node, > - &mt8195_clk_lock, top_clk_data); > - mtk_clk_register_composites(top_muxes, ARRAY_SIZE(top_muxes), base, > - &mt8195_clk_lock, top_clk_data); > - mtk_clk_register_composites(top_adj_divs, ARRAY_SIZE(top_adj_divs), base, > - &mt8195_clk_lock, top_clk_data); > - r = mtk_clk_register_gates(node, top_clks, ARRAY_SIZE(top_clks), top_clk_data); > + r = mtk_clk_register_fixed_clks(top_fixed_clks, ARRAY_SIZE(top_fixed_clks), > + top_clk_data); > if (r) > goto free_top_data; > > + r = mtk_clk_register_factors(top_divs, ARRAY_SIZE(top_divs), top_clk_data); > + if (r) > + goto unregister_fixed_clks; > + > + r = mtk_clk_register_muxes(top_mtk_muxes, ARRAY_SIZE(top_mtk_muxes), node, > + &mt8195_clk_lock, top_clk_data); > + if (r) > + goto unregister_factors; > + > + r = mtk_clk_register_composites(top_muxes, ARRAY_SIZE(top_muxes), base, > + &mt8195_clk_lock, top_clk_data); > + if (r) > + goto unregister_muxes; > + > + r = mtk_clk_register_composites(top_adj_divs, ARRAY_SIZE(top_adj_divs), base, > + &mt8195_clk_lock, top_clk_data); > + if (r) > + goto unregister_composite_muxes; > + > + r = mtk_clk_register_gates(node, top_clks, ARRAY_SIZE(top_clks), top_clk_data); > + if (r) > + goto unregister_composite_divs; > + > r = of_clk_add_provider(node, of_clk_src_onecell_get, top_clk_data); > if (r) > - goto free_top_data; > + goto unregister_gates; > > return r; > > +unregister_gates: > + mtk_clk_unregister_gates(top_clks, ARRAY_SIZE(top_clks), top_clk_data); > +unregister_composite_divs: > + mtk_clk_unregister_composites(top_adj_divs, ARRAY_SIZE(top_adj_divs), top_clk_data); > +unregister_composite_muxes: > + mtk_clk_unregister_composites(top_muxes, ARRAY_SIZE(top_muxes), top_clk_data); > +unregister_muxes: > + mtk_clk_unregister_muxes(top_mtk_muxes, ARRAY_SIZE(top_mtk_muxes), top_clk_data); > +unregister_factors: > + mtk_clk_unregister_factors(top_divs, ARRAY_SIZE(top_divs), top_clk_data); > +unregister_fixed_clks: > + mtk_clk_unregister_fixed_clks(top_fixed_clks, ARRAY_SIZE(top_fixed_clks), top_clk_data); > free_top_data: > mtk_free_clk_data(top_clk_data); > return r; > diff --git a/drivers/clk/mediatek/clk-mt8195-vdo0.c b/drivers/clk/mediatek/clk-mt8195-vdo0.c > index f7ff7618c714..af34eb564b1d 100644 > --- a/drivers/clk/mediatek/clk-mt8195-vdo0.c > +++ b/drivers/clk/mediatek/clk-mt8195-vdo0.c > @@ -105,10 +105,12 @@ static int clk_mt8195_vdo0_probe(struct platform_device *pdev) > > r = of_clk_add_provider(node, of_clk_src_onecell_get, clk_data); > if (r) > - goto free_vdo0_data; > + goto unregister_gates; > > return r; > > +unregister_gates: > + mtk_clk_unregister_gates(vdo0_clks, ARRAY_SIZE(vdo0_clks), clk_data); > free_vdo0_data: > mtk_free_clk_data(clk_data); > return r; > diff --git a/drivers/clk/mediatek/clk-mt8195-vdo1.c b/drivers/clk/mediatek/clk-mt8195-vdo1.c > index 03df8eae8838..6b502bbc730c 100644 > --- a/drivers/clk/mediatek/clk-mt8195-vdo1.c > +++ b/drivers/clk/mediatek/clk-mt8195-vdo1.c > @@ -122,10 +122,12 @@ static int clk_mt8195_vdo1_probe(struct platform_device *pdev) > > r = of_clk_add_provider(node, of_clk_src_onecell_get, clk_data); > if (r) > - goto free_vdo1_data; > + goto unregister_gates; > > return r; > > +unregister_gates: > + mtk_clk_unregister_gates(vdo1_clks, ARRAY_SIZE(vdo1_clks), clk_data); > free_vdo1_data: > mtk_free_clk_data(clk_data); > return r; > -- > 2.35.0.rc0.227.g00780c9af4-goog > >