Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
1/* SPDX-License-Identifier: GPL-2.0 */
2#ifndef _FEATURES_H
3#define _FEATURES_H
4
5#include <linux/bits.h>
6#include <linux/types.h>
7
8/* Common masks */
9#define PMT_CAP_TELEM BIT(0)
10#define PMT_CAP_WATCHER BIT(1)
11#define PMT_CAP_CRASHLOG BIT(2)
12#define PMT_CAP_STREAMING BIT(3)
13#define PMT_CAP_THRESHOLD BIT(4)
14#define PMT_CAP_WINDOW BIT(5)
15#define PMT_CAP_CONFIG BIT(6)
16#define PMT_CAP_TRACING BIT(7)
17#define PMT_CAP_INBAND BIT(8)
18#define PMT_CAP_OOB BIT(9)
19#define PMT_CAP_SECURED_CHAN BIT(10)
20
21#define PMT_CAP_PMT_SP BIT(11)
22#define PMT_CAP_PMT_SP_POLICY GENMASK(17, 12)
23
24/* Per Core Performance Telemetry (PCPT) specific masks */
25#define PMT_CAP_PCPT_CORE_PERF BIT(18)
26#define PMT_CAP_PCPT_CORE_C0_RES BIT(19)
27#define PMT_CAP_PCPT_CORE_ACTIVITY BIT(20)
28#define PMT_CAP_PCPT_CACHE_PERF BIT(21)
29#define PMT_CAP_PCPT_QUALITY_TELEM BIT(22)
30
31/* Per Core Environmental Telemetry (PCET) specific masks */
32#define PMT_CAP_PCET_WORKPOINT_HIST BIT(18)
33#define PMT_CAP_PCET_CORE_CURR_TEMP BIT(19)
34#define PMT_CAP_PCET_CORE_INST_RES BIT(20)
35#define PMT_CAP_PCET_QUALITY_TELEM BIT(21) /* Same as PMT_CAP_PCPT */
36#define PMT_CAP_PCET_CORE_CDYN_LVL BIT(22)
37#define PMT_CAP_PCET_CORE_STRESS_LVL BIT(23)
38#define PMT_CAP_PCET_CORE_DAS BIT(24)
39#define PMT_CAP_PCET_FIVR_HEALTH BIT(25)
40#define PMT_CAP_PCET_ENERGY BIT(26)
41#define PMT_CAP_PCET_PEM_STATUS BIT(27)
42#define PMT_CAP_PCET_CORE_C_STATE BIT(28)
43
44/* Per RMID Performance Telemetry specific masks */
45#define PMT_CAP_RMID_CORES_PERF BIT(18)
46#define PMT_CAP_RMID_CACHE_PERF BIT(19)
47#define PMT_CAP_RMID_PERF_QUAL BIT(20)
48
49/* Accelerator Telemetry specific masks */
50#define PMT_CAP_ACCEL_CPM_TELEM BIT(18)
51#define PMT_CAP_ACCEL_TIP_TELEM BIT(19)
52
53/* Uncore Telemetry specific masks */
54#define PMT_CAP_UNCORE_IO_CA_TELEM BIT(18)
55#define PMT_CAP_UNCORE_RMID_TELEM BIT(19)
56#define PMT_CAP_UNCORE_D2D_ULA_TELEM BIT(20)
57#define PMT_CAP_UNCORE_PKGC_TELEM BIT(21)
58
59/* Crash Log specific masks */
60#define PMT_CAP_CRASHLOG_MAN_TRIG BIT(11)
61#define PMT_CAP_CRASHLOG_CORE BIT(12)
62#define PMT_CAP_CRASHLOG_UNCORE BIT(13)
63#define PMT_CAP_CRASHLOG_TOR BIT(14)
64#define PMT_CAP_CRASHLOG_S3M BIT(15)
65#define PMT_CAP_CRASHLOG_PERSISTENCY BIT(16)
66#define PMT_CAP_CRASHLOG_CLIP_GPIO BIT(17)
67#define PMT_CAP_CRASHLOG_PRE_RESET BIT(18)
68#define PMT_CAP_CRASHLOG_POST_RESET BIT(19)
69
70/* PeTe Log specific masks */
71#define PMT_CAP_PETE_MAN_TRIG BIT(11)
72#define PMT_CAP_PETE_ENCRYPTION BIT(12)
73#define PMT_CAP_PETE_PERSISTENCY BIT(13)
74#define PMT_CAP_PETE_REQ_TOKENS BIT(14)
75#define PMT_CAP_PETE_PROD_ENABLED BIT(15)
76#define PMT_CAP_PETE_DEBUG_ENABLED BIT(16)
77
78/* TPMI control specific masks */
79#define PMT_CAP_TPMI_MAILBOX BIT(11)
80#define PMT_CAP_TPMI_LOCK BIT(12)
81
82/* Tracing specific masks */
83#define PMT_CAP_TRACE_SRAR BIT(11)
84#define PMT_CAP_TRACE_CORRECTABLE BIT(12)
85#define PMT_CAP_TRACE_MCTP BIT(13)
86#define PMT_CAP_TRACE_MRT BIT(14)
87
88/* Per RMID Energy Telemetry specific masks */
89#define PMT_CAP_RMID_ENERGY BIT(18)
90#define PMT_CAP_RMID_ACTIVITY BIT(19)
91#define PMT_CAP_RMID_ENERGY_QUAL BIT(20)
92
93enum pmt_feature_id {
94 FEATURE_INVALID = 0x0,
95 FEATURE_PER_CORE_PERF_TELEM = 0x1,
96 FEATURE_PER_CORE_ENV_TELEM = 0x2,
97 FEATURE_PER_RMID_PERF_TELEM = 0x3,
98 FEATURE_ACCEL_TELEM = 0x4,
99 FEATURE_UNCORE_TELEM = 0x5,
100 FEATURE_CRASH_LOG = 0x6,
101 FEATURE_PETE_LOG = 0x7,
102 FEATURE_TPMI_CTRL = 0x8,
103 FEATURE_RESERVED = 0x9,
104 FEATURE_TRACING = 0xA,
105 FEATURE_PER_RMID_ENERGY_TELEM = 0xB,
106 FEATURE_MAX = 0xB,
107};
108
109enum feature_layout {
110 LAYOUT_RMID,
111 LAYOUT_WATCHER,
112 LAYOUT_COMMAND,
113 LAYOUT_CAPS_ONLY,
114};
115
116struct pmt_cap {
117 u32 mask;
118 const char *name;
119};
120
121extern const char * const pmt_feature_names[];
122extern enum feature_layout feature_layout[];
123extern struct pmt_cap pmt_cap_common[];
124extern struct pmt_cap pmt_cap_pcpt[];
125extern struct pmt_cap *pmt_caps_pcpt[];
126extern struct pmt_cap pmt_cap_pcet[];
127extern struct pmt_cap *pmt_caps_pcet[];
128extern struct pmt_cap pmt_cap_rmid_perf[];
129extern struct pmt_cap *pmt_caps_rmid_perf[];
130extern struct pmt_cap pmt_cap_accel[];
131extern struct pmt_cap *pmt_caps_accel[];
132extern struct pmt_cap pmt_cap_uncore[];
133extern struct pmt_cap *pmt_caps_uncore[];
134extern struct pmt_cap pmt_cap_crashlog[];
135extern struct pmt_cap *pmt_caps_crashlog[];
136extern struct pmt_cap pmt_cap_pete[];
137extern struct pmt_cap *pmt_caps_pete[];
138extern struct pmt_cap pmt_cap_tpmi[];
139extern struct pmt_cap *pmt_caps_tpmi[];
140extern struct pmt_cap pmt_cap_s3m[];
141extern struct pmt_cap *pmt_caps_s3m[];
142extern struct pmt_cap pmt_cap_tracing[];
143extern struct pmt_cap *pmt_caps_tracing[];
144extern struct pmt_cap pmt_cap_rmid_energy[];
145extern struct pmt_cap *pmt_caps_rmid_energy[];
146
147static inline bool pmt_feature_id_is_valid(enum pmt_feature_id id)
148{
149 if (id > FEATURE_MAX)
150 return false;
151
152 if (id == FEATURE_INVALID || id == FEATURE_RESERVED)
153 return false;
154
155 return true;
156}
157#endif