iommu/arm-smmu-v3: Add SMMUv3.2 range invalidation support
authorRob Herring <robh@kernel.org>
Mon, 24 Feb 2020 22:31:29 +0000 (16:31 -0600)
committerWill Deacon <will@kernel.org>
Wed, 18 Mar 2020 21:37:10 +0000 (21:37 +0000)
commit6a481a95d4c198a2dd0a61f8877b92a375757db8
treee9e05cfd97261983d82fcaa086fdd5d8fe9f824b
parent9e773aee8c3e1b3ba019c5c7f8435aaa836c6130
iommu/arm-smmu-v3: Add SMMUv3.2 range invalidation support

Arm SMMUv3.2 adds support for TLB range invalidate operations.
Support for range invalidate is determined by the RIL bit in the IDR3
register.

The range invalidate is in units of the leaf page size and operates on
1-32 chunks of a power of 2 multiple pages. First, we determine from the
size what power of 2 multiple we can use. Then we calculate how many
chunks (1-31) of the power of 2 size for the range on the iteration. On
each iteration, we move up in size by at least 5 bits.

Cc: Jean-Philippe Brucker <jean-philippe@linaro.org>
Cc: Will Deacon <will@kernel.org>
Cc: Robin Murphy <robin.murphy@arm.com>
Cc: Joerg Roedel <joro@8bytes.org>
Reviewed-by: Eric Auger <eric.auger@redhat.com>
Signed-off-by: Rob Herring <robh@kernel.org>
Signed-off-by: Will Deacon <will@kernel.org>
drivers/iommu/arm-smmu-v3.c