Received: by 2002:a25:ad19:0:0:0:0:0 with SMTP id y25csp9971286ybi; Wed, 24 Jul 2019 13:17:15 -0700 (PDT) X-Google-Smtp-Source: APXvYqxNlfjpa11peEvrHoepzuPnz3Y6nY+wYSi2e0fgf1bjaZ6kT+SBiGJBJm62U6mcTK25r5/r X-Received: by 2002:a17:902:f089:: with SMTP id go9mr87237564plb.81.1563999435773; Wed, 24 Jul 2019 13:17:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1563999435; cv=none; d=google.com; s=arc-20160816; b=e5nAcsnWWp/p3iB63+2I8gjVn9HR8qLiae2tICZSUyBCUDWqb+1NNOWvx3qbU0FVa1 QDOeHjWSsxmBPXdVAATzGJXE1MhRwM7YdX07AVXgOnLT90esxj0OlejWgQu6Z+Yr1WT6 wTowGWvpbJmbQtIX7GveK/D8w6pTtyQu/t9V1/+k71TiH9KZ11HfD6h09j2pF38fqqNg FC5qiTeJUnXX/jYOuGwyEcmF0F+U1zn+9pjiKUoNeEao7deYfjs4FjeUY8KYXDRpekAa z6j9PAiFBAYsMxK5Mjt+ok5SbMhTmq3SQpW/GMqVjuMOYPYyRXTA/5OJXfpZqdYazLvw RQ7Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:user-agent:references :in-reply-to:date:cc:to:from:subject:message-id; bh=ayNhlDgtlC5a9AfLpS0lprQCBeocXABaInada7umbpQ=; b=auGXCT6WO9CAn+Msf4QjYp3WsFV1ualuWCtTGi07xPSvKStxIgomL7Mcwqb+KqMsKH LDxDH54irRyyzp6LBuNbGeuyRg3m9qbw04T/p37WFwEoRlrE/82U6jvwHT8tOl21IZuZ 7M3/ncjulTptsbFbBcV/sZNLTjZSwb4IW11hvqGh7FfB26ECLtSonEn38OJXTF4pkpRK hq2BIdjY5paYUZL5XB5mIHLj/FcwQS6umB3pNcqnxzGurGKSaHB8kHzV8IlNYX+YGNpe JElEQ7JcyrM653fY19Eda5d7Z0gdSRvEsL/8eb3iCsrPYPGL1julT0D76EIn/Ggoypl+ AGFQ== 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id x9si8548579plv.182.2019.07.24.13.17.00; Wed, 24 Jul 2019 13:17:15 -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; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2391729AbfGXTw1 (ORCPT + 99 others); Wed, 24 Jul 2019 15:52:27 -0400 Received: from s3.sipsolutions.net ([144.76.43.62]:35156 "EHLO sipsolutions.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388294AbfGXTwX (ORCPT ); Wed, 24 Jul 2019 15:52:23 -0400 Received: by sipsolutions.net with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1hqNJ5-0004Yr-16; Wed, 24 Jul 2019 21:52:11 +0200 Message-ID: <7f13681e20034516103a9559d394289a6975aed4.camel@sipsolutions.net> Subject: Re: [PATCH] drivers: thermal: processor_thermal_device: Export sysfs inteface for TCC offset From: Benjamin Berg To: Srinivas Pandruvada , rui.zhang@intel.com, edubezval@gmail.com Cc: linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org Date: Wed, 24 Jul 2019 21:52:06 +0200 In-Reply-To: <20190723010302.18048-1-srinivas.pandruvada@linux.intel.com> References: <20190723010302.18048-1-srinivas.pandruvada@linux.intel.com> Content-Type: multipart/signed; micalg="pgp-sha256"; protocol="application/pgp-signature"; boundary="=-Gs75zxF5lC00YPwVB/aa" User-Agent: Evolution 3.32.4 (3.32.4-1.fc30) MIME-Version: 1.0 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org --=-Gs75zxF5lC00YPwVB/aa Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Tested-by: Benjamin Berg Hi, this patch allows performance improvements of some machines. It would be nice if this could still make 5.3. Benjamin On Mon, 2019-07-22 at 18:03 -0700, Srinivas Pandruvada wrote: > This change exports an interface to read tcc offset and allow writing if > the platform is not locked. >=20 > Refer to Intel SDM for details on the MSR: MSR_TEMPERATURE_TARGET. > Here TCC Activation Offset (R/W) bits allow temperature offset in degrees > in relation to TjMAX. >=20 > This change will be useful for improving performance from user space for > some platforms, if the current offset is not optimal. >=20 > Signed-off-by: Srinivas Pandruvada > --- > .../processor_thermal_device.c | 91 > ++++++++++++++++++- > 1 file changed, 87 insertions(+), 4 deletions(-) >=20 > diff --git > a/drivers/thermal/intel/int340x_thermal/processor_thermal_device.c > b/drivers/thermal/intel/int340x_thermal/processor_thermal_device.c > index 213ab3cc6b80..a35635129fed 100644 > --- > a/drivers/thermal/intel/int340x_thermal/processor_thermal_device.c > +++ > b/drivers/thermal/intel/int340x_thermal/processor_thermal_device.c > @@ -137,6 +137,72 @@ static const struct attribute_group > power_limit_attribute_group =3D { > .name =3D "power_limits" > }; > =20 > +static ssize_t tcc_offset_degree_celsius_show(struct device *dev, > + struct device_attribute *attr, char > *buf) > +{ > + u64 val; > + int err; > + > + err =3D rdmsrl_safe(MSR_IA32_TEMPERATURE_TARGET, &val); > + if (err) > + return err; > + > + val =3D (val >> 24) & 0xff; > + return sprintf(buf, "%d\n", (int)val); > +} > + > +static int tcc_offset_update(int tcc) > +{ > + u64 val; > + int err; > + > + if (!tcc) > + return -EINVAL; > + > + err =3D rdmsrl_safe(MSR_IA32_TEMPERATURE_TARGET, &val); > + if (err) > + return err; > + > + val =3D ~GENMASK_ULL(31, 24); > + val =3D (tcc & 0xff) << 24; > + > + err =3D wrmsrl_safe(MSR_IA32_TEMPERATURE_TARGET, val); > + if (err) > + return err; > + > + return 0; > +} > + > +static int tcc_offset_save; > + > +static ssize_t tcc_offset_degree_celsius_store(struct device *dev, > + struct device_attribute *attr, const > char *buf, > + size_t count) > +{ > + u64 val; > + int tcc, err; > + > + err =3D rdmsrl_safe(MSR_PLATFORM_INFO, &val); > + if (err) > + return err; > + > + if (!(val & BIT(30))) > + return -EACCES; > + > + if (kstrtoint(buf, 0, &tcc)) > + return -EINVAL; > + > + err =3D tcc_offset_update(tcc); > + if (err) > + return err; > + > + tcc_offset_save =3D tcc; > + > + return count; > +} > + > +static DEVICE_ATTR_RW(tcc_offset_degree_celsius); > + > static int stored_tjmax; /* since it is fixed, we can have local > storage */ > =20 > static int get_tjmax(void) > @@ -332,6 +398,7 @@ static void proc_thermal_remove(struct > proc_thermal_device *proc_priv) > acpi_remove_notify_handler(proc_priv->adev->handle, > ACPI_DEVICE_NOTIFY, > proc_thermal_notify); > int340x_thermal_zone_remove(proc_priv->int340x_zone); > + sysfs_remove_file(&proc_priv->dev->kobj, > &dev_attr_tcc_offset_degree_celsius.attr); > sysfs_remove_group(&proc_priv->dev->kobj, > &power_limit_attribute_group); > } > @@ -355,8 +422,15 @@ static int int3401_add(struct platform_device > *pdev) > =20 > dev_info(&pdev->dev, "Creating sysfs group for > PROC_THERMAL_PLATFORM_DEV\n"); > =20 > - return sysfs_create_group(&pdev->dev.kobj, > - &power_limit_attribute_group); > + ret =3D sysfs_create_file(&pdev->dev.kobj, > &dev_attr_tcc_offset_degree_celsius.attr); > + if (ret) > + return ret; > + > + ret =3D sysfs_create_group(&pdev->dev.kobj, > &power_limit_attribute_group); > + if (ret) > + sysfs_remove_file(&pdev->dev.kobj, > &dev_attr_tcc_offset_degree_celsius.attr); > + > + return ret; > } > =20 > static int int3401_remove(struct platform_device *pdev) > @@ -584,8 +658,15 @@ static int proc_thermal_pci_probe(struct > pci_dev *pdev, > =20 > dev_info(&pdev->dev, "Creating sysfs group for > PROC_THERMAL_PCI\n"); > =20 > - return sysfs_create_group(&pdev->dev.kobj, > - &power_limit_attribute_group); > + ret =3D sysfs_create_file(&pdev->dev.kobj, > &dev_attr_tcc_offset_degree_celsius.attr); > + if (ret) > + return ret; > + > + ret =3D sysfs_create_group(&pdev->dev.kobj, > &power_limit_attribute_group); > + if (ret) > + sysfs_remove_file(&pdev->dev.kobj, > &dev_attr_tcc_offset_degree_celsius.attr); > + > + return ret; > } > =20 > static void proc_thermal_pci_remove(struct pci_dev *pdev) > @@ -611,6 +692,8 @@ static int proc_thermal_resume(struct device > *dev) > proc_dev =3D dev_get_drvdata(dev); > proc_thermal_read_ppcc(proc_dev); > =20 > + tcc_offset_update(tcc_offset_save); > + > return 0; > } > #else --=-Gs75zxF5lC00YPwVB/aa Content-Type: application/pgp-signature; name="signature.asc" Content-Description: This is a digitally signed message part Content-Transfer-Encoding: 7bit -----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEED2NO4vMS33W8E4AFq6ZWhpmFY3AFAl04tucACgkQq6ZWhpmF Y3B3WQ//TVtdQypLx4QvRa7Z/y/chYF/Drv92Xz0YIGh4SyxvEY7/6NWsRZnllqc RG9iQ4HtyEFO5oJK47kGTF86VQFPhAqXLMsG6J90mQTJfaVLhXfee8t2tPTxFwcd HLmRYbIPea1ImO6joVy9L0TEZdh6mNgxuD6Kh2o5HFhYwA0e78nidHnv+e2oAV+m ppOWRZnGHPfColTCyCL8yjL5Z1R3lWjtMVJ1tnP8wI9evcoQ7CMs4qJNglsoW6LP /cfHkUb9O2ALBcmj1UIxJaQWAlmp0gn34g9OBylUq1zfQGGYhPw+f5gUmejl8/3J 71cE3qV0O45/0i+zn97xNC2drGxCB0aDoaSO/03/ssL0j/SIB/WQrax0husFB3LO ndisfMQQ4wYRZxzz2v7AXzJVDNKrYAYqj3NA/s7eW/4SrZB9zj0hnYzhAcYk4wLT NdMKzasuPIPMLhNJ9WdnjH9nA9dtP0nlFydh54SZyylH64c8fUxiIW7VI9vrxOwL dp1DB0Aqz8eTwEwRsu3EVXyGWvlXoE+bHMV+NFlkpw36/+EGWzFuJ/pBlJHHxny/ gBsTJSUJHueIE0XhxM+cIg5jtgzsooO9QCDzwTV8/bSLiDXJkBMlfSOJIWDqyoLL SALSHulh/zeduG9rNvACWMl1ihxNOwbysRjgn694nfOtwtgbmys= =QUhc -----END PGP SIGNATURE----- --=-Gs75zxF5lC00YPwVB/aa--