linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2] isoc: mediatek: Check for error clk pointer
@ 2021-12-22  1:51 Jiasheng Jiang
  2021-12-24 14:06 ` Mark Brown
                   ` (2 more replies)
  0 siblings, 3 replies; 9+ messages in thread
From: Jiasheng Jiang @ 2021-12-22  1:51 UTC (permalink / raw)
  To: matthias.bgg, lgirdwood, broonie
  Cc: linux-arm-kernel, linux-mediatek, linux-kernel, Jiasheng Jiang

On Wed, Dec 22, 2021 at 01:57:15AM +0800, Mark Brown wrote:
>> +	for (i = CLK_NONE + 1; i < CLK_MAX; i++) {
>>  		clk[i] = devm_clk_get(&pdev->dev, clk_names[i]);
>> +		if (IS_ERR(clk[i]))
>> +			return PTR_ERR(clk[i]);
>
> This now pays attention to the error code here which is good but...
>
>> -	init_clks(pdev, clk);
>> +	ret = init_clks(pdev, clk);
>> +	if (ret)
>> +		return ERR_PTR(-ENOMEM);
>
> ...then discards it here with a random most likely inappropriate error
> code.

Yes, you are right and now the return code depending on the
init_clks().

Fixes: 6078c651947a ("soc: mediatek: Refine scpsys to support multiple platform")
Signed-off-by: Jiasheng Jiang <jiasheng@iscas.ac.cn>
---
Changelog:

v1 -> v2

*Change 1. Change the return code.
---
 drivers/soc/mediatek/mtk-scpsys.c | 15 +++++++++++----
 1 file changed, 11 insertions(+), 4 deletions(-)

diff --git a/drivers/soc/mediatek/mtk-scpsys.c b/drivers/soc/mediatek/mtk-scpsys.c
index ca75b14931ec..670cc82d17dc 100644
--- a/drivers/soc/mediatek/mtk-scpsys.c
+++ b/drivers/soc/mediatek/mtk-scpsys.c
@@ -411,12 +411,17 @@ static int scpsys_power_off(struct generic_pm_domain *genpd)
 	return ret;
 }
 
