From patchwork Tue Jan 6 16:37:06 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mathieu Poirier X-Patchwork-Id: 42788 Return-Path: X-Original-To: linaro@patches.linaro.org Delivered-To: linaro@patches.linaro.org Received: from mail-we0-f200.google.com (mail-we0-f200.google.com [74.125.82.200]) by ip-10-151-82-157.ec2.internal (Postfix) with ESMTPS id 743882062F for ; Tue, 6 Jan 2015 16:37:47 +0000 (UTC) Received: by mail-we0-f200.google.com with SMTP id u56sf4973706wes.3 for ; Tue, 06 Jan 2015 08:37:46 -0800 (PST) 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:x-original-sender :x-original-authentication-results:precedence:mailing-list:list-id :list-post:list-help:list-archive:list-unsubscribe; bh=l6cwiR+gldzM2T2UWhzs0+eZCCpNgSnU7bJ61JIwBwA=; b=Jng3VGnN2xkRjYdkEWU+Gxd0qawT9mHRK1ItCxkQ/XsbPp8RlBmIgtAL6Tz7Ek1ddg AKsd/E6AiOrxQb2m+TrvXtovgL5n2hsCsuZK5B0DXU1Frozrkij8924CgVPTZqaZvtXn SJ7SgNYDISyrF2qfj5oZiYha2FkpsQ8doHTF4/GCWXufjLXw2cdtfY/CAErcChPnbQ0D tCwl5jWy8z65gq0ccF1o0FFPvKKMuzpd/N6dVZg+/EdVNe2nDbjzfGAw0dPpLjHut99a cc60HkvAtBOmgxM4VvaL+J05OXkP9JWwzpAp6+f1X9Rmu9e/oodCqYCLTilqHVGnV+OY MT4A== X-Gm-Message-State: ALoCoQmTLTTy3VXhNMmgHxZEK6gEcDL8n9/2Plz2wB9KHyNuUUDAFB/4G8S0E2vt2nL6n/xrymJ1 X-Received: by 10.180.189.116 with SMTP id gh20mr2327685wic.2.1420562266786; Tue, 06 Jan 2015 08:37:46 -0800 (PST) MIME-Version: 1.0 X-BeenThere: patchwork-forward@linaro.org Received: by 10.152.42.133 with SMTP id o5ls55586lal.78.gmail; Tue, 06 Jan 2015 08:37:46 -0800 (PST) X-Received: by 10.152.44.167 with SMTP id f7mr91429335lam.92.1420562266629; Tue, 06 Jan 2015 08:37:46 -0800 (PST) Received: from mail-la0-f53.google.com (mail-la0-f53.google.com. [209.85.215.53]) by mx.google.com with ESMTPS id pg4si66637283lbb.55.2015.01.06.08.37.46 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Tue, 06 Jan 2015 08:37:46 -0800 (PST) Received-SPF: pass (google.com: domain of patch+caf_=patchwork-forward=linaro.org@linaro.org designates 209.85.215.53 as permitted sender) client-ip=209.85.215.53; Received: by mail-la0-f53.google.com with SMTP id gm9so20720216lab.12 for ; Tue, 06 Jan 2015 08:37:46 -0800 (PST) X-Received: by 10.152.87.100 with SMTP id w4mr101536843laz.71.1420562266453; Tue, 06 Jan 2015 08:37:46 -0800 (PST) X-Forwarded-To: patchwork-forward@linaro.org X-Forwarded-For: patch@linaro.org patchwork-forward@linaro.org Delivered-To: patches@linaro.org Received: by 10.112.9.200 with SMTP id c8csp1224848lbb; Tue, 6 Jan 2015 08:37:45 -0800 (PST) X-Received: by 10.66.179.208 with SMTP id di16mr5292719pac.30.1420562263073; Tue, 06 Jan 2015 08:37:43 -0800 (PST) Received: from mail-pa0-f43.google.com (mail-pa0-f43.google.com. [209.85.220.43]) by mx.google.com with ESMTPS id kt3si90099870pdb.71.2015.01.06.08.37.42 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Tue, 06 Jan 2015 08:37:43 -0800 (PST) Received-SPF: pass (google.com: domain of mathieu.poirier@linaro.org designates 209.85.220.43 as permitted sender) client-ip=209.85.220.43; Received: by mail-pa0-f43.google.com with SMTP id kx10so31291316pab.16 for ; Tue, 06 Jan 2015 08:37:42 -0800 (PST) X-Received: by 10.70.31.35 with SMTP id x3mr156832225pdh.34.1420562262168; Tue, 06 Jan 2015 08:37:42 -0800 (PST) Received: from t430.cg.shawcable.net (S0106002369de4dac.cg.shawcable.net. [70.73.24.112]) by mx.google.com with ESMTPSA id iv1sm42245554pbc.87.2015.01.06.08.37.40 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 06 Jan 2015 08:37:41 -0800 (PST) From: mathieu.poirier@linaro.org To: liviu.dudau@arm.com, sudeep.holla@arm.com, lorenzo.pieralisi@arm.com Cc: linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, mathieu.poirier@linaro.org, patches@linaro.org Subject: [PATCH 2/9] coresight-etb: Adding runtime PM awareness Date: Tue, 6 Jan 2015 09:37:06 -0700 Message-Id: <1420562233-2015-3-git-send-email-mathieu.poirier@linaro.org> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1420562233-2015-1-git-send-email-mathieu.poirier@linaro.org> References: <1420562233-2015-1-git-send-email-mathieu.poirier@linaro.org> X-Removed-Original-Auth: Dkim didn't pass. X-Original-Sender: mathieu.poirier@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.215.53 as permitted sender) smtp.mail=patch+caf_=patchwork-forward=linaro.org@linaro.org Precedence: list Mailing-list: list patchwork-forward@linaro.org; contact patchwork-forward+owners@linaro.org List-ID: X-Google-Group-Id: 836684582541 List-Post: , List-Help: , List-Archive: List-Unsubscribe: , From: Mathieu Poirier Using the runtime API whenever HW access is required. As such and by associating a coresight component to a power domain in the device tree, faults associated to accessing unpowered devices are mitigated. Signed-off-by: Mathieu Poirier --- drivers/coresight/coresight-etb10.c | 33 +++++++++++++++++++++++---------- 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/drivers/coresight/coresight-etb10.c b/drivers/coresight/coresight-etb10.c index c922d4aded8a..71fd6cdba21c 100644 --- a/drivers/coresight/coresight-etb10.c +++ b/drivers/coresight/coresight-etb10.c @@ -26,6 +26,7 @@ #include #include #include +#include #include "coresight-priv.h" @@ -92,17 +93,11 @@ struct etb_drvdata { static unsigned int etb_get_buffer_depth(struct etb_drvdata *drvdata) { - int ret; u32 depth = 0; - ret = clk_prepare_enable(drvdata->clk); - if (ret) - return ret; - /* RO registers don't need locking */ depth = readl_relaxed(drvdata->base + ETB_RAM_DEPTH_REG); - clk_disable_unprepare(drvdata->clk); return depth; } @@ -144,6 +139,7 @@ static int etb_enable(struct coresight_device *csdev) if (ret) return ret; + pm_runtime_get_sync(drvdata->dev); spin_lock_irqsave(&drvdata->spinlock, flags); etb_enable_hw(drvdata); drvdata->enable = true; @@ -250,8 +246,9 @@ static void etb_disable(struct coresight_device *csdev) etb_disable_hw(drvdata); etb_dump_hw(drvdata); drvdata->enable = false; - spin_unlock_irqrestore(&drvdata->spinlock, flags); + spin_unlock_irqrestore(&drvdata->spinlock, flags); + pm_runtime_put_sync(drvdata->dev); clk_disable_unprepare(drvdata->clk); dev_info(drvdata->dev, "ETB disabled\n"); @@ -266,10 +263,16 @@ static const struct coresight_ops etb_cs_ops = { .sink_ops = &etb_sink_ops, }; -static void etb_dump(struct etb_drvdata *drvdata) +static int etb_dump(struct etb_drvdata *drvdata) { + int ret; unsigned long flags; + ret = clk_prepare_enable(drvdata->clk); + if (ret) + return ret; + + pm_runtime_get_sync(drvdata->dev); spin_lock_irqsave(&drvdata->spinlock, flags); if (drvdata->enable) { etb_disable_hw(drvdata); @@ -277,8 +280,11 @@ static void etb_dump(struct etb_drvdata *drvdata) etb_enable_hw(drvdata); } spin_unlock_irqrestore(&drvdata->spinlock, flags); + pm_runtime_put_sync(drvdata->dev); + clk_disable_unprepare(drvdata->clk); dev_info(drvdata->dev, "ETB dumped\n"); + return 0; } static int etb_open(struct inode *inode, struct file *file) @@ -296,11 +302,14 @@ static int etb_open(struct inode *inode, struct file *file) static ssize_t etb_read(struct file *file, char __user *data, size_t len, loff_t *ppos) { + int ret; u32 depth; struct etb_drvdata *drvdata = container_of(file->private_data, struct etb_drvdata, miscdev); - etb_dump(drvdata); + ret = etb_dump(drvdata); + if (ret) + return ret; depth = drvdata->buffer_depth; if (*ppos + len > depth * 4) @@ -349,6 +358,7 @@ static ssize_t status_show(struct device *dev, if (ret) goto out; + pm_runtime_get_sync(dev); spin_lock_irqsave(&drvdata->spinlock, flags); CS_UNLOCK(drvdata->base); @@ -363,7 +373,7 @@ static ssize_t status_show(struct device *dev, CS_LOCK(drvdata->base); spin_unlock_irqrestore(&drvdata->spinlock, flags); - + pm_runtime_put_sync(dev); clk_disable_unprepare(drvdata->clk); return sprintf(buf, @@ -486,6 +496,9 @@ static int etb_probe(struct amba_device *adev, const struct amba_id *id) if (ret) goto err_misc_register; + pm_runtime_set_suspended(dev); + pm_runtime_put_noidle(dev); + dev_info(dev, "ETB initialized\n"); return 0;