Skip to content

Commit bd72d20

Browse files
groeckjackpot51
authored andcommitted
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 cdadfa9 commit bd72d20

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>
@@ -110,10 +103,7 @@ struct k10temp_data {
110103
int temp_offset;
111104
u32 temp_adjust_mask;
112105
u32 show_temp;
113-
u32 svi_addr[2];
114106
bool is_zen;
115-
bool show_current;
116-
int cfactor[2];
117107
};
118108

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

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

215-
static const char *k10temp_in_label[] = {
216-
"Vcore",
217-
"Vsoc",
218-
};
219-
220-
static const char *k10temp_curr_label[] = {
221-
"Icore",
222-
"Isoc",
223-
};
224-
225195
static int k10temp_read_labels(struct device *dev,
226196
enum hwmon_sensor_types type,
227197
u32 attr, int channel, const char **str)
@@ -230,50 +200,6 @@ static int k10temp_read_labels(struct device *dev,
230200
case hwmon_temp:
231201
*str = k10temp_temp_label[channel];
232202
break;
233-
case hwmon_in:
234-
*str = k10temp_in_label[channel];
235-
break;
236-
case hwmon_curr:
237-
*str = k10temp_curr_label[channel];
238-
break;
239-
default:
240-
return -EOPNOTSUPP;
241-
}
242-
return 0;
243-
}
244-
245-
static int k10temp_read_curr(struct device *dev, u32 attr, int channel,
246-
long *val)
247-
{
248-
struct k10temp_data *data = dev_get_drvdata(dev);
249-
u32 regval;
250-
251-
switch (attr) {
252-
case hwmon_curr_input:
253-
amd_smn_read(amd_pci_dev_to_node_id(data->pdev),
254-
data->svi_addr[channel], &regval);
255-
*val = DIV_ROUND_CLOSEST(data->cfactor[channel] *
256-
(regval & 0xff),
257-
1000);
258-
break;
259-
default:
260-
return -EOPNOTSUPP;
261-
}
262-
return 0;
263-
}
264-
265-
static int k10temp_read_in(struct device *dev, u32 attr, int channel, long *val)
266-
{
267-
struct k10temp_data *data = dev_get_drvdata(dev);
268-
u32 regval;
269-
270-
switch (attr) {
271-
case hwmon_in_input:
272-
amd_smn_read(amd_pci_dev_to_node_id(data->pdev),
273-
data->svi_addr[channel], &regval);
274-
regval = (regval >> 16) & 0xff;
275-
*val = DIV_ROUND_CLOSEST(155000 - regval * 625, 100);
276-
break;
277203
default:
278204
return -EOPNOTSUPP;
279205
}
@@ -332,10 +258,6 @@ static int k10temp_read(struct device *dev, enum hwmon_sensor_types type,
332258
switch (type) {
333259
case hwmon_temp:
334260
return k10temp_read_temp(dev, attr, channel, val);
335-
case hwmon_in:
336-
return k10temp_read_in(dev, attr, channel, val);
337-
case hwmon_curr:
338-
return k10temp_read_curr(dev, attr, channel, val);
339261
default:
340262
return -EOPNOTSUPP;
341263
}
@@ -384,11 +306,6 @@ static umode_t k10temp_is_visible(const void *_data,
384306
return 0;
385307
}
386308
break;
387-
case hwmon_in:
388-
case hwmon_curr:
389-
if (!data->show_current)
390-
return 0;
391-
break;
392309
default:
393310
return 0;
394311
}
@@ -588,20 +505,10 @@ static int k10temp_probe(struct pci_dev *pdev, const struct pci_device_id *id)
588505
case 0x8: /* Zen+ */
589506
case 0x11: /* Zen APU */
590507
case 0x18: /* Zen+ APU */
591-
data->show_current = !is_threadripper() && !is_epyc();
592-
data->svi_addr[0] = F17H_M01H_SVI_TEL_PLANE0;
593-
data->svi_addr[1] = F17H_M01H_SVI_TEL_PLANE1;
594-
data->cfactor[0] = F17H_M01H_CFACTOR_ICORE;
595-
data->cfactor[1] = F17H_M01H_CFACTOR_ISOC;
596508
k10temp_get_ccd_support(pdev, data, 4);
597509
break;
598510
case 0x31: /* Zen2 Threadripper */
599511
case 0x71: /* Zen2 */
600-
data->show_current = !is_threadripper() && !is_epyc();
601-
data->cfactor[0] = F17H_M31H_CFACTOR_ICORE;
602-
data->cfactor[1] = F17H_M31H_CFACTOR_ISOC;
603-
data->svi_addr[0] = F17H_M31H_SVI_TEL_PLANE0;
604-
data->svi_addr[1] = F17H_M31H_SVI_TEL_PLANE1;
605512
k10temp_get_ccd_support(pdev, data, 8);
606513
break;
607514
}
@@ -613,11 +520,6 @@ static int k10temp_probe(struct pci_dev *pdev, const struct pci_device_id *id)
613520

614521
switch (boot_cpu_data.x86_model) {
615522
case 0x0 ... 0x1: /* Zen3 */
616-
data->show_current = true;
617-
data->svi_addr[0] = F19H_M01_SVI_TEL_PLANE0;
618-
data->svi_addr[1] = F19H_M01_SVI_TEL_PLANE1;
619-
data->cfactor[0] = F19H_M01H_CFACTOR_ICORE;
620-
data->cfactor[1] = F19H_M01H_CFACTOR_ISOC;
621523
k10temp_get_ccd_support(pdev, data, 8);
622524
break;
623525
}

0 commit comments

Comments
 (0)