From patchwork Tue Jun 10 14:31:57 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Srinivas Kandagatla X-Patchwork-Id: 31674 Return-Path: X-Original-To: linaro@patches.linaro.org Delivered-To: linaro@patches.linaro.org Received: from mail-pb0-f72.google.com (mail-pb0-f72.google.com [209.85.160.72]) by ip-10-151-82-157.ec2.internal (Postfix) with ESMTPS id AD26F2054B for ; Tue, 10 Jun 2014 14:32:08 +0000 (UTC) Received: by mail-pb0-f72.google.com with SMTP id md12sf3459261pbc.11 for ; Tue, 10 Jun 2014 07:32:08 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:delivered-to:from:to:cc:subject :date:message-id:in-reply-to:references:sender:precedence:list-id :x-original-sender:x-original-authentication-results:mailing-list :list-post:list-help:list-archive:list-unsubscribe; bh=HMOOvPivJkFbn6YY4SMAERkhNf5dvgaLSnOWWSuxy/I=; b=B4C9qJVkzMzsyE6H2ovR4YB9PZ7v9A40HMNd4V/MEjecreOO4J1yNe/kCE2h8pKx3s niVdAOji3Xi4Sr63ScN0S8W9FHQ5Xjg6Kj5TDuZ8FgjQMeKCWBR+Rsp1UDmXGqqWFvko T8nMTtjglSJlogHu/UceqbhMbz3hn3WWh297CGL8wC0Z4T74CPkVDwhO47rlyek1zgHa PE2tee1sDFiAU8MM+adxupGkM4A9Mv07/oVoS6MJOgSAbD4U4b2gxB5Kl/D4kDFG3W6W EMMWzv2ABH1Gn508srQ7mFWvf0zUekCMXHp3azwtbnCX44qbkT5GUyKNp2Cf6pagjzrW pwxw== X-Gm-Message-State: ALoCoQlYcisF3oLPgiT3J+Nk36kKvbLhFTzzZe6LM/oop3K8QiSSdH3n4te/u0KNauFvhYK+astO X-Received: by 10.68.180.132 with SMTP id do4mr3758622pbc.4.1402410727976; Tue, 10 Jun 2014 07:32:07 -0700 (PDT) MIME-Version: 1.0 X-BeenThere: patchwork-forward@linaro.org Received: by 10.140.32.203 with SMTP id h69ls2256918qgh.56.gmail; Tue, 10 Jun 2014 07:32:07 -0700 (PDT) X-Received: by 10.52.110.105 with SMTP id hz9mr27791814vdb.9.1402410727740; Tue, 10 Jun 2014 07:32:07 -0700 (PDT) Received: from mail-ve0-f171.google.com (mail-ve0-f171.google.com [209.85.128.171]) by mx.google.com with ESMTPS id xb10si11891428vcb.45.2014.06.10.07.32.07 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Tue, 10 Jun 2014 07:32:07 -0700 (PDT) Received-SPF: pass (google.com: domain of patch+caf_=patchwork-forward=linaro.org@linaro.org designates 209.85.128.171 as permitted sender) client-ip=209.85.128.171; Received: by mail-ve0-f171.google.com with SMTP id jz11so4117625veb.16 for ; Tue, 10 Jun 2014 07:32:07 -0700 (PDT) X-Received: by 10.58.220.230 with SMTP id pz6mr12705067vec.9.1402410727647; Tue, 10 Jun 2014 07:32:07 -0700 (PDT) X-Forwarded-To: patchwork-forward@linaro.org X-Forwarded-For: patch@linaro.org patchwork-forward@linaro.org Delivered-To: patch@linaro.org Received: by 10.221.54.6 with SMTP id vs6csp229970vcb; Tue, 10 Jun 2014 07:32:07 -0700 (PDT) X-Received: by 10.68.248.2 with SMTP id yi2mr11295596pbc.158.1402410726855; Tue, 10 Jun 2014 07:32:06 -0700 (PDT) Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id ff2si34535131pbc.132.2014.06.10.07.32.06; Tue, 10 Jun 2014 07:32:06 -0700 (PDT) Received-SPF: none (google.com: linux-arm-msm-owner@vger.kernel.org does not designate permitted sender hosts) client-ip=209.132.180.67; Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1750969AbaFJOcF (ORCPT + 3 others); Tue, 10 Jun 2014 10:32:05 -0400 Received: from mail-wi0-f174.google.com ([209.85.212.174]:56693 "EHLO mail-wi0-f174.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750758AbaFJOcF (ORCPT ); Tue, 10 Jun 2014 10:32:05 -0400 Received: by mail-wi0-f174.google.com with SMTP id r20so6298058wiv.1 for ; Tue, 10 Jun 2014 07:32:03 -0700 (PDT) X-Received: by 10.180.90.233 with SMTP id bz9mr38891219wib.42.1402410721757; Tue, 10 Jun 2014 07:32:01 -0700 (PDT) Received: from srini-ThinkPad-X1-Carbon-2nd.dlink.com (host-78-144-120-232.as13285.net. [78.144.120.232]) by mx.google.com with ESMTPSA id l5sm21194139wif.22.2014.06.10.07.32.00 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 10 Jun 2014 07:32:00 -0700 (PDT) From: Srinivas Kandagatla To: linux-arm-msm@vger.kernel.org Cc: agross@codeaurora.org, Srinivas Kandagatla Subject: [RFC PATCH 1/2] soc: qcom: do not disable the iface clock in probe Date: Tue, 10 Jun 2014 15:31:57 +0100 Message-Id: <1402410717-12977-1-git-send-email-srinivas.kandagatla@linaro.org> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1402410678-12931-1-git-send-email-srinivas.kandagatla@linaro.org> References: <1402410678-12931-1-git-send-email-srinivas.kandagatla@linaro.org> Sender: linux-arm-msm-owner@vger.kernel.org Precedence: list List-ID: X-Mailing-List: linux-arm-msm@vger.kernel.org X-Removed-Original-Auth: Dkim didn't pass. X-Original-Sender: srinivas.kandagatla@linaro.org X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of patch+caf_=patchwork-forward=linaro.org@linaro.org designates 209.85.128.171 as permitted sender) smtp.mail=patch+caf_=patchwork-forward=linaro.org@linaro.org Mailing-list: list patchwork-forward@linaro.org; contact patchwork-forward+owners@linaro.org X-Google-Group-Id: 836684582541 List-Post: , List-Help: , List-Archive: List-Unsubscribe: , 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 --- drivers/soc/qcom/qcom_gsbi.c | 46 +++++++++++++++++++++++++++++++------------- 1 file changed, 33 insertions(+), 13 deletions(-) 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);