Skip to content

Commit 0a4e668

Browse files
committed
hwmon: (k10temp) Remove support for displaying voltage and current on Zen CPUs
Voltages and current are reported by Zen CPUs. However, the means to do so is undocumented, changes from CPU to CPU, and the raw data is not calibrated. Calibration information is available, but again not documented. This results in less than perfect user experience, up to concerns that loading the driver might possibly damage the hardware (by reporting out-of range voltages). Effectively support for reporting voltages and current is not maintainable. Drop it. Cc: Artem S. Tashkinov <aros@gmx.com> Cc: Wei Huang <wei.huang2@amd.com> Tested-by: Wei Huang <wei.huang2@amd.com> Signed-off-by: Guenter Roeck <linux@roeck-us.net>
1 parent 8653b77 commit 0a4e668

File tree

1 file changed

+0
-98
lines changed

1 file changed

+0
-98
lines changed

drivers/hwmon/k10temp.c

Lines changed: 0 additions & 98 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,6 @@
1111
* convert raw register values is from https://github.com/ocerman/zenpower.
1212
* The information is not confirmed from chip datasheets, but experiments
1313
* suggest that it provides reasonable temperature values.
14-
* - Register addresses to read chip voltage and current are also from
15-
* https://github.com/ocerman/zenpower, and not confirmed from chip
16-
* datasheets. Current calibration is board specific and not typically
17-
* shared by board vendors. For this reason, current values are
18-
* normalized to report 1A/LSB for core current and and 0.25A/LSB for SoC
19-
* current. Reported values can be adjusted using the sensors configuration
20-
* file.
2114
*/
2215

2316
#include <linux/bitops.h>
@@ -109,10 +102,7 @@ struct k10temp_data {
109102
int temp_offset;
110103
u32 temp_adjust_mask;
111104
u32 show_temp;
112-
u32 svi_addr[2];
113105
bool is_zen;
114-
bool show_current;
115-
int cfactor[2];
116106
};
117107

118108
#define TCTL_BIT 0
@@ -137,16 +127,6 @@ static const struct tctl_offset tctl_offset_table[] = {
137127
{ 0x17, "AMD Ryzen Threadripper 29", 27000 }, /* 29{20,50,70,90}[W]X */
138128
};
139129

