The branch main has been updated by mav:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=fe109d3113166c8e3b8557f0569c4e5a3597ac93

commit fe109d3113166c8e3b8557f0569c4e5a3597ac93
Author:     Alexander Motin <m...@freebsd.org>
AuthorDate: 2022-05-31 03:17:37 +0000
Commit:     Alexander Motin <m...@freebsd.org>
CommitDate: 2022-05-31 03:17:37 +0000

    hwpmc: Add basic Intel Alderlake CPUs support.
    
    The PMC subsystem is not designed for non-uniform CPU capabilities
    (P/E-cores are different), but at least several working architectural
    events like cpu_clk_unhalted.thread_p should be better than nothing.
    
    MFC after:      1 month
---
 sys/dev/hwpmc/hwpmc_core.c  |   1 +
 sys/dev/hwpmc/hwpmc_intel.c | 107 +++++++++++---------------------------------
 sys/sys/pmc.h               |   1 +
 3 files changed, 29 insertions(+), 80 deletions(-)

diff --git a/sys/dev/hwpmc/hwpmc_core.c b/sys/dev/hwpmc/hwpmc_core.c
index 043ca95a305f..1b3c59163141 100644
--- a/sys/dev/hwpmc/hwpmc_core.c
+++ b/sys/dev/hwpmc/hwpmc_core.c
@@ -781,6 +781,7 @@ iap_allocate_pmc(int cpu, int ri, struct pmc *pm,
        case PMC_CPU_INTEL_SKYLAKE_XEON:
        case PMC_CPU_INTEL_ICELAKE:
        case PMC_CPU_INTEL_ICELAKE_XEON:
+       case PMC_CPU_INTEL_ALDERLAKE:
        default:
                break;
        }
diff --git a/sys/dev/hwpmc/hwpmc_intel.c b/sys/dev/hwpmc/hwpmc_intel.c
index 2d8377e1a838..f59b7b41ece9 100644
--- a/sys/dev/hwpmc/hwpmc_intel.c
+++ b/sys/dev/hwpmc/hwpmc_intel.c
@@ -163,6 +163,27 @@ pmc_intel_initialize(void)
                        cputype = PMC_CPU_INTEL_IVYBRIDGE_XEON;
                        nclasses = 3;
                        break;
+               case 0x3D:
+               case 0x47:
+                       cputype = PMC_CPU_INTEL_BROADWELL;
+                       nclasses = 3;
+                       break;
+               case 0x4f:
+               case 0x56:
+                       cputype = PMC_CPU_INTEL_BROADWELL_XEON;
+                       nclasses = 3;
+                       break;
+               case 0x3C:      /* Per Intel document 325462-045US 01/2013. */
+               case 0x45:      /* Per Intel document 325462-045US 09/2014. */
+                       cputype = PMC_CPU_INTEL_HASWELL;
+                       nclasses = 3;
+                       break;
+               case 0x3F:      /* Per Intel document 325462-045US 09/2014. */
+               case 0x46:      /* Per Intel document 325462-045US 09/2014. */
+                               /* Should 46 be XEON. probably its own? */
+                       cputype = PMC_CPU_INTEL_HASWELL_XEON;
+                       nclasses = 3;
+                       break;
                        /* Skylake */
                case 0x4e:
                case 0x5e:
@@ -195,25 +216,9 @@ pmc_intel_initialize(void)
                        cputype = PMC_CPU_INTEL_ICELAKE_XEON;
                        nclasses = 3;
                        break;
-               case 0x3D:
-               case 0x47:
-                       cputype = PMC_CPU_INTEL_BROADWELL;
-                       nclasses = 3;
-                       break;
-               case 0x4f:
-               case 0x56:
-                       cputype = PMC_CPU_INTEL_BROADWELL_XEON;
-                       nclasses = 3;
-                       break;
-               case 0x3F:      /* Per Intel document 325462-045US 09/2014. */
-               case 0x46:      /* Per Intel document 325462-045US 09/2014. */
-                               /* Should 46 be XEON. probably its own? */
-                       cputype = PMC_CPU_INTEL_HASWELL_XEON;
-                       nclasses = 3;
-                       break;
-               case 0x3C:      /* Per Intel document 325462-045US 01/2013. */
-               case 0x45:      /* Per Intel document 325462-045US 09/2014. */
-                       cputype = PMC_CPU_INTEL_HASWELL;
+               case 0x97:
+               case 0x9A:
+                       cputype = PMC_CPU_INTEL_ALDERLAKE;
                        nclasses = 3;
                        break;
                case 0x37:
@@ -250,40 +255,9 @@ pmc_intel_initialize(void)
        error = pmc_tsc_initialize(pmc_mdep, ncpus);
        if (error)
                goto error;
