]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
iommu/msm: Use helper function devm_clk_get_prepared()
authorZhang Heng <zhangheng@kylinos.cn>
Fri, 3 Jan 2025 11:30:59 +0000 (19:30 +0800)
committerJoerg Roedel <jroedel@suse.de>
Mon, 6 Jan 2025 11:41:00 +0000 (12:41 +0100)
Since commit 7ef9651e9792 ("clk: Provide new devm_clk helpers for prepared
and enabled clocks"), devm_clk_get() and clk_prepare() can now be replaced
by devm_clk_get_prepared() when driver prepares the clocks for the whole
lifetime of the device. Moreover, it is no longer necessary to unprepare
the clocks explicitly.

Signed-off-by: Zhang Heng <zhangheng@kylinos.cn>
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Link: https://lore.kernel.org/r/20250103113059.463033-1-zhangheng@kylinos.cn
Signed-off-by: Joerg Roedel <jroedel@suse.de>
drivers/iommu/msm_iommu.c

index ce40f0a419ea093ee9b8ae6ff421656f96f6d49b..2769e4544038c1aacd8e03fdc0dc425382a47813 100644 (file)
@@ -725,47 +725,32 @@ static int msm_iommu_probe(struct platform_device *pdev)
        iommu->dev = &pdev->dev;
        INIT_LIST_HEAD(&iommu->ctx_list);
 
-       iommu->pclk = devm_clk_get(iommu->dev, "smmu_pclk");
+       iommu->pclk = devm_clk_get_prepared(iommu->dev, "smmu_pclk");
        if (IS_ERR(iommu->pclk))
                return dev_err_probe(iommu->dev, PTR_ERR(iommu->pclk),
                                     "could not get smmu_pclk\n");
 
-       ret = clk_prepare(iommu->pclk);
-       if (ret)
-               return dev_err_probe(iommu->dev, ret,
-                                    "could not prepare smmu_pclk\n");
-
-       iommu->clk = devm_clk_get(iommu->dev, "iommu_clk");
-       if (IS_ERR(iommu->clk)) {
-               clk_unprepare(iommu->pclk);
+       iommu->clk = devm_clk_get_prepared(iommu->dev, "iommu_clk");
+       if (IS_ERR(iommu->clk))
                return dev_err_probe(iommu->dev, PTR_ERR(iommu->clk),
                                     "could not get iommu_clk\n");
-       }
-
-       ret = clk_prepare(iommu->clk);
-       if (ret) {
-               clk_unprepare(iommu->pclk);
-               return dev_err_probe(iommu->dev, ret, "could not prepare iommu_clk\n");
-       }
 
        r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
        iommu->base = devm_ioremap_resource(iommu->dev, r);
        if (IS_ERR(iommu->base)) {
                ret = dev_err_probe(iommu->dev, PTR_ERR(iommu->base), "could not get iommu base\n");
-               goto fail;
+               return ret;
        }
        ioaddr = r->start;
 
        iommu->irq = platform_get_irq(pdev, 0);
-       if (iommu->irq < 0) {
-               ret = -ENODEV;
-               goto fail;
-       }
+       if (iommu->irq < 0)
+               return -ENODEV;
 
        ret = of_property_read_u32(iommu->dev->of_node, "qcom,ncb", &val);
        if (ret) {
                dev_err(iommu->dev, "could not get ncb\n");
-               goto fail;
+               return ret;
        }
        iommu->ncb = val;
 
@@ -780,8 +765,7 @@ static int msm_iommu_probe(struct platform_device *pdev)
 
        if (!par) {
                pr_err("Invalid PAR value detected\n");
-               ret = -ENODEV;
-               goto fail;
+               return -ENODEV;
        }
 
        ret = devm_request_threaded_irq(iommu->dev, iommu->irq, NULL,
@@ -791,7 +775,7 @@ static int msm_iommu_probe(struct platform_device *pdev)
                                        iommu);
        if (ret) {
                pr_err("Request IRQ %d failed with ret=%d\n", iommu->irq, ret);
-               goto fail;
+               return ret;
        }
 
        list_add(&iommu->dev_node, &qcom_iommu_devices);
@@ -800,23 +784,19 @@ static int msm_iommu_probe(struct platform_device *pdev)
                                     "msm-smmu.%pa", &ioaddr);
        if (ret) {
                pr_err("Could not add msm-smmu at %pa to sysfs\n", &ioaddr);
-               goto fail;
+               return ret;
        }
 
        ret = iommu_device_register(&iommu->iommu, &msm_iommu_ops, &pdev->dev);
        if (ret) {
                pr_err("Could not register msm-smmu at %pa\n", &ioaddr);
-               goto fail;
+               return ret;
        }
 
        pr_info("device mapped at %p, irq %d with %d ctx banks\n",
                iommu->base, iommu->irq, iommu->ncb);
 
        return ret;
-fail:
-       clk_unprepare(iommu->clk);
-       clk_unprepare(iommu->pclk);
-       return ret;
 }
 
 static const struct of_device_id msm_iommu_dt_match[] = {
@@ -824,20 +804,11 @@ static const struct of_device_id msm_iommu_dt_match[] = {
        {}
 };
 
-static void msm_iommu_remove(struct platform_device *pdev)
-{
-       struct msm_iommu_dev *iommu = platform_get_drvdata(pdev);
-
-       clk_unprepare(iommu->clk);
-       clk_unprepare(iommu->pclk);
-}
-
 static struct platform_driver msm_iommu_driver = {
        .driver = {
                .name   = "msm_iommu",
                .of_match_table = msm_iommu_dt_match,
        },
        .probe          = msm_iommu_probe,
-       .remove         = msm_iommu_remove,
 };
 builtin_platform_driver(msm_iommu_driver);