140-
static bool is_threadripper(void)
141-
{
142-
return strstr(boot_cpu_data.x86_model_id, "Threadripper");
143-
}
144-
145-
static bool is_epyc(void)
146-
{
147-
return strstr(boot_cpu_data.x86_model_id, "EPYC");
148-
}
149-
150130
static void read_htcreg_pci(struct pci_dev *pdev, u32 *regval)
151131
{
152132
pci_read_config_dword(pdev, REG_HARDWARE_THERMAL_CONTROL, regval);
@@ -211,16 +191,6 @@ static const char *k10temp_temp_label[] = {
211191
"Tccd8",
212192
};
213193

214-
static const char *k10temp_in_label[] = {
215-
"Vcore",
216-
"Vsoc",
217-
};
218-
219-
static const char *k10temp_curr_label[] = {
220-
"Icore",
221-
"Isoc",
222-
};
223-
224194
static int k10temp_read_labels(struct device *dev,
225195
enum hwmon_sensor_types type,
226196
u32 attr, int channel, const char **str)
@@ -229,50 +199,6 @@ static int k10temp_read_labels(struct device *dev,
229199
case hwmon_temp:
230200
*str = k10temp_temp_label[channel];
231201
break;
232-
case hwmon_in:
233-
*str = k10temp_in_label[channel];
234-
break;
235-
case hwmon_curr:
236-
*str = k10temp_curr_label[channel];
237-
break;
238-
default:
239-
return -EOPNOTSUPP;
240-
}
241-
return 0;
242-
}
243-
244-
static int k10temp_read_curr(struct device *dev, u32 attr, int channel,
245-
long *val)
246-
{
247-
struct k10temp_data *data = dev_get_drvdata(dev);
248-
u32 regval;
249-
250-
switch (attr) {
251-
case hwmon_curr_input:
252-
amd_smn_read(amd_pci_dev_to_node_id(data->pdev),
253-
data->svi_addr[channel], &regval);
254-
*val = DIV_ROUND_CLOSEST(data->cfactor[channel] *
255-
(regval & 0xff),
256-
1000);
257-
break;
258-
default:
259-
return -EOPNOTSUPP;
260-
}
261-
return 0;
262-
}
263-
264-
static int k10temp_read_in(struct device *dev, u32 attr, int channel, long *val)
265-
{
266-
struct k10temp_data *data = dev_get_drvdata(dev);
267-
u32 regval;
268-
269-
switch (attr) {
270-
case hwmon_in_input:
271-
amd_smn_read(amd_pci_dev_to_node_id(data->pdev),
272-
data->svi_addr[channel], &regval);
273-
regval = (regval >> 16) & 0xff;
274-
*val = DIV_ROUND_CLOSEST(155000 - regval * 625, 100);
275-
break;
276202
default:
277203
return -EOPNOTSUPP;
278204
}
@@ -331,10 +257,6 @@ static int k10temp_read(struct device *dev, enum hwmon_sensor_types type,
331257
switch (type) {
332258
case hwmon_temp:
333259
return k10temp_read_temp(dev, attr, channel, val);
334-
case hwmon_in:
335-
return k10temp_read_in(dev, attr, channel, val);
336-
case hwmon_curr:
337-
return k10temp_read_curr(dev, attr, channel, val);
338260
default:
339261
return -EOPNOTSUPP;
340262
}
@@ -383,11 +305,6 @@ static umode_t k10temp_is_visible(const void *_data,
383305
return 0;
384306
}
385307
break;
386-
case hwmon_in:
387-
case hwmon_curr:
388-
if (!data->show_current)
389-
return 0;
390-
break;
391308
default:
392309
return 0;
393310
}
@@ -517,20 +434,10 @@ static int k10temp_probe(struct pci_dev *pdev, const struct pci_device_id *id)
517434
case 0x8: /* Zen+ */
518435
case 0x11: /* Zen APU */
519436
case 0x18: /* Zen+ APU */
520-
data->show_current = !is_threadripper() && !is_epyc();
521-
data->svi_addr[0] = F17H_M01H_SVI_TEL_PLANE0;
522-
data->svi_addr[1] = F17H_M01H_SVI_TEL_PLANE1;
523-
data->cfactor[0] = F17H_M01H_CFACTOR_ICORE;
524-
data->cfactor[1] = F17H_M01H_CFACTOR_ISOC;
525437
k10temp_get_ccd_support(pdev, data, 4);
526438
break;
527439
case 0x31: /* Zen2 Threadripper */
528440
case 0x71: /* Zen2 */
529-
data->show_current = !is_threadripper() && !is_epyc();
530-
data->cfactor[0] = F17H_M31H_CFACTOR_ICORE;
531-
data->cfactor[1] = F17H_M31H_CFACTOR_ISOC;
532-
data->svi_addr[0] = F17H_M31H_SVI_TEL_PLANE0;
533-
data->svi_addr[1] = F17H_M31H_SVI_TEL_PLANE1;
534441
k10temp_get_ccd_support(pdev, data, 8);
535442
break;
536443
}
@@ -542,11 +449,6 @@ static int k10temp_probe(struct pci_dev *pdev, const struct pci_device_id *id)
542449

543450
switch (boot_cpu_data.x86_model) {
544451
case 0x0 ... 0x1: /* Zen3 */
545-
data->show_current = true;
546-
data->svi_addr[0] = F19H_M01_SVI_TEL_PLANE0;
547-
data->svi_addr[1] = F19H_M01_SVI_TEL_PLANE1;
548-
data->cfactor[0] = F19H_M01H_CFACTOR_ICORE;
549-
data->cfactor[1] = F19H_M01H_CFACTOR_ISOC;
550452
k10temp_get_ccd_support(pdev, data, 8);
551453
break;
552454
}

0 commit comments

Comments
 (0)