-       switch (cputype) {
-               /*
-                * Intel Core, Core 2 and Atom processors.
-                */
-       case PMC_CPU_INTEL_ATOM:
-       case PMC_CPU_INTEL_ATOM_SILVERMONT:
-       case PMC_CPU_INTEL_ATOM_GOLDMONT:
-       case PMC_CPU_INTEL_BROADWELL:
-       case PMC_CPU_INTEL_BROADWELL_XEON:
-       case PMC_CPU_INTEL_SKYLAKE_XEON:
-       case PMC_CPU_INTEL_SKYLAKE:
-       case PMC_CPU_INTEL_ICELAKE:
-       case PMC_CPU_INTEL_ICELAKE_XEON:
-       case PMC_CPU_INTEL_CORE:
-       case PMC_CPU_INTEL_CORE2:
-       case PMC_CPU_INTEL_CORE2EXTREME:
-       case PMC_CPU_INTEL_COREI7:
-       case PMC_CPU_INTEL_NEHALEM_EX:
-       case PMC_CPU_INTEL_IVYBRIDGE:
-       case PMC_CPU_INTEL_SANDYBRIDGE:
-       case PMC_CPU_INTEL_WESTMERE:
-       case PMC_CPU_INTEL_WESTMERE_EX:
-       case PMC_CPU_INTEL_SANDYBRIDGE_XEON:
-       case PMC_CPU_INTEL_IVYBRIDGE_XEON:
-       case PMC_CPU_INTEL_HASWELL:
-       case PMC_CPU_INTEL_HASWELL_XEON:
-               MPASS(nclasses >= PMC_MDEP_CLASS_INDEX_IAF);
-               error = pmc_core_initialize(pmc_mdep, ncpus, verov);
-               break;
-
-       default:
-               KASSERT(0, ("[intel,%d] Unknown CPU type", __LINE__));
-       }
 
+       MPASS(nclasses >= PMC_MDEP_CLASS_INDEX_IAF);
+       error = pmc_core_initialize(pmc_mdep, ncpus, verov);
        if (error) {
                pmc_tsc_finalize(pmc_mdep);
                goto error;
@@ -338,34 +312,7 @@ pmc_intel_finalize(struct pmc_mdep *md)
 {
        pmc_tsc_finalize(md);
 
-       switch (md->pmd_cputype) {
-       case PMC_CPU_INTEL_ATOM:
-       case PMC_CPU_INTEL_ATOM_SILVERMONT:
-       case PMC_CPU_INTEL_ATOM_GOLDMONT:
-       case PMC_CPU_INTEL_BROADWELL:
-       case PMC_CPU_INTEL_BROADWELL_XEON:
-       case PMC_CPU_INTEL_SKYLAKE_XEON:
-       case PMC_CPU_INTEL_SKYLAKE:
-       case PMC_CPU_INTEL_ICELAKE:
-       case PMC_CPU_INTEL_ICELAKE_XEON:
-       case PMC_CPU_INTEL_CORE:
-       case PMC_CPU_INTEL_CORE2:
-       case PMC_CPU_INTEL_CORE2EXTREME:
-       case PMC_CPU_INTEL_COREI7:
-       case PMC_CPU_INTEL_NEHALEM_EX:
-       case PMC_CPU_INTEL_HASWELL:
-       case PMC_CPU_INTEL_HASWELL_XEON:
-       case PMC_CPU_INTEL_IVYBRIDGE:
-       case PMC_CPU_INTEL_SANDYBRIDGE:
-       case PMC_CPU_INTEL_WESTMERE:
-       case PMC_CPU_INTEL_WESTMERE_EX:
-       case PMC_CPU_INTEL_SANDYBRIDGE_XEON:
-       case PMC_CPU_INTEL_IVYBRIDGE_XEON:
-               pmc_core_finalize(md);
-               break;
-       default:
-               KASSERT(0, ("[intel,%d] unknown CPU type", __LINE__));
-       }
+       pmc_core_finalize(md);
 
        /*
         * Uncore.
diff --git a/sys/sys/pmc.h b/sys/sys/pmc.h
index b54bc8d8e9f0..b84044ea5c6c 100644
--- a/sys/sys/pmc.h
+++ b/sys/sys/pmc.h
@@ -113,6 +113,7 @@ extern char pmc_cpuid[PMC_CPUID_LEN];
        __PMC_CPU(INTEL_ATOM_GOLDMONT, 0x9A,   "Intel Atom Goldmont")   \
        __PMC_CPU(INTEL_ICELAKE, 0x9B,  "Intel Icelake")                \
        __PMC_CPU(INTEL_ICELAKE_XEON, 0x9C,     "Intel Icelake Xeon")   \
+       __PMC_CPU(INTEL_ALDERLAKE, 0x9D,        "Intel Alderlake")      \
        __PMC_CPU(INTEL_XSCALE, 0x100,  "Intel XScale")         \
        __PMC_CPU(MIPS_24K,     0x200,  "MIPS 24K")             \
        __PMC_CPU(MIPS_OCTEON,  0x201,  "Cavium Octeon")        \

Reply via email to