Received: by 10.223.164.202 with SMTP id h10csp1167478wrb; Sun, 26 Nov 2017 21:39:35 -0800 (PST) X-Google-Smtp-Source: AGs4zMZghvqm0uGlmX+wGxw6vkHXEpdNChQ0WTBQuK0fE8H07qc577/PVjDhNyGOvbBUsCxVoDOc X-Received: by 10.98.5.196 with SMTP id 187mr19572085pff.66.1511761175118; Sun, 26 Nov 2017 21:39:35 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1511761175; cv=none; d=google.com; s=arc-20160816; b=h1J/p9wKFjjSY39ILTfNaun2iCllM1Rt4gfhbTSQK+4dmvdxqOuPFZs9jDij7NVBJa OCb0M1GkbgPSjJmTX3leiFLIX4YGRYZUyHgacD7wdlgaAxeokwKxwBHe9qAuJJ+H525S x0giLqTR7m9nZGbYNMvm4ECLdNpkcz+l4YxZvABUhBmAVsGD2CvUmUmVpTrwcncuiWx8 BYr6//npW14Udr7oWftpOJ2CNlX/j8UCHr2Sp6yIklNNjyqK1PkpZQXuMaZZJgSo66SK emdp+9/m7s6z9bkzsPvOoMq/3upqLYp1Qoj1W4HG8cW4ukhvvI8KHh/8fWRBmi2PhFmZ dAIw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from :arc-authentication-results; bh=CJPFDuk7omh7SmsnUr++J0cTT+nqqL5p/U76oDxtJd0=; b=IJ0QNj4MTozLHIZuT1ukMy/jk3gzPs6Z7uZHozZioMFh9Um1p8V2UZoy9sfe2UXzlq uzeXqlZHDQuXNQngeBSwTVXwD21MjMiV5zcjF4jUEDr3C2nSQek0XdX8QPJp9C66Or9N E93GCV8KjkXHOmjVNF+zvFVoRw5P7aTLPw9xULi7CIXDBNOKH90qTFqUi7qwkIBXWfiE UmgZN36GPu6YQeygzHzGz54CRbGPe+oJvdI5j+iBhT2mTt/4XxM/zSuVUH9Y6RWTJSIj 5X0AfYKZlaAXCT8UaYlfWdPPlpHysMEUYMvIwCGRw9JU/CO7EmK+qHF4+D3uxGXEOkd5 WBlA== ARC-Authentication-Results: i=1; mx.google.com; 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=fail (p=NONE sp=NONE dis=NONE) header.from=ibm.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 64si22775645plk.144.2017.11.26.21.39.23; Sun, 26 Nov 2017 21:39:35 -0800 (PST) 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; 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=fail (p=NONE sp=NONE dis=NONE) header.from=ibm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751322AbdK0Fgm (ORCPT + 77 others); Mon, 27 Nov 2017 00:36:42 -0500 Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5]:50942 "EHLO mx0a-001b2d01.pphosted.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1750837AbdK0Fgl (ORCPT ); Mon, 27 Nov 2017 00:36:41 -0500 Received: from pps.filterd (m0098413.ppops.net [127.0.0.1]) by mx0b-001b2d01.pphosted.com (8.16.0.21/8.16.0.21) with SMTP id vAR5YDdg049733 for ; Mon, 27 Nov 2017 00:36:40 -0500 Received: from e06smtp15.uk.ibm.com (e06smtp15.uk.ibm.com [195.75.94.111]) by mx0b-001b2d01.pphosted.com with ESMTP id 2eg8j712nq-1 (version=TLSv1.2 cipher=AES256-SHA bits=256 verify=NOT) for ; Mon, 27 Nov 2017 00:36:40 -0500 Received: from localhost by e06smtp15.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Mon, 27 Nov 2017 05:36:38 -0000 Received: from b06cxnps4076.portsmouth.uk.ibm.com (9.149.109.198) by e06smtp15.uk.ibm.com (192.168.101.145) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Mon, 27 Nov 2017 05:36:35 -0000 Received: from d06av26.portsmouth.uk.ibm.com (d06av26.portsmouth.uk.ibm.com [9.149.105.62]) by b06cxnps4076.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id vAR5aZKl42664004; Mon, 27 Nov 2017 05:36:35 GMT Received: from d06av26.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id CED2EAE053; Mon, 27 Nov 2017 05:29:44 +0000 (GMT) Received: from d06av26.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 9A45BAE04D; Mon, 27 Nov 2017 05:29:43 +0000 (GMT) Received: from oc4502181600.in.ibm.com (unknown [9.124.35.34]) by d06av26.portsmouth.uk.ibm.com (Postfix) with ESMTP; Mon, 27 Nov 2017 05:29:43 +0000 (GMT) From: Shilpasri G Bhat To: linuxppc-dev@lists.ozlabs.org Cc: linux-kernel@vger.kernel.org, mpe@ellerman.id.au, ego@linux.vnet.ibm.com, akshay.adiga@linux.vnet.ibm.com, svaidy@linux.vnet.ibm.com, Shilpasri G Bhat Subject: [PATCH] powerpc/powernv : Add support to enable sensor groups Date: Mon, 27 Nov 2017 11:06:28 +0530 X-Mailer: git-send-email 1.8.3.1 X-TM-AS-GCONF: 00 x-cbid: 17112705-0020-0000-0000-000003D0CE07 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 17112705-0021-0000-0000-000042662E54 Message-Id: <1511760988-10377-1-git-send-email-shilpa.bhat@linux.vnet.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:,, definitions=2017-11-27_03:,, signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 malwarescore=0 suspectscore=1 phishscore=0 bulkscore=0 spamscore=0 clxscore=1011 lowpriorityscore=0 impostorscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1709140000 definitions=main-1711270077 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Adds support to enable/disable a sensor group. This can be used to select the sensor groups that needs to be copied to main memory by OCC. Sensor groups like power, temperature, current, voltage, frequency, utilization can be enabled/disabled at runtime. Signed-off-by: Shilpasri G Bhat --- The skiboot patch for the opal call is posted below: https://lists.ozlabs.org/pipermail/skiboot/2017-November/009713.html arch/powerpc/include/asm/opal-api.h | 3 +- arch/powerpc/include/asm/opal.h | 1 + .../powerpc/platforms/powernv/opal-sensor-groups.c | 97 +++++++++++++++------- arch/powerpc/platforms/powernv/opal-wrappers.S | 1 + 4 files changed, 73 insertions(+), 29 deletions(-) diff --git a/arch/powerpc/include/asm/opal-api.h b/arch/powerpc/include/asm/opal-api.h index 233c750..bdca15a 100644 --- a/arch/powerpc/include/asm/opal-api.h +++ b/arch/powerpc/include/asm/opal-api.h @@ -201,7 +201,8 @@ #define OPAL_SET_POWER_SHIFT_RATIO 155 #define OPAL_SENSOR_GROUP_CLEAR 156 #define OPAL_PCI_SET_P2P 157 -#define OPAL_LAST 157 +#define OPAL_SENSOR_GROUP_ENABLE 158 +#define OPAL_LAST 158 /* Device tree flags */ diff --git a/arch/powerpc/include/asm/opal.h b/arch/powerpc/include/asm/opal.h index 0c545f7..c3c7e77 100644 --- a/arch/powerpc/include/asm/opal.h +++ b/arch/powerpc/include/asm/opal.h @@ -280,6 +280,7 @@ int64_t opal_imc_counters_init(uint32_t type, uint64_t address, int opal_get_power_shift_ratio(u32 handle, int token, u32 *psr); int opal_set_power_shift_ratio(u32 handle, int token, u32 psr); int opal_sensor_group_clear(u32 group_hndl, int token); +int opal_sensor_group_enable(u32 group_hndl, int token, bool enable); s64 opal_signal_system_reset(s32 cpu); diff --git a/arch/powerpc/platforms/powernv/opal-sensor-groups.c b/arch/powerpc/platforms/powernv/opal-sensor-groups.c index 7e5a235..2f95380 100644 --- a/arch/powerpc/platforms/powernv/opal-sensor-groups.c +++ b/arch/powerpc/platforms/powernv/opal-sensor-groups.c @@ -23,6 +23,7 @@ struct sg_attr { u32 handle; + u32 opal_no; struct kobj_attribute attr; }; @@ -32,34 +33,44 @@ struct sg_attr { struct sg_attr *sgattrs; } *sgs; -static ssize_t sg_store(struct kobject *kobj, struct kobj_attribute *attr, - const char *buf, size_t count) +static int sensor_group_clear(u32 handle) { - struct sg_attr *sattr = container_of(attr, struct sg_attr, attr); struct opal_msg msg; - u32 data; - int ret, token; - - ret = kstrtoint(buf, 0, &data); - if (ret) - return ret; - - if (data != 1) - return -EINVAL; + int token, ret; token = opal_async_get_token_interruptible(); - if (token < 0) { - pr_devel("Failed to get token\n"); + if (token < 0) return token; + + ret = opal_sensor_group_clear(handle, token); + if (ret == OPAL_ASYNC_COMPLETION) { + ret = opal_async_wait_response(token, &msg); + if (ret) { + pr_devel("Failed to wait for the async response\n"); + ret = -EIO; + goto out; + } + ret = opal_error_code(opal_get_async_rc(msg)); + } else { + ret = opal_error_code(ret); } - ret = mutex_lock_interruptible(&sg_mutex); - if (ret) - goto out_token; +out: + opal_async_release_token(token); + return ret; +} + +static int sensor_group_enable(u32 handle, int enable) +{ + struct opal_msg msg; + int token, ret; + + token = opal_async_get_token_interruptible(); + if (token < 0) + return token; - ret = opal_sensor_group_clear(sattr->handle, token); - switch (ret) { - case OPAL_ASYNC_COMPLETION: + ret = opal_sensor_group_enable(handle, token, enable); + if (ret == OPAL_ASYNC_COMPLETION) { ret = opal_async_wait_response(token, &msg); if (ret) { pr_devel("Failed to wait for the async response\n"); @@ -67,20 +78,48 @@ static ssize_t sg_store(struct kobject *kobj, struct kobj_attribute *attr, goto out; } ret = opal_error_code(opal_get_async_rc(msg)); - if (!ret) - ret = count; + } else { + ret = opal_error_code(ret); + } + +out: + opal_async_release_token(token); + return ret; +} + +static ssize_t sg_store(struct kobject *kobj, struct kobj_attribute *attr, + const char *buf, size_t count) +{ + struct sg_attr *sattr = container_of(attr, struct sg_attr, attr); + u32 data; + int ret; + + ret = kstrtoint(buf, 0, &data); + if (ret) + return ret; + + ret = mutex_lock_interruptible(&sg_mutex); + if (ret) + return ret; + + ret = -EINVAL; + switch (sattr->opal_no) { + case OPAL_SENSOR_GROUP_CLEAR: + if (data == 1) + ret = sensor_group_clear(sattr->handle); break; - case OPAL_SUCCESS: - ret = count; + case OPAL_SENSOR_GROUP_ENABLE: + if (data == 0 || data == 1) + ret = sensor_group_enable(sattr->handle, data); break; default: - ret = opal_error_code(ret); + break; } -out: + if (!ret) + ret = count; + mutex_unlock(&sg_mutex); -out_token: - opal_async_release_token(token); return ret; } @@ -91,11 +130,13 @@ static ssize_t sg_store(struct kobject *kobj, struct kobj_attribute *attr, const char *buf, size_t count); } ops_info[] = { { OPAL_SENSOR_GROUP_CLEAR, "clear", sg_store }, + { OPAL_SENSOR_GROUP_ENABLE, "enable", sg_store }, }; static void add_attr(int handle, struct sg_attr *attr, int index) { attr->handle = handle; + attr->opal_no = ops_info[index].opal_no; sysfs_attr_init(&attr->attr.attr); attr->attr.attr.name = ops_info[index].attr_name; attr->attr.attr.mode = 0220; diff --git a/arch/powerpc/platforms/powernv/opal-wrappers.S b/arch/powerpc/platforms/powernv/opal-wrappers.S index 6f4b00a2..ee9205f 100644 --- a/arch/powerpc/platforms/powernv/opal-wrappers.S +++ b/arch/powerpc/platforms/powernv/opal-wrappers.S @@ -320,3 +320,4 @@ OPAL_CALL(opal_set_powercap, OPAL_SET_POWERCAP); OPAL_CALL(opal_get_power_shift_ratio, OPAL_GET_POWER_SHIFT_RATIO); OPAL_CALL(opal_set_power_shift_ratio, OPAL_SET_POWER_SHIFT_RATIO); OPAL_CALL(opal_sensor_group_clear, OPAL_SENSOR_GROUP_CLEAR); +OPAL_CALL(opal_sensor_group_enable, OPAL_SENSOR_GROUP_ENABLE); -- 1.8.3.1 From 1584762067508660372@xxx Wed Nov 22 10:34:41 +0000 2017 X-GM-THRID: 1584762067508660372 X-Gmail-Labels: Inbox,Category Promotions,HistoricalUnread