Skip to content

Commit 0e3f52b

Browse files
superm1groeck
authored andcommitted
hwmon: (k10temp) Rework the temperature offset calculation
Some of the existing assumptions made do not scale properly to new silicon in upcoming changes. This commit should cause no functional changes to existing silicon. Signed-off-by: Mario Limonciello <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Guenter Roeck <[email protected]>
1 parent 02a2484 commit 0e3f52b

File tree

1 file changed

+12
-6
lines changed

1 file changed

+12
-6
lines changed

drivers/hwmon/k10temp.c

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -65,10 +65,11 @@ static DEFINE_MUTEX(nb_smu_ind_mutex);
6565
#define F15H_M60H_HARDWARE_TEMP_CTRL_OFFSET 0xd8200c64
6666
#define F15H_M60H_REPORTED_TEMP_CTRL_OFFSET 0xd8200ca4
6767

68-
/* Common for Zen CPU families (Family 17h and 18h) */
69-
#define ZEN_REPORTED_TEMP_CTRL_OFFSET 0x00059800
68+
/* Common for Zen CPU families (Family 17h and 18h and 19h) */
69+
#define ZEN_REPORTED_TEMP_CTRL_BASE 0x00059800
7070

71-
#define ZEN_CCD_TEMP(x) (0x00059954 + ((x) * 4))
71+
#define ZEN_CCD_TEMP(offset, x) (ZEN_REPORTED_TEMP_CTRL_BASE + \
72+
(offset) + ((x) * 4))
7273
#define ZEN_CCD_TEMP_VALID BIT(11)
7374
#define ZEN_CCD_TEMP_MASK GENMASK(10, 0)
7475

@@ -103,6 +104,7 @@ struct k10temp_data {
103104
u32 temp_adjust_mask;
104105
u32 show_temp;
105106
bool is_zen;
107+
u32 ccd_offset;
106108
};
107109

108110
#define TCTL_BIT 0
@@ -163,7 +165,7 @@ static void read_tempreg_nb_f15(struct pci_dev *pdev, u32 *regval)
163165
static void read_tempreg_nb_zen(struct pci_dev *pdev, u32 *regval)
164166
{
165167
amd_smn_read(amd_pci_dev_to_node_id(pdev),
166-
ZEN_REPORTED_TEMP_CTRL_OFFSET, regval);
168+
ZEN_REPORTED_TEMP_CTRL_BASE, regval);
167169
}
168170

169171
static long get_raw_temp(struct k10temp_data *data)
@@ -226,7 +228,8 @@ static int k10temp_read_temp(struct device *dev, u32 attr, int channel,
226228
break;
227229
case 2 ... 9: /* Tccd{1-8} */
228230
amd_smn_read(amd_pci_dev_to_node_id(data->pdev),
229-
ZEN_CCD_TEMP(channel - 2), &regval);
231+
ZEN_CCD_TEMP(data->ccd_offset, channel - 2),
232+
&regval);
230233
*val = (regval & ZEN_CCD_TEMP_MASK) * 125 - 49000;
231234
break;
232235
default:
@@ -387,7 +390,7 @@ static void k10temp_get_ccd_support(struct pci_dev *pdev,
387390

388391
for (i = 0; i < limit; i++) {
389392
amd_smn_read(amd_pci_dev_to_node_id(pdev),
390-
ZEN_CCD_TEMP(i), &regval);
393+
ZEN_CCD_TEMP(data->ccd_offset, i), &regval);
391394
if (regval & ZEN_CCD_TEMP_VALID)
392395
data->show_temp |= BIT(TCCD_BIT(i));
393396
}
@@ -433,12 +436,14 @@ static int k10temp_probe(struct pci_dev *pdev, const struct pci_device_id *id)
433436
case 0x8: /* Zen+ */
434437
case 0x11: /* Zen APU */
435438
case 0x18: /* Zen+ APU */
439+
data->ccd_offset = 0x154;
436440
k10temp_get_ccd_support(pdev, data, 4);
437441
break;
438442
case 0x31: /* Zen2 Threadripper */
439443
case 0x60: /* Renoir */
440444
case 0x68: /* Lucienne */
441445
case 0x71: /* Zen2 */
446+
data->ccd_offset = 0x154;
442447
k10temp_get_ccd_support(pdev, data, 8);
443448
break;
444449
}
@@ -451,6 +456,7 @@ static int k10temp_probe(struct pci_dev *pdev, const struct pci_device_id *id)
451456
case 0x0 ... 0x1: /* Zen3 SP3/TR */
452457
case 0x21: /* Zen3 Ryzen Desktop */
453458
case 0x50 ... 0x5f: /* Green Sardine */
459+
data->ccd_offset = 0x154;
454460
k10temp_get_ccd_support(pdev, data, 8);
455461
break;
456462
}

0 commit comments

Comments
 (0)