From: Wu Fei Implement the hw_info op, report the IOMMU Capabilities register value to user space as IOMMU_HW_INFO_TYPE_RISCV so VMMs can discover the hardware capabilities of the physical IOMMU. Signed-off-by: Wu Fei Signed-off-by: Gong Shuai --- drivers/iommu/riscv/iommu.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/drivers/iommu/riscv/iommu.c b/drivers/iommu/riscv/iommu.c index c34331bcd661..e59a6a97589e 100644 --- a/drivers/iommu/riscv/iommu.c +++ b/drivers/iommu/riscv/iommu.c @@ -2220,9 +2220,27 @@ static void riscv_iommu_get_resv_regions(struct device *dev, struct list_head *h iommu_dma_get_resv_regions(dev, head); } +static void *riscv_iommu_hw_info(struct device *dev, u32 *length, + enum iommu_hw_info_type *type) +{ + struct iommu_hw_info_riscv *info; + struct riscv_iommu_device *iommu = dev_to_iommu(dev); + + info = kzalloc_obj(*info); + if (!info) + return ERR_PTR(-ENOMEM); + + info->capabilities = iommu->caps; + *length = sizeof(*info); + *type = IOMMU_HW_INFO_TYPE_RISCV; + + return info; +} + static const struct iommu_ops riscv_iommu_ops = { .of_xlate = riscv_iommu_of_xlate, .capable = riscv_iommu_capable, + .hw_info = riscv_iommu_hw_info, .identity_domain = &riscv_iommu_identity_domain, .blocked_domain = &riscv_iommu_blocking_domain, .release_domain = &riscv_iommu_blocking_domain, -- 2.53.0