From: Zhenzhong Duan <zhenzhong.duan@intel.com>
To: x86@kernel.org, linux-coco@lists.linux.dev, linux-kernel@vger.kernel.org
Cc: dave.hansen@linux.intel.com, tglx@kernel.org, mingo@redhat.com,
bp@alien8.de, hpa@zytor.com, dave.hansen@intel.com,
kas@kernel.org, rick.p.edgecombe@intel.com, jgg@nvidia.com,
nicolinc@nvidia.com, aik@amd.com, aneesh.kumar@kernel.org,
seanjc@google.com, pbonzini@redhat.com, yilun.xu@linux.intel.com,
chao.gao@intel.com, vishal.l.verma@intel.com,
xiaoyao.li@intel.com, kevin.tian@intel.com,
chao.p.peng@intel.com
Subject: [RFC PATCH 00/15] PCI/TSM: coco/tdx-guest: Implement TDX-Connect PCIe TDISP (phase2)
Date: Thu, 24 Sep 2026 12:10:17 +0800 [thread overview]
Message-ID: <20260924041032.1096569-1-zhenzhong.duan@intel.com> (raw)
Hi,
This is a complete TDX Connect phase 2 guest-side implementation. It's
based on Dan's last TSM Phase2 [1](rebased to v7.3-rc4), plus Nicolin's
PATCH3-4 in [2] to address Jason's comments at [3].
We are posting the entire sequence together with two primary objectives:
1. We're sharing our TSM Phase 2 implementation to kick off some early
design alignment on cross-architecture paradigms. This is geared toward
community feedback rather than formal TSM maintainer review.
2. TDX developers have been working on the TDX module facing patches (the
wrappers) which are not expected to change significantly unless a
fundamental redesign of the generic guest TSM core occurs. So comments
on those patches are welcomed.
TDX Connect Background
======================
TDX Connect extends basic TDX with low-level guest and host interfaces
to establish trust for TDISP-supported devices. To ensure security
isolation, the architecture delegates only non-security-sensitive,
auxiliary operations (such as physical routing) to the untrusted host.
Meanwhile, the guest retains full governance over all secure operations,
e.g., strictly controlling access to private MMIO in LOCKED state by
requiring explicit guest actions, such as MMIO acceptance.
PATCH Organization
==================
This series is structured into four distinct, logical subsections based on
secure operations to facilitate review.
1. Unlock <-> Lock Flow (patch1-6):
Handles the TDI device's TDISP state transitions, initiated via the PCI
TSM sysfs interface (/sys/bus/pci/devices/.../tsm/[un]lock).
- adds tdx tsm guest driver framework
- adds TDCM hypercall infrastructure
- queries device's TEE-IO capability with TDCM_OP_CHECK_TEEIO_SUPP hypercall
- transitions TDI device to TDI_STATE_CONFIG_[UN]LOCKED with TDCM_OP_[UN]BIND
hypercall
2. Private MMIO Acceptance (patch7-10):
Private MMIO ranges described in the TDI Report must be accepted by TDX
module before guest access is permitted.
- capture TDI report in lock().
- accept each MMIO range mapped in Secure EPT (SEPT).
3. TDI Activation (patch11-12):
Guest transitions the TDI into the active RUN state after MMIO
acceptance.
- guest calls TDG.TDI.START, passing the Bind Session ID recorded
during the lock phase. This guarantees that the guest authorizes the
activation of the same bind instance the host established.
- guest notifies the host via TDCM_OP_START_TDI to finalize host side
hardware setup, e.g., switch TDISP state to RUN.
4. Private DMA Acceptance (patch13-15):
Before a TDI can perform DMA to guest private memory, its secure DMA
mapping must also be accepted. This happens during driver load stage.
- the enable_dma callback issues TDG.DMAR.ACCEPT to set secure PASID
table entry to present state.
- the secure PASID table entry is cleared in unlock stage implicitly
so disable_dma is a no-op currently.
This series originates from a PoC written by Yilun, thanks to him for his
foundational work.
The whole tree is here [4], please comment. Thanks.
BRs,
Zhenzhong
[1] https://lore.kernel.org/linux-coco/20260705220819.2472765-1-djbw@kernel.org/
[2] https://lore.kernel.org/all/cover.1789010941.git.nicolinc@nvidia.com/
[3] https://lore.kernel.org/all/20260916124849.GD3196566@ziepe.ca/
[4] https://github.com/intel-staging/tdx/tree/v7.3-rc4_tdx_connect_phase2.for_upstream
Zhenzhong Duan (15):
x86/tdx: Export tdg_vm_rd() for tdx-guest module
x86/tdx: Add TDCM hypercall wrapper for TDX Connect
x86/tdx: Add TDG.TDI.RD module call wrapper for TDX Connect
virt: tdx-guest: Support devsec TSM for secure devices
virt: tdx-guest: Add TDCM helpers and TEE-IO support check
virt: tdx-guest: Support TDI bind and unbind operations
PCI/TSM: Track Device Interface Report MMIO range index
x86/tdx: Add TDG.MMIO.ACCEPT module call wrapper for TDX Connect
virt: tdx-guest: Capture the TDI report during device lock
virt: tdx-guest: Set up and accept private MMIO ranges
x86/tdx: Add TDG.TDI.START module call wrapper for TDX Connect
virt: tdx-guest: Support Trust Device Interface (TDI) activation
x86/tdx: Add __tdcall_saved() helper
x86/tdx: Add TDG.DMAR.ACCEPT module call wrapper for TDX Connect
virt: tdx-guest: Accept default DMAR entry during PCI driver attach
arch/x86/coco/tdx/Makefile | 2 +
arch/x86/coco/tdx/tdcall.S | 17 +
arch/x86/coco/tdx/tdx.c | 8 +-
arch/x86/coco/tdx/tdx_connect.c | 166 ++++++
arch/x86/include/asm/shared/tdx.h | 7 +
arch/x86/include/asm/tdx.h | 77 +++
drivers/pci/tsm/core.c | 1 +
drivers/virt/coco/tdx-guest/Kconfig | 15 +
drivers/virt/coco/tdx-guest/Makefile | 3 +
drivers/virt/coco/tdx-guest/connect.c | 474 ++++++++++++++++++
.../coco/tdx-guest/{tdx-guest.c => main.c} | 6 +
drivers/virt/coco/tdx-guest/tdx-guest.h | 20 +
include/linux/pci-tsm.h | 1 +
13 files changed, 791 insertions(+), 6 deletions(-)
create mode 100644 arch/x86/coco/tdx/tdx_connect.c
create mode 100644 drivers/virt/coco/tdx-guest/connect.c
rename drivers/virt/coco/tdx-guest/{tdx-guest.c => main.c} (98%)
create mode 100644 drivers/virt/coco/tdx-guest/tdx-guest.h
--
2.52.0
next reply other threads:[~2026-09-24 4:10 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-24 4:10 Zhenzhong Duan [this message]
2026-09-24 4:10 ` [RFC PATCH 01/15] x86/tdx: Export tdg_vm_rd() for tdx-guest module Zhenzhong Duan
2026-09-30 22:13 ` Peter Fang
2026-10-01 12:38 ` Xu Yilun
2026-10-08 6:45 ` Duan, Zhenzhong
2026-10-08 16:30 ` Edgecombe, Rick P
2026-09-24 4:10 ` [RFC PATCH 02/15] x86/tdx: Add TDCM hypercall wrapper for TDX Connect Zhenzhong Duan
2026-09-24 4:10 ` [RFC PATCH 03/15] x86/tdx: Add TDG.TDI.RD module call " Zhenzhong Duan
2026-09-25 0:06 ` Edgecombe, Rick P
2026-10-08 6:27 ` Duan, Zhenzhong
2026-10-08 16:42 ` Edgecombe, Rick P
2026-09-24 4:10 ` [RFC PATCH 04/15] virt: tdx-guest: Support devsec TSM for secure devices Zhenzhong Duan
2026-09-24 4:10 ` [RFC PATCH 05/15] virt: tdx-guest: Add TDCM helpers and TEE-IO support check Zhenzhong Duan
2026-09-24 4:10 ` [RFC PATCH 06/15] virt: tdx-guest: Support TDI bind and unbind operations Zhenzhong Duan
2026-09-24 4:10 ` [RFC PATCH 07/15] PCI/TSM: Track Device Interface Report MMIO range index Zhenzhong Duan
2026-09-24 4:10 ` [RFC PATCH 08/15] x86/tdx: Add TDG.MMIO.ACCEPT module call wrapper for TDX Connect Zhenzhong Duan
2026-09-24 23:41 ` Edgecombe, Rick P
2026-09-25 0:02 ` Edgecombe, Rick P
2026-10-08 6:01 ` Duan, Zhenzhong
2026-10-08 16:47 ` Edgecombe, Rick P
2026-10-08 5:49 ` Duan, Zhenzhong
2026-10-08 16:44 ` Edgecombe, Rick P
2026-09-24 4:10 ` [RFC PATCH 09/15] virt: tdx-guest: Capture the TDI report during device lock Zhenzhong Duan
2026-09-24 4:10 ` [RFC PATCH 10/15] virt: tdx-guest: Set up and accept private MMIO ranges Zhenzhong Duan
2026-09-24 4:10 ` [RFC PATCH 11/15] x86/tdx: Add TDG.TDI.START module call wrapper for TDX Connect Zhenzhong Duan
2026-09-24 4:10 ` [RFC PATCH 12/15] virt: tdx-guest: Support Trust Device Interface (TDI) activation Zhenzhong Duan
2026-09-24 4:10 ` [RFC PATCH 13/15] x86/tdx: Add __tdcall_saved() helper Zhenzhong Duan
2026-09-24 4:10 ` [RFC PATCH 14/15] x86/tdx: Add TDG.DMAR.ACCEPT module call wrapper for TDX Connect Zhenzhong Duan
2026-09-24 4:10 ` [RFC PATCH 15/15] virt: tdx-guest: Accept default DMAR entry during PCI driver attach Zhenzhong Duan
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260924041032.1096569-1-zhenzhong.duan@intel.com \
--to=zhenzhong.duan@intel.com \
--cc=aik@amd.com \
--cc=aneesh.kumar@kernel.org \
--cc=bp@alien8.de \
--cc=chao.gao@intel.com \
--cc=chao.p.peng@intel.com \
--cc=dave.hansen@intel.com \
--cc=dave.hansen@linux.intel.com \
--cc=hpa@zytor.com \
--cc=jgg@nvidia.com \
--cc=kas@kernel.org \
--cc=kevin.tian@intel.com \
--cc=linux-coco@lists.linux.dev \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=nicolinc@nvidia.com \
--cc=pbonzini@redhat.com \
--cc=rick.p.edgecombe@intel.com \
--cc=seanjc@google.com \
--cc=tglx@kernel.org \
--cc=vishal.l.verma@intel.com \
--cc=x86@kernel.org \
--cc=xiaoyao.li@intel.com \
--cc=yilun.xu@linux.intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox