Skip to content

Commit 5ba2062

Browse files
spandruvadarafaeljw
authored andcommitted
thermal: intel: int340x: Add DLVR support for Lunar Lake
Add support for DLVR (Digital Linear Voltage Regulator) for Lunar Lake. There are no new sysfs attributes or difference in operation compared to prior generations. MMIO offset and bit positions are changed compared to Meteor Lake processors. Also for two attributes dlvr_frequency_mhz and dlvr_frequency_select, the value presented or accepted by the firmware is not raw frequency value but an index. For example: RFI_FREQ_SELECT and RFI_FREQ : 0 DLVR freq point 2227.2 MHz : 1 DLVR freq point 2140 MHz Hence create a mapping table for Lunar Lake to map user space values to the firmware accepted values. Signed-off-by: Srinivas Pandruvada <[email protected]> Link: https://patch.msgid.link/[email protected] Signed-off-by: Rafael J. Wysocki <[email protected]>
1 parent 332ed4e commit 5ba2062

File tree

2 files changed

+33
-3
lines changed

2 files changed

+33
-3
lines changed

drivers/thermal/intel/int340x_thermal/processor_thermal_device_pci.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -408,7 +408,8 @@ static SIMPLE_DEV_PM_OPS(proc_thermal_pci_pm, proc_thermal_pci_suspend,
408408
static const struct pci_device_id proc_thermal_pci_ids[] = {
409409
{ PCI_DEVICE_DATA(INTEL, ADL_THERMAL, PROC_THERMAL_FEATURE_RAPL |
410410
PROC_THERMAL_FEATURE_FIVR | PROC_THERMAL_FEATURE_DVFS | PROC_THERMAL_FEATURE_WT_REQ) },
411-
{ PCI_DEVICE_DATA(INTEL, LNLM_THERMAL, PROC_THERMAL_FEATURE_RAPL) },
411+
{ PCI_DEVICE_DATA(INTEL, LNLM_THERMAL, PROC_THERMAL_FEATURE_RAPL |
412+
PROC_THERMAL_FEATURE_DLVR) },
412413
{ PCI_DEVICE_DATA(INTEL, MTLP_THERMAL, PROC_THERMAL_FEATURE_RAPL |
413414
PROC_THERMAL_FEATURE_FIVR | PROC_THERMAL_FEATURE_DVFS | PROC_THERMAL_FEATURE_DLVR |
414415
PROC_THERMAL_FEATURE_WT_HINT | PROC_THERMAL_FEATURE_POWER_FLOOR) },

drivers/thermal/intel/int340x_thermal/processor_thermal_rfim.c

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,25 @@ static const struct mmio_reg dlvr_mmio_regs[] = {
6868
{ 1, 0x15A10, 1, 0x1, 16}, /* dlvr_pll_busy */
6969
};
7070

71+
static const struct mmio_reg lnl_dlvr_mmio_regs[] = {
72+
{ 0, 0x5A08, 5, 0x1F, 0}, /* dlvr_spread_spectrum_pct */
73+
{ 0, 0x5A08, 1, 0x1, 5}, /* dlvr_control_mode */
74+
{ 0, 0x5A08, 1, 0x1, 6}, /* dlvr_control_lock */
75+
{ 0, 0x5A08, 1, 0x1, 7}, /* dlvr_rfim_enable */
76+
{ 0, 0x5A08, 2, 0x3, 8}, /* dlvr_freq_select */
77+
{ 1, 0x5A10, 2, 0x3, 30}, /* dlvr_hardware_rev */
78+
{ 1, 0x5A10, 2, 0x3, 0}, /* dlvr_freq_mhz */
79+
{ 1, 0x5A10, 1, 0x1, 23}, /* dlvr_pll_busy */
80+
};
81+
82+
static const struct mapping_table lnl_dlvr_mapping[] = {
83+
{"dlvr_freq_select", 0, "2227.2"},
84+
{"dlvr_freq_select", 1, "2140"},
85+
{"dlvr_freq_mhz", 0, "2227.2"},
86+
{"dlvr_freq_mhz", 1, "2140"},
87+
{NULL, 0, NULL},
88+
};
89+
7190
static int match_mapping_table(const struct mapping_table *table, const char *attr_name,
7291
bool match_int_value, const u32 value, const char *value_str,
7392
char **result_str, u32 *result_int)
@@ -167,7 +186,12 @@ static ssize_t suffix##_show(struct device *dev,\
167186
mmio_regs = adl_dvfs_mmio_regs;\
168187
} else if (table == 2) { \
169188
match_strs = (const char **)dlvr_strings;\
170-
mmio_regs = dlvr_mmio_regs;\
189+
if (pdev->device == PCI_DEVICE_ID_INTEL_LNLM_THERMAL) {\
190+
mmio_regs = lnl_dlvr_mmio_regs;\
191+
mapping = lnl_dlvr_mapping;\
192+
} else {\
193+
mmio_regs = dlvr_mmio_regs;\
194+
} \
171195
} else {\
172196
match_strs = (const char **)fivr_strings;\
173197
mmio_regs = tgl_fivr_mmio_regs;\
@@ -206,7 +230,12 @@ static ssize_t suffix##_store(struct device *dev,\
206230
mmio_regs = adl_dvfs_mmio_regs;\
207231
} else if (table == 2) { \
208232
match_strs = (const char **)dlvr_strings;\
209-
mmio_regs = dlvr_mmio_regs;\
233+
if (pdev->device == PCI_DEVICE_ID_INTEL_LNLM_THERMAL) {\
234+
mmio_regs = lnl_dlvr_mmio_regs;\
235+
mapping = lnl_dlvr_mapping;\
236+
} else {\
237+
mmio_regs = dlvr_mmio_regs;\
238+
} \
210239
} else {\
211240
match_strs = (const char **)fivr_strings;\
212241
mmio_regs = tgl_fivr_mmio_regs;\

0 commit comments

Comments
 (0)