On 5/22/2026 7:16 AM, Lisa Wang wrote: > From: Erdem Aktas <[email protected]> > > Add code to boot a TDX test VM. Since TDX registers are inaccessible to > KVM, the boot code loads the relevant values from memory into the > registers before jumping to the guest code. > > Reviewed-by: Binbin Wu <[email protected]> > Signed-off-by: Erdem Aktas <[email protected]> > Co-developed-by: Ackerley Tng <[email protected]> > Signed-off-by: Ackerley Tng <[email protected]> > Co-developed-by: Sagi Shahar <[email protected]> > Signed-off-by: Sagi Shahar <[email protected]> > Signed-off-by: Lisa Wang <[email protected]> > --- > tools/testing/selftests/kvm/Makefile.kvm | 1 + > .../selftests/kvm/include/x86/tdx/td_boot.h | 5 ++ > .../selftests/kvm/include/x86/tdx/td_boot_asm.h | 16 ++++++ > tools/testing/selftests/kvm/lib/x86/tdx/td_boot.S | 60 > ++++++++++++++++++++++ > 4 files changed, 82 insertions(+) > > diff --git a/tools/testing/selftests/kvm/Makefile.kvm > b/tools/testing/selftests/kvm/Makefile.kvm > index 02fad7b35eac..929965ca4b75 100644 > --- a/tools/testing/selftests/kvm/Makefile.kvm > +++ b/tools/testing/selftests/kvm/Makefile.kvm > @@ -31,6 +31,7 @@ LIBKVM_x86 += lib/x86/sev.c > LIBKVM_x86 += lib/x86/svm.c > LIBKVM_x86 += lib/x86/ucall.c > LIBKVM_x86 += lib/x86/vmx.c > +LIBKVM_x86 += lib/x86/tdx/td_boot.S > > LIBKVM_arm64 += lib/arm64/gic.c > LIBKVM_arm64 += lib/arm64/gic_v3.c > diff --git a/tools/testing/selftests/kvm/include/x86/tdx/td_boot.h > b/tools/testing/selftests/kvm/include/x86/tdx/td_boot.h > index af4474dee387..e5d54a20ed72 100644 > --- a/tools/testing/selftests/kvm/include/x86/tdx/td_boot.h > +++ b/tools/testing/selftests/kvm/include/x86/tdx/td_boot.h > @@ -66,4 +66,9 @@ struct td_boot_parameters { > struct td_per_vcpu_parameters per_vcpu[]; > }; > > +void td_boot(void); > +void td_boot_code_end(void); > + > +#define TD_BOOT_CODE_SIZE (td_boot_code_end - td_boot) > + > #endif /* SELFTEST_TDX_TD_BOOT_H */ > diff --git a/tools/testing/selftests/kvm/include/x86/tdx/td_boot_asm.h > b/tools/testing/selftests/kvm/include/x86/tdx/td_boot_asm.h > new file mode 100644 > index 000000000000..10b4b527595c > --- /dev/null > +++ b/tools/testing/selftests/kvm/include/x86/tdx/td_boot_asm.h > @@ -0,0 +1,16 @@ > +/* SPDX-License-Identifier: GPL-2.0-only */ > +#ifndef SELFTEST_TDX_TD_BOOT_ASM_H > +#define SELFTEST_TDX_TD_BOOT_ASM_H > + > +/* > + * GPA where TD boot parameters will be loaded. > + * > + * TD_BOOT_PARAMETERS_GPA is arbitrarily chosen to > + * > + * + be within the 4GB address space > + * + provide enough contiguous memory for the struct td_boot_parameters such > + * that there is one struct td_per_vcpu_parameters for KVM_MAX_VCPUS > + */ > +#define TD_BOOT_PARAMETERS_GPA 0xffff0000 > + > +#endif // SELFTEST_TDX_TD_BOOT_ASM_H It would be better to maintain consistency by using /* ... */ for single-line comments in this series, such as the SELFTESTS_TDX_TDX_H in patch 20 and other license Identifier.

