mirror of
https://github.com/Dasharo/linux.git
synced 2026-03-06 15:25:10 -08:00
Merge tag 'x86-cpu-2024-05-13' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull x86 cpu updates from Ingo Molnar: - Rework the x86 CPU vendor/family/model code: introduce the 'VFM' value that is an 8+8+8 bit concatenation of the vendor/family/model value, and add macros that work on VFM values. This simplifies the addition of new Intel models & families, and simplifies existing enumeration & quirk code. - Add support for the AMD 0x80000026 leaf, to better parse topology information - Optimize the NUMA allocation layout of more per-CPU data structures - Improve the workaround for AMD erratum 1386 - Clear TME from /proc/cpuinfo as well, when disabled by the firmware - Improve x86 self-tests - Extend the mce_record tracepoint with the ::ppin and ::microcode fields - Implement recovery for MCE errors in TDX/SEAM non-root mode - Misc cleanups and fixes * tag 'x86-cpu-2024-05-13' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (34 commits) x86/mm: Switch to new Intel CPU model defines x86/tsc_msr: Switch to new Intel CPU model defines x86/tsc: Switch to new Intel CPU model defines x86/cpu: Switch to new Intel CPU model defines x86/resctrl: Switch to new Intel CPU model defines x86/microcode/intel: Switch to new Intel CPU model defines x86/mce: Switch to new Intel CPU model defines x86/cpu: Switch to new Intel CPU model defines x86/cpu/intel_epb: Switch to new Intel CPU model defines x86/aperfmperf: Switch to new Intel CPU model defines x86/apic: Switch to new Intel CPU model defines perf/x86/msr: Switch to new Intel CPU model defines perf/x86/intel/uncore: Switch to new Intel CPU model defines perf/x86/intel/pt: Switch to new Intel CPU model defines perf/x86/lbr: Switch to new Intel CPU model defines perf/x86/intel/cstate: Switch to new Intel CPU model defines x86/bugs: Switch to new Intel CPU model defines x86/bugs: Switch to new Intel CPU model defines x86/cpu/vfm: Update arch/x86/include/asm/intel-family.h x86/cpu/vfm: Add new macros to work with (vendor/family/model) values ...
This commit is contained in:
@@ -696,78 +696,78 @@ static const struct cstate_model srf_cstates __initconst = {
|
||||
|
||||
|
||||
static const struct x86_cpu_id intel_cstates_match[] __initconst = {
|
||||
X86_MATCH_INTEL_FAM6_MODEL(NEHALEM, &nhm_cstates),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(NEHALEM_EP, &nhm_cstates),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(NEHALEM_EX, &nhm_cstates),
|
||||
X86_MATCH_VFM(INTEL_NEHALEM, &nhm_cstates),
|
||||
X86_MATCH_VFM(INTEL_NEHALEM_EP, &nhm_cstates),
|
||||
X86_MATCH_VFM(INTEL_NEHALEM_EX, &nhm_cstates),
|
||||
|
||||
X86_MATCH_INTEL_FAM6_MODEL(WESTMERE, &nhm_cstates),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(WESTMERE_EP, &nhm_cstates),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(WESTMERE_EX, &nhm_cstates),
|
||||
X86_MATCH_VFM(INTEL_WESTMERE, &nhm_cstates),
|
||||
X86_MATCH_VFM(INTEL_WESTMERE_EP, &nhm_cstates),
|
||||
X86_MATCH_VFM(INTEL_WESTMERE_EX, &nhm_cstates),
|
||||
|
||||
X86_MATCH_INTEL_FAM6_MODEL(SANDYBRIDGE, &snb_cstates),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(SANDYBRIDGE_X, &snb_cstates),
|
||||
X86_MATCH_VFM(INTEL_SANDYBRIDGE, &snb_cstates),
|
||||
X86_MATCH_VFM(INTEL_SANDYBRIDGE_X, &snb_cstates),
|
||||
|
||||
X86_MATCH_INTEL_FAM6_MODEL(IVYBRIDGE, &snb_cstates),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(IVYBRIDGE_X, &snb_cstates),
|
||||
X86_MATCH_VFM(INTEL_IVYBRIDGE, &snb_cstates),
|
||||
X86_MATCH_VFM(INTEL_IVYBRIDGE_X, &snb_cstates),
|
||||
|
||||
X86_MATCH_INTEL_FAM6_MODEL(HASWELL, &snb_cstates),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(HASWELL_X, &snb_cstates),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(HASWELL_G, &snb_cstates),
|
||||
X86_MATCH_VFM(INTEL_HASWELL, &snb_cstates),
|
||||
X86_MATCH_VFM(INTEL_HASWELL_X, &snb_cstates),
|
||||
X86_MATCH_VFM(INTEL_HASWELL_G, &snb_cstates),
|
||||
|
||||
X86_MATCH_INTEL_FAM6_MODEL(HASWELL_L, &hswult_cstates),
|
||||
X86_MATCH_VFM(INTEL_HASWELL_L, &hswult_cstates),
|
||||
|
||||
X86_MATCH_INTEL_FAM6_MODEL(ATOM_SILVERMONT, &slm_cstates),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(ATOM_SILVERMONT_D, &slm_cstates),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(ATOM_AIRMONT, &slm_cstates),
|
||||
X86_MATCH_VFM(INTEL_ATOM_SILVERMONT, &slm_cstates),
|
||||
X86_MATCH_VFM(INTEL_ATOM_SILVERMONT_D, &slm_cstates),
|
||||
X86_MATCH_VFM(INTEL_ATOM_AIRMONT, &slm_cstates),
|
||||
|
||||
X86_MATCH_INTEL_FAM6_MODEL(BROADWELL, &snb_cstates),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(BROADWELL_D, &snb_cstates),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(BROADWELL_G, &snb_cstates),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(BROADWELL_X, &snb_cstates),
|
||||
X86_MATCH_VFM(INTEL_BROADWELL, &snb_cstates),
|
||||
X86_MATCH_VFM(INTEL_BROADWELL_D, &snb_cstates),
|
||||
X86_MATCH_VFM(INTEL_BROADWELL_G, &snb_cstates),
|
||||
X86_MATCH_VFM(INTEL_BROADWELL_X, &snb_cstates),
|
||||
|
||||
X86_MATCH_INTEL_FAM6_MODEL(SKYLAKE_L, &snb_cstates),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(SKYLAKE, &snb_cstates),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(SKYLAKE_X, &snb_cstates),
|
||||
X86_MATCH_VFM(INTEL_SKYLAKE_L, &snb_cstates),
|
||||
X86_MATCH_VFM(INTEL_SKYLAKE, &snb_cstates),
|
||||
X86_MATCH_VFM(INTEL_SKYLAKE_X, &snb_cstates),
|
||||
|
||||
X86_MATCH_INTEL_FAM6_MODEL(KABYLAKE_L, &hswult_cstates),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(KABYLAKE, &hswult_cstates),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(COMETLAKE_L, &hswult_cstates),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(COMETLAKE, &hswult_cstates),
|
||||
X86_MATCH_VFM(INTEL_KABYLAKE_L, &hswult_cstates),
|
||||
X86_MATCH_VFM(INTEL_KABYLAKE, &hswult_cstates),
|
||||
X86_MATCH_VFM(INTEL_COMETLAKE_L, &hswult_cstates),
|
||||
X86_MATCH_VFM(INTEL_COMETLAKE, &hswult_cstates),
|
||||
|
||||
X86_MATCH_INTEL_FAM6_MODEL(CANNONLAKE_L, &cnl_cstates),
|
||||
X86_MATCH_VFM(INTEL_CANNONLAKE_L, &cnl_cstates),
|
||||
|
||||
X86_MATCH_INTEL_FAM6_MODEL(XEON_PHI_KNL, &knl_cstates),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(XEON_PHI_KNM, &knl_cstates),
|
||||
X86_MATCH_VFM(INTEL_XEON_PHI_KNL, &knl_cstates),
|
||||
X86_MATCH_VFM(INTEL_XEON_PHI_KNM, &knl_cstates),
|
||||
|
||||
X86_MATCH_INTEL_FAM6_MODEL(ATOM_GOLDMONT, &glm_cstates),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(ATOM_GOLDMONT_D, &glm_cstates),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(ATOM_GOLDMONT_PLUS, &glm_cstates),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(ATOM_TREMONT_D, &glm_cstates),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(ATOM_TREMONT, &glm_cstates),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(ATOM_TREMONT_L, &glm_cstates),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(ATOM_GRACEMONT, &adl_cstates),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(ATOM_CRESTMONT_X, &srf_cstates),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(ATOM_CRESTMONT, &grr_cstates),
|
||||
X86_MATCH_VFM(INTEL_ATOM_GOLDMONT, &glm_cstates),
|
||||
X86_MATCH_VFM(INTEL_ATOM_GOLDMONT_D, &glm_cstates),
|
||||
X86_MATCH_VFM(INTEL_ATOM_GOLDMONT_PLUS, &glm_cstates),
|
||||
X86_MATCH_VFM(INTEL_ATOM_TREMONT_D, &glm_cstates),
|
||||
X86_MATCH_VFM(INTEL_ATOM_TREMONT, &glm_cstates),
|
||||
X86_MATCH_VFM(INTEL_ATOM_TREMONT_L, &glm_cstates),
|
||||
X86_MATCH_VFM(INTEL_ATOM_GRACEMONT, &adl_cstates),
|
||||
X86_MATCH_VFM(INTEL_ATOM_CRESTMONT_X, &srf_cstates),
|
||||
X86_MATCH_VFM(INTEL_ATOM_CRESTMONT, &grr_cstates),
|
||||
|
||||
X86_MATCH_INTEL_FAM6_MODEL(ICELAKE_L, &icl_cstates),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(ICELAKE, &icl_cstates),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(ICELAKE_X, &icx_cstates),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(ICELAKE_D, &icx_cstates),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(SAPPHIRERAPIDS_X, &icx_cstates),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(EMERALDRAPIDS_X, &icx_cstates),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(GRANITERAPIDS_X, &icx_cstates),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(GRANITERAPIDS_D, &icx_cstates),
|
||||
X86_MATCH_VFM(INTEL_ICELAKE_L, &icl_cstates),
|
||||
X86_MATCH_VFM(INTEL_ICELAKE, &icl_cstates),
|
||||
X86_MATCH_VFM(INTEL_ICELAKE_X, &icx_cstates),
|
||||
X86_MATCH_VFM(INTEL_ICELAKE_D, &icx_cstates),
|
||||
X86_MATCH_VFM(INTEL_SAPPHIRERAPIDS_X, &icx_cstates),
|
||||
X86_MATCH_VFM(INTEL_EMERALDRAPIDS_X, &icx_cstates),
|
||||
X86_MATCH_VFM(INTEL_GRANITERAPIDS_X, &icx_cstates),
|
||||
X86_MATCH_VFM(INTEL_GRANITERAPIDS_D, &icx_cstates),
|
||||
|
||||
X86_MATCH_INTEL_FAM6_MODEL(TIGERLAKE_L, &icl_cstates),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(TIGERLAKE, &icl_cstates),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(ROCKETLAKE, &icl_cstates),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(ALDERLAKE, &adl_cstates),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(ALDERLAKE_L, &adl_cstates),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(RAPTORLAKE, &adl_cstates),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(RAPTORLAKE_P, &adl_cstates),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(RAPTORLAKE_S, &adl_cstates),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(METEORLAKE, &adl_cstates),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(METEORLAKE_L, &adl_cstates),
|
||||
X86_MATCH_VFM(INTEL_TIGERLAKE_L, &icl_cstates),
|
||||
X86_MATCH_VFM(INTEL_TIGERLAKE, &icl_cstates),
|
||||
X86_MATCH_VFM(INTEL_ROCKETLAKE, &icl_cstates),
|
||||
X86_MATCH_VFM(INTEL_ALDERLAKE, &adl_cstates),
|
||||
X86_MATCH_VFM(INTEL_ALDERLAKE_L, &adl_cstates),
|
||||
X86_MATCH_VFM(INTEL_RAPTORLAKE, &adl_cstates),
|
||||
X86_MATCH_VFM(INTEL_RAPTORLAKE_P, &adl_cstates),
|
||||
X86_MATCH_VFM(INTEL_RAPTORLAKE_S, &adl_cstates),
|
||||
X86_MATCH_VFM(INTEL_METEORLAKE, &adl_cstates),
|
||||
X86_MATCH_VFM(INTEL_METEORLAKE_L, &adl_cstates),
|
||||
{ },
|
||||
};
|
||||
MODULE_DEVICE_TABLE(x86cpu, intel_cstates_match);
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
#include <linux/perf_event.h>
|
||||
#include <linux/types.h>
|
||||
|
||||
#include <asm/cpu_device_id.h>
|
||||
#include <asm/perf_event.h>
|
||||
#include <asm/msr.h>
|
||||
|
||||
@@ -1457,7 +1458,7 @@ void __init intel_pmu_lbr_init_atom(void)
|
||||
* to have an operational LBR which can freeze
|
||||
* on PMU interrupt
|
||||
*/
|
||||
if (boot_cpu_data.x86_model == 28
|
||||
if (boot_cpu_data.x86_vfm == INTEL_ATOM_BONNELL
|
||||
&& boot_cpu_data.x86_stepping < 10) {
|
||||
pr_cont("LBR disabled due to erratum");
|
||||
return;
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
#include <asm/insn.h>
|
||||
#include <asm/io.h>
|
||||
#include <asm/intel_pt.h>
|
||||
#include <asm/intel-family.h>
|
||||
#include <asm/cpu_device_id.h>
|
||||
|
||||
#include "../perf_event.h"
|
||||
#include "pt.h"
|
||||
@@ -211,11 +211,11 @@ static int __init pt_pmu_hw_init(void)
|
||||
}
|
||||
|
||||
/* model-specific quirks */
|
||||
switch (boot_cpu_data.x86_model) {
|
||||
case INTEL_FAM6_BROADWELL:
|
||||
case INTEL_FAM6_BROADWELL_D:
|
||||
case INTEL_FAM6_BROADWELL_G:
|
||||
case INTEL_FAM6_BROADWELL_X:
|
||||
switch (boot_cpu_data.x86_vfm) {
|
||||
case INTEL_BROADWELL:
|
||||
case INTEL_BROADWELL_D:
|
||||
case INTEL_BROADWELL_G:
|
||||
case INTEL_BROADWELL_X:
|
||||
/* not setting BRANCH_EN will #GP, erratum BDM106 */
|
||||
pt_pmu.branch_en_always_on = true;
|
||||
break;
|
||||
|
||||
@@ -1829,56 +1829,56 @@ static const struct intel_uncore_init_fun generic_uncore_init __initconst = {
|
||||
};
|
||||
|
||||
static const struct x86_cpu_id intel_uncore_match[] __initconst = {
|
||||
X86_MATCH_INTEL_FAM6_MODEL(NEHALEM_EP, &nhm_uncore_init),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(NEHALEM, &nhm_uncore_init),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(WESTMERE, &nhm_uncore_init),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(WESTMERE_EP, &nhm_uncore_init),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(SANDYBRIDGE, &snb_uncore_init),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(IVYBRIDGE, &ivb_uncore_init),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(HASWELL, &hsw_uncore_init),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(HASWELL_L, &hsw_uncore_init),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(HASWELL_G, &hsw_uncore_init),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(BROADWELL, &bdw_uncore_init),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(BROADWELL_G, &bdw_uncore_init),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(SANDYBRIDGE_X, &snbep_uncore_init),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(NEHALEM_EX, &nhmex_uncore_init),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(WESTMERE_EX, &nhmex_uncore_init),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(IVYBRIDGE_X, &ivbep_uncore_init),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(HASWELL_X, &hswep_uncore_init),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(BROADWELL_X, &bdx_uncore_init),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(BROADWELL_D, &bdx_uncore_init),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(XEON_PHI_KNL, &knl_uncore_init),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(XEON_PHI_KNM, &knl_uncore_init),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(SKYLAKE, &skl_uncore_init),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(SKYLAKE_L, &skl_uncore_init),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(SKYLAKE_X, &skx_uncore_init),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(KABYLAKE_L, &skl_uncore_init),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(KABYLAKE, &skl_uncore_init),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(COMETLAKE_L, &skl_uncore_init),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(COMETLAKE, &skl_uncore_init),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(ICELAKE_L, &icl_uncore_init),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(ICELAKE_NNPI, &icl_uncore_init),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(ICELAKE, &icl_uncore_init),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(ICELAKE_D, &icx_uncore_init),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(ICELAKE_X, &icx_uncore_init),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(TIGERLAKE_L, &tgl_l_uncore_init),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(TIGERLAKE, &tgl_uncore_init),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(ROCKETLAKE, &rkl_uncore_init),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(ALDERLAKE, &adl_uncore_init),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(ALDERLAKE_L, &adl_uncore_init),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(RAPTORLAKE, &adl_uncore_init),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(RAPTORLAKE_P, &adl_uncore_init),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(RAPTORLAKE_S, &adl_uncore_init),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(METEORLAKE, &mtl_uncore_init),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(METEORLAKE_L, &mtl_uncore_init),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(SAPPHIRERAPIDS_X, &spr_uncore_init),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(EMERALDRAPIDS_X, &spr_uncore_init),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(GRANITERAPIDS_X, &gnr_uncore_init),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(GRANITERAPIDS_D, &gnr_uncore_init),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(ATOM_TREMONT_D, &snr_uncore_init),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(ATOM_GRACEMONT, &adl_uncore_init),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(ATOM_CRESTMONT_X, &gnr_uncore_init),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(ATOM_CRESTMONT, &gnr_uncore_init),
|
||||
X86_MATCH_VFM(INTEL_NEHALEM_EP, &nhm_uncore_init),
|
||||
X86_MATCH_VFM(INTEL_NEHALEM, &nhm_uncore_init),
|
||||
X86_MATCH_VFM(INTEL_WESTMERE, &nhm_uncore_init),
|
||||
X86_MATCH_VFM(INTEL_WESTMERE_EP, &nhm_uncore_init),
|
||||
X86_MATCH_VFM(INTEL_SANDYBRIDGE, &snb_uncore_init),
|
||||
X86_MATCH_VFM(INTEL_IVYBRIDGE, &ivb_uncore_init),
|
||||
X86_MATCH_VFM(INTEL_HASWELL, &hsw_uncore_init),
|
||||
X86_MATCH_VFM(INTEL_HASWELL_L, &hsw_uncore_init),
|
||||
X86_MATCH_VFM(INTEL_HASWELL_G, &hsw_uncore_init),
|
||||
X86_MATCH_VFM(INTEL_BROADWELL, &bdw_uncore_init),
|
||||
X86_MATCH_VFM(INTEL_BROADWELL_G, &bdw_uncore_init),
|
||||
X86_MATCH_VFM(INTEL_SANDYBRIDGE_X, &snbep_uncore_init),
|
||||
X86_MATCH_VFM(INTEL_NEHALEM_EX, &nhmex_uncore_init),
|
||||
X86_MATCH_VFM(INTEL_WESTMERE_EX, &nhmex_uncore_init),
|
||||
X86_MATCH_VFM(INTEL_IVYBRIDGE_X, &ivbep_uncore_init),
|
||||
X86_MATCH_VFM(INTEL_HASWELL_X, &hswep_uncore_init),
|
||||
X86_MATCH_VFM(INTEL_BROADWELL_X, &bdx_uncore_init),
|
||||
X86_MATCH_VFM(INTEL_BROADWELL_D, &bdx_uncore_init),
|
||||
X86_MATCH_VFM(INTEL_XEON_PHI_KNL, &knl_uncore_init),
|
||||
X86_MATCH_VFM(INTEL_XEON_PHI_KNM, &knl_uncore_init),
|
||||
X86_MATCH_VFM(INTEL_SKYLAKE, &skl_uncore_init),
|
||||
X86_MATCH_VFM(INTEL_SKYLAKE_L, &skl_uncore_init),
|
||||
X86_MATCH_VFM(INTEL_SKYLAKE_X, &skx_uncore_init),
|
||||
X86_MATCH_VFM(INTEL_KABYLAKE_L, &skl_uncore_init),
|
||||
X86_MATCH_VFM(INTEL_KABYLAKE, &skl_uncore_init),
|
||||
X86_MATCH_VFM(INTEL_COMETLAKE_L, &skl_uncore_init),
|
||||
X86_MATCH_VFM(INTEL_COMETLAKE, &skl_uncore_init),
|
||||
X86_MATCH_VFM(INTEL_ICELAKE_L, &icl_uncore_init),
|
||||
X86_MATCH_VFM(INTEL_ICELAKE_NNPI, &icl_uncore_init),
|
||||
X86_MATCH_VFM(INTEL_ICELAKE, &icl_uncore_init),
|
||||
X86_MATCH_VFM(INTEL_ICELAKE_D, &icx_uncore_init),
|
||||
X86_MATCH_VFM(INTEL_ICELAKE_X, &icx_uncore_init),
|
||||
X86_MATCH_VFM(INTEL_TIGERLAKE_L, &tgl_l_uncore_init),
|
||||
X86_MATCH_VFM(INTEL_TIGERLAKE, &tgl_uncore_init),
|
||||
X86_MATCH_VFM(INTEL_ROCKETLAKE, &rkl_uncore_init),
|
||||
X86_MATCH_VFM(INTEL_ALDERLAKE, &adl_uncore_init),
|
||||
X86_MATCH_VFM(INTEL_ALDERLAKE_L, &adl_uncore_init),
|
||||
X86_MATCH_VFM(INTEL_RAPTORLAKE, &adl_uncore_init),
|
||||
X86_MATCH_VFM(INTEL_RAPTORLAKE_P, &adl_uncore_init),
|
||||
X86_MATCH_VFM(INTEL_RAPTORLAKE_S, &adl_uncore_init),
|
||||
X86_MATCH_VFM(INTEL_METEORLAKE, &mtl_uncore_init),
|
||||
X86_MATCH_VFM(INTEL_METEORLAKE_L, &mtl_uncore_init),
|
||||
X86_MATCH_VFM(INTEL_SAPPHIRERAPIDS_X, &spr_uncore_init),
|
||||
X86_MATCH_VFM(INTEL_EMERALDRAPIDS_X, &spr_uncore_init),
|
||||
X86_MATCH_VFM(INTEL_GRANITERAPIDS_X, &gnr_uncore_init),
|
||||
X86_MATCH_VFM(INTEL_GRANITERAPIDS_D, &gnr_uncore_init),
|
||||
X86_MATCH_VFM(INTEL_ATOM_TREMONT_D, &snr_uncore_init),
|
||||
X86_MATCH_VFM(INTEL_ATOM_GRACEMONT, &adl_uncore_init),
|
||||
X86_MATCH_VFM(INTEL_ATOM_CRESTMONT_X, &gnr_uncore_init),
|
||||
X86_MATCH_VFM(INTEL_ATOM_CRESTMONT, &gnr_uncore_init),
|
||||
{},
|
||||
};
|
||||
MODULE_DEVICE_TABLE(x86cpu, intel_uncore_match);
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
// SPDX-License-Identifier: GPL-2.0
|
||||
/* Nehalem-EX/Westmere-EX uncore support */
|
||||
#include <asm/cpu_device_id.h>
|
||||
#include "uncore.h"
|
||||
|
||||
/* NHM-EX event control */
|
||||
@@ -1217,7 +1218,7 @@ static struct intel_uncore_type *nhmex_msr_uncores[] = {
|
||||
|
||||
void nhmex_uncore_cpu_init(void)
|
||||
{
|
||||
if (boot_cpu_data.x86_model == 46)
|
||||
if (boot_cpu_data.x86_vfm == INTEL_NEHALEM_EX)
|
||||
uncore_nhmex = true;
|
||||
else
|
||||
nhmex_uncore_mbox.event_descs = wsmex_uncore_mbox_events;
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
// SPDX-License-Identifier: GPL-2.0
|
||||
/* SandyBridge-EP/IvyTown uncore support */
|
||||
#include <asm/cpu_device_id.h>
|
||||
#include "uncore.h"
|
||||
#include "uncore_discovery.h"
|
||||
|
||||
@@ -3285,7 +3286,7 @@ void bdx_uncore_cpu_init(void)
|
||||
uncore_msr_uncores = bdx_msr_uncores;
|
||||
|
||||
/* Detect systems with no SBOXes */
|
||||
if ((boot_cpu_data.x86_model == 86) || hswep_has_limit_sbox(BDX_PCU_DID))
|
||||
if (boot_cpu_data.x86_vfm == INTEL_BROADWELL_D || hswep_has_limit_sbox(BDX_PCU_DID))
|
||||
uncore_msr_uncores[BDX_MSR_UNCORE_SBOX] = NULL;
|
||||
|
||||
hswep_uncore_pcu.constraints = bdx_uncore_pcu_constraints;
|
||||
@@ -5394,7 +5395,7 @@ static int icx_iio_get_topology(struct intel_uncore_type *type)
|
||||
static void icx_iio_set_mapping(struct intel_uncore_type *type)
|
||||
{
|
||||
/* Detect ICX-D system. This case is not supported */
|
||||
if (boot_cpu_data.x86_model == INTEL_FAM6_ICELAKE_D) {
|
||||
if (boot_cpu_data.x86_vfm == INTEL_ICELAKE_D) {
|
||||
pmu_clear_mapping_attr(type->attr_update, &icx_iio_mapping_group);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
#include <linux/perf_event.h>
|
||||
#include <linux/sysfs.h>
|
||||
#include <linux/nospec.h>
|
||||
#include <asm/intel-family.h>
|
||||
#include <asm/cpu_device_id.h>
|
||||
#include "probe.h"
|
||||
|
||||
enum perf_msr_id {
|
||||
@@ -43,75 +43,75 @@ static bool test_intel(int idx, void *data)
|
||||
boot_cpu_data.x86 != 6)
|
||||
return false;
|
||||
|
||||
switch (boot_cpu_data.x86_model) {
|
||||
case INTEL_FAM6_NEHALEM:
|
||||
case INTEL_FAM6_NEHALEM_G:
|
||||
case INTEL_FAM6_NEHALEM_EP:
|
||||
case INTEL_FAM6_NEHALEM_EX:
|
||||
switch (boot_cpu_data.x86_vfm) {
|
||||
case INTEL_NEHALEM:
|
||||
case INTEL_NEHALEM_G:
|
||||
case INTEL_NEHALEM_EP:
|
||||
case INTEL_NEHALEM_EX:
|
||||
|
||||
case INTEL_FAM6_WESTMERE:
|
||||
case INTEL_FAM6_WESTMERE_EP:
|
||||
case INTEL_FAM6_WESTMERE_EX:
|
||||
case INTEL_WESTMERE:
|
||||
case INTEL_WESTMERE_EP:
|
||||
case INTEL_WESTMERE_EX:
|
||||
|
||||
case INTEL_FAM6_SANDYBRIDGE:
|
||||
case INTEL_FAM6_SANDYBRIDGE_X:
|
||||
case INTEL_SANDYBRIDGE:
|
||||
case INTEL_SANDYBRIDGE_X:
|
||||
|
||||
case INTEL_FAM6_IVYBRIDGE:
|
||||
case INTEL_FAM6_IVYBRIDGE_X:
|
||||
case INTEL_IVYBRIDGE:
|
||||
case INTEL_IVYBRIDGE_X:
|
||||
|
||||
case INTEL_FAM6_HASWELL:
|
||||
case INTEL_FAM6_HASWELL_X:
|
||||
case INTEL_FAM6_HASWELL_L:
|
||||
case INTEL_FAM6_HASWELL_G:
|
||||
case INTEL_HASWELL:
|
||||
case INTEL_HASWELL_X:
|
||||
case INTEL_HASWELL_L:
|
||||
case INTEL_HASWELL_G:
|
||||
|
||||
case INTEL_FAM6_BROADWELL:
|
||||
case INTEL_FAM6_BROADWELL_D:
|
||||
case INTEL_FAM6_BROADWELL_G:
|
||||
case INTEL_FAM6_BROADWELL_X:
|
||||
case INTEL_FAM6_SAPPHIRERAPIDS_X:
|
||||
case INTEL_FAM6_EMERALDRAPIDS_X:
|
||||
case INTEL_FAM6_GRANITERAPIDS_X:
|
||||
case INTEL_FAM6_GRANITERAPIDS_D:
|
||||
case INTEL_BROADWELL:
|
||||
case INTEL_BROADWELL_D:
|
||||
case INTEL_BROADWELL_G:
|
||||
case INTEL_BROADWELL_X:
|
||||
case INTEL_SAPPHIRERAPIDS_X:
|
||||
case INTEL_EMERALDRAPIDS_X:
|
||||
case INTEL_GRANITERAPIDS_X:
|
||||
case INTEL_GRANITERAPIDS_D:
|
||||
|
||||
case INTEL_FAM6_ATOM_SILVERMONT:
|
||||
case INTEL_FAM6_ATOM_SILVERMONT_D:
|
||||
case INTEL_FAM6_ATOM_AIRMONT:
|
||||
case INTEL_ATOM_SILVERMONT:
|
||||
case INTEL_ATOM_SILVERMONT_D:
|
||||
case INTEL_ATOM_AIRMONT:
|
||||
|
||||
case INTEL_FAM6_ATOM_GOLDMONT:
|
||||
case INTEL_FAM6_ATOM_GOLDMONT_D:
|
||||
case INTEL_FAM6_ATOM_GOLDMONT_PLUS:
|
||||
case INTEL_FAM6_ATOM_TREMONT_D:
|
||||
case INTEL_FAM6_ATOM_TREMONT:
|
||||
case INTEL_FAM6_ATOM_TREMONT_L:
|
||||
case INTEL_ATOM_GOLDMONT:
|
||||
case INTEL_ATOM_GOLDMONT_D:
|
||||
case INTEL_ATOM_GOLDMONT_PLUS:
|
||||
case INTEL_ATOM_TREMONT_D:
|
||||
case INTEL_ATOM_TREMONT:
|
||||
case INTEL_ATOM_TREMONT_L:
|
||||
|
||||
case INTEL_FAM6_XEON_PHI_KNL:
|
||||
case INTEL_FAM6_XEON_PHI_KNM:
|
||||
case INTEL_XEON_PHI_KNL:
|
||||
case INTEL_XEON_PHI_KNM:
|
||||
if (idx == PERF_MSR_SMI)
|
||||
return true;
|
||||
break;
|
||||
|
||||
case INTEL_FAM6_SKYLAKE_L:
|
||||
case INTEL_FAM6_SKYLAKE:
|
||||
case INTEL_FAM6_SKYLAKE_X:
|
||||
case INTEL_FAM6_KABYLAKE_L:
|
||||
case INTEL_FAM6_KABYLAKE:
|
||||
case INTEL_FAM6_COMETLAKE_L:
|
||||
case INTEL_FAM6_COMETLAKE:
|
||||
case INTEL_FAM6_ICELAKE_L:
|
||||
case INTEL_FAM6_ICELAKE:
|
||||
case INTEL_FAM6_ICELAKE_X:
|
||||
case INTEL_FAM6_ICELAKE_D:
|
||||
case INTEL_FAM6_TIGERLAKE_L:
|
||||
case INTEL_FAM6_TIGERLAKE:
|
||||
case INTEL_FAM6_ROCKETLAKE:
|
||||
case INTEL_FAM6_ALDERLAKE:
|
||||
case INTEL_FAM6_ALDERLAKE_L:
|
||||
case INTEL_FAM6_ATOM_GRACEMONT:
|
||||
case INTEL_FAM6_RAPTORLAKE:
|
||||
case INTEL_FAM6_RAPTORLAKE_P:
|
||||
case INTEL_FAM6_RAPTORLAKE_S:
|
||||
case INTEL_FAM6_METEORLAKE:
|
||||
case INTEL_FAM6_METEORLAKE_L:
|
||||
case INTEL_SKYLAKE_L:
|
||||
case INTEL_SKYLAKE:
|
||||
case INTEL_SKYLAKE_X:
|
||||
case INTEL_KABYLAKE_L:
|
||||
case INTEL_KABYLAKE:
|
||||
case INTEL_COMETLAKE_L:
|
||||
case INTEL_COMETLAKE:
|
||||
case INTEL_ICELAKE_L:
|
||||
case INTEL_ICELAKE:
|
||||
case INTEL_ICELAKE_X:
|
||||
case INTEL_ICELAKE_D:
|
||||
case INTEL_TIGERLAKE_L:
|
||||
case INTEL_TIGERLAKE:
|
||||
case INTEL_ROCKETLAKE:
|
||||
case INTEL_ALDERLAKE:
|
||||
case INTEL_ALDERLAKE_L:
|
||||
case INTEL_ATOM_GRACEMONT:
|
||||
case INTEL_RAPTORLAKE:
|
||||
case INTEL_RAPTORLAKE_P:
|
||||
case INTEL_RAPTORLAKE_S:
|
||||
case INTEL_METEORLAKE:
|
||||
case INTEL_METEORLAKE_L:
|
||||
if (idx == PERF_MSR_SMI || idx == PERF_MSR_PPERF)
|
||||
return true;
|
||||
break;
|
||||
|
||||
@@ -2,6 +2,39 @@
|
||||
#ifndef _ASM_X86_CPU_DEVICE_ID
|
||||
#define _ASM_X86_CPU_DEVICE_ID
|
||||
|
||||
/*
|
||||
* Can't use <linux/bitfield.h> because it generates expressions that
|
||||
* cannot be used in structure initializers. Bitfield construction
|
||||
* here must match the union in struct cpuinfo_86:
|
||||
* union {
|
||||
* struct {
|
||||
* __u8 x86_model;
|
||||
* __u8 x86;
|
||||
* __u8 x86_vendor;
|
||||
* __u8 x86_reserved;
|
||||
* };
|
||||
* __u32 x86_vfm;
|
||||
* };
|
||||
*/
|
||||
#define VFM_MODEL_BIT 0
|
||||
#define VFM_FAMILY_BIT 8
|
||||
#define VFM_VENDOR_BIT 16
|
||||
#define VFM_RSVD_BIT 24
|
||||
|
||||
#define VFM_MODEL_MASK GENMASK(VFM_FAMILY_BIT - 1, VFM_MODEL_BIT)
|
||||
#define VFM_FAMILY_MASK GENMASK(VFM_VENDOR_BIT - 1, VFM_FAMILY_BIT)
|
||||
#define VFM_VENDOR_MASK GENMASK(VFM_RSVD_BIT - 1, VFM_VENDOR_BIT)
|
||||
|
||||
#define VFM_MODEL(vfm) (((vfm) & VFM_MODEL_MASK) >> VFM_MODEL_BIT)
|
||||
#define VFM_FAMILY(vfm) (((vfm) & VFM_FAMILY_MASK) >> VFM_FAMILY_BIT)
|
||||
#define VFM_VENDOR(vfm) (((vfm) & VFM_VENDOR_MASK) >> VFM_VENDOR_BIT)
|
||||
|
||||
#define VFM_MAKE(_vendor, _family, _model) ( \
|
||||
((_model) << VFM_MODEL_BIT) | \
|
||||
((_family) << VFM_FAMILY_BIT) | \
|
||||
((_vendor) << VFM_VENDOR_BIT) \
|
||||
)
|
||||
|
||||
/*
|
||||
* Declare drivers belonging to specific x86 CPUs
|
||||
* Similar in spirit to pci_device_id and related PCI functions
|
||||
@@ -49,6 +82,16 @@
|
||||
.driver_data = (unsigned long) _data \
|
||||
}
|
||||
|
||||
#define X86_MATCH_VENDORID_FAM_MODEL_STEPPINGS_FEATURE(_vendor, _family, _model, \
|
||||
_steppings, _feature, _data) { \
|
||||
.vendor = _vendor, \
|
||||
.family = _family, \
|
||||
.model = _model, \
|
||||
.steppings = _steppings, \
|
||||
.feature = _feature, \
|
||||
.driver_data = (unsigned long) _data \
|
||||
}
|
||||
|
||||
/**
|
||||
* X86_MATCH_VENDOR_FAM_MODEL_FEATURE - Macro for CPU matching
|
||||
* @_vendor: The vendor name, e.g. INTEL, AMD, HYGON, ..., ANY
|
||||
@@ -164,6 +207,56 @@
|
||||
X86_MATCH_VENDOR_FAM_MODEL_STEPPINGS_FEATURE(INTEL, 6, INTEL_FAM6_##model, \
|
||||
steppings, X86_FEATURE_ANY, data)
|
||||
|
||||
/**
|
||||
* X86_MATCH_VFM - Match encoded vendor/family/model
|
||||
* @vfm: Encoded 8-bits each for vendor, family, model
|
||||
* @data: Driver specific data or NULL. The internal storage
|
||||
* format is unsigned long. The supplied value, pointer
|
||||
* etc. is cast to unsigned long internally.
|
||||
*
|
||||
* Stepping and feature are set to wildcards
|
||||
*/
|
||||
#define X86_MATCH_VFM(vfm, data) \
|
||||
X86_MATCH_VENDORID_FAM_MODEL_STEPPINGS_FEATURE( \
|
||||
VFM_VENDOR(vfm), \
|
||||
VFM_FAMILY(vfm), \
|
||||
VFM_MODEL(vfm), \
|
||||
X86_STEPPING_ANY, X86_FEATURE_ANY, data)
|
||||
|
||||
/**
|
||||
* X86_MATCH_VFM_STEPPINGS - Match encoded vendor/family/model/stepping
|
||||
* @vfm: Encoded 8-bits each for vendor, family, model
|
||||
* @steppings: Bitmask of steppings to match
|
||||
* @data: Driver specific data or NULL. The internal storage
|
||||
* format is unsigned long. The supplied value, pointer
|
||||
* etc. is cast to unsigned long internally.
|
||||
*
|
||||
* feature is set to wildcard
|
||||
*/
|
||||
#define X86_MATCH_VFM_STEPPINGS(vfm, steppings, data) \
|
||||
X86_MATCH_VENDORID_FAM_MODEL_STEPPINGS_FEATURE( \
|
||||
VFM_VENDOR(vfm), \
|
||||
VFM_FAMILY(vfm), \
|
||||
VFM_MODEL(vfm), \
|
||||
steppings, X86_FEATURE_ANY, data)
|
||||
|
||||
/**
|
||||
* X86_MATCH_VFM_FEATURE - Match encoded vendor/family/model/feature
|
||||
* @vfm: Encoded 8-bits each for vendor, family, model
|
||||
* @feature: A X86_FEATURE bit
|
||||
* @data: Driver specific data or NULL. The internal storage
|
||||
* format is unsigned long. The supplied value, pointer
|
||||
* etc. is cast to unsigned long internally.
|
||||
*
|
||||
* Steppings is set to wildcard
|
||||
*/
|
||||
#define X86_MATCH_VFM_FEATURE(vfm, feature, data) \
|
||||
X86_MATCH_VENDORID_FAM_MODEL_STEPPINGS_FEATURE( \
|
||||
VFM_VENDOR(vfm), \
|
||||
VFM_FAMILY(vfm), \
|
||||
VFM_MODEL(vfm), \
|
||||
X86_STEPPING_ANY, feature, data)
|
||||
|
||||
/*
|
||||
* Match specific microcode revisions.
|
||||
*
|
||||
@@ -190,6 +283,14 @@ struct x86_cpu_desc {
|
||||
.x86_microcode_rev = (revision), \
|
||||
}
|
||||
|
||||
#define AMD_CPU_DESC(fam, model, stepping, revision) { \
|
||||
.x86_family = (fam), \
|
||||
.x86_vendor = X86_VENDOR_AMD, \
|
||||
.x86_model = (model), \
|
||||
.x86_stepping = (stepping), \
|
||||
.x86_microcode_rev = (revision), \
|
||||
}
|
||||
|
||||
extern const struct x86_cpu_id *x86_match_cpu(const struct x86_cpu_id *match);
|
||||
extern bool x86_cpu_has_min_microcode_rev(const struct x86_cpu_desc *table);
|
||||
|
||||
|
||||
@@ -40,137 +40,221 @@
|
||||
* their own names :-(
|
||||
*/
|
||||
|
||||
#define IFM(_fam, _model) VFM_MAKE(X86_VENDOR_INTEL, _fam, _model)
|
||||
|
||||
/* Wildcard match for FAM6 so X86_MATCH_INTEL_FAM6_MODEL(ANY) works */
|
||||
#define INTEL_FAM6_ANY X86_MODEL_ANY
|
||||
/* Wildcard match for FAM6 so X86_MATCH_VFM(ANY) works */
|
||||
#define INTEL_ANY IFM(X86_FAMILY_ANY, X86_MODEL_ANY)
|
||||
|
||||
#define INTEL_FAM6_CORE_YONAH 0x0E
|
||||
#define INTEL_CORE_YONAH IFM(6, 0x0E)
|
||||
|
||||
#define INTEL_FAM6_CORE2_MEROM 0x0F
|
||||
#define INTEL_CORE2_MEROM IFM(6, 0x0F)
|
||||
#define INTEL_FAM6_CORE2_MEROM_L 0x16
|
||||
#define INTEL_CORE2_MEROM_L IFM(6, 0x16)
|
||||
#define INTEL_FAM6_CORE2_PENRYN 0x17
|
||||
#define INTEL_CORE2_PENRYN IFM(6, 0x17)
|
||||
#define INTEL_FAM6_CORE2_DUNNINGTON 0x1D
|
||||
#define INTEL_CORE2_DUNNINGTON IFM(6, 0x1D)
|
||||
|
||||
#define INTEL_FAM6_NEHALEM 0x1E
|
||||
#define INTEL_NEHALEM IFM(6, 0x1E)
|
||||
#define INTEL_FAM6_NEHALEM_G 0x1F /* Auburndale / Havendale */
|
||||
#define INTEL_NEHALEM_G IFM(6, 0x1F) /* Auburndale / Havendale */
|
||||
#define INTEL_FAM6_NEHALEM_EP 0x1A
|
||||
#define INTEL_NEHALEM_EP IFM(6, 0x1A)
|
||||
#define INTEL_FAM6_NEHALEM_EX 0x2E
|
||||
#define INTEL_NEHALEM_EX IFM(6, 0x2E)
|
||||
|
||||
#define INTEL_FAM6_WESTMERE 0x25
|
||||
#define INTEL_WESTMERE IFM(6, 0x25)
|
||||
#define INTEL_FAM6_WESTMERE_EP 0x2C
|
||||
#define INTEL_WESTMERE_EP IFM(6, 0x2C)
|
||||
#define INTEL_FAM6_WESTMERE_EX 0x2F
|
||||
#define INTEL_WESTMERE_EX IFM(6, 0x2F)
|
||||
|
||||
#define INTEL_FAM6_SANDYBRIDGE 0x2A
|
||||
#define INTEL_SANDYBRIDGE IFM(6, 0x2A)
|
||||
#define INTEL_FAM6_SANDYBRIDGE_X 0x2D
|
||||
#define INTEL_SANDYBRIDGE_X IFM(6, 0x2D)
|
||||
#define INTEL_FAM6_IVYBRIDGE 0x3A
|
||||
#define INTEL_IVYBRIDGE IFM(6, 0x3A)
|
||||
#define INTEL_FAM6_IVYBRIDGE_X 0x3E
|
||||
#define INTEL_IVYBRIDGE_X IFM(6, 0x3E)
|
||||
|
||||
#define INTEL_FAM6_HASWELL 0x3C
|
||||
#define INTEL_HASWELL IFM(6, 0x3C)
|
||||
#define INTEL_FAM6_HASWELL_X 0x3F
|
||||
#define INTEL_HASWELL_X IFM(6, 0x3F)
|
||||
#define INTEL_FAM6_HASWELL_L 0x45
|
||||
#define INTEL_HASWELL_L IFM(6, 0x45)
|
||||
#define INTEL_FAM6_HASWELL_G 0x46
|
||||
#define INTEL_HASWELL_G IFM(6, 0x46)
|
||||
|
||||
#define INTEL_FAM6_BROADWELL 0x3D
|
||||
#define INTEL_BROADWELL IFM(6, 0x3D)
|
||||
#define INTEL_FAM6_BROADWELL_G 0x47
|
||||
#define INTEL_BROADWELL_G IFM(6, 0x47)
|
||||
#define INTEL_FAM6_BROADWELL_X 0x4F
|
||||
#define INTEL_BROADWELL_X IFM(6, 0x4F)
|
||||
#define INTEL_FAM6_BROADWELL_D 0x56
|
||||
#define INTEL_BROADWELL_D IFM(6, 0x56)
|
||||
|
||||
#define INTEL_FAM6_SKYLAKE_L 0x4E /* Sky Lake */
|
||||
#define INTEL_SKYLAKE_L IFM(6, 0x4E) /* Sky Lake */
|
||||
#define INTEL_FAM6_SKYLAKE 0x5E /* Sky Lake */
|
||||
#define INTEL_SKYLAKE IFM(6, 0x5E) /* Sky Lake */
|
||||
#define INTEL_FAM6_SKYLAKE_X 0x55 /* Sky Lake */
|
||||
#define INTEL_SKYLAKE_X IFM(6, 0x55) /* Sky Lake */
|
||||
/* CASCADELAKE_X 0x55 Sky Lake -- s: 7 */
|
||||
/* COOPERLAKE_X 0x55 Sky Lake -- s: 11 */
|
||||
|
||||
#define INTEL_FAM6_KABYLAKE_L 0x8E /* Sky Lake */
|
||||
#define INTEL_KABYLAKE_L IFM(6, 0x8E) /* Sky Lake */
|
||||
/* AMBERLAKE_L 0x8E Sky Lake -- s: 9 */
|
||||
/* COFFEELAKE_L 0x8E Sky Lake -- s: 10 */
|
||||
/* WHISKEYLAKE_L 0x8E Sky Lake -- s: 11,12 */
|
||||
|
||||
#define INTEL_FAM6_KABYLAKE 0x9E /* Sky Lake */
|
||||
#define INTEL_KABYLAKE IFM(6, 0x9E) /* Sky Lake */
|
||||
/* COFFEELAKE 0x9E Sky Lake -- s: 10-13 */
|
||||
|
||||
#define INTEL_FAM6_COMETLAKE 0xA5 /* Sky Lake */
|
||||
#define INTEL_COMETLAKE IFM(6, 0xA5) /* Sky Lake */
|
||||
#define INTEL_FAM6_COMETLAKE_L 0xA6 /* Sky Lake */
|
||||
#define INTEL_COMETLAKE_L IFM(6, 0xA6) /* Sky Lake */
|
||||
|
||||
#define INTEL_FAM6_CANNONLAKE_L 0x66 /* Palm Cove */
|
||||
#define INTEL_CANNONLAKE_L IFM(6, 0x66) /* Palm Cove */
|
||||
|
||||
#define INTEL_FAM6_ICELAKE_X 0x6A /* Sunny Cove */
|
||||
#define INTEL_ICELAKE_X IFM(6, 0x6A) /* Sunny Cove */
|
||||
#define INTEL_FAM6_ICELAKE_D 0x6C /* Sunny Cove */
|
||||
#define INTEL_ICELAKE_D IFM(6, 0x6C) /* Sunny Cove */
|
||||
#define INTEL_FAM6_ICELAKE 0x7D /* Sunny Cove */
|
||||
#define INTEL_ICELAKE IFM(6, 0x7D) /* Sunny Cove */
|
||||
#define INTEL_FAM6_ICELAKE_L 0x7E /* Sunny Cove */
|
||||
#define INTEL_ICELAKE_L IFM(6, 0x7E) /* Sunny Cove */
|
||||
#define INTEL_FAM6_ICELAKE_NNPI 0x9D /* Sunny Cove */
|
||||
#define INTEL_ICELAKE_NNPI IFM(6, 0x9D) /* Sunny Cove */
|
||||
|
||||
#define INTEL_FAM6_ROCKETLAKE 0xA7 /* Cypress Cove */
|
||||
#define INTEL_ROCKETLAKE IFM(6, 0xA7) /* Cypress Cove */
|
||||
|
||||
#define INTEL_FAM6_TIGERLAKE_L 0x8C /* Willow Cove */
|
||||
#define INTEL_TIGERLAKE_L IFM(6, 0x8C) /* Willow Cove */
|
||||
#define INTEL_FAM6_TIGERLAKE 0x8D /* Willow Cove */
|
||||
#define INTEL_TIGERLAKE IFM(6, 0x8D) /* Willow Cove */
|
||||
|
||||
#define INTEL_FAM6_SAPPHIRERAPIDS_X 0x8F /* Golden Cove */
|
||||
#define INTEL_SAPPHIRERAPIDS_X IFM(6, 0x8F) /* Golden Cove */
|
||||
|
||||
#define INTEL_FAM6_EMERALDRAPIDS_X 0xCF
|
||||
#define INTEL_EMERALDRAPIDS_X IFM(6, 0xCF)
|
||||
|
||||
#define INTEL_FAM6_GRANITERAPIDS_X 0xAD
|
||||
#define INTEL_GRANITERAPIDS_X IFM(6, 0xAD)
|
||||
#define INTEL_FAM6_GRANITERAPIDS_D 0xAE
|
||||
#define INTEL_GRANITERAPIDS_D IFM(6, 0xAE)
|
||||
|
||||
/* "Hybrid" Processors (P-Core/E-Core) */
|
||||
|
||||
#define INTEL_FAM6_LAKEFIELD 0x8A /* Sunny Cove / Tremont */
|
||||
#define INTEL_LAKEFIELD IFM(6, 0x8A) /* Sunny Cove / Tremont */
|
||||
|
||||
#define INTEL_FAM6_ALDERLAKE 0x97 /* Golden Cove / Gracemont */
|
||||
#define INTEL_ALDERLAKE IFM(6, 0x97) /* Golden Cove / Gracemont */
|
||||
#define INTEL_FAM6_ALDERLAKE_L 0x9A /* Golden Cove / Gracemont */
|
||||
#define INTEL_ALDERLAKE_L IFM(6, 0x9A) /* Golden Cove / Gracemont */
|
||||
|
||||
#define INTEL_FAM6_RAPTORLAKE 0xB7 /* Raptor Cove / Enhanced Gracemont */
|
||||
#define INTEL_RAPTORLAKE IFM(6, 0xB7) /* Raptor Cove / Enhanced Gracemont */
|
||||
#define INTEL_FAM6_RAPTORLAKE_P 0xBA
|
||||
#define INTEL_RAPTORLAKE_P IFM(6, 0xBA)
|
||||
#define INTEL_FAM6_RAPTORLAKE_S 0xBF
|
||||
#define INTEL_RAPTORLAKE_S IFM(6, 0xBF)
|
||||
|
||||
#define INTEL_FAM6_METEORLAKE 0xAC
|
||||
#define INTEL_METEORLAKE IFM(6, 0xAC)
|
||||
#define INTEL_FAM6_METEORLAKE_L 0xAA
|
||||
#define INTEL_METEORLAKE_L IFM(6, 0xAA)
|
||||
|
||||
#define INTEL_FAM6_ARROWLAKE_H 0xC5
|
||||
#define INTEL_ARROWLAKE_H IFM(6, 0xC5)
|
||||
#define INTEL_FAM6_ARROWLAKE 0xC6
|
||||
#define INTEL_ARROWLAKE IFM(6, 0xC6)
|
||||
#define INTEL_FAM6_ARROWLAKE_U 0xB5
|
||||
#define INTEL_ARROWLAKE_U IFM(6, 0xB5)
|
||||
|
||||
#define INTEL_FAM6_LUNARLAKE_M 0xBD
|
||||
#define INTEL_LUNARLAKE_M IFM(6, 0xBD)
|
||||
|
||||
/* "Small Core" Processors (Atom/E-Core) */
|
||||
|
||||
#define INTEL_FAM6_ATOM_BONNELL 0x1C /* Diamondville, Pineview */
|
||||
#define INTEL_ATOM_BONNELL IFM(6, 0x1C) /* Diamondville, Pineview */
|
||||
#define INTEL_FAM6_ATOM_BONNELL_MID 0x26 /* Silverthorne, Lincroft */
|
||||
#define INTEL_ATOM_BONNELL_MID IFM(6, 0x26) /* Silverthorne, Lincroft */
|
||||
|
||||
#define INTEL_FAM6_ATOM_SALTWELL 0x36 /* Cedarview */
|
||||
#define INTEL_ATOM_SALTWELL IFM(6, 0x36) /* Cedarview */
|
||||
#define INTEL_FAM6_ATOM_SALTWELL_MID 0x27 /* Penwell */
|
||||
#define INTEL_ATOM_SALTWELL_MID IFM(6, 0x27) /* Penwell */
|
||||
#define INTEL_FAM6_ATOM_SALTWELL_TABLET 0x35 /* Cloverview */
|
||||
#define INTEL_ATOM_SALTWELL_TABLET IFM(6, 0x35) /* Cloverview */
|
||||
|
||||
#define INTEL_FAM6_ATOM_SILVERMONT 0x37 /* Bay Trail, Valleyview */
|
||||
#define INTEL_ATOM_SILVERMONT IFM(6, 0x37) /* Bay Trail, Valleyview */
|
||||
#define INTEL_FAM6_ATOM_SILVERMONT_D 0x4D /* Avaton, Rangely */
|
||||
#define INTEL_ATOM_SILVERMONT_D IFM(6, 0x4D) /* Avaton, Rangely */
|
||||
#define INTEL_FAM6_ATOM_SILVERMONT_MID 0x4A /* Merriefield */
|
||||
#define INTEL_ATOM_SILVERMONT_MID IFM(6, 0x4A) /* Merriefield */
|
||||
|
||||
#define INTEL_FAM6_ATOM_AIRMONT 0x4C /* Cherry Trail, Braswell */
|
||||
#define INTEL_ATOM_AIRMONT IFM(6, 0x4C) /* Cherry Trail, Braswell */
|
||||
#define INTEL_FAM6_ATOM_AIRMONT_MID 0x5A /* Moorefield */
|
||||
#define INTEL_ATOM_AIRMONT_MID IFM(6, 0x5A) /* Moorefield */
|
||||
#define INTEL_FAM6_ATOM_AIRMONT_NP 0x75 /* Lightning Mountain */
|
||||
#define INTEL_ATOM_AIRMONT_NP IFM(6, 0x75) /* Lightning Mountain */
|
||||
|
||||
#define INTEL_FAM6_ATOM_GOLDMONT 0x5C /* Apollo Lake */
|
||||
#define INTEL_ATOM_GOLDMONT IFM(6, 0x5C) /* Apollo Lake */
|
||||
#define INTEL_FAM6_ATOM_GOLDMONT_D 0x5F /* Denverton */
|
||||
#define INTEL_ATOM_GOLDMONT_D IFM(6, 0x5F) /* Denverton */
|
||||
|
||||
/* Note: the micro-architecture is "Goldmont Plus" */
|
||||
#define INTEL_FAM6_ATOM_GOLDMONT_PLUS 0x7A /* Gemini Lake */
|
||||
#define INTEL_ATOM_GOLDMONT_PLUS IFM(6, 0x7A) /* Gemini Lake */
|
||||
|
||||
#define INTEL_FAM6_ATOM_TREMONT_D 0x86 /* Jacobsville */
|
||||
#define INTEL_ATOM_TREMONT_D IFM(6, 0x86) /* Jacobsville */
|
||||
#define INTEL_FAM6_ATOM_TREMONT 0x96 /* Elkhart Lake */
|
||||
#define INTEL_ATOM_TREMONT IFM(6, 0x96) /* Elkhart Lake */
|
||||
#define INTEL_FAM6_ATOM_TREMONT_L 0x9C /* Jasper Lake */
|
||||
#define INTEL_ATOM_TREMONT_L IFM(6, 0x9C) /* Jasper Lake */
|
||||
|
||||
#define INTEL_FAM6_ATOM_GRACEMONT 0xBE /* Alderlake N */
|
||||
#define INTEL_ATOM_GRACEMONT IFM(6, 0xBE) /* Alderlake N */
|
||||
|
||||
#define INTEL_FAM6_ATOM_CRESTMONT_X 0xAF /* Sierra Forest */
|
||||
#define INTEL_ATOM_CRESTMONT_X IFM(6, 0xAF) /* Sierra Forest */
|
||||
#define INTEL_FAM6_ATOM_CRESTMONT 0xB6 /* Grand Ridge */
|
||||
#define INTEL_ATOM_CRESTMONT IFM(6, 0xB6) /* Grand Ridge */
|
||||
|
||||
#define INTEL_FAM6_ATOM_DARKMONT_X 0xDD /* Clearwater Forest */
|
||||
#define INTEL_ATOM_DARKMONT_X IFM(6, 0xDD) /* Clearwater Forest */
|
||||
|
||||
/* Xeon Phi */
|
||||
|
||||
#define INTEL_FAM6_XEON_PHI_KNL 0x57 /* Knights Landing */
|
||||
#define INTEL_XEON_PHI_KNL IFM(6, 0x57) /* Knights Landing */
|
||||
#define INTEL_FAM6_XEON_PHI_KNM 0x85 /* Knights Mill */
|
||||
#define INTEL_XEON_PHI_KNM IFM(6, 0x85) /* Knights Mill */
|
||||
|
||||
/* Family 5 */
|
||||
#define INTEL_FAM5_QUARK_X1000 0x09 /* Quark X1000 SoC */
|
||||
#define INTEL_QUARK_X1000 IFM(5, 0x09) /* Quark X1000 SoC */
|
||||
|
||||
#endif /* _ASM_X86_INTEL_FAMILY_H */
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
#define MCG_CTL_P BIT_ULL(8) /* MCG_CTL register available */
|
||||
#define MCG_EXT_P BIT_ULL(9) /* Extended registers available */
|
||||
#define MCG_CMCI_P BIT_ULL(10) /* CMCI supported */
|
||||
#define MCG_SEAM_NR BIT_ULL(12) /* MCG_STATUS_SEAM_NR supported */
|
||||
#define MCG_EXT_CNT_MASK 0xff0000 /* Number of Extended registers */
|
||||
#define MCG_EXT_CNT_SHIFT 16
|
||||
#define MCG_EXT_CNT(c) (((c) & MCG_EXT_CNT_MASK) >> MCG_EXT_CNT_SHIFT)
|
||||
@@ -25,6 +26,7 @@
|
||||
#define MCG_STATUS_EIPV BIT_ULL(1) /* ip points to correct instruction */
|
||||
#define MCG_STATUS_MCIP BIT_ULL(2) /* machine check in progress */
|
||||
#define MCG_STATUS_LMCES BIT_ULL(3) /* LMCE signaled */
|
||||
#define MCG_STATUS_SEAM_NR BIT_ULL(12) /* Machine check inside SEAM non-root mode */
|
||||
|
||||
/* MCG_EXT_CTL register defines */
|
||||
#define MCG_EXT_CTL_LMCE_EN BIT_ULL(0) /* Enable LMCE */
|
||||
|
||||
@@ -108,9 +108,23 @@ struct cpuinfo_topology {
|
||||
};
|
||||
|
||||
struct cpuinfo_x86 {
|
||||
__u8 x86; /* CPU family */
|
||||
__u8 x86_vendor; /* CPU vendor */
|
||||
__u8 x86_model;
|
||||
union {
|
||||
/*
|
||||
* The particular ordering (low-to-high) of (vendor,
|
||||
* family, model) is done in case range of models, like
|
||||
* it is usually done on AMD, need to be compared.
|
||||
*/
|
||||
struct {
|
||||
__u8 x86_model;
|
||||
/* CPU family */
|
||||
__u8 x86;
|
||||
/* CPU vendor */
|
||||
__u8 x86_vendor;
|
||||
__u8 x86_reserved;
|
||||
};
|
||||
/* combined vendor, family, model */
|
||||
__u32 x86_vfm;
|
||||
};
|
||||
__u8 x86_stepping;
|
||||
#ifdef CONFIG_X86_64
|
||||
/* Number of 4K pages in DTLB/ITLB combined(in pages): */
|
||||
|
||||
@@ -62,7 +62,7 @@ obj-$(CONFIG_X86_64) += sys_x86_64.o
|
||||
obj-$(CONFIG_X86_ESPFIX64) += espfix_64.o
|
||||
obj-$(CONFIG_SYSFS) += ksysfs.o
|
||||
obj-y += bootflag.o e820.o
|
||||
obj-y += pci-dma.o quirks.o topology.o kdebugfs.o
|
||||
obj-y += pci-dma.o quirks.o kdebugfs.o
|
||||
obj-y += alternative.o i8253.o hw_breakpoint.o
|
||||
obj-y += tsc.o tsc_msr.o io_delay.o rtc.o
|
||||
obj-y += resource.o
|
||||
|
||||
@@ -497,32 +497,32 @@ static struct clock_event_device lapic_clockevent = {
|
||||
static DEFINE_PER_CPU(struct clock_event_device, lapic_events);
|
||||
|
||||
static const struct x86_cpu_id deadline_match[] __initconst = {
|
||||
X86_MATCH_INTEL_FAM6_MODEL_STEPPINGS(HASWELL_X, X86_STEPPINGS(0x2, 0x2), 0x3a), /* EP */
|
||||
X86_MATCH_INTEL_FAM6_MODEL_STEPPINGS(HASWELL_X, X86_STEPPINGS(0x4, 0x4), 0x0f), /* EX */
|
||||
X86_MATCH_VFM_STEPPINGS(INTEL_HASWELL_X, X86_STEPPINGS(0x2, 0x2), 0x3a), /* EP */
|
||||
X86_MATCH_VFM_STEPPINGS(INTEL_HASWELL_X, X86_STEPPINGS(0x4, 0x4), 0x0f), /* EX */
|
||||
|
||||
X86_MATCH_INTEL_FAM6_MODEL( BROADWELL_X, 0x0b000020),
|
||||
X86_MATCH_VFM(INTEL_BROADWELL_X, 0x0b000020),
|
||||
|
||||
X86_MATCH_INTEL_FAM6_MODEL_STEPPINGS(BROADWELL_D, X86_STEPPINGS(0x2, 0x2), 0x00000011),
|
||||
X86_MATCH_INTEL_FAM6_MODEL_STEPPINGS(BROADWELL_D, X86_STEPPINGS(0x3, 0x3), 0x0700000e),
|
||||
X86_MATCH_INTEL_FAM6_MODEL_STEPPINGS(BROADWELL_D, X86_STEPPINGS(0x4, 0x4), 0x0f00000c),
|
||||
X86_MATCH_INTEL_FAM6_MODEL_STEPPINGS(BROADWELL_D, X86_STEPPINGS(0x5, 0x5), 0x0e000003),
|
||||
X86_MATCH_VFM_STEPPINGS(INTEL_BROADWELL_D, X86_STEPPINGS(0x2, 0x2), 0x00000011),
|
||||
X86_MATCH_VFM_STEPPINGS(INTEL_BROADWELL_D, X86_STEPPINGS(0x3, 0x3), 0x0700000e),
|
||||
X86_MATCH_VFM_STEPPINGS(INTEL_BROADWELL_D, X86_STEPPINGS(0x4, 0x4), 0x0f00000c),
|
||||
X86_MATCH_VFM_STEPPINGS(INTEL_BROADWELL_D, X86_STEPPINGS(0x5, 0x5), 0x0e000003),
|
||||
|
||||
X86_MATCH_INTEL_FAM6_MODEL_STEPPINGS(SKYLAKE_X, X86_STEPPINGS(0x3, 0x3), 0x01000136),
|
||||
X86_MATCH_INTEL_FAM6_MODEL_STEPPINGS(SKYLAKE_X, X86_STEPPINGS(0x4, 0x4), 0x02000014),
|
||||
X86_MATCH_INTEL_FAM6_MODEL_STEPPINGS(SKYLAKE_X, X86_STEPPINGS(0x5, 0xf), 0),
|
||||
X86_MATCH_VFM_STEPPINGS(INTEL_SKYLAKE_X, X86_STEPPINGS(0x3, 0x3), 0x01000136),
|
||||
X86_MATCH_VFM_STEPPINGS(INTEL_SKYLAKE_X, X86_STEPPINGS(0x4, 0x4), 0x02000014),
|
||||
X86_MATCH_VFM_STEPPINGS(INTEL_SKYLAKE_X, X86_STEPPINGS(0x5, 0xf), 0),
|
||||
|
||||
X86_MATCH_INTEL_FAM6_MODEL( HASWELL, 0x22),
|
||||
X86_MATCH_INTEL_FAM6_MODEL( HASWELL_L, 0x20),
|
||||
X86_MATCH_INTEL_FAM6_MODEL( HASWELL_G, 0x17),
|
||||
X86_MATCH_VFM(INTEL_HASWELL, 0x22),
|
||||
X86_MATCH_VFM(INTEL_HASWELL_L, 0x20),
|
||||
X86_MATCH_VFM(INTEL_HASWELL_G, 0x17),
|
||||
|
||||
X86_MATCH_INTEL_FAM6_MODEL( BROADWELL, 0x25),
|
||||
X86_MATCH_INTEL_FAM6_MODEL( BROADWELL_G, 0x17),
|
||||
X86_MATCH_VFM(INTEL_BROADWELL, 0x25),
|
||||
X86_MATCH_VFM(INTEL_BROADWELL_G, 0x17),
|
||||
|
||||
X86_MATCH_INTEL_FAM6_MODEL( SKYLAKE_L, 0xb2),
|
||||
X86_MATCH_INTEL_FAM6_MODEL( SKYLAKE, 0xb2),
|
||||
X86_MATCH_VFM(INTEL_SKYLAKE_L, 0xb2),
|
||||
X86_MATCH_VFM(INTEL_SKYLAKE, 0xb2),
|
||||
|
||||
X86_MATCH_INTEL_FAM6_MODEL( KABYLAKE_L, 0x52),
|
||||
X86_MATCH_INTEL_FAM6_MODEL( KABYLAKE, 0x52),
|
||||
X86_MATCH_VFM(INTEL_KABYLAKE_L, 0x52),
|
||||
X86_MATCH_VFM(INTEL_KABYLAKE, 0x52),
|
||||
|
||||
{},
|
||||
};
|
||||
|
||||
@@ -178,13 +178,16 @@ static int x2apic_prepare_cpu(unsigned int cpu)
|
||||
u32 phys_apicid = apic->cpu_present_to_apicid(cpu);
|
||||
u32 cluster = apic_cluster(phys_apicid);
|
||||
u32 logical_apicid = (cluster << 16) | (1 << (phys_apicid & 0xf));
|
||||
int node = cpu_to_node(cpu);
|
||||
|
||||
x86_cpu_to_logical_apicid[cpu] = logical_apicid;
|
||||
|
||||
if (alloc_clustermask(cpu, cluster, cpu_to_node(cpu)) < 0)
|
||||
if (alloc_clustermask(cpu, cluster, node) < 0)
|
||||
return -ENOMEM;
|
||||
if (!zalloc_cpumask_var(&per_cpu(ipi_mask, cpu), GFP_KERNEL))
|
||||
|
||||
if (!zalloc_cpumask_var_node(&per_cpu(ipi_mask, cpu), GFP_KERNEL, node))
|
||||
return -ENOMEM;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
#include <asm/apic.h>
|
||||
#include <asm/cacheinfo.h>
|
||||
#include <asm/cpu.h>
|
||||
#include <asm/cpu_device_id.h>
|
||||
#include <asm/spec-ctrl.h>
|
||||
#include <asm/smp.h>
|
||||
#include <asm/numa.h>
|
||||
@@ -794,6 +795,11 @@ static void init_amd_bd(struct cpuinfo_x86 *c)
|
||||
clear_rdrand_cpuid_bit(c);
|
||||
}
|
||||
|
||||
static const struct x86_cpu_desc erratum_1386_microcode[] = {
|
||||
AMD_CPU_DESC(0x17, 0x1, 0x2, 0x0800126e),
|
||||
AMD_CPU_DESC(0x17, 0x31, 0x0, 0x08301052),
|
||||
};
|
||||
|
||||
static void fix_erratum_1386(struct cpuinfo_x86 *c)
|
||||
{
|
||||
/*
|
||||
@@ -803,7 +809,13 @@ static void fix_erratum_1386(struct cpuinfo_x86 *c)
|
||||
*
|
||||
* Affected parts all have no supervisor XSAVE states, meaning that
|
||||
* the XSAVEC instruction (which works fine) is equivalent.
|
||||
*
|
||||
* Clear the feature flag only on microcode revisions which
|
||||
* don't have the fix.
|
||||
*/
|
||||
if (x86_cpu_has_min_microcode_rev(erratum_1386_microcode))
|
||||
return;
|
||||
|
||||
clear_cpu_cap(c, X86_FEATURE_XSAVES);
|
||||
}
|
||||
|
||||
|
||||
@@ -124,25 +124,24 @@ static bool __init slv_set_max_freq_ratio(u64 *base_freq, u64 *turbo_freq)
|
||||
return true;
|
||||
}
|
||||
|
||||
#define X86_MATCH(model) \
|
||||
X86_MATCH_VENDOR_FAM_MODEL_FEATURE(INTEL, 6, \
|
||||
INTEL_FAM6_##model, X86_FEATURE_APERFMPERF, NULL)
|
||||
#define X86_MATCH(vfm) \
|
||||
X86_MATCH_VFM_FEATURE(vfm, X86_FEATURE_APERFMPERF, NULL)
|
||||
|
||||
static const struct x86_cpu_id has_knl_turbo_ratio_limits[] __initconst = {
|
||||
X86_MATCH(XEON_PHI_KNL),
|
||||
X86_MATCH(XEON_PHI_KNM),
|
||||
X86_MATCH(INTEL_XEON_PHI_KNL),
|
||||
X86_MATCH(INTEL_XEON_PHI_KNM),
|
||||
{}
|
||||
};
|
||||
|
||||
static const struct x86_cpu_id has_skx_turbo_ratio_limits[] __initconst = {
|
||||
X86_MATCH(SKYLAKE_X),
|
||||
X86_MATCH(INTEL_SKYLAKE_X),
|
||||
{}
|
||||
};
|
||||
|
||||
static const struct x86_cpu_id has_glm_turbo_ratio_limits[] __initconst = {
|
||||
X86_MATCH(ATOM_GOLDMONT),
|
||||
X86_MATCH(ATOM_GOLDMONT_D),
|
||||
X86_MATCH(ATOM_GOLDMONT_PLUS),
|
||||
X86_MATCH(INTEL_ATOM_GOLDMONT),
|
||||
X86_MATCH(INTEL_ATOM_GOLDMONT_D),
|
||||
X86_MATCH(INTEL_ATOM_GOLDMONT_PLUS),
|
||||
{}
|
||||
};
|
||||
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
#include <asm/msr.h>
|
||||
#include <asm/vmx.h>
|
||||
#include <asm/paravirt.h>
|
||||
#include <asm/intel-family.h>
|
||||
#include <asm/cpu_device_id.h>
|
||||
#include <asm/e820/api.h>
|
||||
#include <asm/hypervisor.h>
|
||||
#include <asm/tlbflush.h>
|
||||
@@ -2391,20 +2391,20 @@ static void override_cache_bits(struct cpuinfo_x86 *c)
|
||||
if (c->x86 != 6)
|
||||
return;
|
||||
|
||||
switch (c->x86_model) {
|
||||
case INTEL_FAM6_NEHALEM:
|
||||
case INTEL_FAM6_WESTMERE:
|
||||
case INTEL_FAM6_SANDYBRIDGE:
|
||||
case INTEL_FAM6_IVYBRIDGE:
|
||||
case INTEL_FAM6_HASWELL:
|
||||
case INTEL_FAM6_HASWELL_L:
|
||||
case INTEL_FAM6_HASWELL_G:
|
||||
case INTEL_FAM6_BROADWELL:
|
||||
case INTEL_FAM6_BROADWELL_G:
|
||||
case INTEL_FAM6_SKYLAKE_L:
|
||||
case INTEL_FAM6_SKYLAKE:
|
||||
case INTEL_FAM6_KABYLAKE_L:
|
||||
case INTEL_FAM6_KABYLAKE:
|
||||
switch (c->x86_vfm) {
|
||||
case INTEL_NEHALEM:
|
||||
case INTEL_WESTMERE:
|
||||
case INTEL_SANDYBRIDGE:
|
||||
case INTEL_IVYBRIDGE:
|
||||
case INTEL_HASWELL:
|
||||
case INTEL_HASWELL_L:
|
||||
case INTEL_HASWELL_G:
|
||||
case INTEL_BROADWELL:
|
||||
case INTEL_BROADWELL_G:
|
||||
case INTEL_SKYLAKE_L:
|
||||
case INTEL_SKYLAKE:
|
||||
case INTEL_KABYLAKE_L:
|
||||
case INTEL_KABYLAKE:
|
||||
if (c->x86_cache_bits < 44)
|
||||
c->x86_cache_bits = 44;
|
||||
break;
|
||||
|
||||
@@ -114,17 +114,17 @@ static const struct x86_cpu_id ppin_cpuids[] = {
|
||||
X86_MATCH_FEATURE(X86_FEATURE_INTEL_PPIN, &ppin_info[X86_VENDOR_INTEL]),
|
||||
|
||||
/* Legacy models without CPUID enumeration */
|
||||
X86_MATCH_INTEL_FAM6_MODEL(IVYBRIDGE_X, &ppin_info[X86_VENDOR_INTEL]),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(HASWELL_X, &ppin_info[X86_VENDOR_INTEL]),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(BROADWELL_D, &ppin_info[X86_VENDOR_INTEL]),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(BROADWELL_X, &ppin_info[X86_VENDOR_INTEL]),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(SKYLAKE_X, &ppin_info[X86_VENDOR_INTEL]),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(ICELAKE_X, &ppin_info[X86_VENDOR_INTEL]),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(ICELAKE_D, &ppin_info[X86_VENDOR_INTEL]),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(SAPPHIRERAPIDS_X, &ppin_info[X86_VENDOR_INTEL]),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(EMERALDRAPIDS_X, &ppin_info[X86_VENDOR_INTEL]),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(XEON_PHI_KNL, &ppin_info[X86_VENDOR_INTEL]),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(XEON_PHI_KNM, &ppin_info[X86_VENDOR_INTEL]),
|
||||
X86_MATCH_VFM(INTEL_IVYBRIDGE_X, &ppin_info[X86_VENDOR_INTEL]),
|
||||
X86_MATCH_VFM(INTEL_HASWELL_X, &ppin_info[X86_VENDOR_INTEL]),
|
||||
X86_MATCH_VFM(INTEL_BROADWELL_D, &ppin_info[X86_VENDOR_INTEL]),
|
||||
X86_MATCH_VFM(INTEL_BROADWELL_X, &ppin_info[X86_VENDOR_INTEL]),
|
||||
X86_MATCH_VFM(INTEL_SKYLAKE_X, &ppin_info[X86_VENDOR_INTEL]),
|
||||
X86_MATCH_VFM(INTEL_ICELAKE_X, &ppin_info[X86_VENDOR_INTEL]),
|
||||
X86_MATCH_VFM(INTEL_ICELAKE_D, &ppin_info[X86_VENDOR_INTEL]),
|
||||
X86_MATCH_VFM(INTEL_SAPPHIRERAPIDS_X, &ppin_info[X86_VENDOR_INTEL]),
|
||||
X86_MATCH_VFM(INTEL_EMERALDRAPIDS_X, &ppin_info[X86_VENDOR_INTEL]),
|
||||
X86_MATCH_VFM(INTEL_XEON_PHI_KNL, &ppin_info[X86_VENDOR_INTEL]),
|
||||
X86_MATCH_VFM(INTEL_XEON_PHI_KNM, &ppin_info[X86_VENDOR_INTEL]),
|
||||
|
||||
{}
|
||||
};
|
||||
@@ -1053,18 +1053,9 @@ void get_cpu_cap(struct cpuinfo_x86 *c)
|
||||
void get_cpu_address_sizes(struct cpuinfo_x86 *c)
|
||||
{
|
||||
u32 eax, ebx, ecx, edx;
|
||||
bool vp_bits_from_cpuid = true;
|
||||
|
||||
if (!cpu_has(c, X86_FEATURE_CPUID) ||
|
||||
(c->extended_cpuid_level < 0x80000008))
|
||||
vp_bits_from_cpuid = false;
|
||||
|
||||
if (vp_bits_from_cpuid) {
|
||||
cpuid(0x80000008, &eax, &ebx, &ecx, &edx);
|
||||
|
||||
c->x86_virt_bits = (eax >> 8) & 0xff;
|
||||
c->x86_phys_bits = eax & 0xff;
|
||||
} else {
|
||||
(c->extended_cpuid_level < 0x80000008)) {
|
||||
if (IS_ENABLED(CONFIG_X86_64)) {
|
||||
c->x86_clflush_size = 64;
|
||||
c->x86_phys_bits = 36;
|
||||
@@ -1078,7 +1069,13 @@ void get_cpu_address_sizes(struct cpuinfo_x86 *c)
|
||||
cpu_has(c, X86_FEATURE_PSE36))
|
||||
c->x86_phys_bits = 36;
|
||||
}
|
||||
} else {
|
||||
cpuid(0x80000008, &eax, &ebx, &ecx, &edx);
|
||||
|
||||
c->x86_virt_bits = (eax >> 8) & 0xff;
|
||||
c->x86_phys_bits = eax & 0xff;
|
||||
}
|
||||
|
||||
c->x86_cache_bits = c->x86_phys_bits;
|
||||
c->x86_cache_alignment = c->x86_clflush_size;
|
||||
}
|
||||
@@ -1125,8 +1122,8 @@ static void identify_cpu_without_cpuid(struct cpuinfo_x86 *c)
|
||||
#define VULNWL(vendor, family, model, whitelist) \
|
||||
X86_MATCH_VENDOR_FAM_MODEL(vendor, family, model, whitelist)
|
||||
|
||||
#define VULNWL_INTEL(model, whitelist) \
|
||||
VULNWL(INTEL, 6, INTEL_FAM6_##model, whitelist)
|
||||
#define VULNWL_INTEL(vfm, whitelist) \
|
||||
X86_MATCH_VFM(vfm, whitelist)
|
||||
|
||||
#define VULNWL_AMD(family, whitelist) \
|
||||
VULNWL(AMD, family, X86_MODEL_ANY, whitelist)
|
||||
@@ -1143,32 +1140,32 @@ static const __initconst struct x86_cpu_id cpu_vuln_whitelist[] = {
|
||||
VULNWL(VORTEX, 6, X86_MODEL_ANY, NO_SPECULATION),
|
||||
|
||||
/* Intel Family 6 */
|
||||
VULNWL_INTEL(TIGERLAKE, NO_MMIO),
|
||||
VULNWL_INTEL(TIGERLAKE_L, NO_MMIO),
|
||||
VULNWL_INTEL(ALDERLAKE, NO_MMIO),
|
||||
VULNWL_INTEL(ALDERLAKE_L, NO_MMIO),
|
||||
VULNWL_INTEL(INTEL_TIGERLAKE, NO_MMIO),
|
||||
VULNWL_INTEL(INTEL_TIGERLAKE_L, NO_MMIO),
|
||||
VULNWL_INTEL(INTEL_ALDERLAKE, NO_MMIO),
|
||||
VULNWL_INTEL(INTEL_ALDERLAKE_L, NO_MMIO),
|
||||
|
||||
VULNWL_INTEL(ATOM_SALTWELL, NO_SPECULATION | NO_ITLB_MULTIHIT),
|
||||
VULNWL_INTEL(ATOM_SALTWELL_TABLET, NO_SPECULATION | NO_ITLB_MULTIHIT),
|
||||
VULNWL_INTEL(ATOM_SALTWELL_MID, NO_SPECULATION | NO_ITLB_MULTIHIT),
|
||||
VULNWL_INTEL(ATOM_BONNELL, NO_SPECULATION | NO_ITLB_MULTIHIT),
|
||||
VULNWL_INTEL(ATOM_BONNELL_MID, NO_SPECULATION | NO_ITLB_MULTIHIT),
|
||||
VULNWL_INTEL(INTEL_ATOM_SALTWELL, NO_SPECULATION | NO_ITLB_MULTIHIT),
|
||||
VULNWL_INTEL(INTEL_ATOM_SALTWELL_TABLET, NO_SPECULATION | NO_ITLB_MULTIHIT),
|
||||
VULNWL_INTEL(INTEL_ATOM_SALTWELL_MID, NO_SPECULATION | NO_ITLB_MULTIHIT),
|
||||
VULNWL_INTEL(INTEL_ATOM_BONNELL, NO_SPECULATION | NO_ITLB_MULTIHIT),
|
||||
VULNWL_INTEL(INTEL_ATOM_BONNELL_MID, NO_SPECULATION | NO_ITLB_MULTIHIT),
|
||||
|
||||
VULNWL_INTEL(ATOM_SILVERMONT, NO_SSB | NO_L1TF | MSBDS_ONLY | NO_SWAPGS | NO_ITLB_MULTIHIT),
|
||||
VULNWL_INTEL(ATOM_SILVERMONT_D, NO_SSB | NO_L1TF | MSBDS_ONLY | NO_SWAPGS | NO_ITLB_MULTIHIT),
|
||||
VULNWL_INTEL(ATOM_SILVERMONT_MID, NO_SSB | NO_L1TF | MSBDS_ONLY | NO_SWAPGS | NO_ITLB_MULTIHIT),
|
||||
VULNWL_INTEL(ATOM_AIRMONT, NO_SSB | NO_L1TF | MSBDS_ONLY | NO_SWAPGS | NO_ITLB_MULTIHIT),
|
||||
VULNWL_INTEL(XEON_PHI_KNL, NO_SSB | NO_L1TF | MSBDS_ONLY | NO_SWAPGS | NO_ITLB_MULTIHIT),
|
||||
VULNWL_INTEL(XEON_PHI_KNM, NO_SSB | NO_L1TF | MSBDS_ONLY | NO_SWAPGS | NO_ITLB_MULTIHIT),
|
||||
VULNWL_INTEL(INTEL_ATOM_SILVERMONT, NO_SSB | NO_L1TF | MSBDS_ONLY | NO_SWAPGS | NO_ITLB_MULTIHIT),
|
||||
VULNWL_INTEL(INTEL_ATOM_SILVERMONT_D, NO_SSB | NO_L1TF | MSBDS_ONLY | NO_SWAPGS | NO_ITLB_MULTIHIT),
|
||||
VULNWL_INTEL(INTEL_ATOM_SILVERMONT_MID, NO_SSB | NO_L1TF | MSBDS_ONLY | NO_SWAPGS | NO_ITLB_MULTIHIT),
|
||||
VULNWL_INTEL(INTEL_ATOM_AIRMONT, NO_SSB | NO_L1TF | MSBDS_ONLY | NO_SWAPGS | NO_ITLB_MULTIHIT),
|
||||
VULNWL_INTEL(INTEL_XEON_PHI_KNL, NO_SSB | NO_L1TF | MSBDS_ONLY | NO_SWAPGS | NO_ITLB_MULTIHIT),
|
||||
VULNWL_INTEL(INTEL_XEON_PHI_KNM, NO_SSB | NO_L1TF | MSBDS_ONLY | NO_SWAPGS | NO_ITLB_MULTIHIT),
|
||||
|
||||
VULNWL_INTEL(CORE_YONAH, NO_SSB),
|
||||
VULNWL_INTEL(INTEL_CORE_YONAH, NO_SSB),
|
||||
|
||||
VULNWL_INTEL(ATOM_AIRMONT_MID, NO_L1TF | MSBDS_ONLY | NO_SWAPGS | NO_ITLB_MULTIHIT),
|
||||
VULNWL_INTEL(ATOM_AIRMONT_NP, NO_L1TF | NO_SWAPGS | NO_ITLB_MULTIHIT),
|
||||
VULNWL_INTEL(INTEL_ATOM_AIRMONT_MID, NO_L1TF | MSBDS_ONLY | NO_SWAPGS | NO_ITLB_MULTIHIT),
|
||||
VULNWL_INTEL(INTEL_ATOM_AIRMONT_NP, NO_L1TF | NO_SWAPGS | NO_ITLB_MULTIHIT),
|
||||
|
||||
VULNWL_INTEL(ATOM_GOLDMONT, NO_MDS | NO_L1TF | NO_SWAPGS | NO_ITLB_MULTIHIT | NO_MMIO),
|
||||
VULNWL_INTEL(ATOM_GOLDMONT_D, NO_MDS | NO_L1TF | NO_SWAPGS | NO_ITLB_MULTIHIT | NO_MMIO),
|
||||
VULNWL_INTEL(ATOM_GOLDMONT_PLUS, NO_MDS | NO_L1TF | NO_SWAPGS | NO_ITLB_MULTIHIT | NO_MMIO | NO_EIBRS_PBRSB),
|
||||
VULNWL_INTEL(INTEL_ATOM_GOLDMONT, NO_MDS | NO_L1TF | NO_SWAPGS | NO_ITLB_MULTIHIT | NO_MMIO),
|
||||
VULNWL_INTEL(INTEL_ATOM_GOLDMONT_D, NO_MDS | NO_L1TF | NO_SWAPGS | NO_ITLB_MULTIHIT | NO_MMIO),
|
||||
VULNWL_INTEL(INTEL_ATOM_GOLDMONT_PLUS, NO_MDS | NO_L1TF | NO_SWAPGS | NO_ITLB_MULTIHIT | NO_MMIO | NO_EIBRS_PBRSB),
|
||||
|
||||
/*
|
||||
* Technically, swapgs isn't serializing on AMD (despite it previously
|
||||
@@ -1178,9 +1175,9 @@ static const __initconst struct x86_cpu_id cpu_vuln_whitelist[] = {
|
||||
* good enough for our purposes.
|
||||
*/
|
||||
|
||||
VULNWL_INTEL(ATOM_TREMONT, NO_EIBRS_PBRSB),
|
||||
VULNWL_INTEL(ATOM_TREMONT_L, NO_EIBRS_PBRSB),
|
||||
VULNWL_INTEL(ATOM_TREMONT_D, NO_ITLB_MULTIHIT | NO_EIBRS_PBRSB),
|
||||
VULNWL_INTEL(INTEL_ATOM_TREMONT, NO_EIBRS_PBRSB),
|
||||
VULNWL_INTEL(INTEL_ATOM_TREMONT_L, NO_EIBRS_PBRSB),
|
||||
VULNWL_INTEL(INTEL_ATOM_TREMONT_D, NO_ITLB_MULTIHIT | NO_EIBRS_PBRSB),
|
||||
|
||||
/* AMD Family 0xf - 0x12 */
|
||||
VULNWL_AMD(0x0f, NO_MELTDOWN | NO_SSB | NO_L1TF | NO_MDS | NO_SWAPGS | NO_ITLB_MULTIHIT | NO_MMIO | NO_BHI),
|
||||
@@ -1201,10 +1198,8 @@ static const __initconst struct x86_cpu_id cpu_vuln_whitelist[] = {
|
||||
#define VULNBL(vendor, family, model, blacklist) \
|
||||
X86_MATCH_VENDOR_FAM_MODEL(vendor, family, model, blacklist)
|
||||
|
||||
#define VULNBL_INTEL_STEPPINGS(model, steppings, issues) \
|
||||
X86_MATCH_VENDOR_FAM_MODEL_STEPPINGS_FEATURE(INTEL, 6, \
|
||||
INTEL_FAM6_##model, steppings, \
|
||||
X86_FEATURE_ANY, issues)
|
||||
#define VULNBL_INTEL_STEPPINGS(vfm, steppings, issues) \
|
||||
X86_MATCH_VFM_STEPPINGS(vfm, steppings, issues)
|
||||
|
||||
#define VULNBL_AMD(family, blacklist) \
|
||||
VULNBL(AMD, family, X86_MODEL_ANY, blacklist)
|
||||
@@ -1229,43 +1224,43 @@ static const __initconst struct x86_cpu_id cpu_vuln_whitelist[] = {
|
||||
#define RFDS BIT(7)
|
||||
|
||||
static const struct x86_cpu_id cpu_vuln_blacklist[] __initconst = {
|
||||
VULNBL_INTEL_STEPPINGS(IVYBRIDGE, X86_STEPPING_ANY, SRBDS),
|
||||
VULNBL_INTEL_STEPPINGS(HASWELL, X86_STEPPING_ANY, SRBDS),
|
||||
VULNBL_INTEL_STEPPINGS(HASWELL_L, X86_STEPPING_ANY, SRBDS),
|
||||
VULNBL_INTEL_STEPPINGS(HASWELL_G, X86_STEPPING_ANY, SRBDS),
|
||||
VULNBL_INTEL_STEPPINGS(HASWELL_X, X86_STEPPING_ANY, MMIO),
|
||||
VULNBL_INTEL_STEPPINGS(BROADWELL_D, X86_STEPPING_ANY, MMIO),
|
||||
VULNBL_INTEL_STEPPINGS(BROADWELL_G, X86_STEPPING_ANY, SRBDS),
|
||||
VULNBL_INTEL_STEPPINGS(BROADWELL_X, X86_STEPPING_ANY, MMIO),
|
||||
VULNBL_INTEL_STEPPINGS(BROADWELL, X86_STEPPING_ANY, SRBDS),
|
||||
VULNBL_INTEL_STEPPINGS(SKYLAKE_X, X86_STEPPING_ANY, MMIO | RETBLEED | GDS),
|
||||
VULNBL_INTEL_STEPPINGS(SKYLAKE_L, X86_STEPPING_ANY, MMIO | RETBLEED | GDS | SRBDS),
|
||||
VULNBL_INTEL_STEPPINGS(SKYLAKE, X86_STEPPING_ANY, MMIO | RETBLEED | GDS | SRBDS),
|
||||
VULNBL_INTEL_STEPPINGS(KABYLAKE_L, X86_STEPPING_ANY, MMIO | RETBLEED | GDS | SRBDS),
|
||||
VULNBL_INTEL_STEPPINGS(KABYLAKE, X86_STEPPING_ANY, MMIO | RETBLEED | GDS | SRBDS),
|
||||
VULNBL_INTEL_STEPPINGS(CANNONLAKE_L, X86_STEPPING_ANY, RETBLEED),
|
||||
VULNBL_INTEL_STEPPINGS(ICELAKE_L, X86_STEPPING_ANY, MMIO | MMIO_SBDS | RETBLEED | GDS),
|
||||
VULNBL_INTEL_STEPPINGS(ICELAKE_D, X86_STEPPING_ANY, MMIO | GDS),
|
||||
VULNBL_INTEL_STEPPINGS(ICELAKE_X, X86_STEPPING_ANY, MMIO | GDS),
|
||||
VULNBL_INTEL_STEPPINGS(COMETLAKE, X86_STEPPING_ANY, MMIO | MMIO_SBDS | RETBLEED | GDS),
|
||||
VULNBL_INTEL_STEPPINGS(COMETLAKE_L, X86_STEPPINGS(0x0, 0x0), MMIO | RETBLEED),
|
||||
VULNBL_INTEL_STEPPINGS(COMETLAKE_L, X86_STEPPING_ANY, MMIO | MMIO_SBDS | RETBLEED | GDS),
|
||||
VULNBL_INTEL_STEPPINGS(TIGERLAKE_L, X86_STEPPING_ANY, GDS),
|
||||
VULNBL_INTEL_STEPPINGS(TIGERLAKE, X86_STEPPING_ANY, GDS),
|
||||
VULNBL_INTEL_STEPPINGS(LAKEFIELD, X86_STEPPING_ANY, MMIO | MMIO_SBDS | RETBLEED),
|
||||
VULNBL_INTEL_STEPPINGS(ROCKETLAKE, X86_STEPPING_ANY, MMIO | RETBLEED | GDS),
|
||||
VULNBL_INTEL_STEPPINGS(ALDERLAKE, X86_STEPPING_ANY, RFDS),
|
||||
VULNBL_INTEL_STEPPINGS(ALDERLAKE_L, X86_STEPPING_ANY, RFDS),
|
||||
VULNBL_INTEL_STEPPINGS(RAPTORLAKE, X86_STEPPING_ANY, RFDS),
|
||||
VULNBL_INTEL_STEPPINGS(RAPTORLAKE_P, X86_STEPPING_ANY, RFDS),
|
||||
VULNBL_INTEL_STEPPINGS(RAPTORLAKE_S, X86_STEPPING_ANY, RFDS),
|
||||
VULNBL_INTEL_STEPPINGS(ATOM_GRACEMONT, X86_STEPPING_ANY, RFDS),
|
||||
VULNBL_INTEL_STEPPINGS(ATOM_TREMONT, X86_STEPPING_ANY, MMIO | MMIO_SBDS | RFDS),
|
||||
VULNBL_INTEL_STEPPINGS(ATOM_TREMONT_D, X86_STEPPING_ANY, MMIO | RFDS),
|
||||
VULNBL_INTEL_STEPPINGS(ATOM_TREMONT_L, X86_STEPPING_ANY, MMIO | MMIO_SBDS | RFDS),
|
||||
VULNBL_INTEL_STEPPINGS(ATOM_GOLDMONT, X86_STEPPING_ANY, RFDS),
|
||||
VULNBL_INTEL_STEPPINGS(ATOM_GOLDMONT_D, X86_STEPPING_ANY, RFDS),
|
||||
VULNBL_INTEL_STEPPINGS(ATOM_GOLDMONT_PLUS, X86_STEPPING_ANY, RFDS),
|
||||
VULNBL_INTEL_STEPPINGS(INTEL_IVYBRIDGE, X86_STEPPING_ANY, SRBDS),
|
||||
VULNBL_INTEL_STEPPINGS(INTEL_HASWELL, X86_STEPPING_ANY, SRBDS),
|
||||
VULNBL_INTEL_STEPPINGS(INTEL_HASWELL_L, X86_STEPPING_ANY, SRBDS),
|
||||
VULNBL_INTEL_STEPPINGS(INTEL_HASWELL_G, X86_STEPPING_ANY, SRBDS),
|
||||
VULNBL_INTEL_STEPPINGS(INTEL_HASWELL_X, X86_STEPPING_ANY, MMIO),
|
||||
VULNBL_INTEL_STEPPINGS(INTEL_BROADWELL_D, X86_STEPPING_ANY, MMIO),
|
||||
VULNBL_INTEL_STEPPINGS(INTEL_BROADWELL_G, X86_STEPPING_ANY, SRBDS),
|
||||
VULNBL_INTEL_STEPPINGS(INTEL_BROADWELL_X, X86_STEPPING_ANY, MMIO),
|
||||
VULNBL_INTEL_STEPPINGS(INTEL_BROADWELL, X86_STEPPING_ANY, SRBDS),
|
||||
VULNBL_INTEL_STEPPINGS(INTEL_SKYLAKE_X, X86_STEPPING_ANY, MMIO | RETBLEED | GDS),
|
||||
VULNBL_INTEL_STEPPINGS(INTEL_SKYLAKE_L, X86_STEPPING_ANY, MMIO | RETBLEED | GDS | SRBDS),
|
||||
VULNBL_INTEL_STEPPINGS(INTEL_SKYLAKE, X86_STEPPING_ANY, MMIO | RETBLEED | GDS | SRBDS),
|
||||
VULNBL_INTEL_STEPPINGS(INTEL_KABYLAKE_L, X86_STEPPING_ANY, MMIO | RETBLEED | GDS | SRBDS),
|
||||
VULNBL_INTEL_STEPPINGS(INTEL_KABYLAKE, X86_STEPPING_ANY, MMIO | RETBLEED | GDS | SRBDS),
|
||||
VULNBL_INTEL_STEPPINGS(INTEL_CANNONLAKE_L, X86_STEPPING_ANY, RETBLEED),
|
||||
VULNBL_INTEL_STEPPINGS(INTEL_ICELAKE_L, X86_STEPPING_ANY, MMIO | MMIO_SBDS | RETBLEED | GDS),
|
||||
VULNBL_INTEL_STEPPINGS(INTEL_ICELAKE_D, X86_STEPPING_ANY, MMIO | GDS),
|
||||
VULNBL_INTEL_STEPPINGS(INTEL_ICELAKE_X, X86_STEPPING_ANY, MMIO | GDS),
|
||||
VULNBL_INTEL_STEPPINGS(INTEL_COMETLAKE, X86_STEPPING_ANY, MMIO | MMIO_SBDS | RETBLEED | GDS),
|
||||
VULNBL_INTEL_STEPPINGS(INTEL_COMETLAKE_L, X86_STEPPINGS(0x0, 0x0), MMIO | RETBLEED),
|
||||
VULNBL_INTEL_STEPPINGS(INTEL_COMETLAKE_L, X86_STEPPING_ANY, MMIO | MMIO_SBDS | RETBLEED | GDS),
|
||||
VULNBL_INTEL_STEPPINGS(INTEL_TIGERLAKE_L, X86_STEPPING_ANY, GDS),
|
||||
VULNBL_INTEL_STEPPINGS(INTEL_TIGERLAKE, X86_STEPPING_ANY, GDS),
|
||||
VULNBL_INTEL_STEPPINGS(INTEL_LAKEFIELD, X86_STEPPING_ANY, MMIO | MMIO_SBDS | RETBLEED),
|
||||
VULNBL_INTEL_STEPPINGS(INTEL_ROCKETLAKE, X86_STEPPING_ANY, MMIO | RETBLEED | GDS),
|
||||
VULNBL_INTEL_STEPPINGS(INTEL_ALDERLAKE, X86_STEPPING_ANY, RFDS),
|
||||
VULNBL_INTEL_STEPPINGS(INTEL_ALDERLAKE_L, X86_STEPPING_ANY, RFDS),
|
||||
VULNBL_INTEL_STEPPINGS(INTEL_RAPTORLAKE, X86_STEPPING_ANY, RFDS),
|
||||
VULNBL_INTEL_STEPPINGS(INTEL_RAPTORLAKE_P, X86_STEPPING_ANY, RFDS),
|
||||
VULNBL_INTEL_STEPPINGS(INTEL_RAPTORLAKE_S, X86_STEPPING_ANY, RFDS),
|
||||
VULNBL_INTEL_STEPPINGS(INTEL_ATOM_GRACEMONT, X86_STEPPING_ANY, RFDS),
|
||||
VULNBL_INTEL_STEPPINGS(INTEL_ATOM_TREMONT, X86_STEPPING_ANY, MMIO | MMIO_SBDS | RFDS),
|
||||
VULNBL_INTEL_STEPPINGS(INTEL_ATOM_TREMONT_D, X86_STEPPING_ANY, MMIO | RFDS),
|
||||
VULNBL_INTEL_STEPPINGS(INTEL_ATOM_TREMONT_L, X86_STEPPING_ANY, MMIO | MMIO_SBDS | RFDS),
|
||||
VULNBL_INTEL_STEPPINGS(INTEL_ATOM_GOLDMONT, X86_STEPPING_ANY, RFDS),
|
||||
VULNBL_INTEL_STEPPINGS(INTEL_ATOM_GOLDMONT_D, X86_STEPPING_ANY, RFDS),
|
||||
VULNBL_INTEL_STEPPINGS(INTEL_ATOM_GOLDMONT_PLUS, X86_STEPPING_ANY, RFDS),
|
||||
|
||||
VULNBL_AMD(0x15, RETBLEED),
|
||||
VULNBL_AMD(0x16, RETBLEED),
|
||||
|
||||
@@ -228,6 +228,7 @@ static void detect_tme_early(struct cpuinfo_x86 *c)
|
||||
if (!TME_ACTIVATE_LOCKED(tme_activate) || !TME_ACTIVATE_ENABLED(tme_activate)) {
|
||||
pr_info_once("x86/tme: not enabled by BIOS\n");
|
||||
mktme_status = MKTME_DISABLED;
|
||||
clear_cpu_cap(c, X86_FEATURE_TME);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -204,12 +204,12 @@ static int intel_epb_offline(unsigned int cpu)
|
||||
}
|
||||
|
||||
static const struct x86_cpu_id intel_epb_normal[] = {
|
||||
X86_MATCH_INTEL_FAM6_MODEL(ALDERLAKE_L,
|
||||
ENERGY_PERF_BIAS_NORMAL_POWERSAVE),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(ATOM_GRACEMONT,
|
||||
ENERGY_PERF_BIAS_NORMAL_POWERSAVE),
|
||||
X86_MATCH_INTEL_FAM6_MODEL(RAPTORLAKE_P,
|
||||
ENERGY_PERF_BIAS_NORMAL_POWERSAVE),
|
||||
X86_MATCH_VFM(INTEL_ALDERLAKE_L,
|
||||
ENERGY_PERF_BIAS_NORMAL_POWERSAVE),
|
||||
X86_MATCH_VFM(INTEL_ATOM_GRACEMONT,
|
||||
ENERGY_PERF_BIAS_NORMAL_POWERSAVE),
|
||||
X86_MATCH_VFM(INTEL_RAPTORLAKE_P,
|
||||
ENERGY_PERF_BIAS_NORMAL_POWERSAVE),
|
||||
{}
|
||||
};
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user