hwmon patches for v5.11 (take 2)
The only patch in this series is removal of voltage and current reporting for AMD Zen CPUs. Turns out that was not worth the trouble. -----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEEiHPvMQj9QTOCiqgVyx8mb86fmYEFAl/iHNkACgkQyx8mb86f mYGxEA/9EGs9zyAuIOtNbyTIHYuFWdm5kd+cU4aADgEkuqjMu8TYDmmDRQdUeSNV Dvzb+pHJ+u23GpsAV0N1zHTnVrPaoJG7nVCgM2LU4cvgem1/oSFaK7RNh3vwQ68U qCq38R66jp0Fa/dEjLN++cP8akx4f9taql3kqb4j1ZrnudDG8IpFwRBxgJA3ad2e pWUqDBnDoxF82vmN8FKTIPB8AAR/WcZO/UNadgzUiUJroOJFiblC4gvXxebVYrzh uHNeiAbcs+JdvQXtwVpuDCaDDIFDpDtplovYTf7LkTIEwoYnaiVK4MAtasj+Gi7S SLHqA76PAuG6HfwSpQb2ePzcmOrLgjKVG6rXlO579RfxmTOdvB/pa9+dQha58ifl ljtS75FwddQ1eiLGXp8X+4sapjVjN27FIbeGMlBPdhIkvxLN61ypzRkSky1apPYz q1HArfkxqT4RBNX9y3M1y+wMcoK5XY+DjESfLBSNKrV/SY6BeBQCTlDFM4mrK9RE ZioAMEJ+fFX3vatx0kDTv9LcJYGfpiycW5MieoQEHoIZxhhORHJaIFxf//MB+dNQ GQ7pW9zRSmqQ+aawMg+BhHjKiXO9V+SXv3RJz6aovVPAbaiq/vMcx2zpRnB2zmh3 LLvQB5j9e5QJs6NGShTSN8dGk8D9SYmhdy4EXgfChrD0m40MXag= =uCAC -----END PGP SIGNATURE----- Merge tag 'hwmon-for-v5.11-take2' of git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging Pull another hwmon update from Guenter Roeck: "The only patch in this series is removal of voltage and current reporting for AMD Zen CPUs. Turns out that was not worth the trouble, because it's all undocumented and not maintainable" * tag 'hwmon-for-v5.11-take2' of git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging: hwmon: (k10temp) Remove support for displaying voltage and current on Zen CPUs
This commit is contained in:
commit
4e31dcc0a9
|
@ -11,13 +11,6 @@
|
|||
* convert raw register values is from https://github.com/ocerman/zenpower.
|
||||
* The information is not confirmed from chip datasheets, but experiments
|
||||
* suggest that it provides reasonable temperature values.
|
||||
* - Register addresses to read chip voltage and current are also from
|
||||
* https://github.com/ocerman/zenpower, and not confirmed from chip
|
||||
* datasheets. Current calibration is board specific and not typically
|
||||
* shared by board vendors. For this reason, current values are
|
||||
* normalized to report 1A/LSB for core current and and 0.25A/LSB for SoC
|
||||
* current. Reported values can be adjusted using the sensors configuration
|
||||
* file.
|
||||
*/
|
||||
|
||||
#include <linux/bitops.h>
|
||||
|
@ -109,10 +102,7 @@ struct k10temp_data {
|
|||
int temp_offset;
|
||||
u32 temp_adjust_mask;
|
||||
u32 show_temp;
|
||||
u32 svi_addr[2];
|
||||
bool is_zen;
|
||||
bool show_current;
|
||||
int cfactor[2];
|
||||
};
|
||||
|
||||
#define TCTL_BIT 0
|
||||
|
@ -137,16 +127,6 @@ static const struct tctl_offset tctl_offset_table[] = {
|
|||
{ 0x17, "AMD Ryzen Threadripper 29", 27000 }, /* 29{20,50,70,90}[W]X */
|
||||
};
|
||||
|
||||
static bool is_threadripper(void)
|
||||
{
|
||||
return strstr(boot_cpu_data.x86_model_id, "Threadripper");
|
||||
}
|
||||
|
||||
static bool is_epyc(void)
|
||||
{
|
||||
return strstr(boot_cpu_data.x86_model_id, "EPYC");
|
||||
}
|
||||
|
||||
static void read_htcreg_pci(struct pci_dev *pdev, u32 *regval)
|
||||
{
|
||||
pci_read_config_dword(pdev, REG_HARDWARE_THERMAL_CONTROL, regval);
|
||||
|
@ -211,16 +191,6 @@ static const char *k10temp_temp_label[] = {
|
|||
"Tccd8",
|
||||
};
|
||||
|
||||
static const char *k10temp_in_label[] = {
|
||||
"Vcore",
|
||||
"Vsoc",
|
||||
};
|
||||
|
||||
static const char *k10temp_curr_label[] = {
|
||||
"Icore",
|
||||
"Isoc",
|
||||
};
|
||||
|
||||
static int k10temp_read_labels(struct device *dev,
|
||||
enum hwmon_sensor_types type,
|
||||
u32 attr, int channel, const char **str)
|
||||
|
@ -229,50 +199,6 @@ static int k10temp_read_labels(struct device *dev,
|
|||
case hwmon_temp:
|
||||
*str = k10temp_temp_label[channel];
|
||||
break;
|
||||
case hwmon_in:
|
||||
*str = k10temp_in_label[channel];
|
||||
break;
|
||||
case hwmon_curr:
|
||||
*str = k10temp_curr_label[channel];
|
||||
break;
|
||||
default:
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int k10temp_read_curr(struct device *dev, u32 attr, int channel,
|
||||
long *val)
|
||||
{
|
||||
struct k10temp_data *data = dev_get_drvdata(dev);
|
||||
u32 regval;
|
||||
|
||||
switch (attr) {
|
||||
case hwmon_curr_input:
|
||||
amd_smn_read(amd_pci_dev_to_node_id(data->pdev),
|
||||
data->svi_addr[channel], ®val);
|
||||
*val = DIV_ROUND_CLOSEST(data->cfactor[channel] *
|
||||
(regval & 0xff),
|
||||
1000);
|
||||
break;
|
||||
default:
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int k10temp_read_in(struct device *dev, u32 attr, int channel, long *val)
|
||||
{
|
||||
struct k10temp_data *data = dev_get_drvdata(dev);
|
||||
u32 regval;
|
||||
|
||||
switch (attr) {
|
||||
case hwmon_in_input:
|
||||
amd_smn_read(amd_pci_dev_to_node_id(data->pdev),
|
||||
data->svi_addr[channel], ®val);
|
||||
regval = (regval >> 16) & 0xff;
|
||||
*val = DIV_ROUND_CLOSEST(155000 - regval * 625, 100);
|
||||
break;
|
||||
default:
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
@ -331,10 +257,6 @@ static int k10temp_read(struct device *dev, enum hwmon_sensor_types type,
|
|||
switch (type) {
|
||||
case hwmon_temp:
|
||||
return k10temp_read_temp(dev, attr, channel, val);
|
||||
case hwmon_in:
|
||||
return k10temp_read_in(dev, attr, channel, val);
|
||||
case hwmon_curr:
|
||||
return k10temp_read_curr(dev, attr, channel, val);
|
||||
default:
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
@ -383,11 +305,6 @@ static umode_t k10temp_is_visible(const void *_data,
|
|||
return 0;
|
||||
}
|
||||
break;
|
||||
case hwmon_in:
|
||||
case hwmon_curr:
|
||||
if (!data->show_current)
|
||||
return 0;
|
||||
break;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
|
@ -517,20 +434,10 @@ static int k10temp_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
|||
case 0x8: /* Zen+ */
|
||||
case 0x11: /* Zen APU */
|
||||
case 0x18: /* Zen+ APU */
|
||||
data->show_current = !is_threadripper() && !is_epyc();
|
||||
data->svi_addr[0] = F17H_M01H_SVI_TEL_PLANE0;
|
||||
data->svi_addr[1] = F17H_M01H_SVI_TEL_PLANE1;
|
||||
data->cfactor[0] = F17H_M01H_CFACTOR_ICORE;
|
||||
data->cfactor[1] = F17H_M01H_CFACTOR_ISOC;
|
||||
k10temp_get_ccd_support(pdev, data, 4);
|
||||
break;
|
||||
case 0x31: /* Zen2 Threadripper */
|
||||
case 0x71: /* Zen2 */
|
||||
data->show_current = !is_threadripper() && !is_epyc();
|
||||
data->cfactor[0] = F17H_M31H_CFACTOR_ICORE;
|
||||
data->cfactor[1] = F17H_M31H_CFACTOR_ISOC;
|
||||
data->svi_addr[0] = F17H_M31H_SVI_TEL_PLANE0;
|
||||
data->svi_addr[1] = F17H_M31H_SVI_TEL_PLANE1;
|
||||
k10temp_get_ccd_support(pdev, data, 8);
|
||||
break;
|
||||
}
|
||||
|
@ -542,11 +449,6 @@ static int k10temp_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
|||
|
||||
switch (boot_cpu_data.x86_model) {
|
||||
case 0x0 ... 0x1: /* Zen3 */
|
||||
data->show_current = true;
|
||||
data->svi_addr[0] = F19H_M01_SVI_TEL_PLANE0;
|
||||
data->svi_addr[1] = F19H_M01_SVI_TEL_PLANE1;
|
||||
data->cfactor[0] = F19H_M01H_CFACTOR_ICORE;
|
||||
data->cfactor[1] = F19H_M01H_CFACTOR_ISOC;
|
||||
k10temp_get_ccd_support(pdev, data, 8);
|
||||
break;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue