[PATCH v7 9/9] iommu/arm-smmu-v3: Support the DS expansion of range invalidation SCALE
Pranjal Shrivastava
praan at google.com
Mon Sep 28 11:44:34 PDT 2026
On Mon, Sep 21, 2026 at 08:55:17PM -0300, Jason Gunthorpe wrote:
> If DS is supported then SCALE can go up to 39. Compute a scale max that is
> compatible for the entire invs list.
>
> Replace the has_range_inv in the invs list with a 0 range_inv_scale_max
> to mean range invalidation is unavailable.
>
> Reviewed-by: Nicolin Chen <nicolinc at nvidia.com>
> Tested-by: Nicolin Chen <nicolinc at nvidia.com>
> Signed-off-by: Jason Gunthorpe <jgg at nvidia.com>
> ---
[...]
> +++ b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c
> @@ -1060,9 +1060,15 @@ static void arm_smmu_invs_update_caps(struct arm_smmu_invs *invs,
> invs->has_ats = true;
>
> if (inv->smmu->features & ARM_SMMU_FEAT_RANGE_INV) {
> - invs->has_range_inv = true;
> + unsigned int scale_max;
> +
> if (inv->smmu->options & ARM_SMMU_OPT_FULL_CONT_RANGE_INV)
> invs->has_full_cont_range_inv = true;
> +
> + scale_max = (inv->smmu->features & ARM_SMMU_FEAT_DS) ? 39 : 31;
> + if (!invs->range_inv_scale_max ||
> + scale_max < invs->range_inv_scale_max)
> + invs->range_inv_scale_max = scale_max;
Nit: maybe a short comment here, e.g. "SCALE is 6 bits when
SMMU_IDR5.DS == 1, values above 39 are treated as 39 (H.a 4.4.1.1)"?
Reviewed-by: Pranjal Shrivastava <praan at google.com>
Thanks,
Praan
More information about the linux-arm-kernel
mailing list