Received: by 10.192.165.148 with SMTP id m20csp231746imm; Thu, 26 Apr 2018 20:14:46 -0700 (PDT) X-Google-Smtp-Source: AB8JxZrR8n6RSQ6rm7gJVj+cQY73LnUvF5UEUQwh/vOqgHfhGqHMXNBwttWWxv8TtZs+LGfCRB4u X-Received: by 2002:a17:902:8d81:: with SMTP id v1-v6mr604375plo.383.1524798886799; Thu, 26 Apr 2018 20:14:46 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1524798886; cv=none; d=google.com; s=arc-20160816; b=JnjgawzpqAUVIQNvACGqMjjVxnc/q9mNV6cPOdu0XvahUbTzYTHTZNebSfV5xtajc+ P1U8xSDHg4CFO5ZLfrEZu2fVVZ4ZsiHMtfnCRTVC/jtuWeydwDleYF0yPaw/UnA5HkJB pmxmCjdWWOFeVxT+2GGmZ1lBX9Xz1Qg/YCDzXMUdWVVOWpJ0FaFmn0GpRcCkiDnLbQDD zi5nA11TvPCRMp0BEduLT+ojYxsVjVyM39TLX3g6ZZQAh5kUMFY3l9XOXrOdqvxrO2eA lfbJEE2cuowby/B0SFwFpnGICEpAYcEM+rP3Xnh5gtOI5vdyapep9UIfzj4KeuMCAFEx Ty+Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature:arc-authentication-results; bh=u3/X0e+ICoTfmIYSopeK6uBLyolppkQKwf74JwparIk=; b=ghgUh8F6s5tq7dLb9ZHov1NQqum6VvG4nvjoiNxpA+mXDoNLBCPixl0YshkJSOBcb+ /fxvl2bTstmKgzu/tnb8JwCfqdM27HqH/A8Pr6deGqIfA8bW3yPB6WQ0LEfWOffTtX3I wIBac9mjEHsAM3VJFguaenXgUT9g6/yYBLkKpOI3Ol5179EdELUTu+S9HscD0VepW0LF WbGLZ2Ge7rBApUAURp78Gh3diw9FAXC8zzoZ16oFzDFJGJ0lA40kl4Tz8czis0Jtup6N MaBYTr1q6+m/+ZjdDv66tO/PevraiSeSniLHIP96h25MeZRJ6D6FlcX98nxJOPwAR6qr 8ofA== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@roeck-us.net header.s=default header.b=gK3y1UJr; 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 e65si370090pfa.74.2018.04.26.20.14.32; Thu, 26 Apr 2018 20:14:46 -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=fail header.i=@roeck-us.net header.s=default header.b=gK3y1UJr; 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 S1757414AbeD0DNQ (ORCPT + 99 others); Thu, 26 Apr 2018 23:13:16 -0400 Received: from bh-25.webhostbox.net ([208.91.199.152]:34101 "EHLO bh-25.webhostbox.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757354AbeD0DNM (ORCPT ); Thu, 26 Apr 2018 23:13:12 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=roeck-us.net; s=default; h=References:In-Reply-To:Message-Id:Date:Subject: Cc:To:From:Sender:Reply-To:MIME-Version:Content-Type: Content-Transfer-Encoding:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id: List-Help:List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=u3/X0e+ICoTfmIYSopeK6uBLyolppkQKwf74JwparIk=; b=gK3y1UJryX3FcFFZFKPy19eFQ bkJKC03/iOcjPnMmu5PFWbBmZ0HDoOmXrZp3kJfK3PT6Ndg4lq/laxAJ+Na6LEaLQSEet4Lvjp50N URfLEVfROpAhVxbmU1NfFym06FHkRLU2C2zRW58gOlYACZ1w5/aajXYuoeFp+bhy/TqNeRYZs8Nwn mj2E5kZcGIDmD6vhfjPU4ZVqn6kXrxmT3Kw1ugO0LS7rzN6ARm/nryw7PzTdxjH4wLB9FOos8DN3v mVubXbhKSrPZmz3pqsEVBng6Thqj2Mrd/j6jAhMq9cyvtX/kdrpcfQmeNyjni3TicdJ0h/ewfKuD6 zO9Fgzk1w==; Received: from 108-223-40-66.lightspeed.sntcca.sbcglobal.net ([108.223.40.66]:49462 helo=localhost) by bh-25.webhostbox.net with esmtpa (Exim 4.89) (envelope-from ) id 1fBtot-000EQ6-Pm; Fri, 27 Apr 2018 03:13:12 +0000 From: Guenter Roeck To: Clemens Ladisch Cc: Jean Delvare , linux-hwmon@vger.kernel.org, linux-kernel@vger.kernel.org, Brian Woods , Guenter Roeck Subject: [PATCH 2/2] hwmon: (k10temp) Display both Tctl and Tdie Date: Thu, 26 Apr 2018 20:13:09 -0700 Message-Id: <1524798789-2239-2-git-send-email-linux@roeck-us.net> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1524798789-2239-1-git-send-email-linux@roeck-us.net> References: <1524798789-2239-1-git-send-email-linux@roeck-us.net> X-Authenticated_sender: guenter@roeck-us.net X-OutGoing-Spam-Status: No, score=-1.0 X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - bh-25.webhostbox.net X-AntiAbuse: Original Domain - vger.kernel.org X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - roeck-us.net X-Get-Message-Sender-Via: bh-25.webhostbox.net: authenticated_id: guenter@roeck-us.net X-Authenticated-Sender: bh-25.webhostbox.net: guenter@roeck-us.net X-Source: X-Source-Args: X-Source-Dir: Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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