All of lore.kernel.org
 help / color / mirror / Atom feed
From: Kumar Gala <galak@codeaurora.org>
To: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Cc: linux-arm-msm <linux-arm-msm@vger.kernel.org>,
	Andy Gross <agross@codeaurora.org>,
	Stephen Boyd <sboyd@quicinc.com>
Subject: Re: [RFC PATCH 1/2] soc: qcom: do not disable the iface clock in probe
Date: Tue, 10 Jun 2014 10:20:21 -0500	[thread overview]
Message-ID: <6D685866-4AE5-458B-BB8C-EFEBAE221A9E@codeaurora.org> (raw)
In-Reply-To: <1402410717-12977-1-git-send-email-srinivas.kandagatla@linaro.org>


On Jun 10, 2014, at 9:31 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.
> 
> Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
> ---
> drivers/soc/qcom/qcom_gsbi.c | 46 +++++++++++++++++++++++++++++++-------------
> 1 file changed, 33 insertions(+), 13 deletions(-)

It seems like we shouldn’t need this change.  Adding Stephen to see if there is a reason we don’t have the clk’s enable_count adjusted for how the bootloader setup clks.

- k

> 
> diff --git a/drivers/soc/qcom/qcom_gsbi.c b/drivers/soc/qcom/qcom_gsbi.c
> index ab7b441..64fb298 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);
> -- 
> 1.9.1
> 
> --
> 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

-- 
Employee of Qualcomm Innovation Center, Inc.
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation

  reply	other threads:[~2014-06-10 15:20 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-06-10 14:31 [RFC PATCH 0/2] MSM/QCOM: Fix few race conditions when DEBUG_LL is enabled Srinivas Kandagatla
2014-06-10 14:31 ` [RFC PATCH 1/2] soc: qcom: do not disable the iface clock in probe Srinivas Kandagatla
2014-06-10 15:20   ` Kumar Gala [this message]
2014-06-10 17:39     ` Stephen Boyd
2014-06-10 17:46       ` Andy Gross
2014-06-10 17:47       ` Srinivas Kandagatla
2014-06-10 17:57         ` Andy Gross
2014-07-17 20:18   ` Srinivas Kandagatla
2014-08-12  4:25   ` Srinivas Kandagatla
2014-06-10 14:32 ` [RFC PATCH 2/2] tty:msm_serial: Do not reset IP if we use bootconsole Srinivas Kandagatla
2014-06-10 14:37   ` Srinivas Kandagatla
2014-06-17 21:09   ` Stephen Boyd
2014-06-17 22:04     ` Srinivas Kandagatla
2014-07-10 13:38     ` Srinivas Kandagatla

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=6D685866-4AE5-458B-BB8C-EFEBAE221A9E@codeaurora.org \
    --to=galak@codeaurora.org \
    --cc=agross@codeaurora.org \
    --cc=linux-arm-msm@vger.kernel.org \
    --cc=sboyd@quicinc.com \
    --cc=srinivas.kandagatla@linaro.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.