Re: [RFC PATCH 07/20] x86/virt/tdx: Expose SEAMLDR information via sysfs

From: Xu Yilun
Date: Tue Jul 29 2025 - 01:05:24 EST


> +static const struct attribute_group *tdx_subsys_groups[] = {
> + SEAMLDR_GROUP,
> + NULL,
> +};
> +
> static void tdx_subsys_init(void)
> {
> struct tdx_tsm *tdx_tsm;
> int err;
>
> + err = get_seamldr_info();
> + if (err) {
> + pr_err("failed to get seamldr info %d\n", err);
> + return;
> + }
> +
> /* Establish subsystem for global TDX module attributes */
> - err = subsys_virtual_register(&tdx_subsys, NULL);
> + err = subsys_virtual_register(&tdx_subsys, tdx_subsys_groups);
> if (err) {
> pr_err("failed to register tdx_subsys %d\n", err);
> return;

As mentioned, TDX Connect also uses this virtual TSM device. And I tend
to extend it to TDX guest, also make the guest TSM management run on
the virtual device which represents the TDG calls and TDG_VP_VM calls.

So I'm considering extract the common part of tdx_subsys_init() out of
TDX host and into a separate file, e.g.

---

+source "drivers/virt/coco/tdx-tsm/Kconfig"
+
config TSM
bool
diff --git a/drivers/virt/coco/Makefile b/drivers/virt/coco/Makefile
index c0c3733be165..a54d3cb5b4e9 100644
--- a/drivers/virt/coco/Makefile
+++ b/drivers/virt/coco/Makefile
@@ -10,3 +10,4 @@ obj-$(CONFIG_INTEL_TDX_GUEST) += tdx-guest/
obj-$(CONFIG_ARM_CCA_GUEST) += arm-cca-guest/
obj-$(CONFIG_TSM) += tsm-core.o
obj-$(CONFIG_TSM_GUEST) += guest/
+obj-y += tdx-tsm/
diff --git a/drivers/virt/coco/tdx-tsm/Kconfig b/drivers/virt/coco/tdx-tsm/Kconfig
new file mode 100644
index 000000000000..768175f8bb2c
--- /dev/null
+++ b/drivers/virt/coco/tdx-tsm/Kconfig
@@ -0,0 +1,2 @@
+config TDX_TSM_BUS
+ bool
diff --git a/drivers/virt/coco/tdx-tsm/Makefile b/drivers/virt/coco/tdx-tsm/Makefile
new file mode 100644
index 000000000000..09f0ac08988a
--- /dev/null
+++ b/drivers/virt/coco/tdx-tsm/Makefile
@@ -0,0 +1 @@
+obj-$(CONFIG_TDX_TSM_BUS) += tdx-tsm-bus.o

---

And put the tdx_subsys_init() in tdx-tsm-bus.c. We need to move host
specific initializations out of tdx_subsys_init(), e.g. seamldr_group &
seamldr fw upload.

Thanks,
Yilun