[PATCH v7 11/14] iommu/arm-smmu-v3: Allow IDENTITY/BLOCKED to be set while PASID is used

Nicolin Chen nicolinc at nvidia.com
Tue May 14 17:32:25 PDT 2024


On Tue, May 14, 2024 at 08:02:53PM -0300, Jason Gunthorpe wrote:
> On Mon, May 13, 2024 at 12:11:28AM -0700, Nicolin Chen wrote:
> > On Wed, May 08, 2024 at 03:57:19PM -0300, Jason Gunthorpe wrote:
> > > diff --git a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c
> > > index 15378c131a5bc7..41d7a0664a445d 100644
> > > --- a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c
> > > +++ b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c
> > > @@ -991,6 +991,14 @@ void arm_smmu_get_ste_used(const __le64 *ent, __le64 *used_bits)
> > >  				    STRTAB_STE_1_S1STALLD | STRTAB_STE_1_STRW |
> > >  				    STRTAB_STE_1_EATS);
> > >  		used_bits[2] |= cpu_to_le64(STRTAB_STE_2_S2VMID);
> > > +
> > > +		/*
> > > +		 * See 13.5 Summary of attribute/permission configuration fields
> > > +		 * for the SHCFG behavior.
> > > +		 */
> > > +		if (FIELD_GET(STRTAB_STE_1_S1DSS, le64_to_cpu(ent[1])) ==
> > > +		    STRTAB_STE_1_S1DSS_BYPASS)
> > > +			used_bits[1] |= cpu_to_le64(STRTAB_STE_1_SHCFG);
> > 
> > Should we check ARM_SMMU_FEAT_ATTR_TYPES_OVR here as well? 
> 
> It isn't needed, this is just checking relationships, it is up to the
> make functions to set the correct bits based on things like FEAT data.
> 
> > The SHCFG is RES0 when !ARM_SMMU_FEAT_ATTR_TYPES_OVR. So, the
> > used_bits[1] doesn't need to include it in this case?
> 
> In the not-supported case then the bit will always be zero from all
> make functions and so this will all do nothing.

I see. Thanks for the clarification.

Nicolin



More information about the linux-arm-kernel mailing list