-static void init_clks(struct platform_device *pdev, struct clk **clk)
+static int init_clks(struct platform_device *pdev, struct clk **clk)
 {
 	int i;
 
-	for (i = CLK_NONE + 1; i < CLK_MAX; i++)
+	for (i = CLK_NONE + 1; i < CLK_MAX; i++) {
 		clk[i] = devm_clk_get(&pdev->dev, clk_names[i]);
+		if (IS_ERR(clk[i]))
+			return PTR_ERR(clk[i]);
+	}
+
+	return 0;
 }
 
 static struct scp *init_scp(struct platform_device *pdev,
@@ -426,7 +431,7 @@ static struct scp *init_scp(struct platform_device *pdev,
 {
 	struct genpd_onecell_data *pd_data;
 	struct resource *res;
-	int i, j;
+	int i, j, ret;
 	struct scp *scp;
 	struct clk *clk[CLK_MAX];
 
@@ -481,7 +486,9 @@ static struct scp *init_scp(struct platform_device *pdev,
 
 	pd_data->num_domains = num;
 
-	init_clks(pdev, clk);
+	ret = init_clks(pdev, clk);
+	if (ret)
+		return ERR_PTR(ret);
 
 	for (i = 0; i < num; i++) {
 		struct scp_domain *scpd = &scp->domains[i];
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 9+ messages in thread
* Re: BUG: [PATCH v2] isoc: mediatek: Check for error clk pointer
@ 2022-01-28 14:26 Paul Mulders
  0 siblings, 0 replies; 9+ messages in thread
From: Paul Mulders @ 2022-01-28 14:26 UTC (permalink / raw)
  To: frank-w
  Cc: broonie, gregkh, jiasheng, lgirdwood, linux-arm-kernel,
	linux-kernel, linux-mediatek, matthias.bgg

I guess this breaks all MT7622 SoCs since it'll prematurely exit
init_clks (and subsequently init_scp) completely once devm_clk_get
fails to get a reference to the mm clock producer (which happens to be
the first one tried). This is because MT7623 has a GPU (so no mm
clock) and MT7622 doesn't, and as a result the other clock producer
pointers never get initialized (and other stuff in init_scp after
returning from the error never happens).

The patch seems fundamentally flawed, I guess it was either not tested
at all, or only tested on a MT7623. The initialization functions seem
designed with the idea that it's ok if some clocks aren't present, so
stopping the initialization when one of them isn't present seems
wrong. (For example, there is also a MT7622B variant of the MT7622
which probably also lacks some clocks MT7622(A) does have).

^ permalink raw reply	[flat|nested] 9+ messages in thread
* Re: BUG: [PATCH v2] isoc: mediatek: Check for error clk pointer
@ 2022-01-28 14:31 Paul Mulders
  0 siblings, 0 replies; 9+ messages in thread
From: Paul Mulders @ 2022-01-28 14:31 UTC (permalink / raw)
  To: justinkb
  Cc: broonie, frank-w, gregkh, jiasheng, lgirdwood, linux-arm-kernel,
	linux-kernel, linux-mediatek, matthias.bgg

Correction: the "(so no mm block)" should be after "and MT7622
doesn't", not before.

^ permalink raw reply	[flat|nested] 9+ messages in thread
* Re: BUG: [PATCH v2] isoc: mediatek: Check for error clk pointer
@ 2022-01-30  2:43 Jiasheng Jiang
  2022-02-01 22:19 ` Daniel Golle
  0 siblings, 1 reply; 9+ messages in thread
From: Jiasheng Jiang @ 2022-01-30  2:43 UTC (permalink / raw)
  To: justinkb
  Cc: frank-w, broonie, gregkh, lgirdwood, linux-arm-kernel,
	linux-kernel, linux-mediatek, matthias.bgg, Jiasheng Jiang

On Fri, Jan 28, 2022 at 10:26:51PM +0800, Paul Mulders wrote:
> I guess this breaks all MT7622 SoCs since it'll prematurely exit
> init_clks (and subsequently init_scp) completely once devm_clk_get
> fails to get a reference to the mm clock producer (which happens to be
> the first one tried). This is because MT7623 has a GPU (so no mm
> clock) and MT7622 doesn't, and as a result the other clock producer
> pointers never get initialized (and other stuff in init_scp after
> returning from the error never happens).
>
> The patch seems fundamentally flawed, I guess it was either not tested
> at all, or only tested on a MT7623. The initialization functions seem
> designed with the idea that it's ok if some clocks aren't present, so
> stopping the initialization when one of them isn't present seems
> wrong. (For example, there is also a MT7622B variant of the MT7622
> which probably also lacks some clocks MT7622(A) does have).

I don't think the patch for init_clks() is flawed.
At most it is incompleted.
What it did is like fixing a potential error in the tool platform
providing service for the upper application, like what you said,
MT7623 and MT7622.
We should not keep the error in the platform because of the upper
application.
And it seems like it is MT7622 that is flawed.
The better way is to fix both the bug in init_clks() and its caller,
MT7622.

Sincerely thanks,
Jiang


^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2022-02-06 17:38 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-12-22  1:51 [PATCH v2] isoc: mediatek: Check for error clk pointer Jiasheng Jiang
2021-12-24 14:06 ` Mark Brown
2021-12-24 16:17 ` Mark Brown
2022-01-28  9:51 ` BUG: " Frank Wunderlich
2022-02-06 17:37   ` Guenter Roeck
2022-01-28 14:26 Paul Mulders
2022-01-28 14:31 Paul Mulders
2022-01-30  2:43 Jiasheng Jiang
2022-02-01 22:19 ` Daniel Golle

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).