aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/cpufreq/intel_pstate.c154
1 files changed, 67 insertions, 87 deletions
diff --git a/drivers/cpufreq/intel_pstate.c b/drivers/cpufreq/intel_pstate.c
index 59312dc4c401..f8496faa1085 100644
--- a/drivers/cpufreq/intel_pstate.c
+++ b/drivers/cpufreq/intel_pstate.c
@@ -328,14 +328,6 @@ struct pstate_funcs {
328 unsigned int flags); 328 unsigned int flags);
329}; 329};
330 330
331/**
332 * struct cpu_defaults- Per CPU model default config data
333 * @funcs: Callback function data
334 */
335struct cpu_defaults {
336 struct pstate_funcs funcs;
337};
338
339static struct pstate_funcs pstate_funcs __read_mostly; 331static struct pstate_funcs pstate_funcs __read_mostly;
340static struct pstate_adjust_policy pid_params __read_mostly = { 332static struct pstate_adjust_policy pid_params __read_mostly = {
341 .sample_rate_ms = 10, 333 .sample_rate_ms = 10,
@@ -1809,66 +1801,56 @@ static void intel_pstate_update_util(struct update_util_data *data, u64 time,
1809 } 1801 }
1810} 1802}
1811 1803
1812static struct cpu_defaults core_params = { 1804static struct pstate_funcs core_funcs = {
1813 .funcs = { 1805 .get_max = core_get_max_pstate,
1814 .get_max = core_get_max_pstate, 1806 .get_max_physical = core_get_max_pstate_physical,
1815 .get_max_physical = core_get_max_pstate_physical, 1807 .get_min = core_get_min_pstate,
1816 .get_min = core_get_min_pstate, 1808 .get_turbo = core_get_turbo_pstate,
1817 .get_turbo = core_get_turbo_pstate, 1809 .get_scaling = core_get_scaling,
1818 .get_scaling = core_get_scaling, 1810 .get_val = core_get_val,
1819 .get_val = core_get_val, 1811 .update_util = intel_pstate_update_util_pid,
1820 .update_util = intel_pstate_update_util_pid,
1821 },
1822}; 1812};
1823 1813
1824static const struct cpu_defaults silvermont_params = { 1814static const struct pstate_funcs silvermont_funcs = {
1825 .funcs = { 1815 .get_max = atom_get_max_pstate,
1826 .get_max = atom_get_max_pstate, 1816 .get_max_physical = atom_get_max_pstate,
1827 .get_max_physical = atom_get_max_pstate, 1817 .get_min = atom_get_min_pstate,
1828 .get_min = atom_get_min_pstate, 1818 .get_turbo = atom_get_turbo_pstate,
1829 .get_turbo = atom_get_turbo_pstate, 1819 .get_val = atom_get_val,
1830 .get_val = atom_get_val, 1820 .get_scaling = silvermont_get_scaling,
1831 .get_scaling = silvermont_get_scaling, 1821 .get_vid = atom_get_vid,
1832 .get_vid = atom_get_vid, 1822 .update_util = intel_pstate_update_util,
1833 .update_util = intel_pstate_update_util,
1834 },
1835}; 1823};
1836 1824
1837static const struct cpu_defaults airmont_params = { 1825static const struct pstate_funcs airmont_funcs = {
1838 .funcs = { 1826 .get_max = atom_get_max_pstate,
1839 .get_max = atom_get_max_pstate, 1827 .get_max_physical = atom_get_max_pstate,
1840 .get_max_physical = atom_get_max_pstate, 1828 .get_min = atom_get_min_pstate,
1841 .get_min = atom_get_min_pstate, 1829 .get_turbo = atom_get_turbo_pstate,
1842 .get_turbo = atom_get_turbo_pstate, 1830 .get_val = atom_get_val,
1843 .get_val = atom_get_val, 1831 .get_scaling = airmont_get_scaling,
1844 .get_scaling = airmont_get_scaling, 1832 .get_vid = atom_get_vid,
1845 .get_vid = atom_get_vid, 1833 .update_util = intel_pstate_update_util,
1846 .update_util = intel_pstate_update_util,
1847 },
1848}; 1834};
1849 1835
1850static const struct cpu_defaults knl_params = { 1836static const struct pstate_funcs knl_funcs = {
1851 .funcs = { 1837 .get_max = core_get_max_pstate,
1852 .get_max = core_get_max_pstate, 1838 .get_max_physical = core_get_max_pstate_physical,
1853 .get_max_physical = core_get_max_pstate_physical, 1839 .get_min = core_get_min_pstate,
1854 .get_min = core_get_min_pstate, 1840 .get_turbo = knl_get_turbo_pstate,
1855 .get_turbo = knl_get_turbo_pstate, 1841 .get_scaling = core_get_scaling,
1856 .get_scaling = core_get_scaling, 1842 .get_val = core_get_val,
1857 .get_val = core_get_val, 1843 .update_util = intel_pstate_update_util_pid,
1858 .update_util = intel_pstate_update_util_pid,
1859 },
1860}; 1844};
1861 1845
1862static const struct cpu_defaults bxt_params = { 1846static const struct pstate_funcs bxt_funcs = {
1863 .funcs = { 1847 .get_max = core_get_max_pstate,
1864 .get_max = core_get_max_pstate, 1848 .get_max_physical = core_get_max_pstate_physical,
1865 .get_max_physical = core_get_max_pstate_physical, 1849 .get_min = core_get_min_pstate,
1866 .get_min = core_get_min_pstate, 1850 .get_turbo = core_get_turbo_pstate,
1867 .get_turbo = core_get_turbo_pstate, 1851 .get_scaling = core_get_scaling,
1868 .get_scaling = core_get_scaling, 1852 .get_val = core_get_val,
1869 .get_val = core_get_val, 1853 .update_util = intel_pstate_update_util,
1870 .update_util = intel_pstate_update_util,
1871 },
1872}; 1854};
1873 1855
1874#define ICPU(model, policy) \ 1856#define ICPU(model, policy) \
@@ -1876,38 +1858,38 @@ static const struct cpu_defaults bxt_params = {
1876 (unsigned long)&policy } 1858 (unsigned long)&policy }
1877 1859
1878static const struct x86_cpu_id intel_pstate_cpu_ids[] = { 1860static const struct x86_cpu_id intel_pstate_cpu_ids[] = {
1879 ICPU(INTEL_FAM6_SANDYBRIDGE, core_params), 1861 ICPU(INTEL_FAM6_SANDYBRIDGE, core_funcs),
1880 ICPU(INTEL_FAM6_SANDYBRIDGE_X, core_params), 1862 ICPU(INTEL_FAM6_SANDYBRIDGE_X, core_funcs),
1881 ICPU(INTEL_FAM6_ATOM_SILVERMONT1, silvermont_params), 1863 ICPU(INTEL_FAM6_ATOM_SILVERMONT1, silvermont_funcs),
1882 ICPU(INTEL_FAM6_IVYBRIDGE, core_params), 1864 ICPU(INTEL_FAM6_IVYBRIDGE, core_funcs),
1883 ICPU(INTEL_FAM6_HASWELL_CORE, core_params), 1865 ICPU(INTEL_FAM6_HASWELL_CORE, core_funcs),
1884 ICPU(INTEL_FAM6_BROADWELL_CORE, core_params), 1866 ICPU(INTEL_FAM6_BROADWELL_CORE, core_funcs),
1885 ICPU(INTEL_FAM6_IVYBRIDGE_X, core_params), 1867 ICPU(INTEL_FAM6_IVYBRIDGE_X, core_funcs),
1886 ICPU(INTEL_FAM6_HASWELL_X, core_params), 1868 ICPU(INTEL_FAM6_HASWELL_X, core_funcs),
1887 ICPU(INTEL_FAM6_HASWELL_ULT, core_params), 1869 ICPU(INTEL_FAM6_HASWELL_ULT, core_funcs),
1888 ICPU(INTEL_FAM6_HASWELL_GT3E, core_params), 1870 ICPU(INTEL_FAM6_HASWELL_GT3E, core_funcs),
1889 ICPU(INTEL_FAM6_BROADWELL_GT3E, core_params), 1871 ICPU(INTEL_FAM6_BROADWELL_GT3E, core_funcs),
1890 ICPU(INTEL_FAM6_ATOM_AIRMONT, airmont_params), 1872 ICPU(INTEL_FAM6_ATOM_AIRMONT, airmont_funcs),
1891 ICPU(INTEL_FAM6_SKYLAKE_MOBILE, core_params), 1873 ICPU(INTEL_FAM6_SKYLAKE_MOBILE, core_funcs),
1892 ICPU(INTEL_FAM6_BROADWELL_X, core_params), 1874 ICPU(INTEL_FAM6_BROADWELL_X, core_funcs),
1893 ICPU(INTEL_FAM6_SKYLAKE_DESKTOP, core_params), 1875 ICPU(INTEL_FAM6_SKYLAKE_DESKTOP, core_funcs),
1894 ICPU(INTEL_FAM6_BROADWELL_XEON_D, core_params), 1876 ICPU(INTEL_FAM6_BROADWELL_XEON_D, core_funcs),
1895 ICPU(INTEL_FAM6_XEON_PHI_KNL, knl_params), 1877 ICPU(INTEL_FAM6_XEON_PHI_KNL, knl_funcs),
1896 ICPU(INTEL_FAM6_XEON_PHI_KNM, knl_params), 1878 ICPU(INTEL_FAM6_XEON_PHI_KNM, knl_funcs),
1897 ICPU(INTEL_FAM6_ATOM_GOLDMONT, bxt_params), 1879 ICPU(INTEL_FAM6_ATOM_GOLDMONT, bxt_funcs),
1898 {} 1880 {}
1899}; 1881};
1900MODULE_DEVICE_TABLE(x86cpu, intel_pstate_cpu_ids); 1882MODULE_DEVICE_TABLE(x86cpu, intel_pstate_cpu_ids);
1901 1883
1902static const struct x86_cpu_id intel_pstate_cpu_oob_ids[] __initconst = { 1884static const struct x86_cpu_id intel_pstate_cpu_oob_ids[] __initconst = {
1903 ICPU(INTEL_FAM6_BROADWELL_XEON_D, core_params), 1885 ICPU(INTEL_FAM6_BROADWELL_XEON_D, core_funcs),
1904 ICPU(INTEL_FAM6_BROADWELL_X, core_params), 1886 ICPU(INTEL_FAM6_BROADWELL_X, core_funcs),
1905 ICPU(INTEL_FAM6_SKYLAKE_X, core_params), 1887 ICPU(INTEL_FAM6_SKYLAKE_X, core_funcs),
1906 {} 1888 {}
1907}; 1889};
1908 1890
1909static const struct x86_cpu_id intel_pstate_cpu_ee_disable_ids[] = { 1891static const struct x86_cpu_id intel_pstate_cpu_ee_disable_ids[] = {
1910 ICPU(INTEL_FAM6_KABYLAKE_DESKTOP, core_params), 1892 ICPU(INTEL_FAM6_KABYLAKE_DESKTOP, core_funcs),
1911 {} 1893 {}
1912}; 1894};
1913 1895
@@ -2576,7 +2558,7 @@ static int __init intel_pstate_init(void)
2576 return -ENODEV; 2558 return -ENODEV;
2577 2559
2578 if (x86_match_cpu(hwp_support_ids)) { 2560 if (x86_match_cpu(hwp_support_ids)) {
2579 copy_cpu_funcs(&core_params.funcs); 2561 copy_cpu_funcs(&core_funcs);
2580 if (no_hwp) { 2562 if (no_hwp) {
2581 pstate_funcs.update_util = intel_pstate_update_util; 2563 pstate_funcs.update_util = intel_pstate_update_util;
2582 } else { 2564 } else {
@@ -2587,14 +2569,12 @@ static int __init intel_pstate_init(void)
2587 } 2569 }
2588 } else { 2570 } else {
2589 const struct x86_cpu_id *id; 2571 const struct x86_cpu_id *id;
2590 struct cpu_defaults *cpu_def;
2591 2572
2592 id = x86_match_cpu(intel_pstate_cpu_ids); 2573 id = x86_match_cpu(intel_pstate_cpu_ids);
2593 if (!id) 2574 if (!id)
2594 return -ENODEV; 2575 return -ENODEV;
2595 2576
2596 cpu_def = (struct cpu_defaults *)id->driver_data; 2577 copy_cpu_funcs((struct pstate_funcs *)id->driver_data);
2597 copy_cpu_funcs(&cpu_def->funcs);
2598 } 2578 }
2599 2579
2600 if (intel_pstate_msrs_not_valid()) 2580 if (intel_pstate_msrs_not_valid())