Commit fe65616b authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull thermal control fixes from Rafael Wysocki:
 "Add missing DVFS support flags for the Lunar Lake and Panther Lake
  platforms to the int340x Intel thermal driver and fix DLVR support
  for Panther Lake in it (Srinivas Pandruvada)"

* tag 'thermal-6.15-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm:
  thermal: intel: int340x: Fix Panther Lake DLVR support
  thermal: intel: int340x: Add missing DVFS support flags
parents cb64c513 00c5ff5e
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -485,7 +485,7 @@ static const struct pci_device_id proc_thermal_pci_ids[] = {
	{ PCI_DEVICE_DATA(INTEL, ADL_THERMAL, PROC_THERMAL_FEATURE_RAPL |
	  PROC_THERMAL_FEATURE_FIVR | PROC_THERMAL_FEATURE_DVFS | PROC_THERMAL_FEATURE_WT_REQ) },
	{ PCI_DEVICE_DATA(INTEL, LNLM_THERMAL, PROC_THERMAL_FEATURE_MSI_SUPPORT |
	  PROC_THERMAL_FEATURE_RAPL | PROC_THERMAL_FEATURE_DLVR |
	  PROC_THERMAL_FEATURE_RAPL | PROC_THERMAL_FEATURE_DLVR | PROC_THERMAL_FEATURE_DVFS |
	  PROC_THERMAL_FEATURE_WT_HINT | PROC_THERMAL_FEATURE_POWER_FLOOR) },
	{ PCI_DEVICE_DATA(INTEL, MTLP_THERMAL, PROC_THERMAL_FEATURE_RAPL |
	  PROC_THERMAL_FEATURE_FIVR | PROC_THERMAL_FEATURE_DVFS | PROC_THERMAL_FEATURE_DLVR |
@@ -495,8 +495,9 @@ static const struct pci_device_id proc_thermal_pci_ids[] = {
	{ PCI_DEVICE_DATA(INTEL, RPL_THERMAL, PROC_THERMAL_FEATURE_RAPL |
	  PROC_THERMAL_FEATURE_FIVR | PROC_THERMAL_FEATURE_DVFS | PROC_THERMAL_FEATURE_WT_REQ) },
	{ PCI_DEVICE_DATA(INTEL, PTL_THERMAL, PROC_THERMAL_FEATURE_RAPL |
	  PROC_THERMAL_FEATURE_DLVR | PROC_THERMAL_FEATURE_MSI_SUPPORT |
	  PROC_THERMAL_FEATURE_WT_HINT | PROC_THERMAL_FEATURE_POWER_FLOOR) },
	  PROC_THERMAL_FEATURE_DLVR | PROC_THERMAL_FEATURE_DVFS |
	  PROC_THERMAL_FEATURE_MSI_SUPPORT | PROC_THERMAL_FEATURE_WT_HINT |
	  PROC_THERMAL_FEATURE_POWER_FLOOR) },
	{ },
};

+17 −16
Original line number Diff line number Diff line
@@ -166,15 +166,18 @@ static const struct mmio_reg adl_dvfs_mmio_regs[] = {
	{ 0, 0x5A40, 1, 0x1, 0}, /* rfi_disable */
};

static const struct mapping_table *dlvr_mapping;
static const struct mmio_reg *dlvr_mmio_regs_table;

#define RFIM_SHOW(suffix, table)\
static ssize_t suffix##_show(struct device *dev,\
			      struct device_attribute *attr,\
			      char *buf)\
{\
	const struct mapping_table *mapping = NULL;\
	const struct mmio_reg *mmio_regs = dlvr_mmio_regs_table;\
	const struct mapping_table *mapping = dlvr_mapping;\
	struct proc_thermal_device *proc_priv;\
	struct pci_dev *pdev = to_pci_dev(dev);\
	const struct mmio_reg *mmio_regs;\
	const char **match_strs;\
	int ret, err;\
	u32 reg_val;\
@@ -186,12 +189,6 @@ static ssize_t suffix##_show(struct device *dev,\
		mmio_regs = adl_dvfs_mmio_regs;\
	} else if (table == 2) { \
		match_strs = (const char **)dlvr_strings;\
		if (pdev->device == PCI_DEVICE_ID_INTEL_LNLM_THERMAL) {\
			mmio_regs = lnl_dlvr_mmio_regs;\
			mapping = lnl_dlvr_mapping;\
		} else {\
			mmio_regs = dlvr_mmio_regs;\
		} \
	} else {\
		match_strs = (const char **)fivr_strings;\
		mmio_regs = tgl_fivr_mmio_regs;\
@@ -214,12 +211,12 @@ static ssize_t suffix##_store(struct device *dev,\
			       struct device_attribute *attr,\
			       const char *buf, size_t count)\
{\
	const struct mapping_table *mapping = NULL;\
	const struct mmio_reg *mmio_regs = dlvr_mmio_regs_table;\
	const struct mapping_table *mapping = dlvr_mapping;\
	struct proc_thermal_device *proc_priv;\
	struct pci_dev *pdev = to_pci_dev(dev);\
	unsigned int input;\
	const char **match_strs;\
	const struct mmio_reg *mmio_regs;\
	int ret, err;\
	u32 reg_val;\
	u32 mask;\
@@ -230,12 +227,6 @@ static ssize_t suffix##_store(struct device *dev,\
		mmio_regs = adl_dvfs_mmio_regs;\
	} else if (table == 2) { \
		match_strs = (const char **)dlvr_strings;\
		if (pdev->device == PCI_DEVICE_ID_INTEL_LNLM_THERMAL) {\
			mmio_regs = lnl_dlvr_mmio_regs;\
			mapping = lnl_dlvr_mapping;\
		} else {\
			mmio_regs = dlvr_mmio_regs;\
		} \
	} else {\
		match_strs = (const char **)fivr_strings;\
		mmio_regs = tgl_fivr_mmio_regs;\
@@ -448,6 +439,16 @@ int proc_thermal_rfim_add(struct pci_dev *pdev, struct proc_thermal_device *proc
	}

	if (proc_priv->mmio_feature_mask & PROC_THERMAL_FEATURE_DLVR) {
		switch (pdev->device) {
		case PCI_DEVICE_ID_INTEL_LNLM_THERMAL:
		case PCI_DEVICE_ID_INTEL_PTL_THERMAL:
			dlvr_mmio_regs_table = lnl_dlvr_mmio_regs;
			dlvr_mapping = lnl_dlvr_mapping;
			break;
		default:
			dlvr_mmio_regs_table = dlvr_mmio_regs;
			break;
		}
		ret = sysfs_create_group(&pdev->dev.kobj, &dlvr_attribute_group);
		if (ret)
			return ret;