cpufreq: intel_pstate: Enable HWP by default
authorSrinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
Thu, 25 Feb 2016 23:09:19 +0000 (15:09 -0800)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Fri, 26 Feb 2016 21:15:38 +0000 (22:15 +0100)
If the processor supports HWP, enable it by default without checking
for the cpu model. This will allow to enable HWP in all supported
processors without driver change.

Signed-off-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/cpufreq/intel_pstate.c

index e856776..ebe8506 100644 (file)
@@ -1400,6 +1400,11 @@ static inline bool intel_pstate_platform_pwr_mgmt_exists(void) { return false; }
 static inline bool intel_pstate_has_acpi_ppc(void) { return false; }
 #endif /* CONFIG_ACPI */
 
+static const struct x86_cpu_id hwp_support_ids[] __initconst = {
+       { X86_VENDOR_INTEL, 6, X86_MODEL_ANY, X86_FEATURE_HWP },
+       {}
+};
+
 static int __init intel_pstate_init(void)
 {
        int cpu, rc = 0;
@@ -1409,17 +1414,16 @@ static int __init intel_pstate_init(void)
        if (no_load)
                return -ENODEV;
 
+       if (x86_match_cpu(hwp_support_ids) && !no_hwp) {
+               copy_cpu_funcs(&core_params.funcs);
+               hwp_active++;
+               goto hwp_cpu_matched;
+       }
+
        id = x86_match_cpu(intel_pstate_cpu_ids);
        if (!id)
                return -ENODEV;
 
-       /*
-        * The Intel pstate driver will be ignored if the platform
-        * firmware has its own power management modes.
-        */
-       if (intel_pstate_platform_pwr_mgmt_exists())
-               return -ENODEV;
-
        cpu_def = (struct cpu_defaults *)id->driver_data;
 
        copy_pid_params(&cpu_def->pid_policy);
@@ -1428,17 +1432,20 @@ static int __init intel_pstate_init(void)
        if (intel_pstate_msrs_not_valid())
                return -ENODEV;
 
+hwp_cpu_matched:
+       /*
+        * The Intel pstate driver will be ignored if the platform
+        * firmware has its own power management modes.
+        */
+       if (intel_pstate_platform_pwr_mgmt_exists())
+               return -ENODEV;
+
        pr_info("Intel P-state driver initializing.\n");
 
        all_cpu_data = vzalloc(sizeof(void *) * num_possible_cpus());
        if (!all_cpu_data)
                return -ENOMEM;
 
-       if (static_cpu_has_safe(X86_FEATURE_HWP) && !no_hwp) {
-               pr_info("intel_pstate: HWP enabled\n");
-               hwp_active++;
-       }
-
        if (!hwp_active && hwp_only)
                goto out;
 
@@ -1449,6 +1456,9 @@ static int __init intel_pstate_init(void)
        intel_pstate_debug_expose_params();
        intel_pstate_sysfs_expose_params();
 
+       if (hwp_active)
+               pr_info("intel_pstate: HWP enabled\n");
+
        return rc;
 out:
        get_online_cpus();