Thread (1 message) 1 message, 1 author, 2018-03-13

Re: [PATCH v2] mtd: nand: marvell: Fix clock resource by adding a register clock

From: Gregory CLEMENT <gregory.clement@bootlin.com>
Date: 2018-03-13 10:29:34
Also in: linux-arm-kernel

Hi Boris,
 
 On lun., mars 12 2018, Boris Brezillon [off-list ref] wrote:
On Mon, 12 Mar 2018 17:55:26 +0100
Gregory CLEMENT [off-list ref] wrote:
quoted
quoted
 
quoted
 	struct completion complete;
 	unsigned long assigned_cs;
 	struct list_head chips;
@@ -2747,12 +2748,24 @@ static int marvell_nfc_probe(struct platform_device *pdev)
 	if (ret)
 		return ret;
 
+	nfc->reg_clk = devm_clk_get(&pdev->dev, "reg");
+	if (PTR_ERR(nfc->reg_clk) != -ENOENT) {
+		if (!IS_ERR(nfc->reg_clk)) {
+			ret = clk_prepare_enable(nfc->reg_clk);
+			if (ret)
+				goto unprepare_clk;  
I already suggested to move the devm_clk_get(&pdev->dev, "reg") before
the clk_prepare_enable(nfc->ecc_clk) one to simplify the error path.
 
Actually I started to implement your suggestion but unlike what you
though it made the code less simpler. Indeed by having the mandatory
clock first than in case of failure we can directly exit the function.

If the reg clock was initialized first, then if the core/ecc clock fail
in soem case we woudl need to daisbel the reg clock and in other case we
could directly exit.
Well, it's pretty much the same problem if you do it in the order you
propose here: if the core clk enable fails, you'll have to disable the
So if it is the same no need to change! :)
reg clk. Plus, I'm not a big fan of if/else block imbrications when we
can avoid them.

Your solution to avoid if/else block is to add extra code and extra test
which do not bring anything except removing an if/else bloc.

For the record it was

	nfc->reg_clk = devm_clk_get(&pdev->dev, "reg");
	if (PTR_ERR(nfc->reg_clk) == -ENOENT)
		nfc->reg_clk = NULL;
--> here you set to NULL whereas it is useless


	if (IS_ERR(nfc->reg_clk))
		return PTR_ERR(nfc->reg_clk);
--> here you test again the return value even if it was previously set
to -ENOENT

	...

	ret = clk_prepare_enable(nfc->reg_clk);
--> here if reg_clk was NULL due to the beginning of the block you do a
useless call to clk_prepare_enable

	if (ret)
		goto unprepare_ecc_clk;


Gregory
quoted
quoted
quoted
+		} else {
+			ret = PTR_ERR(nfc->reg_clk);
+			goto unprepare_clk;
+		}
+	}  


-- 
Gregory Clement, Bootlin (formerly Free Electrons)
Embedded Linux and Kernel engineering
http://bootlin.com
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help