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