diff mbox

[v1] soc: qcom: do not disable the iface clock in probe

Message ID 1408081268-5748-1-git-send-email-srinivas.kandagatla@linaro.org
State Accepted
Commit fa9eb3241895d2771b87f20dd23b40de664c5e4e
Headers show

Commit Message

Srinivas Kandagatla Aug. 15, 2014, 5:41 a.m. UTC
The use case here is when we have a bootconsole which is printing the
characters on serial console and gsbi driver comes up after some time.
As gsbi driver disables the clock in probe the bootconsole locks up.

This patch fixes the problem by disabling the clock in platform remove
rather than in probe.

Tested-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
---
Changes since RFC:
	- none, just a subject line change.

 drivers/soc/qcom/qcom_gsbi.c | 46 +++++++++++++++++++++++++++++++-------------
 1 file changed, 33 insertions(+), 13 deletions(-)

Comments

Kumar Gala Sept. 23, 2014, 5:42 p.m. UTC | #1
On Aug 15, 2014, at 12:41 AM, Srinivas Kandagatla <srinivas.kandagatla@linaro.org> wrote:

> The use case here is when we have a bootconsole which is printing the
> characters on serial console and gsbi driver comes up after some time.
> As gsbi driver disables the clock in probe the bootconsole locks up.
> 
> This patch fixes the problem by disabling the clock in platform remove
> rather than in probe.
> 
> Tested-by: Linus Walleij <linus.walleij@linaro.org>
> Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
> ---
> Changes since RFC:
> 	- none, just a subject line change.

Srini,

We need some changes to the commit message for this to get into v3.17.

Probably some references to:

http://www.spinics.net/lists/linux-arm-msm/msg10589.html

Adding Kevin to provide details on what else should be in commit message w/regards to the regression we introduced.

- k
Kevin Hilman Sept. 23, 2014, 5:51 p.m. UTC | #2
On Tue, Sep 23, 2014 at 10:42 AM, Kumar Gala <galak@codeaurora.org> wrote:
>
> On Aug 15, 2014, at 12:41 AM, Srinivas Kandagatla <srinivas.kandagatla@linaro.org> wrote:
>
>> The use case here is when we have a bootconsole which is printing the
>> characters on serial console and gsbi driver comes up after some time.
>> As gsbi driver disables the clock in probe the bootconsole locks up.
>>
>> This patch fixes the problem by disabling the clock in platform remove
>> rather than in probe.
>>
>> Tested-by: Linus Walleij <linus.walleij@linaro.org>
>> Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
>> ---
>> Changes since RFC:
>>       - none, just a subject line change.
>
> Srini,
>
> We need some changes to the commit message for this to get into v3.17.
>
> Probably some references to:
>
> http://www.spinics.net/lists/linux-arm-msm/msg10589.html
>
> Adding Kevin to provide details on what else should be in commit message w/regards to the regression we introduced.

At this point of the cycle, we're rather strict about what qualifies
as a fix.  It should be fixing a specific regression.  Looking at the
above link, it looks like it is, so could you re-spin this with
changelog, summarizing the regression and how this fixes the
regression, and we should still be able to get it in for v3.17.

Also, it looks like the original was only posted to the msm list.  For
future reference, for patches that need to go via the arm-soc
maintainers, make sure to Cc arm@kernel.org.

Thanks,

Kevin
--
To unsubscribe from this list: send the line "unsubscribe linux-arm-msm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Srinivas Kandagatla Sept. 23, 2014, 6:41 p.m. UTC | #3
On 23/09/14 18:42, Kumar Gala wrote:
>
> On Aug 15, 2014, at 12:41 AM, Srinivas Kandagatla <srinivas.kandagatla@linaro.org> wrote:
>
>> The use case here is when we have a bootconsole which is printing the
>> characters on serial console and gsbi driver comes up after some time.
>> As gsbi driver disables the clock in probe the bootconsole locks up.
>>
>> This patch fixes the problem by disabling the clock in platform remove
>> rather than in probe.
>>
>> Tested-by: Linus Walleij <linus.walleij@linaro.org>
>> Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
>> ---
>> Changes since RFC:
>> 	- none, just a subject line change.
>
> Srini,
>
> We need some changes to the commit message for this to get into v3.17.
>
Sure.. I will send v2 with change log referring to 
http://www.spinics.net/lists/linux-arm-msm/msg10589.html


--srini
> Probably some references to:
>
> http://www.spinics.net/lists/linux-arm-msm/msg10589.html
>
> Adding Kevin to provide details on what else should be in commit message w/regards to the regression we introduced.
>
> - k
>
--
To unsubscribe from this list: send the line "unsubscribe linux-arm-msm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/drivers/soc/qcom/qcom_gsbi.c b/drivers/soc/qcom/qcom_gsbi.c
index 447458e..7e1f120 100644
--- a/drivers/soc/qcom/qcom_gsbi.c
+++ b/drivers/soc/qcom/qcom_gsbi.c
@@ -22,44 +22,63 @@ 
 #define GSBI_CTRL_REG		0x0000
 #define GSBI_PROTOCOL_SHIFT	4
 
+struct gsbi_info {
+	struct clk *hclk;
+	u32 mode;
+	u32 crci;
+};
+
 static int gsbi_probe(struct platform_device *pdev)
 {
 	struct device_node *node = pdev->dev.of_node;
 	struct resource *res;
 	void __iomem *base;
-	struct clk *hclk;
-	u32 mode, crci = 0;
+	struct gsbi_info *gsbi;
+
+	gsbi = devm_kzalloc(&pdev->dev, sizeof(*gsbi), GFP_KERNEL);
+
+	if (!gsbi)
+		return -ENOMEM;
 
 	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
 	base = devm_ioremap_resource(&pdev->dev, res);
 	if (IS_ERR(base))
 		return PTR_ERR(base);
 
-	if (of_property_read_u32(node, "qcom,mode", &mode)) {
+	if (of_property_read_u32(node, "qcom,mode", &gsbi->mode)) {
 		dev_err(&pdev->dev, "missing mode configuration\n");
 		return -EINVAL;
 	}
 
 	/* not required, so default to 0 if not present */
-	of_property_read_u32(node, "qcom,crci", &crci);
+	of_property_read_u32(node, "qcom,crci", &gsbi->crci);
 
-	dev_info(&pdev->dev, "GSBI port protocol: %d crci: %d\n", mode, crci);
+	dev_info(&pdev->dev, "GSBI port protocol: %d crci: %d\n",
+		 gsbi->mode, gsbi->crci);
+	gsbi->hclk = devm_clk_get(&pdev->dev, "iface");
+	if (IS_ERR(gsbi->hclk))
+		return PTR_ERR(gsbi->hclk);
 
-	hclk = devm_clk_get(&pdev->dev, "iface");
-	if (IS_ERR(hclk))
-		return PTR_ERR(hclk);
+	clk_prepare_enable(gsbi->hclk);
 
-	clk_prepare_enable(hclk);
-
-	writel_relaxed((mode << GSBI_PROTOCOL_SHIFT) | crci,
+	writel_relaxed((gsbi->mode << GSBI_PROTOCOL_SHIFT) | gsbi->crci,
 				base + GSBI_CTRL_REG);
 
 	/* make sure the gsbi control write is not reordered */
 	wmb();
 
-	clk_disable_unprepare(hclk);
+	platform_set_drvdata(pdev, gsbi);
+
+	return of_platform_populate(node, NULL, NULL, &pdev->dev);
+}
+
+static int gsbi_remove(struct platform_device *pdev)
+{
+	struct gsbi_info *gsbi = platform_get_drvdata(pdev);
+
+	clk_disable_unprepare(gsbi->hclk);
 
-	return of_platform_populate(pdev->dev.of_node, NULL, NULL, &pdev->dev);
+	return 0;
 }
 
 static const struct of_device_id gsbi_dt_match[] = {
@@ -76,6 +95,7 @@  static struct platform_driver gsbi_driver = {
 		.of_match_table	= gsbi_dt_match,
 	},
 	.probe = gsbi_probe,
+	.remove	= gsbi_remove,
 };
 
 module_platform_driver(gsbi_driver);