Received: by 10.192.165.148 with SMTP id m20csp2891970imm; Sun, 29 Apr 2018 09:14:08 -0700 (PDT) X-Google-Smtp-Source: AB8JxZowt3WheHqnqIcMmyrSYhRf4y8X38wpqc6++81bll/GZ2Q6rXUZ8FletFflAV+Q13SY2a2K X-Received: by 2002:a17:902:108a:: with SMTP id c10-v6mr9809484pla.111.1525018448630; Sun, 29 Apr 2018 09:14:08 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1525018448; cv=none; d=google.com; s=arc-20160816; b=0YxRj1ciV7u5vgDROM+qLyKQ4zR5z0px2D5DDr8IjVdhdRx5oGF1E00iK4zVLiEmN9 R2WGLiHzoAME23iblBxEj/2sPouIQRhO9YIfS0mmDxFv6lbVmq2ldmSZV5jt5HnZ+X2E Lp7P1coWr3NRE8bqkGGCTPkt+SgXVof9snzlppCmeEtvR3kyezTik2HYweMIpN87mbG3 ZOwKWU4NyPqiNOOOoHLt4j8O3ESIZWcKTsx67ADvxheiDIXtYPqZDL+qhOmiF3X1eEnZ iVVhwRVqmgOoX9Q6u4yEN+Lla47awmNdjYeBnAC5ljXVNQbf5V155GGYKB1sQRzqAHH6 Ph7Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :references:in-reply-to:mime-version:dkim-signature :arc-authentication-results; bh=aKgbh7dSbJQC/mWb5mBYgak55sbWOjw0KceOulx234g=; b=UwyurTgkaWpwcijQkq3jYeRzUu7uCPbrG1Wi2rFMCmnhDm+L+UPfV3q1bcY1vLZGS8 WgZX035XEXmugMjuTHfKeXFkbilOP84XghMWN5qYZ0IIH/EAJRZEbYpuIHqfp1NFvAl6 aw+y5K1DYbgjCC4Lw2XAzw6SQ8vNhBHfAqFngaUZ64bebwO6C/fhbgsYxaPI9MFcMQXU RnGmKYbZ1IB+iz7pCjPvOd97MU6LlvF/XWjb1huDfK3WRLHR/F5s7sqfQjnDJBDVLdyY rPoTxkCwVsTf1LVryWYmCrQSut7gBOpxYHe7bdCkRctZnspYjjNfVpN1Sqwnz65hEgLt TseQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=u3lXgqAb; 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=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id u6-v6si4378140pls.462.2018.04.29.09.13.54; Sun, 29 Apr 2018 09:14:08 -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; dkim=pass header.i=@gmail.com header.s=20161025 header.b=u3lXgqAb; 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=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753857AbeD2QNi (ORCPT + 99 others); Sun, 29 Apr 2018 12:13:38 -0400 Received: from mail-lf0-f66.google.com ([209.85.215.66]:46042 "EHLO mail-lf0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753555AbeD2QNg (ORCPT ); Sun, 29 Apr 2018 12:13:36 -0400 Received: by mail-lf0-f66.google.com with SMTP id y14-v6so8772373lfy.12; Sun, 29 Apr 2018 09:13:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=aKgbh7dSbJQC/mWb5mBYgak55sbWOjw0KceOulx234g=; b=u3lXgqAbPEQRAJiyM7Hn5rks3bzznC0BkqT+LZnrHOB+mhE0a/8QNdQXZxKBL/lzDA QMAAS7UVwtUWtH5UTHHz5bNEmAQrUZ6AkhD1E7wErLmbA1d7FK2lfEdZhkBRw2awSe4H QHDcIZmceXqyJ6tX9pw5trbrfRlhzqCh+TeH7rCogKu5jgRmrUJ49P05yIwf6qWDGiMC vrIEbg0dQiHTlVQVX0xtNK6Zv1XcFGtxRpeupalPB1cJbBw3t0IgfnR2jFX33plH+mWY P2WKW0r3qInRRHPzp1ug0xlWGFdUQgGgklFh2CYZKgb4QvcGEDxWvDBZH6yp3brB3lbN vXvQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=aKgbh7dSbJQC/mWb5mBYgak55sbWOjw0KceOulx234g=; b=AuFoZHHX0EjUIUHrc0PByCwaOVNb79G0kahcqaxkuBX6SmhFRHkD1USrMbnp8J9buL M8EQM4qbLKnp7IP12isDisA0J7/MZWOCN1P3lxyiLQsUuHWixxe2IQC1gU9LUpB/PmKi pbehuM5eD2X19g2EmGu2R05g3J8OESNrAHXlQkMheOW3BM101+2YzJPc7GjRsF1MsVk9 Bbqa7RR9vm4F6VSVmw+E8d7KmNLi11n37Qu50M1DJW1OnCMB+vh/zBDEG5uXfb56Z0ic kGIG97GXwjcmnesxGk8KgKB/IfC8E1LWYgGPzC7Um0Of0sYorw1ztAqrusWxkju4/VeX 3M/Q== X-Gm-Message-State: ALQs6tCFzKkHXOA5rK3HnI819ckmY29zaQhBsbe4KJJYf3qQAxuhrJnJ jB1aSr1WhnRWXxOB6ApdM0V9gcFHXxnMRL7lwXyD X-Received: by 2002:a2e:9b89:: with SMTP id z9-v6mr5968521lji.121.1525018414747; Sun, 29 Apr 2018 09:13:34 -0700 (PDT) MIME-Version: 1.0 Received: by 2002:a19:510d:0:0:0:0:0 with HTTP; Sun, 29 Apr 2018 09:13:04 -0700 (PDT) In-Reply-To: <1524798789-2239-2-git-send-email-linux@roeck-us.net> References: <1524798789-2239-1-git-send-email-linux@roeck-us.net> <1524798789-2239-2-git-send-email-linux@roeck-us.net> From: Gabriel C Date: Sun, 29 Apr 2018 18:13:04 +0200 Message-ID: Subject: Re: [PATCH 2/2] hwmon: (k10temp) Display both Tctl and Tdie To: Guenter Roeck Cc: Clemens Ladisch , Jean Delvare , linux-hwmon@vger.kernel.org, LKML , Brian Woods Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 2018-04-27 5:13 GMT+02:00 Guenter Roeck : > On some AMD CPUs, there is a different between the die temperature > (Tdie) and the reported temperature (Tctl). Tdie is the real measured > temperature, and Tctl is used for fan control. Lets report both for > affected CPUs. > > Signed-off-by: Guenter Roeck > --- > drivers/hwmon/k10temp.c | 55 ++++++++++++++++++++++++++++++++++++++++++------- > 1 file changed, 48 insertions(+), 7 deletions(-) > > diff --git a/drivers/hwmon/k10temp.c b/drivers/hwmon/k10temp.c > index b06bb1f90853..1135b8f1ad0f 100644 > --- a/drivers/hwmon/k10temp.c > +++ b/drivers/hwmon/k10temp.c > @@ -80,6 +80,7 @@ struct k10temp_data { > void (*read_tempreg)(struct pci_dev *pdev, u32 *regval); > int temp_offset; > u32 temp_adjust_mask; > + bool show_tdie; > }; > > struct tctl_offset { > @@ -140,17 +141,24 @@ static void read_tempreg_nb_f17(struct pci_dev *pdev, u32 *regval) > F17H_M01H_REPORTED_TEMP_CTRL_OFFSET, regval); > } > > -static ssize_t temp1_input_show(struct device *dev, > - struct device_attribute *attr, char *buf) > +unsigned int get_raw_temp(struct k10temp_data *data) > { > - struct k10temp_data *data = dev_get_drvdata(dev); > - u32 regval; > unsigned int temp; > + u32 regval; > > data->read_tempreg(data->pdev, ®val); > temp = (regval >> 21) * 125; > if (regval & data->temp_adjust_mask) > temp -= 49000; > + return temp; > +} > + > +static ssize_t temp1_input_show(struct device *dev, > + struct device_attribute *attr, char *buf) > +{ > + struct k10temp_data *data = dev_get_drvdata(dev); > + unsigned int temp = get_raw_temp(data); > + > if (temp > data->temp_offset) > temp -= data->temp_offset; > else > @@ -159,6 +167,23 @@ static ssize_t temp1_input_show(struct device *dev, > return sprintf(buf, "%u\n", temp); > } > > +static ssize_t temp2_input_show(struct device *dev, > + struct device_attribute *devattr, char *buf) > +{ > + struct k10temp_data *data = dev_get_drvdata(dev); > + unsigned int temp = get_raw_temp(data); > + > + return sprintf(buf, "%u\n", temp); > +} > + > +static ssize_t temp_label_show(struct device *dev, > + struct device_attribute *devattr, char *buf) > +{ > + struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); > + > + return sprintf(buf, "%s\n", attr->index ? "Tctl" : "Tdie"); > +} > + > static ssize_t temp1_max_show(struct device *dev, > struct device_attribute *attr, char *buf) > { > @@ -187,16 +212,23 @@ static DEVICE_ATTR_RO(temp1_max); > static SENSOR_DEVICE_ATTR(temp1_crit, S_IRUGO, show_temp_crit, NULL, 0); > static SENSOR_DEVICE_ATTR(temp1_crit_hyst, S_IRUGO, show_temp_crit, NULL, 1); > > +static SENSOR_DEVICE_ATTR(temp1_label, 0444, temp_label_show, NULL, 0); > +static DEVICE_ATTR_RO(temp2_input); > +static SENSOR_DEVICE_ATTR(temp2_label, 0444, temp_label_show, NULL, 1); > + > static umode_t k10temp_is_visible(struct kobject *kobj, > struct attribute *attr, int index) > { > struct device *dev = container_of(kobj, struct device, kobj); > struct k10temp_data *data = dev_get_drvdata(dev); > struct pci_dev *pdev = data->pdev; > + u32 reg; > > - if (index >= 2) { > - u32 reg; > - > + switch (index) { > + case 0 ... 1: /* temp1_input, temp1_max */ > + default: > + break; > + case 2 ... 3: /* temp1_crit, temp1_crit_hyst */ > if (!data->read_htcreg) > return 0; > > @@ -208,6 +240,11 @@ static umode_t k10temp_is_visible(struct kobject *kobj, > data->read_htcreg(data->pdev, ®); > if (!(reg & HTC_ENABLE)) > return 0; > + break; > + case 4 ... 6: /* temp1_label, temp2_input, temp2_label */ > + if (!data->show_tdie) > + return 0; > + break; > } > return attr->mode; > } > @@ -217,6 +254,9 @@ static struct attribute *k10temp_attrs[] = { > &dev_attr_temp1_max.attr, > &sensor_dev_attr_temp1_crit.dev_attr.attr, > &sensor_dev_attr_temp1_crit_hyst.dev_attr.attr, > + &sensor_dev_attr_temp1_label.dev_attr.attr, > + &dev_attr_temp2_input.attr, > + &sensor_dev_attr_temp2_label.dev_attr.attr, > NULL > }; > > @@ -292,6 +332,7 @@ static int k10temp_probe(struct pci_dev *pdev, > } else if (boot_cpu_data.x86 == 0x17) { > data->temp_adjust_mask = 0x80000; > data->read_tempreg = read_tempreg_nb_f17; > + data->show_tdie = true; > } else { > data->read_htcreg = read_htcreg_pci; > data->read_tempreg = read_tempreg_pci; > -- > 2.7.4 > On my EPYC box Tdie and Tctl seems to have the same value. However the code is working fine and both values are displayed now. Tested-by: Gabriel Craciunescu Regards