Fixed swapped SOC/Core values for Zen2, Fixed Amperage/Wattage formula for Zen2
This commit is contained in:
parent
ce2c2bbeee
commit
4264bc72e4
56
zenpower.c
56
zenpower.c
|
@ -49,6 +49,7 @@ struct zenpower_data {
|
|||
u32 svi_core_addr;
|
||||
u32 svi_soc_addr;
|
||||
int temp_offset;
|
||||
bool zen2;
|
||||
};
|
||||
|
||||
struct tctl_offset {
|
||||
|
@ -81,22 +82,28 @@ static u32 plane_to_vcc(u32 p)
|
|||
return 1550 - ((625 * vdd_cor) / 100);
|
||||
}
|
||||
|
||||
static u32 get_core_current(u32 plane)
|
||||
static u32 get_core_current(u32 plane, bool zen2)
|
||||
{
|
||||
u32 idd_cor;
|
||||
u32 idd_cor, fc;
|
||||
idd_cor = plane & 0xff;
|
||||
// I = 1039.211 * iddcor
|
||||
|
||||
return (1039211 * idd_cor) / 1000;
|
||||
// I = 1039.211 * iddcor
|
||||
// I = 658.823 * iddcor
|
||||
fc = zen2 ? 658823 : 1039211;
|
||||
|
||||
return (fc * idd_cor) / 1000;
|
||||
}
|
||||
|
||||
static u32 get_soc_current(u32 plane)
|
||||
static u32 get_soc_current(u32 plane, bool zen2)
|
||||
{
|
||||
u32 idd_cor;
|
||||
u32 idd_cor, fc;
|
||||
idd_cor = plane & 0xff;
|
||||
// I = 360.772 * iddcor
|
||||
|
||||
return (360772 * idd_cor) / 1000;
|
||||
// I = 360.772 * iddcor
|
||||
// I = 294.3 * iddcor
|
||||
fc = zen2 ? 294300 : 360772;
|
||||
|
||||
return (fc * idd_cor) / 1000;
|
||||
}
|
||||
|
||||
static unsigned int get_raw_temp(struct zenpower_data *data)
|
||||
|
@ -171,7 +178,7 @@ static ssize_t curr1_input_show(struct device *dev,
|
|||
u32 plane;
|
||||
|
||||
data->read_amdsmn_addr(data->pdev, data->svi_core_addr, &plane);
|
||||
return sprintf(buf, "%d\n", get_core_current(plane) );
|
||||
return sprintf(buf, "%d\n", get_core_current(plane, data->zen2));
|
||||
}
|
||||
|
||||
static ssize_t curr2_input_show(struct device *dev,
|
||||
|
@ -181,7 +188,7 @@ static ssize_t curr2_input_show(struct device *dev,
|
|||
u32 plane;
|
||||
|
||||
data->read_amdsmn_addr(data->pdev, data->svi_soc_addr, &plane);
|
||||
return sprintf(buf, "%d\n", get_soc_current(plane) );
|
||||
return sprintf(buf, "%d\n", get_soc_current(plane, data->zen2));
|
||||
}
|
||||
|
||||
static ssize_t power1_input_show(struct device *dev,
|
||||
|
@ -191,7 +198,8 @@ static ssize_t power1_input_show(struct device *dev,
|
|||
u32 plane;
|
||||
|
||||
data->read_amdsmn_addr(data->pdev, data->svi_core_addr, &plane);
|
||||
return sprintf(buf, "%d\n", get_core_current(plane) * plane_to_vcc(plane) );
|
||||
return sprintf(buf, "%d\n",
|
||||
get_core_current(plane, data->zen2) * plane_to_vcc(plane));
|
||||
}
|
||||
|
||||
static ssize_t power2_input_show(struct device *dev,
|
||||
|
@ -201,7 +209,8 @@ static ssize_t power2_input_show(struct device *dev,
|
|||
u32 plane;
|
||||
|
||||
data->read_amdsmn_addr(data->pdev, data->svi_soc_addr, &plane);
|
||||
return sprintf(buf, "%d\n", get_soc_current(plane) * plane_to_vcc(plane) );
|
||||
return sprintf(buf, "%d\n",
|
||||
get_soc_current(plane, data->zen2) * plane_to_vcc(plane));
|
||||
}
|
||||
|
||||
int static debug_addrs_arr[] = {
|
||||
|
@ -310,21 +319,34 @@ static int zenpower_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
|||
struct device *dev = &pdev->dev;
|
||||
struct zenpower_data *data;
|
||||
struct device *hwmon_dev;
|
||||
bool swapped_addr = false;
|
||||
int i;
|
||||
|
||||
data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL);
|
||||
if (!data)
|
||||
return -ENOMEM;
|
||||
|
||||
data->zen2 = false;
|
||||
data->pdev = pdev;
|
||||
data->read_amdsmn_addr = read_amdsmn_addr;
|
||||
#ifndef SWAP_CORE_SOC
|
||||
data->svi_core_addr = F17H_M01H_SVI_TEL_PLANE0;
|
||||
data->svi_soc_addr = F17H_M01H_SVI_TEL_PLANE1;
|
||||
#else
|
||||
|
||||
if (boot_cpu_data.x86 == 0x17 && boot_cpu_data.x86_model == 0x71) {
|
||||
data->zen2 = true;
|
||||
swapped_addr = true;
|
||||
}
|
||||
|
||||
#ifdef SWAP_CORE_SOC
|
||||
swapped_addr = !swapped_addr;
|
||||
#endif
|
||||
|
||||
if (swapped_addr) {
|
||||
data->svi_core_addr = F17H_M01H_SVI_TEL_PLANE1;
|
||||
data->svi_soc_addr = F17H_M01H_SVI_TEL_PLANE0;
|
||||
#endif
|
||||
}
|
||||
else {
|
||||
data->svi_core_addr = F17H_M01H_SVI_TEL_PLANE0;
|
||||
data->svi_soc_addr = F17H_M01H_SVI_TEL_PLANE1;
|
||||
}
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(tctl_offset_table); i++) {
|
||||
const struct tctl_offset *entry = &tctl_offset_table[i];
|
||||
|
|
Loading…
Reference in a new issue