Takashi Iwai 1402be
From d5b9653dd2bb7a2b1c8cc783c5d3b607bbb6b271 Mon Sep 17 00:00:00 2001
Takashi Iwai 1402be
From: Johan Hovold <johan@kernel.org>
Takashi Iwai 1402be
Date: Tue, 3 Jul 2018 12:05:48 +0200
Takashi Iwai 1402be
Subject: [PATCH] misc: sram: enable clock before registering regions
Takashi Iwai 1402be
Git-commit: d5b9653dd2bb7a2b1c8cc783c5d3b607bbb6b271
Takashi Iwai 1402be
Patch-mainline: v4.19-rc1
Takashi Iwai 1402be
References: bsc#1051510
Takashi Iwai 1402be
Takashi Iwai 1402be
Make sure to enable the clock before registering regions and exporting
Takashi Iwai 1402be
partitions to user space at which point we must be prepared for I/O.
Takashi Iwai 1402be
Takashi Iwai 1402be
Fixes: ee895ccdf776 ("misc: sram: fix enabled clock leak on error path")
Takashi Iwai 1402be
Signed-off-by: Johan Hovold <johan@kernel.org>
Takashi Iwai 1402be
Reviewed-by: Vladimir Zapolskiy <vladimir_zapolskiy@mentor.com>
Takashi Iwai 1402be
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Takashi Iwai 1402be
Acked-by: Takashi Iwai <tiwai@suse.de>
Takashi Iwai 1402be
Takashi Iwai 1402be
---
Takashi Iwai 1402be
 drivers/misc/sram.c | 13 +++++++------
Takashi Iwai 1402be
 1 file changed, 7 insertions(+), 6 deletions(-)
Takashi Iwai 1402be
Takashi Iwai 1402be
diff --git a/drivers/misc/sram.c b/drivers/misc/sram.c
Takashi Iwai 1402be
index 679647713e36..74b183baf044 100644
Takashi Iwai 1402be
--- a/drivers/misc/sram.c
Takashi Iwai 1402be
+++ b/drivers/misc/sram.c
Takashi Iwai 1402be
@@ -391,23 +391,23 @@ static int sram_probe(struct platform_device *pdev)
Takashi Iwai 1402be
 	if (IS_ERR(sram->pool))
Takashi Iwai 1402be
 		return PTR_ERR(sram->pool);
Takashi Iwai 1402be
 
Takashi Iwai 1402be
-	ret = sram_reserve_regions(sram, res);
Takashi Iwai 1402be
-	if (ret)
Takashi Iwai 1402be
-		return ret;
Takashi Iwai 1402be
-
Takashi Iwai 1402be
 	sram->clk = devm_clk_get(sram->dev, NULL);
Takashi Iwai 1402be
 	if (IS_ERR(sram->clk))
Takashi Iwai 1402be
 		sram->clk = NULL;
Takashi Iwai 1402be
 	else
Takashi Iwai 1402be
 		clk_prepare_enable(sram->clk);
Takashi Iwai 1402be
 
Takashi Iwai 1402be
+	ret = sram_reserve_regions(sram, res);
Takashi Iwai 1402be
+	if (ret)
Takashi Iwai 1402be
+		goto err_disable_clk;
Takashi Iwai 1402be
+
Takashi Iwai 1402be
 	platform_set_drvdata(pdev, sram);
Takashi Iwai 1402be
 
Takashi Iwai 1402be
 	init_func = of_device_get_match_data(&pdev->dev);
Takashi Iwai 1402be
 	if (init_func) {
Takashi Iwai 1402be
 		ret = init_func();
Takashi Iwai 1402be
 		if (ret)
Takashi Iwai 1402be
-			goto err_disable_clk;
Takashi Iwai 1402be
+			goto err_free_partitions;
Takashi Iwai 1402be
 	}
Takashi Iwai 1402be
 
Takashi Iwai 1402be
 	dev_dbg(sram->dev, "SRAM pool: %zu KiB @ 0x%p\n",
Takashi Iwai 1402be
@@ -415,10 +415,11 @@ static int sram_probe(struct platform_device *pdev)
Takashi Iwai 1402be
 
Takashi Iwai 1402be
 	return 0;
Takashi Iwai 1402be
 
Takashi Iwai 1402be
+err_free_partitions:
Takashi Iwai 1402be
+	sram_free_partitions(sram);
Takashi Iwai 1402be
 err_disable_clk:
Takashi Iwai 1402be
 	if (sram->clk)
Takashi Iwai 1402be
 		clk_disable_unprepare(sram->clk);
Takashi Iwai 1402be
-	sram_free_partitions(sram);
Takashi Iwai 1402be
 
Takashi Iwai 1402be
 	return ret;
Takashi Iwai 1402be
 }
Takashi Iwai 1402be
-- 
Takashi Iwai 1402be
2.16.4
Takashi Iwai 1402be