lkml.org 
[lkml]   [2020]   [Apr]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v3 31/34] iommu/exynos: Convert to probe/release_device() call-backs
    Date
    From: Joerg Roedel <jroedel@suse.de>

    Convert the Exynos IOMMU driver to use the probe_device() and
    release_device() call-backs of iommu_ops, so that the iommu core code
    does the group and sysfs setup.

    Tested-by: Marek Szyprowski <m.szyprowski@samsung.com>
    Acked-by: Marek Szyprowski <m.szyprowski@samsung.com>
    Signed-off-by: Joerg Roedel <jroedel@suse.de>
    ---
    drivers/iommu/exynos-iommu.c | 26 ++++++--------------------
    1 file changed, 6 insertions(+), 20 deletions(-)

    diff --git a/drivers/iommu/exynos-iommu.c b/drivers/iommu/exynos-iommu.c
    index 09cdd163560a..60c8a56e4a3f 100644
    --- a/drivers/iommu/exynos-iommu.c
    +++ b/drivers/iommu/exynos-iommu.c
    @@ -1235,19 +1235,13 @@ static phys_addr_t exynos_iommu_iova_to_phys(struct iommu_domain *iommu_domain,
    return phys;
    }

    -static int exynos_iommu_add_device(struct device *dev)
    +static struct iommu_device *exynos_iommu_probe_device(struct device *dev)
    {
    struct exynos_iommu_owner *owner = dev->archdata.iommu;
    struct sysmmu_drvdata *data;
    - struct iommu_group *group;

    if (!has_sysmmu(dev))
    - return -ENODEV;
    -
    - group = iommu_group_get_for_dev(dev);
    -
    - if (IS_ERR(group))
    - return PTR_ERR(group);
    + return ERR_PTR(-ENODEV);

    list_for_each_entry(data, &owner->controllers, owner_node) {
    /*
    @@ -1259,17 +1253,15 @@ static int exynos_iommu_add_device(struct device *dev)
    DL_FLAG_STATELESS |
    DL_FLAG_PM_RUNTIME);
    }
    - iommu_group_put(group);

    /* There is always at least one entry, see exynos_iommu_of_xlate() */
    data = list_first_entry(&owner->controllers,
    struct sysmmu_drvdata, owner_node);
    - iommu_device_link(&data->iommu, dev);

    - return 0;
    + return &data->iommu;
    }

    -static void exynos_iommu_remove_device(struct device *dev)
    +static void exynos_iommu_release_device(struct device *dev)
    {
    struct exynos_iommu_owner *owner = dev->archdata.iommu;
    struct sysmmu_drvdata *data;
    @@ -1287,15 +1279,9 @@ static void exynos_iommu_remove_device(struct device *dev)
    iommu_group_put(group);
    }
    }
    - iommu_group_remove_device(dev);

    list_for_each_entry(data, &owner->controllers, owner_node)
    device_link_del(data->link);
    -
    - /* There is always at least one entry, see exynos_iommu_of_xlate() */
    - data = list_first_entry(&owner->controllers,
    - struct sysmmu_drvdata, owner_node);
    - iommu_device_unlink(&data->iommu, dev);
    }

    static int exynos_iommu_of_xlate(struct device *dev,
    @@ -1341,8 +1327,8 @@ static const struct iommu_ops exynos_iommu_ops = {
    .unmap = exynos_iommu_unmap,
    .iova_to_phys = exynos_iommu_iova_to_phys,
    .device_group = generic_device_group,
    - .add_device = exynos_iommu_add_device,
    - .remove_device = exynos_iommu_remove_device,
    + .probe_device = exynos_iommu_probe_device,
    + .release_device = exynos_iommu_release_device,
    .pgsize_bitmap = SECT_SIZE | LPAGE_SIZE | SPAGE_SIZE,
    .of_xlate = exynos_iommu_of_xlate,
    };
    --
    2.17.1
    \
     
     \ /
      Last update: 2020-04-29 15:39    [W:2.419 / U:0.028 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site