iommu/io-pgtable-arm-v7s: Implement arm_v7s_unmap_pages()
Implement the unmap_pages() callback for the ARM v7s io-pgtable format. Signed-off-by: Isaac J. Manjarres <isaacm@codeaurora.org> Signed-off-by: Georgi Djakov <quic_c_gdjako@quicinc.com> Link: https://lore.kernel.org/r/1623850736-389584-13-git-send-email-quic_c_gdjako@quicinc.com Signed-off-by: Joerg Roedel <jroedel@suse.de>
This commit is contained in:
parent
4a77b12deb
commit
f13eabcf9d
|
@ -710,15 +710,32 @@ static size_t __arm_v7s_unmap(struct arm_v7s_io_pgtable *data,
|
||||||
return __arm_v7s_unmap(data, gather, iova, size, lvl + 1, ptep);
|
return __arm_v7s_unmap(data, gather, iova, size, lvl + 1, ptep);
|
||||||
}
|
}
|
||||||
|
|
||||||
static size_t arm_v7s_unmap(struct io_pgtable_ops *ops, unsigned long iova,
|
static size_t arm_v7s_unmap_pages(struct io_pgtable_ops *ops, unsigned long iova,
|
||||||
size_t size, struct iommu_iotlb_gather *gather)
|
size_t pgsize, size_t pgcount,
|
||||||
|
struct iommu_iotlb_gather *gather)
|
||||||
{
|
{
|
||||||
struct arm_v7s_io_pgtable *data = io_pgtable_ops_to_data(ops);
|
struct arm_v7s_io_pgtable *data = io_pgtable_ops_to_data(ops);
|
||||||
|
size_t unmapped = 0, ret;
|
||||||
|
|
||||||
if (WARN_ON(iova >= (1ULL << data->iop.cfg.ias)))
|
if (WARN_ON(iova >= (1ULL << data->iop.cfg.ias)))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
return __arm_v7s_unmap(data, gather, iova, size, 1, data->pgd);
|
while (pgcount--) {
|
||||||
|
ret = __arm_v7s_unmap(data, gather, iova, pgsize, 1, data->pgd);
|
||||||
|
if (!ret)
|
||||||
|
break;
|
||||||
|
|
||||||
|
unmapped += pgsize;
|
||||||
|
iova += pgsize;
|
||||||
|
}
|
||||||
|
|
||||||
|
return unmapped;
|
||||||
|
}
|
||||||
|
|
||||||
|
static size_t arm_v7s_unmap(struct io_pgtable_ops *ops, unsigned long iova,
|
||||||
|
size_t size, struct iommu_iotlb_gather *gather)
|
||||||
|
{
|
||||||
|
return arm_v7s_unmap_pages(ops, iova, size, 1, gather);
|
||||||
}
|
}
|
||||||
|
|
||||||
static phys_addr_t arm_v7s_iova_to_phys(struct io_pgtable_ops *ops,
|
static phys_addr_t arm_v7s_iova_to_phys(struct io_pgtable_ops *ops,
|
||||||
|
@ -781,6 +798,7 @@ static struct io_pgtable *arm_v7s_alloc_pgtable(struct io_pgtable_cfg *cfg,
|
||||||
data->iop.ops = (struct io_pgtable_ops) {
|
data->iop.ops = (struct io_pgtable_ops) {
|
||||||
.map = arm_v7s_map,
|
.map = arm_v7s_map,
|
||||||
.unmap = arm_v7s_unmap,
|
.unmap = arm_v7s_unmap,
|
||||||
|
.unmap_pages = arm_v7s_unmap_pages,
|
||||||
.iova_to_phys = arm_v7s_iova_to_phys,
|
.iova_to_phys = arm_v7s_iova_to_phys,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue