Commit 284a2f89 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge tag 'platform-drivers-x86-v6.12-3' of...

Merge tag 'platform-drivers-x86-v6.12-3' of git://git.kernel.org/pub/scm/linux/kernel/git/pdx86/platform-drivers-x86

Pull x86 platform driver fixes from Hans de Goede:

 - Asus thermal profile fix, fixing performance issues on Lunar Lake

 - Intel PMC: one revert for a lockdep issue and one bugfix

 - Dell WMI: Ignore some WMI events on suspend/resume to silence warnings

* tag 'platform-drivers-x86-v6.12-3' of git://git.kernel.org/pub/scm/linux/kernel/git/pdx86/platform-drivers-x86:
  platform/x86: asus-wmi: Fix thermal profile initialization
  platform/x86: dell-wmi: Ignore suspend notifications
  platform/x86/intel/pmc: Fix pmc_core_iounmap to call iounmap for valid addresses
  platform/x86:intel/pmc: Revert "Enable the ACPI PM Timer to be turned off when suspended"
parents 7bec4657 b012170f
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -3908,6 +3908,16 @@ static int platform_profile_setup(struct asus_wmi *asus)
	if (!asus->throttle_thermal_policy_dev)
		return 0;

	/*
	 * We need to set the default thermal profile during probe or otherwise
	 * the system will often remain in silent mode, causing low performance.
	 */
	err = throttle_thermal_policy_set_default(asus);
	if (err < 0) {
		pr_warn("Failed to set default thermal profile\n");
		return err;
	}

	dev_info(dev, "Using throttle_thermal_policy for platform_profile support\n");

	asus->platform_profile_handler.profile_get = asus_wmi_platform_profile_get;
+9 −0
Original line number Diff line number Diff line
@@ -264,6 +264,15 @@ static const struct key_entry dell_wmi_keymap_type_0010[] = {
	/*Speaker Mute*/
	{ KE_KEY, 0x109, { KEY_MUTE} },

	/* S2Idle screen off */
	{ KE_IGNORE, 0x120, { KEY_RESERVED }},

	/* Leaving S4 or S2Idle suspend */
	{ KE_IGNORE, 0x130, { KEY_RESERVED }},

	/* Entering S2Idle suspend */
	{ KE_IGNORE, 0x140, { KEY_RESERVED }},

	/* Mic mute */
	{ KE_KEY, 0x150, { KEY_MICMUTE } },

+0 −2
Original line number Diff line number Diff line
@@ -295,8 +295,6 @@ const struct pmc_reg_map adl_reg_map = {
	.ppfear_buckets = CNP_PPFEAR_NUM_ENTRIES,
	.pm_cfg_offset = CNP_PMC_PM_CFG_OFFSET,
	.pm_read_disable_bit = CNP_PMC_READ_DISABLE_BIT,
	.acpi_pm_tmr_ctl_offset = SPT_PMC_ACPI_PM_TMR_CTL_OFFSET,
	.acpi_pm_tmr_disable_bit = SPT_PMC_BIT_ACPI_PM_TMR_DISABLE,
	.ltr_ignore_max = ADL_NUM_IP_IGN_ALLOWED,
	.lpm_num_modes = ADL_LPM_NUM_MODES,
	.lpm_num_maps = ADL_LPM_NUM_MAPS,
+0 −2
Original line number Diff line number Diff line
@@ -200,8 +200,6 @@ const struct pmc_reg_map cnp_reg_map = {
	.ppfear_buckets = CNP_PPFEAR_NUM_ENTRIES,
	.pm_cfg_offset = CNP_PMC_PM_CFG_OFFSET,
	.pm_read_disable_bit = CNP_PMC_READ_DISABLE_BIT,
	.acpi_pm_tmr_ctl_offset = SPT_PMC_ACPI_PM_TMR_CTL_OFFSET,
	.acpi_pm_tmr_disable_bit = SPT_PMC_BIT_ACPI_PM_TMR_DISABLE,
	.ltr_ignore_max = CNP_NUM_IP_IGN_ALLOWED,
	.etr3_offset = ETR3_OFFSET,
};
+0 −46
Original line number Diff line number Diff line
@@ -11,7 +11,6 @@

#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt

#include <linux/acpi_pmtmr.h>
#include <linux/bitfield.h>
#include <linux/debugfs.h>
#include <linux/delay.h>
@@ -1258,39 +1257,6 @@ static bool pmc_core_is_pson_residency_enabled(struct pmc_dev *pmcdev)
	return val == 1;
}

/*
 * Enable or disable ACPI PM Timer
 *
 * This function is intended to be a callback for ACPI PM suspend/resume event.
 * The ACPI PM Timer is enabled on resume only if it was enabled during suspend.
 */
static void pmc_core_acpi_pm_timer_suspend_resume(void *data, bool suspend)
{
	struct pmc_dev *pmcdev = data;
	struct pmc *pmc = pmcdev->pmcs[PMC_IDX_MAIN];
	const struct pmc_reg_map *map = pmc->map;
	bool enabled;
	u32 reg;

	if (!map->acpi_pm_tmr_ctl_offset)
		return;

	guard(mutex)(&pmcdev->lock);

	if (!suspend && !pmcdev->enable_acpi_pm_timer_on_resume)
		return;

	reg = pmc_core_reg_read(pmc, map->acpi_pm_tmr_ctl_offset);
	enabled = !(reg & map->acpi_pm_tmr_disable_bit);
	if (suspend)
		reg |= map->acpi_pm_tmr_disable_bit;
	else
		reg &= ~map->acpi_pm_tmr_disable_bit;
	pmc_core_reg_write(pmc, map->acpi_pm_tmr_ctl_offset, reg);

	pmcdev->enable_acpi_pm_timer_on_resume = suspend && enabled;
}

static void pmc_core_dbgfs_unregister(struct pmc_dev *pmcdev)
{
	debugfs_remove_recursive(pmcdev->dbgfs_dir);
@@ -1486,7 +1452,6 @@ static int pmc_core_probe(struct platform_device *pdev)
	struct pmc_dev *pmcdev;
	const struct x86_cpu_id *cpu_id;
	int (*core_init)(struct pmc_dev *pmcdev);
	const struct pmc_reg_map *map;
	struct pmc *primary_pmc;
	int ret;

@@ -1545,11 +1510,6 @@ static int pmc_core_probe(struct platform_device *pdev)
	pm_report_max_hw_sleep(FIELD_MAX(SLP_S0_RES_COUNTER_MASK) *
			       pmc_core_adjust_slp_s0_step(primary_pmc, 1));

	map = primary_pmc->map;
	if (map->acpi_pm_tmr_ctl_offset)
		acpi_pmtmr_register_suspend_resume_callback(pmc_core_acpi_pm_timer_suspend_resume,
							 pmcdev);

	device_initialized = true;
	dev_info(&pdev->dev, " initialized\n");

@@ -1559,12 +1519,6 @@ static int pmc_core_probe(struct platform_device *pdev)
static void pmc_core_remove(struct platform_device *pdev)
{
	struct pmc_dev *pmcdev = platform_get_drvdata(pdev);
	const struct pmc *pmc = pmcdev->pmcs[PMC_IDX_MAIN];
	const struct pmc_reg_map *map = pmc->map;

	if (map->acpi_pm_tmr_ctl_offset)
		acpi_pmtmr_unregister_suspend_resume_callback();

	pmc_core_dbgfs_unregister(pmcdev);
	pmc_core_clean_structure(pdev);
}
Loading