[RFC PATCH v4 03/16] iommu/arm-smmu-v3: Add initial pSMMU realm viommu plumbing
Aneesh Kumar K.V
aneesh.kumar at kernel.org
Wed Sep 2 06:15:42 PDT 2026
Jason Gunthorpe <jgg at ziepe.ca> writes:
> On Wed, Sep 02, 2026 at 02:30:00PM +0530, Aneesh Kumar K.V wrote:
>> Jason Gunthorpe <jgg at 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?
>From the RMM's perspective, the sequence is as follows:
viommu alloc
[ rmm ] SMC_RMI_PSMMU_ACTIVATE 2b400000 8819bb000 > RMI_INCOMPLETE 0 10008
[ rmm ] SMC_RMI_OP_MEM_DONATE 0 881bac098 1 > RMI_INCOMPLETE 2 10004
[ rmm ] SMC_RMI_OP_MEM_DONATE 0 881bac098 1 > RMI_INCOMPLETE 1 10004
[ rmm ] SMC_RMI_OP_MEM_DONATE 0 881bac098 1 > RMI_INCOMPLETE 1 0
[ rmm ] L1 StrTab: PA 0x881baa000 VA 0x80003c0000 size 0x2000
[ rmm ] CMDQ: PA 0x88066a000 VA 0x80003c2000
[ rmm ] EVTQ: PA 0x8815c5000 VA 0x80003c3000
[ rmm ] PSMMU 0x2b400000 activated
[ rmm ] SMC_RMI_OP_CONTINUE 0 0 > RMI_SUCCESS 0 0
[ rmm ] SMC_RMI_PSMMU_ST_L2_CREATE 2b400000 300 > RMI_INCOMPLETE 0 10004
[ rmm ] SMC_RMI_OP_MEM_DONATE 0 881bac098 1 > RMI_INCOMPLETE 1 0
[ rmm ] smmu->strtab_base[12] 0x0 @0x80003c0060
[ rmm ] L1STD[12] 0x8819bb007 for SID 0x300: L2 table VA 0x80003d0000 PA 0x8819bb000
[ rmm ] SMC_RMI_OP_CONTINUE 0 0 > RMI_SUCCESS 0 0
vdevice alloc
[ rmm ] SMC_RMI_PSMMU_ST_L2_CREATE 2b400000 200 > RMI_INCOMPLETE 0 10004
[ rmm ] SMC_RMI_OP_MEM_DONATE 0 882648098 1 > RMI_INCOMPLETE 1 0
[ rmm ] smmu->strtab_base[8] 0x0 @0x80003c0040
[ rmm ] L1STD[8] 0x882506007 for SID 0x200: L2 table VA 0x80003cc000 PA 0x882506000
[ rmm ] SMC_RMI_OP_CONTINUE 0 0 > RMI_SUCCESS 0 0
RD gets allocated here
[ rmm ] SMC_RMI_REALM_CREATE 881b03000 8819a1000 > RMI_INCOMPLETE 0 24
[ rmm ] SMC_RMI_OP_MEM_DONATE 0 881605098 9 > RMI_INCOMPLETE 9 0
[ rmm ] SMC_RMI_OP_CONTINUE 0 0 > RMI_SUCCESS 0 0
-aneesh
More information about the linux-arm-kernel
mailing list