aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/x86/events/intel/rapl.c82
1 files changed, 3 insertions, 79 deletions
diff --git a/arch/x86/events/intel/rapl.c b/arch/x86/events/intel/rapl.c
index 460196c02bae..64ab51ffdf06 100644
--- a/arch/x86/events/intel/rapl.c
+++ b/arch/x86/events/intel/rapl.c
@@ -671,75 +671,6 @@ static int __init init_rapl_pmus(void)
671#define X86_RAPL_MODEL_MATCH(model, init) \ 671#define X86_RAPL_MODEL_MATCH(model, init) \
672 { X86_VENDOR_INTEL, 6, model, X86_FEATURE_ANY, (unsigned long)&init } 672 { X86_VENDOR_INTEL, 6, model, X86_FEATURE_ANY, (unsigned long)&init }
673 673
674struct intel_rapl_init_fun {
675 bool apply_quirk;
676};
677
678static const struct intel_rapl_init_fun snb_rapl_init __initconst = {
679 .apply_quirk = false,
680};
681
682static const struct intel_rapl_init_fun hsx_rapl_init __initconst = {
683 .apply_quirk = true,
684};
685
686static const struct intel_rapl_init_fun hsw_rapl_init __initconst = {
687 .apply_quirk = false,
688};
689
690static const struct intel_rapl_init_fun snbep_rapl_init __initconst = {
691 .apply_quirk = false,
692};
693
694static const struct intel_rapl_init_fun knl_rapl_init __initconst = {
695 .apply_quirk = true,
696};
697
698static const struct intel_rapl_init_fun skl_rapl_init __initconst = {
699 .apply_quirk = false,
700};
701
702static const struct x86_cpu_id rapl_cpu_match[] __initconst = {
703 X86_RAPL_MODEL_MATCH(INTEL_FAM6_SANDYBRIDGE, snb_rapl_init),
704 X86_RAPL_MODEL_MATCH(INTEL_FAM6_SANDYBRIDGE_X, snbep_rapl_init),
705
706 X86_RAPL_MODEL_MATCH(INTEL_FAM6_IVYBRIDGE, snb_rapl_init),
707 X86_RAPL_MODEL_MATCH(INTEL_FAM6_IVYBRIDGE_X, snbep_rapl_init),
708
709 X86_RAPL_MODEL_MATCH(INTEL_FAM6_HASWELL_CORE, hsw_rapl_init),
710 X86_RAPL_MODEL_MATCH(INTEL_FAM6_HASWELL_X, hsx_rapl_init),
711 X86_RAPL_MODEL_MATCH(INTEL_FAM6_HASWELL_ULT, hsw_rapl_init),
712 X86_RAPL_MODEL_MATCH(INTEL_FAM6_HASWELL_GT3E, hsw_rapl_init),
713
714 X86_RAPL_MODEL_MATCH(INTEL_FAM6_BROADWELL_CORE, hsw_rapl_init),
715 X86_RAPL_MODEL_MATCH(INTEL_FAM6_BROADWELL_GT3E, hsw_rapl_init),
716 X86_RAPL_MODEL_MATCH(INTEL_FAM6_BROADWELL_X, hsx_rapl_init),
717 X86_RAPL_MODEL_MATCH(INTEL_FAM6_BROADWELL_XEON_D, hsx_rapl_init),
718
719 X86_RAPL_MODEL_MATCH(INTEL_FAM6_XEON_PHI_KNL, knl_rapl_init),
720 X86_RAPL_MODEL_MATCH(INTEL_FAM6_XEON_PHI_KNM, knl_rapl_init),
721
722 X86_RAPL_MODEL_MATCH(INTEL_FAM6_SKYLAKE_MOBILE, skl_rapl_init),
723 X86_RAPL_MODEL_MATCH(INTEL_FAM6_SKYLAKE_DESKTOP, skl_rapl_init),
724 X86_RAPL_MODEL_MATCH(INTEL_FAM6_SKYLAKE_X, hsx_rapl_init),
725
726 X86_RAPL_MODEL_MATCH(INTEL_FAM6_KABYLAKE_MOBILE, skl_rapl_init),
727 X86_RAPL_MODEL_MATCH(INTEL_FAM6_KABYLAKE_DESKTOP, skl_rapl_init),
728
729 X86_RAPL_MODEL_MATCH(INTEL_FAM6_CANNONLAKE_MOBILE, skl_rapl_init),
730
731 X86_RAPL_MODEL_MATCH(INTEL_FAM6_ATOM_GOLDMONT, hsw_rapl_init),
732 X86_RAPL_MODEL_MATCH(INTEL_FAM6_ATOM_GOLDMONT_X, hsw_rapl_init),
733
734 X86_RAPL_MODEL_MATCH(INTEL_FAM6_ATOM_GOLDMONT_PLUS, hsw_rapl_init),
735
736 X86_RAPL_MODEL_MATCH(INTEL_FAM6_ICELAKE_MOBILE, skl_rapl_init),
737 X86_RAPL_MODEL_MATCH(INTEL_FAM6_ICELAKE_DESKTOP, skl_rapl_init),
738 {},
739};
740
741MODULE_DEVICE_TABLE(x86cpu, rapl_cpu_match);
742
743static struct rapl_model model_snb = { 674static struct rapl_model model_snb = {
744 .events = BIT(PERF_RAPL_PP0) | 675 .events = BIT(PERF_RAPL_PP0) |
745 BIT(PERF_RAPL_PKG) | 676 BIT(PERF_RAPL_PKG) |
@@ -813,12 +744,12 @@ static const struct x86_cpu_id rapl_model_match[] __initconst = {
813 {}, 744 {},
814}; 745};
815 746
747MODULE_DEVICE_TABLE(x86cpu, rapl_model_match);
748
816static int __init rapl_pmu_init(void) 749static int __init rapl_pmu_init(void)
817{ 750{
818 const struct x86_cpu_id *id; 751 const struct x86_cpu_id *id;
819 struct intel_rapl_init_fun *rapl_init;
820 struct rapl_model *rm; 752 struct rapl_model *rm;
821 bool apply_quirk;
822 int ret; 753 int ret;
823 754
824 id = x86_match_cpu(rapl_model_match); 755 id = x86_match_cpu(rapl_model_match);
@@ -829,14 +760,7 @@ static int __init rapl_pmu_init(void)
829 rapl_cntr_mask = perf_msr_probe(rapl_msrs, PERF_RAPL_MAX, 760 rapl_cntr_mask = perf_msr_probe(rapl_msrs, PERF_RAPL_MAX,
830 false, (void *) &rm->events); 761 false, (void *) &rm->events);
831 762
832 id = x86_match_cpu(rapl_cpu_match); 763 ret = rapl_check_hw_unit(rm->apply_quirk);
833 if (!id)
834 return -ENODEV;
835
836 rapl_init = (struct intel_rapl_init_fun *)id->driver_data;
837 apply_quirk = rapl_init->apply_quirk;
838
839 ret = rapl_check_hw_unit(apply_quirk);
840 if (ret) 764 if (ret)
841 return ret; 765 return ret;
842 766