Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753262AbbD1FlL (ORCPT ); Tue, 28 Apr 2015 01:41:11 -0400 Received: from e23smtp07.au.ibm.com ([202.81.31.140]:46277 "EHLO e23smtp07.au.ibm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751269AbbD1FlH (ORCPT ); Tue, 28 Apr 2015 01:41:07 -0400 Message-ID: <553F1D3A.7010505@linux.vnet.ibm.com> Date: Tue, 28 Apr 2015 11:10:10 +0530 From: Shilpasri G Bhat User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.5.0 MIME-Version: 1.0 To: Preeti U Murthy , linux-kernel@vger.kernel.org, linuxppc-dev@ozlabs.org CC: "Rafael J. Wysocki" , Viresh Kumar , linux-pm@vger.kernel.org Subject: Re: [PATCH 2/2] cpufreq: powernv: Register for OCC related opal_message notification References: <1429722265-2953-1-git-send-email-shilpa.bhat@linux.vnet.ibm.com> <1429722265-2953-2-git-send-email-shilpa.bhat@linux.vnet.ibm.com> <5538DE7E.1020805@linux.vnet.ibm.com> In-Reply-To: <5538DE7E.1020805@linux.vnet.ibm.com> Content-Type: text/plain; charset=iso-8859-6 Content-Transfer-Encoding: 7bit X-TM-AS-MML: disable X-Content-Scanned: Fidelis XPS MAILER x-cbid: 15042805-0025-0000-0000-0000016631C3 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 4394 Lines: 129 Hi Preeti, On 04/23/2015 05:28 PM, Preeti U Murthy wrote: > Hi Shilpa, > > On 04/22/2015 10:34 PM, Shilpasri G Bhat wrote: >> OCC is an On-Chip-Controller which takes care of power and thermal >> safety of the chip. During runtime due to power failure or >> overtemperature the OCC may throttle the frequencies of the CPUs to >> remain within the power budget. >> >> We want the cpufreq driver to be aware of such situations to be able >> to report it to the user. We register to opal_message_notifier to >> receive OCC messages from opal. >> >> powernv_cpufreq_throttle_check() reports any frequency throttling and >> this patch will report the reason or event that caused throttling. We >> can be throttled if OCC is reset or OCC limits Pmax due to power or >> thermal reasons. We are also notified of unthrottling after an OCC >> reset or if OCC restores Pmax on the chip. >> >> Signed-off-by: Shilpasri G Bhat >> CC: "Rafael J. Wysocki" >> CC: Viresh Kumar >> CC: linux-pm@vger.kernel.org >> --- >> drivers/cpufreq/powernv-cpufreq.c | 70 ++++++++++++++++++++++++++++++++++++++- >> 1 file changed, 69 insertions(+), 1 deletion(-) >> >> diff --git a/drivers/cpufreq/powernv-cpufreq.c b/drivers/cpufreq/powernv-cpufreq.c >> index ebef0d8..5718765 100644 >> --- a/drivers/cpufreq/powernv-cpufreq.c >> +++ b/drivers/cpufreq/powernv-cpufreq.c >> @@ -32,6 +32,7 @@ >> #include >> #include >> #include /* Required for cpu_sibling_mask() in UP configs */ >> +#include >> >> #define POWERNV_MAX_PSTATES 256 >> #define PMSR_PSAFE_ENABLE (1UL << 30) >> @@ -40,7 +41,7 @@ >> #define PMSR_LP(x) ((x >> 48) & 0xFF) >> >> static struct cpufreq_frequency_table powernv_freqs[POWERNV_MAX_PSTATES+1]; >> -static bool rebooting, throttled; >> +static bool rebooting, throttled, occ_reset; >> >> /* >> * Note: The set of pstates consists of contiguous integers, the >> @@ -395,6 +396,72 @@ static struct notifier_block powernv_cpufreq_reboot_nb = { >> .notifier_call = powernv_cpufreq_reboot_notifier, >> }; >> >> +static char throttle_reason[6][50] = { "No throttling", >> + "Power Cap", >> + "Processor Over Temperature", >> + "Power Supply Failure", >> + "OverCurrent", >> + "OCC Reset" >> + }; >> + >> +static int powernv_cpufreq_occ_msg(struct notifier_block *nb, >> + unsigned long msg_type, void *msg) >> +{ >> + struct opal_msg *occ_msg = msg; >> + uint64_t token; >> + uint64_t chip_id, reason; >> + >> + if (msg_type != OPAL_MSG_OCC) >> + return 0; >> + token = be64_to_cpu(occ_msg->params[0]); >> + switch (token) { >> + case 0: >> + occ_reset = true; >> + /* >> + * powernv_cpufreq_throttle_check() is called in >> + * target() callback which can detect the throttle state >> + * for governors like ondemand. >> + * But static governors will not call target() often thus >> + * report throttling here. >> + */ >> + if (!throttled) { >> + throttled = true; >> + pr_crit("CPU Frequency is throttled\n"); >> + } >> + pr_info("OCC in Reset\n"); >> + break; >> + case 1: >> + pr_info("OCC is Loaded\n"); >> + break; >> + case 2: > > You may want to replace the numbers with macros. Like > OCC_RESET,OCC_LOAD, OCC_THROTTLE for better readability. Okay will do. > >> + chip_id = be64_to_cpu(occ_msg->params[1]); >> + reason = be64_to_cpu(occ_msg->params[2]); >> + if (occ_reset) { >> + occ_reset = false; >> + throttled = false; >> + pr_info("OCC is Active\n"); >> + /* Sanity check for static governors */ >> + powernv_cpufreq_throttle_check(smp_processor_id()); >> + } else if (reason) { >> + throttled = true; >> + pr_info("Pmax reduced due to %s on chip %x\n", >> + throttle_reason[reason], (int)chip_id); >> + } else { >> + throttled = false; >> + pr_info("%s on chip %x\n", >> + throttle_reason[reason], (int)chip_id); > > Don't you need a powernv_cpufreq_throttle_check() here? Or is it ok to > rely on the OCC notification for unthrottle ? Yes we need to check. Fixing this in v2. Thanks and Regards, Shilpa -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/