[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <77216773e80b1d60f41e48a0f2071066d1e0d393.camel@linux.intel.com>
Date: Sun, 08 Jun 2025 18:10:42 -0700
From: srinivas pandruvada <srinivas.pandruvada@...ux.intel.com>
To: Joe Walter <joe.walter@...esensesolutions.com>, rafael@...nel.org
Cc: viresh.kumar@...aro.org, lenb@...nel.org, linux-pm@...r.kernel.org,
linux-kernel@...r.kernel.org
Subject: Re: [PATCH] cpufreq: intel_pstate: Add DMI quirk for Dell Inspiron
systems
On Fri, 2025-06-06 at 16:15 -0700, Joe Walter wrote:
> Some Dell Inspiron systems experience frequency scaling issues with
> intel_pstate driver where the CPU gets locked at 900MHz after load.
>
> Add DMI quirk table to detect affected Dell Inspiron models and
> prevent
> intel_pstate from loading, allowing acpi-cpufreq to handle frequency
> scaling instead.
This is the first time in 10+ years a quirk using DMI..
>
> Affected models:
> - Dell Inspiron 15 7000 Gaming
> - Dell Inspiron 7567
> - Dell Inspiron 7559
I think these all are using KabyLake CPU models around 2017.
Do you have turbostat logs to see why it is dropping to 900 MHz? If not
please attach. Most of such drops usually triggered by power/thermal
limits. We have to check the power limit settings.
Try with a different EPP settings instead of default by using
/sys/devices/system/cpu/cpu*/cpufreq/energy_performance_preference
Also try:
echo passive > /sys/devices/system/cpu/intel_pstate/status
Thanks,
Srinivas
>
> Tested-by: Joe Walter <joe.walter@...esensesolutions.com>
> Signed-off-by: Joe Walter <joe.walter@...esensesolutions.com>
> ---
> drivers/cpufreq/intel_pstate.c | 65 ++++++++++++++++++++++----------
> --
> 1 file changed, 42 insertions(+), 23 deletions(-)
>
> diff --git a/drivers/cpufreq/intel_pstate.c
> b/drivers/cpufreq/intel_pstate.c
> index 1b1f62ccec92..3aeb04755afa 100644
> --- a/drivers/cpufreq/intel_pstate.c
> +++ b/drivers/cpufreq/intel_pstate.c
> @@ -28,7 +28,6 @@
> #include <linux/pm_qos.h>
> #include <linux/bitfield.h>
> #include <trace/events/power.h>
> -#include <linux/dmi.h>
> #include <linux/units.h>
>
> #include <asm/cpu.h>
> @@ -48,6 +47,7 @@
> #ifdef CONFIG_ACPI
> #include <acpi/processor.h>
> #include <acpi/cppc_acpi.h>
> +#include <linux/dmi.h>
> #endif
>
> #define FRAC_BITS 8
> @@ -299,25 +299,6 @@ struct pstate_funcs {
>
> static struct pstate_funcs pstate_funcs __read_mostly;
>
> -/* DMI quirk table for systems that should prefer acpi-cpufreq over
> intel_pstate */
> -static int intel_pstate_prefer_acpi_cpufreq(const struct
> dmi_system_id *id)
> -{
> - pr_info("Preferring acpi-cpufreq for %s due to performance
> issues with intel_pstate\n",
> - id->ident);
> - return 1;
> -}
> -
> -static const struct dmi_system_id intel_pstate_acpi_cpufreq_prefer[]
> = {
> - {
> - .callback = intel_pstate_prefer_acpi_cpufreq,
> - .ident = "Dell Inspiron 15 7000 Gaming",
> - .matches = {
> - DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
> - DMI_MATCH(DMI_PRODUCT_NAME, "Inspiron 15
> 7000 Gaming"),
> - },
> - },
> - { }
> -};
> static bool hwp_active __ro_after_init;
> static int hwp_mode_bdw __ro_after_init;
> static bool per_cpu_limits __ro_after_init;
> @@ -2799,6 +2780,41 @@ static const struct x86_cpu_id
> intel_pstate_cpu_ids[] = {
> };
> MODULE_DEVICE_TABLE(x86cpu, intel_pstate_cpu_ids);
>
> +/* DMI quirk table for systems that should prefer acpi-cpufreq over
> intel_pstate */
> +static int intel_pstate_prefer_acpi_cpufreq(const struct
> dmi_system_id *id)
> +{
> + pr_info("Detected %s, preferring acpi-cpufreq\n", id-
> >ident);
> + return 0;
> +}
> +
> +static const struct dmi_system_id intel_pstate_acpi_cpufreq_prefer[]
> = {
> + {
> + .ident = "Dell Inspiron 15 7000 Gaming",
> + .matches = {
> + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
> + DMI_MATCH(DMI_PRODUCT_NAME, "Inspiron 15
> 7000 Gaming"),
> + },
> + .callback = intel_pstate_prefer_acpi_cpufreq,
> + },
> + {
> + .ident = "Dell Inspiron 7567",
> + .matches = {
> + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
> + DMI_MATCH(DMI_PRODUCT_NAME, "Inspiron
> 7567"),
> + },
> + .callback = intel_pstate_prefer_acpi_cpufreq,
> + },
> + {
> + .ident = "Dell Inspiron 7559",
> + .matches = {
> + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
> + DMI_MATCH(DMI_PRODUCT_NAME, "Inspiron
> 7559"),
> + },
> + .callback = intel_pstate_prefer_acpi_cpufreq,
> + },
> + {}
> +};
> +
> #ifdef CONFIG_ACPI
> static const struct x86_cpu_id intel_pstate_cpu_oob_ids[]
> __initconst = {
> X86_MATCH(INTEL_BROADWELL_D, core_funcs),
> @@ -3825,6 +3841,12 @@ static int __init intel_pstate_init(void)
> const struct x86_cpu_id *id;
> int rc;
>
> +
> + /* Early DMI check - prevent intel_pstate on problematic
> systems */
> + if (dmi_check_system(intel_pstate_acpi_cpufreq_prefer)) {
> + pr_info("intel_pstate: system prefers acpi-cpufreq,
> not loading\n");
> + return -ENODEV;
> + }
> if (boot_cpu_data.x86_vendor != X86_VENDOR_INTEL)
> return -ENODEV;
>
> @@ -3887,9 +3909,6 @@ static int __init intel_pstate_init(void)
> pr_info("Invalid MSRs\n");
> return -ENODEV;
> }
> -/* Check for systems that should prefer acpi-cpufreq */
> - if (!default_driver &&
> dmi_check_system(intel_pstate_acpi_cpufreq_prefer))
> - default_driver = &intel_cpufreq;
> /* Without HWP start in the passive mode. */
> if (!default_driver)
> default_driver = &intel_cpufreq;
Powered by blists - more mailing lists