|
@@ -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();
|