| // SPDX-License-Identifier: GPL-2.0 |
| /* |
| * Copyright (c) 2025, Intel Corporation. |
| * All Rights Reserved. |
| * |
| * Author: "David E. Box" <david.e.box@linux.intel.com> |
| */ |
| |
| #include <linux/export.h> |
| #include <linux/types.h> |
| |
| #include <linux/intel_pmt_features.h> |
| |
| const char * const pmt_feature_names[] = { |
| [FEATURE_PER_CORE_PERF_TELEM] = "per_core_performance_telemetry", |
| [FEATURE_PER_CORE_ENV_TELEM] = "per_core_environment_telemetry", |
| [FEATURE_PER_RMID_PERF_TELEM] = "per_rmid_perf_telemetry", |
| [FEATURE_ACCEL_TELEM] = "accelerator_telemetry", |
| [FEATURE_UNCORE_TELEM] = "uncore_telemetry", |
| [FEATURE_CRASH_LOG] = "crash_log", |
| [FEATURE_PETE_LOG] = "pete_log", |
| [FEATURE_TPMI_CTRL] = "tpmi_control", |
| [FEATURE_TRACING] = "tracing", |
| [FEATURE_PER_RMID_ENERGY_TELEM] = "per_rmid_energy_telemetry", |
| }; |
| EXPORT_SYMBOL_NS_GPL(pmt_feature_names, "INTEL_PMT_DISCOVERY"); |
| |
| enum feature_layout feature_layout[] = { |
| [FEATURE_PER_CORE_PERF_TELEM] = LAYOUT_WATCHER, |
| [FEATURE_PER_CORE_ENV_TELEM] = LAYOUT_WATCHER, |
| [FEATURE_PER_RMID_PERF_TELEM] = LAYOUT_RMID, |
| [FEATURE_ACCEL_TELEM] = LAYOUT_WATCHER, |
| [FEATURE_UNCORE_TELEM] = LAYOUT_WATCHER, |
| [FEATURE_CRASH_LOG] = LAYOUT_COMMAND, |
| [FEATURE_PETE_LOG] = LAYOUT_COMMAND, |
| [FEATURE_TPMI_CTRL] = LAYOUT_CAPS_ONLY, |
| [FEATURE_TRACING] = LAYOUT_CAPS_ONLY, |
| [FEATURE_PER_RMID_ENERGY_TELEM] = LAYOUT_RMID, |
| }; |
| |
| struct pmt_cap pmt_cap_common[] = { |
| {PMT_CAP_TELEM, "telemetry"}, |
| {PMT_CAP_WATCHER, "watcher"}, |
| {PMT_CAP_CRASHLOG, "crashlog"}, |
| {PMT_CAP_STREAMING, "streaming"}, |
| {PMT_CAP_THRESHOLD, "threshold"}, |
| {PMT_CAP_WINDOW, "window"}, |
| {PMT_CAP_CONFIG, "config"}, |
| {PMT_CAP_TRACING, "tracing"}, |
| {PMT_CAP_INBAND, "inband"}, |
| {PMT_CAP_OOB, "oob"}, |
| {PMT_CAP_SECURED_CHAN, "secure_chan"}, |
| {PMT_CAP_PMT_SP, "pmt_sp"}, |
| {PMT_CAP_PMT_SP_POLICY, "pmt_sp_policy"}, |
| {} |
| }; |
| |
| struct pmt_cap pmt_cap_pcpt[] = { |
| {PMT_CAP_PCPT_CORE_PERF, "core_performance"}, |
| {PMT_CAP_PCPT_CORE_C0_RES, "core_c0_residency"}, |
| {PMT_CAP_PCPT_CORE_ACTIVITY, "core_activity"}, |
| {PMT_CAP_PCPT_CACHE_PERF, "cache_performance"}, |
| {PMT_CAP_PCPT_QUALITY_TELEM, "quality_telemetry"}, |
| {} |
| }; |
| |
| struct pmt_cap *pmt_caps_pcpt[] = { |
| pmt_cap_common, |
| pmt_cap_pcpt, |
| NULL |
| }; |
| |
| struct pmt_cap pmt_cap_pcet[] = { |
| {PMT_CAP_PCET_WORKPOINT_HIST, "workpoint_histogram"}, |
| {PMT_CAP_PCET_CORE_CURR_TEMP, "core_current_temp"}, |
| {PMT_CAP_PCET_CORE_INST_RES, "core_inst_residency"}, |
| {PMT_CAP_PCET_QUALITY_TELEM, "quality_telemetry"}, |
| {PMT_CAP_PCET_CORE_CDYN_LVL, "core_cdyn_level"}, |
| {PMT_CAP_PCET_CORE_STRESS_LVL, "core_stress_level"}, |
| {PMT_CAP_PCET_CORE_DAS, "core_digital_aging_sensor"}, |
| {PMT_CAP_PCET_FIVR_HEALTH, "fivr_health"}, |
| {PMT_CAP_PCET_ENERGY, "energy"}, |
| {PMT_CAP_PCET_PEM_STATUS, "pem_status"}, |
| {PMT_CAP_PCET_CORE_C_STATE, "core_c_state"}, |
| {} |
| }; |
| |
| struct pmt_cap *pmt_caps_pcet[] = { |
| pmt_cap_common, |
| pmt_cap_pcet, |
| NULL |
| }; |
| |
| struct pmt_cap pmt_cap_rmid_perf[] = { |
| {PMT_CAP_RMID_CORES_PERF, "core_performance"}, |
| {PMT_CAP_RMID_CACHE_PERF, "cache_performance"}, |
| {PMT_CAP_RMID_PERF_QUAL, "performance_quality"}, |
| {} |
| }; |
| |
| struct pmt_cap *pmt_caps_rmid_perf[] = { |
| pmt_cap_common, |
| pmt_cap_rmid_perf, |
| NULL |
| }; |
| |
| struct pmt_cap pmt_cap_accel[] = { |
| {PMT_CAP_ACCEL_CPM_TELEM, "content_processing_module"}, |
| {PMT_CAP_ACCEL_TIP_TELEM, "content_turbo_ip"}, |
| {} |
| }; |
| |
| struct pmt_cap *pmt_caps_accel[] = { |
| pmt_cap_common, |
| pmt_cap_accel, |
| NULL |
| }; |
| |
| struct pmt_cap pmt_cap_uncore[] = { |
| {PMT_CAP_UNCORE_IO_CA_TELEM, "io_ca"}, |
| {PMT_CAP_UNCORE_RMID_TELEM, "rmid"}, |
| {PMT_CAP_UNCORE_D2D_ULA_TELEM, "d2d_ula"}, |
| {PMT_CAP_UNCORE_PKGC_TELEM, "package_c"}, |
| {} |
| }; |
| |
| struct pmt_cap *pmt_caps_uncore[] = { |
| pmt_cap_common, |
| pmt_cap_uncore, |
| NULL |
| }; |
| |
| struct pmt_cap pmt_cap_crashlog[] = { |
| {PMT_CAP_CRASHLOG_MAN_TRIG, "manual_trigger"}, |
| {PMT_CAP_CRASHLOG_CORE, "core"}, |
| {PMT_CAP_CRASHLOG_UNCORE, "uncore"}, |
| {PMT_CAP_CRASHLOG_TOR, "tor"}, |
| {PMT_CAP_CRASHLOG_S3M, "s3m"}, |
| {PMT_CAP_CRASHLOG_PERSISTENCY, "persistency"}, |
| {PMT_CAP_CRASHLOG_CLIP_GPIO, "crashlog_in_progress"}, |
| {PMT_CAP_CRASHLOG_PRE_RESET, "pre_reset_extraction"}, |
| {PMT_CAP_CRASHLOG_POST_RESET, "post_reset_extraction"}, |
| {} |
| }; |
| |
| struct pmt_cap *pmt_caps_crashlog[] = { |
| pmt_cap_common, |
| pmt_cap_crashlog, |
| NULL |
| }; |
| |
| struct pmt_cap pmt_cap_pete[] = { |
| {PMT_CAP_PETE_MAN_TRIG, "manual_trigger"}, |
| {PMT_CAP_PETE_ENCRYPTION, "encryption"}, |
| {PMT_CAP_PETE_PERSISTENCY, "persistency"}, |
| {PMT_CAP_PETE_REQ_TOKENS, "required_tokens"}, |
| {PMT_CAP_PETE_PROD_ENABLED, "production_enabled"}, |
| {PMT_CAP_PETE_DEBUG_ENABLED, "debug_enabled"}, |
| {} |
| }; |
| |
| struct pmt_cap *pmt_caps_pete[] = { |
| pmt_cap_common, |
| pmt_cap_pete, |
| NULL |
| }; |
| |
| struct pmt_cap pmt_cap_tpmi[] = { |
| {PMT_CAP_TPMI_MAILBOX, "mailbox"}, |
| {PMT_CAP_TPMI_LOCK, "bios_lock"}, |
| {} |
| }; |
| |
| struct pmt_cap *pmt_caps_tpmi[] = { |
| pmt_cap_common, |
| pmt_cap_tpmi, |
| NULL |
| }; |
| |
| struct pmt_cap pmt_cap_tracing[] = { |
| {PMT_CAP_TRACE_SRAR, "srar_errors"}, |
| {PMT_CAP_TRACE_CORRECTABLE, "correctable_errors"}, |
| {PMT_CAP_TRACE_MCTP, "mctp"}, |
| {PMT_CAP_TRACE_MRT, "memory_resiliency"}, |
| {} |
| }; |
| |
| struct pmt_cap *pmt_caps_tracing[] = { |
| pmt_cap_common, |
| pmt_cap_tracing, |
| NULL |
| }; |
| |
| struct pmt_cap pmt_cap_rmid_energy[] = { |
| {PMT_CAP_RMID_ENERGY, "energy"}, |
| {PMT_CAP_RMID_ACTIVITY, "activity"}, |
| {PMT_CAP_RMID_ENERGY_QUAL, "energy_quality"}, |
| {} |
| }; |
| |
| struct pmt_cap *pmt_caps_rmid_energy[] = { |
| pmt_cap_common, |
| pmt_cap_rmid_energy, |
| NULL |
| }; |