From: Aneesh Kumar K.V <aneesh.kumar@kernel.org>
To: Jason Gunthorpe <jgg@ziepe.ca>
Cc: Nicolin Chen <nicolinc@nvidia.com>,
linux-coco@lists.linux.dev, kvmarm@lists.linux.dev,
linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org, Alexey Kardashevskiy <aik@amd.com>,
Catalin Marinas <catalin.marinas@arm.com>,
Dan Williams <dan.j.williams@intel.com>,
Joerg Roedel <joro@8bytes.org>,
Jonathan Cameron <jic23@kernel.org>,
Marc Zyngier <maz@kernel.org>,
Pranjal Shrivastava <praan@google.com>,
Robin Murphy <robin.murphy@arm.com>,
Samuel Ortiz <sameo@rivosinc.com>,
Steven Price <steven.price@arm.com>,
Suzuki K Poulose <Suzuki.Poulose@arm.com>,
Will Deacon <will@kernel.org>,
Xu Yilun <yilun.xu@linux.intel.com>
Subject: Re: [RFC PATCH v4 03/16] iommu/arm-smmu-v3: Add initial pSMMU realm viommu plumbing
Date: Wed, 02 Sep 2026 22:09:15 +0530 [thread overview]
Message-ID: <yq5aecfbzjyk.fsf@kernel.org> (raw)
In-Reply-To: <yq5aik4nztdt.fsf@kernel.org>
Aneesh Kumar K.V <aneesh.kumar@kernel.org> writes:
> Jason Gunthorpe <jgg@ziepe.ca> writes:
>
>> On Wed, Sep 02, 2026 at 02:30:00PM +0530, Aneesh Kumar K.V wrote:
>>> Jason Gunthorpe <jgg@ziepe.ca> writes:
>>>
>>> > On Tue, Sep 01, 2026 at 03:36:37PM +0530, Aneesh Kumar K.V wrote:
>>> >
>>> >> @@ -463,14 +460,13 @@
>>> >> vsmmu->vmid = s2_parent->s2_cfg.vmid;
>>> >>
>>> >> if (viommu->type == IOMMU_VIOMMU_TYPE_ARM_SMMUV3) {
>>> >> + if (arm_smmu_is_realm_viommu(viommu))
>>> >> + return arm_realm_smmu_v3_init(viommu, user_data);
>>> >> +
>>> >
>>> > I think the realm vsmmu is going to require a different info struct
>>> > than the normal psmmu case, isn't it?
>>> >
>>> > If so it needs its own enum value.
>>> >
>>> > It would be nice to see a draft patch showing how the real vsmmu works
>>> > on top of the RMM spec for it. If we are using a viommu object then
>>> > non-vsmmu case should be identical just with an option in the info
>>> > struct to not create the vsmmu object.
>>>
>>> Based on feedback on other emails in this thread, I have now implemented
>>> this without using a vdevice or viommu. This should make the CCA and
>>> non-CCA cases similar.
>>
>> That wasn't the feedback. The feedback was to use the viommu and not
>> make a bunch of new stuff..
>>
>
> That rework was done before I saw your discussion with Nicolin.
>
> To reiterate, for this configuration:
>
> - The viommu will use a stage-1 bypass configuration.
> - A new IOMMU_VIOMMU_TYPE_ARM_REALM_SMMUV3 type will create the viommu.
> The psmmu will be activated at this point to avoid creating psmmu
> objects early. We will reference-count it to ensure that the same
> psmmu is shared across realm guests.
> - Creating a vdevice will invoke SMC_RMI_PSMMU_ST_L2_CREATE.
>
> I am unclear about the vdev_create suggestion. Creating a vdevice
> requires an RD, which is created later in the flow above. How do you
> suggest linking vdevice_alloc to vdev_create?
>
I was able to prototype the following flow:
- The viommu uses a stage-1 bypass configuration.
- A new IOMMU_VIOMMU_TYPE_ARM_REALM_SMMUV3 type creates the viommu.
The pSMMU is activated at this point to avoid creating pSMMU objects
early. It is reference-counted so that the same pSMMU can be shared
across realm guests.
- The realm is created during viommu allocation, ensuring that the
vSMMU can be created here.
- Creating a vdevice invokes SMC_RMI_PSMMU_ST_L2_CREATE.
- This is followed by tsm_bind() if the device has an established TSM
link.
static int arm_realm_smmu_v3_vdevice_init(struct iommufd_vdevice *vdev)
{
struct device *dev = iommufd_vdevice_to_device(vdev);
struct kvm *kvm = vdev->viommu->kvm_file->private_data;
struct arm_smmu_device *smmu;
struct arm_smmu_stream *stream;
struct arm_smmu_master *master;
unsigned long rmi_ret = 0;
unsigned long l2_sid;
int ret;
if (!tsm_is_configured(dev))
return 0;
master = dev_iommu_priv_get(dev);
/* FIXME which stream to pick */
/* At this moment, iommufd only supports PCI device that has one SID */
stream = &master->streams[0];
smmu = master->smmu;
l2_sid = ALIGN_DOWN(stream->id, STRTAB_NUM_L2_STES);
{
guard(mutex)(&smmu->realm.mutex);
if (!arm_realm_smmu_active(smmu))
return -EINVAL;
ret = rmi_psmmu_st_l2_create(smmu->base_phys, l2_sid,
&rmi_ret);
if (ret || rmi_ret) {
if (!ret)
return -EIO;
if (RMI_RETURN_STATUS(rmi_ret) != RMI_ERROR_PSMMU_ST ||
RMI_RETURN_INDEX(rmi_ret) != 2) {
dev_warn(dev, "failed to create realm stream mapping\n");
return -EIO;
}
/* The L2 stream table already exists. */
}
}
vdev->destroy = arm_realm_smmu_v3_vdevice_destroy;
return tsm_bind(dev, kvm, vdev->virt_id);
}
- tsm_bind() calls cca_tsm_bind(), which in turn calls vdev_create().
- After boot, the guest locks the device. This generates an RHI request
that reaches cca_tsm_guest_req() with RHI_DA_TDI_CONFIG_LOCKED.
- cca_tsm_guest_req() now handles TSM_REQ_SET_TDI_STATE requests for
the unlocked, locked, and running states.
@@ -513,10 +514,16 @@ static ssize_t cca_tsm_guest_req(struct pci_tdi *tdi,
if (copy_from_user((void *)&req_obj, req.user, req_len))
return -EFAULT;
- if (req_obj.tdi_state != RHI_DA_TDI_CONFIG_RUN)
+ switch (req_obj.tdi_state) {
+ case RHI_DA_TDI_CONFIG_UNLOCKED:
+ return cca_vdev_device_unlock(pdev);
+ case RHI_DA_TDI_CONFIG_LOCKED:
+ return cca_vdev_device_lock(pdev);
+ case RHI_DA_TDI_CONFIG_RUN:
+ return cca_vdev_device_start(pdev);
+ default:
return -EINVAL;
-
- return cca_vdev_device_start(pdev);
+ }
}
-aneesh
next prev parent reply other threads:[~2026-09-02 16:39 UTC|newest]
Thread overview: 54+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-04-27 8:53 [RFC PATCH v4 00/16] coco/TSM: Implement host-side support for Arm CCA TDISP setup Aneesh Kumar K.V (Arm)
2026-04-27 8:53 ` [RFC PATCH v4 01/16] iommu/arm-smmu-v3: Discover RME support and realm IRQ topology Aneesh Kumar K.V (Arm)
2026-08-29 18:22 ` Nicolin Chen
2026-09-01 8:46 ` Aneesh Kumar K.V
2026-09-01 14:32 ` Jason Gunthorpe
2026-04-27 8:53 ` [RFC PATCH v4 02/16] iommu/arm-smmu-v3: Save the programmed MSI message in msi_desc Aneesh Kumar K.V (Arm)
2026-04-27 8:53 ` [RFC PATCH v4 03/16] iommu/arm-smmu-v3: Add initial pSMMU realm viommu plumbing Aneesh Kumar K.V (Arm)
2026-08-29 20:00 ` Nicolin Chen
2026-09-01 9:17 ` Aneesh Kumar K.V
2026-09-01 10:06 ` Aneesh Kumar K.V
2026-09-01 14:34 ` Jason Gunthorpe
2026-09-01 17:13 ` Nicolin Chen
2026-09-01 17:18 ` Nicolin Chen
2026-09-01 17:45 ` Jason Gunthorpe
2026-09-01 17:42 ` Jason Gunthorpe
2026-09-01 19:08 ` Nicolin Chen
2026-09-02 0:21 ` Nicolin Chen
2026-09-02 1:51 ` Jason Gunthorpe
2026-09-02 13:10 ` Aneesh Kumar K.V
2026-09-02 9:00 ` Aneesh Kumar K.V
2026-09-02 12:17 ` Jason Gunthorpe
2026-09-02 13:15 ` Aneesh Kumar K.V
2026-09-02 16:39 ` Aneesh Kumar K.V [this message]
2026-09-02 23:56 ` Jason Gunthorpe
2026-09-03 5:48 ` Aneesh Kumar K.V
2026-09-03 17:17 ` Jason Gunthorpe
2026-09-07 9:45 ` Aneesh Kumar K.V
2026-09-07 12:52 ` Jason Gunthorpe
2026-09-09 10:09 ` Aneesh Kumar K.V
2026-09-09 12:46 ` Jason Gunthorpe
2026-09-10 9:52 ` Tian, Kevin
2026-09-10 12:46 ` Jason Gunthorpe
2026-09-02 19:30 ` Jason Gunthorpe
2026-09-03 5:28 ` Aneesh Kumar K.V
2026-09-03 14:47 ` Jason Gunthorpe
2026-09-03 15:13 ` Suzuki K Poulose
2026-09-03 17:19 ` Jason Gunthorpe
2026-09-01 17:36 ` Nicolin Chen
2026-04-27 8:53 ` [RFC PATCH v4 04/16] iommu/arm-smmu-v3: Track realm pSMMU users with refcount_t Aneesh Kumar K.V (Arm)
2026-04-27 8:53 ` [RFC PATCH v4 05/16] coco: host: arm64: Add support for virtual device communication Aneesh Kumar K.V (Arm)
2026-04-27 8:53 ` [RFC PATCH v4 06/16] coco: host: arm64: Add support for RMM vdev objects Aneesh Kumar K.V (Arm)
2026-04-27 8:53 ` [RFC PATCH v4 07/16] coco: host: arm64: Add pdev stream key refresh and purge helpers Aneesh Kumar K.V (Arm)
2026-04-27 8:53 ` [RFC PATCH v4 08/16] coco: host: arm64: Add helpers to unlock and destroy RMM vdev Aneesh Kumar K.V (Arm)
2026-04-27 8:53 ` [RFC PATCH v4 09/16] coco: host: arm64: Add support for da object read RHI handling Aneesh Kumar K.V (Arm)
2026-04-27 8:53 ` [RFC PATCH v4 10/16] coco: host: arm64: Add helper for cached object fetches Aneesh Kumar K.V (Arm)
2026-04-27 8:53 ` [RFC PATCH v4 11/16] coco: host: arm64: Fetch interface report via RMI Aneesh Kumar K.V (Arm)
2026-04-27 8:53 ` [RFC PATCH v4 12/16] coco: host: arm64: Fetch device measurements " Aneesh Kumar K.V (Arm)
2026-04-27 8:53 ` [RFC PATCH v4 13/16] coco: host: KVM: arm64: Handle vdev validate-mapping exits Aneesh Kumar K.V (Arm)
2026-04-27 8:53 ` [RFC PATCH v4 14/16] KVM: arm64: Unmap device mappings when a private granule is destroyed Aneesh Kumar K.V (Arm)
2026-04-27 8:53 ` [RFC PATCH v4 15/16] coco: host: arm64: Transition vdevs to TDISP RUN state Aneesh Kumar K.V (Arm)
2026-04-27 8:53 ` [RFC PATCH v4 16/16] KVM: arm64: CCA: enable DA in realm create parameters Aneesh Kumar K.V (Arm)
2026-08-31 18:08 ` [RFC PATCH v4 00/16] coco/TSM: Implement host-side support for Arm CCA TDISP setup Jason Gunthorpe
2026-09-01 12:44 ` Aneesh Kumar K.V
2026-09-01 13:07 ` Jason Gunthorpe
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=yq5aecfbzjyk.fsf@kernel.org \
--to=aneesh.kumar@kernel.org \
--cc=Suzuki.Poulose@arm.com \
--cc=aik@amd.com \
--cc=catalin.marinas@arm.com \
--cc=dan.j.williams@intel.com \
--cc=jgg@ziepe.ca \
--cc=jic23@kernel.org \
--cc=joro@8bytes.org \
--cc=kvmarm@lists.linux.dev \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-coco@lists.linux.dev \
--cc=linux-kernel@vger.kernel.org \
--cc=maz@kernel.org \
--cc=nicolinc@nvidia.com \
--cc=praan@google.com \
--cc=robin.murphy@arm.com \
--cc=sameo@rivosinc.com \
--cc=steven.price@arm.com \
--cc=will@kernel.org \
--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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.