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
3#undef pr_fmt
4#define pr_fmt(fmt) "tdx: " fmt
5
6#include <linux/array_size.h>
7#include <linux/printk.h>
8#include <asm/tdx.h>
9
10#define DEF_TDX_ATTR_NAME(_name) [TDX_ATTR_##_name##_BIT] = __stringify(_name)
11
12static __initdata const char *tdx_attributes[] = {
13 DEF_TDX_ATTR_NAME(DEBUG),
14 DEF_TDX_ATTR_NAME(HGS_PLUS_PROF),
15 DEF_TDX_ATTR_NAME(PERF_PROF),
16 DEF_TDX_ATTR_NAME(PMT_PROF),
17 DEF_TDX_ATTR_NAME(ICSSD),
18 DEF_TDX_ATTR_NAME(LASS),
19 DEF_TDX_ATTR_NAME(SEPT_VE_DISABLE),
20 DEF_TDX_ATTR_NAME(MIGRTABLE),
21 DEF_TDX_ATTR_NAME(PKS),
22 DEF_TDX_ATTR_NAME(KL),
23 DEF_TDX_ATTR_NAME(TPA),
24 DEF_TDX_ATTR_NAME(PERFMON),
25};
26
27#define DEF_TD_CTLS_NAME(_name) [TD_CTLS_##_name##_BIT] = __stringify(_name)
28
29static __initdata const char *tdcs_td_ctls[] = {
30 DEF_TD_CTLS_NAME(PENDING_VE_DISABLE),
31 DEF_TD_CTLS_NAME(ENUM_TOPOLOGY),
32 DEF_TD_CTLS_NAME(VIRT_CPUID2),
33 DEF_TD_CTLS_NAME(REDUCE_VE),
34 DEF_TD_CTLS_NAME(LOCK),
35};
36
37void __init tdx_dump_attributes(u64 td_attr)
38{
39 pr_info("Attributes:");
40
41 for (int i = 0; i < ARRAY_SIZE(tdx_attributes); i++) {
42 if (!tdx_attributes[i])
43 continue;
44 if (td_attr & BIT(i))
45 pr_cont(" %s", tdx_attributes[i]);
46 td_attr &= ~BIT(i);
47 }
48
49 if (td_attr)
50 pr_cont(" unknown:%#llx", td_attr);
51 pr_cont("\n");
52
53}
54
55void __init tdx_dump_td_ctls(u64 td_ctls)
56{
57 pr_info("TD_CTLS:");
58
59 for (int i = 0; i < ARRAY_SIZE(tdcs_td_ctls); i++) {
60 if (!tdcs_td_ctls[i])
61 continue;
62 if (td_ctls & BIT(i))
63 pr_cont(" %s", tdcs_td_ctls[i]);
64 td_ctls &= ~BIT(i);
65 }
66 if (td_ctls)
67 pr_cont(" unknown:%#llx", td_ctls);
68 pr_cont("\n");
69}