Received: by 2002:ac0:950c:0:0:0:0:0 with SMTP id f12csp2716538imc; Tue, 12 Mar 2019 22:43:58 -0700 (PDT) X-Google-Smtp-Source: APXvYqz5mPi7WKdTWAsbkWBGA7CejDum9ToEwWCwtH8JWlxydfNesfw+PfKYEeoPK3cDwMFdFbII X-Received: by 2002:a63:4826:: with SMTP id v38mr10212456pga.370.1552455838152; Tue, 12 Mar 2019 22:43:58 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1552455838; cv=none; d=google.com; s=arc-20160816; b=BqHJanzHg3AhU2ZN35jcsVp2XlyGmkANu4pli2fAMnTjuBOD5IuufNzlVx/L41ph9J 9Nmt4GsJA5hY9zGE3+OUuH3hz9Nt9WwDKyZ+9gSRg7Cyhq99bDHEIdRVDblXd1zHdiVL nv7gnml7N0Iexpbi6GXHi/S9ow7OA4ZRYUN3TOWOKh6f4yf4flSWEb9axT7hPO4eNxvd I4Z4nZtiy2CEpVTn44ekAIpdAywUdEZEDGo+19R8PLiq64hcJKhiP2xnSNQJDnh+MqQW iOmsPapLBzenZWLMVSe+1+maPkh5F0vkGKujq0ONoX5WROGyTgm+2M7YXwwUeIrIKfCo GFIw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:dkim-signature:mime-version:message-id :date:subject:cc:to:from; bh=A7umo4lz+biXj6Y0lvPP0q+nh1ziQwUXGC6mJcqRD4g=; b=wDC43nnAiJUHGu9B4Nt408v1VEB6ujlD3xpT8JkM9obbcVtmY6N7AaAhrIeFREigsF DiNGhVoxhRXYrbstHBNewVmyLdxUmC51FVTD7ggsCk1ZlOWIMo3yxT1g9RJ9gS3nKt4Y 6hJ4sTPFZIHgxyR7LyzO7IST1msAMXOZNb3+kNK9L7QXcYrB7mivfY5Y7bguA+RHpCBQ i5NzS9KnzmcfYLYW2SUqHAEnU6KM1f/VXDFMnNX92ZPVvCcyLEZlBcbcowLbup/RxJPm RjIp2+5ySYwn4AW22o0ydsBm00RXCmdmY9oMoYRns8KKVj28edNmX3WVmyQZ/P04S/k6 R7wQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@nvidia.com header.s=n1 header.b="dW/dfleJ"; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=nvidia.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id cm2si10806861plb.327.2019.03.12.22.43.42; Tue, 12 Mar 2019 22:43:58 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@nvidia.com header.s=n1 header.b="dW/dfleJ"; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=nvidia.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726761AbfCMFnV (ORCPT + 99 others); Wed, 13 Mar 2019 01:43:21 -0400 Received: from hqemgate14.nvidia.com ([216.228.121.143]:17342 "EHLO hqemgate14.nvidia.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725773AbfCMFnV (ORCPT ); Wed, 13 Mar 2019 01:43:21 -0400 Received: from hqpgpgate101.nvidia.com (Not Verified[216.228.121.13]) by hqemgate14.nvidia.com (using TLS: TLSv1.2, DES-CBC3-SHA) id ; Tue, 12 Mar 2019 22:43:21 -0700 Received: from hqmail.nvidia.com ([172.20.161.6]) by hqpgpgate101.nvidia.com (PGP Universal service); Tue, 12 Mar 2019 22:43:20 -0700 X-PGP-Universal: processed; by hqpgpgate101.nvidia.com on Tue, 12 Mar 2019 22:43:20 -0700 Received: from HQMAIL106.nvidia.com (172.18.146.12) by HQMAIL105.nvidia.com (172.20.187.12) with Microsoft SMTP Server (TLS) id 15.0.1473.3; Wed, 13 Mar 2019 05:43:20 +0000 Received: from hqnvemgw02.nvidia.com (172.16.227.111) by HQMAIL106.nvidia.com (172.18.146.12) with Microsoft SMTP Server (TLS) id 15.0.1473.3 via Frontend Transport; Wed, 13 Mar 2019 05:43:19 +0000 Received: from linux.nvidia.com (Not Verified[10.24.34.185]) by hqnvemgw02.nvidia.com with Trustwave SEG (v7,5,8,10121) id ; Tue, 12 Mar 2019 22:43:19 -0700 From: Sameer Pujar To: , CC: , , , , , Sameer Pujar Subject: [PATCH v2 1/2] dmaengine: tegra210-adma: use devm_clk_*() helpers Date: Wed, 13 Mar 2019 11:13:13 +0530 Message-ID: <1552455794-24946-1-git-send-email-spujar@nvidia.com> X-Mailer: git-send-email 2.7.4 MIME-Version: 1.0 Content-Type: text/plain DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nvidia.com; s=n1; t=1552455801; bh=A7umo4lz+biXj6Y0lvPP0q+nh1ziQwUXGC6mJcqRD4g=; h=X-PGP-Universal:From:To:CC:Subject:Date:Message-ID:X-Mailer: MIME-Version:Content-Type; b=dW/dfleJ3a8oRXA4B4NpazNXcn8HT0nEIUGrRa9xbWEhcjcIphpTO+cVX1jR3Q+2d PnmofwXRl2HpPFVbGypRhr1nsOS6AQKRbox0y1PDXfFEKWeXNptF8jkhPLhEzwJodV QiIBb+1GuzAUBTV6hsbiaLYA6UmuuG4HnjA6Fu/jiNYRFkZ5njg/rE22gebXsQSEc9 k3yqVvgeQzPzp3BDCHp5H33sPMOTG5CMzQzCOc2qB3ATn9btqCPbHKBzi2N46CN14I xESo1y9esWwAbow7Fkn+RmBdmQIxmZpA9SsBDlfVr8omHROeaC4n3nLR4qsgZB/Kgj D3FC7AkO7Lq3g== Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org adma driver is using pm_clk_*() interface for managing clock resources. With this it is observed that clocks remain ON always. This happens on Tegra devices which use BPMP co-processor to manage clock resources, where clocks are enabled during prepare phase. This is necessary because clocks to BPMP are always blocking. When pm_clk_*() interface is used on such Tegra devices, clock prepare count is not balanced till remove call happens for the driver and hence clocks are seen ON always. Thus this patch replaces pm_clk_*() with devm_clk_*() framework. Suggested-by: Mohan Kumar D Reviewed-by: Jonathan Hunter Signed-off-by: Sameer Pujar --- drivers/dma/tegra210-adma.c | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/drivers/dma/tegra210-adma.c b/drivers/dma/tegra210-adma.c index 5ec0dd9..650cd9c 100644 --- a/drivers/dma/tegra210-adma.c +++ b/drivers/dma/tegra210-adma.c @@ -22,7 +22,6 @@ #include #include #include -#include #include #include @@ -141,6 +140,7 @@ struct tegra_adma { struct dma_device dma_dev; struct device *dev; void __iomem *base_addr; + struct clk *ahub_clk; unsigned int nr_channels; unsigned long rx_requests_reserved; unsigned long tx_requests_reserved; @@ -637,8 +637,9 @@ static int tegra_adma_runtime_suspend(struct device *dev) struct tegra_adma *tdma = dev_get_drvdata(dev); tdma->global_cmd = tdma_read(tdma, ADMA_GLOBAL_CMD); + clk_disable_unprepare(tdma->ahub_clk); - return pm_clk_suspend(dev); + return 0; } static int tegra_adma_runtime_resume(struct device *dev) @@ -646,10 +647,11 @@ static int tegra_adma_runtime_resume(struct device *dev) struct tegra_adma *tdma = dev_get_drvdata(dev); int ret; - ret = pm_clk_resume(dev); - if (ret) + ret = clk_prepare_enable(tdma->ahub_clk); + if (ret) { + dev_err(dev, "ahub clk_enable failed: %d\n", ret); return ret; - + } tdma_write(tdma, ADMA_GLOBAL_CMD, tdma->global_cmd); return 0; @@ -693,13 +695,11 @@ static int tegra_adma_probe(struct platform_device *pdev) if (IS_ERR(tdma->base_addr)) return PTR_ERR(tdma->base_addr); - ret = pm_clk_create(&pdev->dev); - if (ret) - return ret; - - ret = of_pm_clk_add_clk(&pdev->dev, "d_audio"); - if (ret) - goto clk_destroy; + tdma->ahub_clk = devm_clk_get(&pdev->dev, "d_audio"); + if (IS_ERR(tdma->ahub_clk)) { + dev_err(&pdev->dev, "Error: Missing ahub controller clock\n"); + return PTR_ERR(tdma->ahub_clk); + } pm_runtime_enable(&pdev->dev); @@ -776,8 +776,6 @@ static int tegra_adma_probe(struct platform_device *pdev) pm_runtime_put_sync(&pdev->dev); rpm_disable: pm_runtime_disable(&pdev->dev); -clk_destroy: - pm_clk_destroy(&pdev->dev); return ret; } @@ -794,7 +792,6 @@ static int tegra_adma_remove(struct platform_device *pdev) pm_runtime_put_sync(&pdev->dev); pm_runtime_disable(&pdev->dev); - pm_clk_destroy(&pdev->dev); return 0; } -- 2.7.4