From patchwork Wed Jul 29 10:53:07 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Viresh Kumar X-Patchwork-Id: 51646 Return-Path: X-Original-To: linaro@patches.linaro.org Delivered-To: linaro@patches.linaro.org Received: from mail-la0-f70.google.com (mail-la0-f70.google.com [209.85.215.70]) by patches.linaro.org (Postfix) with ESMTPS id 9C65022DB5 for ; Wed, 29 Jul 2015 10:54:51 +0000 (UTC) Received: by lahh5 with SMTP id h5sf779950lah.0 for ; Wed, 29 Jul 2015 03:54:50 -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: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=Pxo3ng7wNg4xK7kd8X+q9YkplycLhKkfKOJYtGpLom0=; b=kJEcNbGgviniIGJ264LJ7VbAoxYNLfs8d0vIUlzwlcE2y3KYJAiDXJr2GlEFBGN0Y1 mnrZoQ+ZvGObvmr4++06/UFT6tewD59q7b5YklfalfOkxVCIR0+3kzO122bBKOgNAcZV bhkfHdrqX+0IPk5bSg4CHYcxfbTlT99F8q5LLR7zqM4zE7YibTqZ/LYWnXvj/7zSiEQ1 /UkbXnAcoVcmsofwA71Vu3A2INrK3iDl4aBqK/pdOmFZTuJ0ZOCGYco0xEEzPRp96fDB r9+uHiHzNES/fHbDHQUBGjqRLIir70XQUQAemMXXtddyIXXaHh6D3BxzHHyPC7M1rCS7 HBuw== X-Gm-Message-State: ALoCoQlwEllHUyllrc0ya0MiWfpid0cyhQK2LFt8WF/c/d1zcBMrv+C1DQSNrjDsNSp77U1visLb X-Received: by 10.152.182.226 with SMTP id eh2mr15714718lac.0.1438167290598; Wed, 29 Jul 2015 03:54:50 -0700 (PDT) MIME-Version: 1.0 X-BeenThere: patchwork-forward@linaro.org Received: by 10.152.116.36 with SMTP id jt4ls29358lab.4.gmail; Wed, 29 Jul 2015 03:54:50 -0700 (PDT) X-Received: by 10.152.10.148 with SMTP id i20mr37007375lab.63.1438167290412; Wed, 29 Jul 2015 03:54:50 -0700 (PDT) Received: from mail-la0-f48.google.com (mail-la0-f48.google.com. [209.85.215.48]) by mx.google.com with ESMTPS id p1si21187107laj.140.2015.07.29.03.54.50 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 29 Jul 2015 03:54:50 -0700 (PDT) Received-SPF: pass (google.com: domain of patch+caf_=patchwork-forward=linaro.org@linaro.org designates 209.85.215.48 as permitted sender) client-ip=209.85.215.48; Received: by lafd3 with SMTP id d3so3823341laf.1 for ; Wed, 29 Jul 2015 03:54:50 -0700 (PDT) X-Received: by 10.112.145.169 with SMTP id sv9mr24809008lbb.73.1438167290303; Wed, 29 Jul 2015 03:54:50 -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.112.7.198 with SMTP id l6csp2675973lba; Wed, 29 Jul 2015 03:54:49 -0700 (PDT) X-Received: by 10.50.43.137 with SMTP id w9mr4638227igl.30.1438167287200; Wed, 29 Jul 2015 03:54:47 -0700 (PDT) Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id y5si60902025par.87.2015.07.29.03.54.46; Wed, 29 Jul 2015 03:54:47 -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; Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753164AbbG2Kyo (ORCPT + 27 others); Wed, 29 Jul 2015 06:54:44 -0400 Received: from mail-pa0-f49.google.com ([209.85.220.49]:35977 "EHLO mail-pa0-f49.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753119AbbG2Kyl (ORCPT ); Wed, 29 Jul 2015 06:54:41 -0400 Received: by pachj5 with SMTP id hj5so3906824pac.3 for ; Wed, 29 Jul 2015 03:54:41 -0700 (PDT) X-Received: by 10.66.159.1 with SMTP id wy1mr94398167pab.103.1438167281177; Wed, 29 Jul 2015 03:54:41 -0700 (PDT) Received: from localhost ([122.171.186.190]) by smtp.gmail.com with ESMTPSA id bo10sm40096401pdb.83.2015.07.29.03.54.39 (version=TLSv1.2 cipher=RC4-SHA bits=128/128); Wed, 29 Jul 2015 03:54:40 -0700 (PDT) From: Viresh Kumar To: Rafael Wysocki , sboyd@codeaurora.org Cc: linaro-kernel@lists.linaro.org, linux-pm@vger.kernel.org, rob.herring@linaro.org, arnd.bergmann@linaro.org, nm@ti.com, broonie@kernel.org, mturquette@baylibre.com, Sudeep.Holla@arm.com, viswanath.puttagunta@linaro.org, l.stach@pengutronix.de, thomas.petazzoni@free-electrons.com, linux-arm-kernel@lists.infradead.org, ta.omasab@gmail.com, kesavan.abhilash@gmail.com, khilman@linaro.org, santosh.shilimkar@oracle.com, b.zolnierkie@samsung.com, Tomasz Figa , Javier Martinez Canillas , Thomas Abraham , Viresh Kumar , Greg Kroah-Hartman , Len Brown , linux-kernel@vger.kernel.org (open list), Pavel Machek Subject: [PATCH V3 12/16] PM / OPP: add dev_pm_opp_is_turbo() helper Date: Wed, 29 Jul 2015 16:23:07 +0530 Message-Id: <1e1445bc7f79eb4adc5bf1a0f5eddf118dc60345.1438166099.git.viresh.kumar@linaro.org> X-Mailer: git-send-email 2.4.0 In-Reply-To: References: In-Reply-To: References: Sender: linux-kernel-owner@vger.kernel.org Precedence: list List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Removed-Original-Auth: Dkim didn't pass. X-Original-Sender: viresh.kumar@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.48 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: , From: Bartlomiej Zolnierkiewicz Add dev_pm_opp_is_turbo() helper to verify if an opp is to be used only for turbo mode or not. Cc: Tomasz Figa Cc: Michael Turquette Cc: Javier Martinez Canillas Cc: Thomas Abraham Signed-off-by: Bartlomiej Zolnierkiewicz Signed-off-by: Viresh Kumar --- drivers/base/power/opp.c | 34 ++++++++++++++++++++++++++++++++++ include/linux/pm_opp.h | 7 +++++++ 2 files changed, 41 insertions(+) diff --git a/drivers/base/power/opp.c b/drivers/base/power/opp.c index 9bc4e7c21deb..da8ec7f824d5 100644 --- a/drivers/base/power/opp.c +++ b/drivers/base/power/opp.c @@ -281,6 +281,40 @@ unsigned long dev_pm_opp_get_freq(struct dev_pm_opp *opp) EXPORT_SYMBOL_GPL(dev_pm_opp_get_freq); /** + * dev_pm_opp_is_turbo() - Returns if opp is turbo OPP or not + * @opp: opp for which turbo mode is being verified + * + * Turbo OPPs are not for normal use, and can be enabled (under certain + * conditions) for short duration of times to finish high throughput work + * quickly. Running on them for longer times may overheat the chip. + * + * Return: true if opp is turbo opp, else false. + * + * Locking: This function must be called under rcu_read_lock(). opp is a rcu + * protected pointer. This means that opp which could have been fetched by + * opp_find_freq_{exact,ceil,floor} functions is valid as long as we are + * under RCU lock. The pointer returned by the opp_find_freq family must be + * used in the same section as the usage of this function with the pointer + * prior to unlocking with rcu_read_unlock() to maintain the integrity of the + * pointer. + */ +bool dev_pm_opp_is_turbo(struct dev_pm_opp *opp) +{ + struct dev_pm_opp *tmp_opp; + + opp_rcu_lockdep_assert(); + + tmp_opp = rcu_dereference(opp); + if (unlikely(IS_ERR_OR_NULL(tmp_opp)) || !tmp_opp->available) { + pr_err("%s: Invalid parameters\n", __func__); + return false; + } + + return tmp_opp->turbo; +} +EXPORT_SYMBOL_GPL(dev_pm_opp_is_turbo); + +/** * dev_pm_opp_get_max_clock_latency() - Get max clock latency in nanoseconds * @dev: device for which we do this operation * diff --git a/include/linux/pm_opp.h b/include/linux/pm_opp.h index bb52fae5b921..cab7ba55bedb 100644 --- a/include/linux/pm_opp.h +++ b/include/linux/pm_opp.h @@ -30,6 +30,8 @@ unsigned long dev_pm_opp_get_voltage(struct dev_pm_opp *opp); unsigned long dev_pm_opp_get_freq(struct dev_pm_opp *opp); +bool dev_pm_opp_is_turbo(struct dev_pm_opp *opp); + int dev_pm_opp_get_opp_count(struct device *dev); unsigned long dev_pm_opp_get_max_clock_latency(struct device *dev); @@ -63,6 +65,11 @@ static inline unsigned long dev_pm_opp_get_freq(struct dev_pm_opp *opp) return 0; } +static inline bool dev_pm_opp_is_turbo(struct dev_pm_opp *opp) +{ + return false; +} + static inline int dev_pm_opp_get_opp_count(struct device *dev) { return 0;