From: Chris Spencer <christopher.spen...@sea.co.uk>

There are no clocks that the CAAM driver needs to initialise on the
i.MX8.

Signed-off-by: Chris Spencer <christopher.spen...@sea.co.uk>
---
 drivers/crypto/caam/ctrl.c   | 180 +++++++++++++++++++----------------
 drivers/crypto/caam/intern.h |   1 +
 2 files changed, 99 insertions(+), 82 deletions(-)

diff --git a/drivers/crypto/caam/ctrl.c b/drivers/crypto/caam/ctrl.c
index 22cb7106133a..1f841f37ce3c 100644
--- a/drivers/crypto/caam/ctrl.c
+++ b/drivers/crypto/caam/ctrl.c
@@ -472,6 +472,91 @@ static int caam_get_era(struct caam_ctrl __iomem *ctrl)
                return caam_get_era_from_hw(ctrl);
 }
 
+static int init_clocks(struct caam_drv_private *ctrlpriv)
+{
+       struct clk *clk;
+       struct device *dev = ctrlpriv->dev;
+       int ret = 0;
+
+       /* Enable clocking */
+       clk = caam_drv_identify_clk(dev, "ipg");
+       if (IS_ERR(clk)) {
+               ret = PTR_ERR(clk);
+               dev_err(dev, "can't identify CAAM ipg clk: %d\n", ret);
+               goto exit;
+       }
+       ctrlpriv->caam_ipg = clk;
+
+       ret = clk_prepare_enable(ctrlpriv->caam_ipg);
+       if (ret < 0) {
+               dev_err(dev, "can't enable CAAM ipg clock: %d\n", ret);
+               goto exit;
+       }
+
+       clk = caam_drv_identify_clk(dev, "aclk");
+       if (IS_ERR(clk)) {
+               ret = PTR_ERR(clk);
+               dev_err(dev, "can't identify CAAM aclk clk: %d\n", ret);
+               goto disable_caam_ipg;
+       }
+       ctrlpriv->caam_aclk = clk;
+
+       ret = clk_prepare_enable(ctrlpriv->caam_aclk);
+       if (ret < 0) {
+               dev_err(dev, "can't enable CAAM aclk clock: %d\n", ret);
+               goto disable_caam_ipg;
+       }
+
+       if (!of_machine_is_compatible("fsl,imx7d") &&
+           !of_machine_is_compatible("fsl,imx7s")) {
+               clk = caam_drv_identify_clk(dev, "mem");
+               if (IS_ERR(clk)) {
+                       ret = PTR_ERR(clk);
+                       dev_err(dev, "can't identify CAAM mem clk: %d\n", ret);
+                       goto disable_caam_aclk;
+               }
+               ctrlpriv->caam_mem = clk;
+
+               ret = clk_prepare_enable(ctrlpriv->caam_mem);
+               if (ret < 0) {
+                       dev_err(dev, "can't enable CAAM secure mem clock: %d\n",
+                               ret);
+                       goto disable_caam_aclk;
+               }
+
+               if (!of_machine_is_compatible("fsl,imx6ul")) {
+                       clk = caam_drv_identify_clk(dev, "emi_slow");
+                       if (IS_ERR(clk)) {
+                               ret = PTR_ERR(clk);
+                               dev_err(dev,
+                                       "can't identify CAAM emi_slow clk: 
%d\n",
+                                       ret);
+                               goto disable_caam_mem;
+                       }
+                       ctrlpriv->caam_emi_slow = clk;
+
+                       ret = clk_prepare_enable(ctrlpriv->caam_emi_slow);
+                       if (ret < 0) {
+                               dev_err(dev,
+                                       "can't enable CAAM emi slow clock: 
%d\n",
+                                       ret);
+                               goto disable_caam_mem;
+                       }
+               }
+       }
+
+       goto exit;
+
+disable_caam_mem:
+       clk_disable_unprepare(ctrlpriv->caam_mem);
+disable_caam_aclk:
+       clk_disable_unprepare(ctrlpriv->caam_aclk);
+disable_caam_ipg:
+       clk_disable_unprepare(ctrlpriv->caam_ipg);
+exit:
+       return ret;
+}
+
 static const struct of_device_id caam_match[] = {
        {
                .compatible = "fsl,sec-v4.0",
@@ -496,7 +581,6 @@ static int caam_probe(struct platform_device *pdev)
        struct device_node *nprop, *np;
        struct caam_ctrl __iomem *ctrl;
        struct caam_drv_private *ctrlpriv;
-       struct clk *clk;
 #ifdef CONFIG_DEBUG_FS
        struct caam_perfmon *perfmon;
 #endif
@@ -511,83 +595,16 @@ static int caam_probe(struct platform_device *pdev)
 
        dev = &pdev->dev;
        dev_set_drvdata(dev, ctrlpriv);
+       ctrlpriv->dev = dev;
        nprop = pdev->dev.of_node;
 
        caam_imx = soc_device_match(imx_soc) ||
                of_machine_is_compatible("fsl,imx8mq");
 
-       /* Enable clocking */
-       clk = caam_drv_identify_clk(&pdev->dev, "ipg");
-       if (IS_ERR(clk)) {
-               ret = PTR_ERR(clk);
-               dev_err(&pdev->dev,
-                       "can't identify CAAM ipg clk: %d\n", ret);
-               return ret;
-       }
-       ctrlpriv->caam_ipg = clk;
-
-       if (!of_machine_is_compatible("fsl,imx7d") &&
-           !of_machine_is_compatible("fsl,imx7s")) {
-               clk = caam_drv_identify_clk(&pdev->dev, "mem");
-               if (IS_ERR(clk)) {
-                       ret = PTR_ERR(clk);
-                       dev_err(&pdev->dev,
-                               "can't identify CAAM mem clk: %d\n", ret);
-                       return ret;
-               }
-               ctrlpriv->caam_mem = clk;
-       }
-
-       clk = caam_drv_identify_clk(&pdev->dev, "aclk");
-       if (IS_ERR(clk)) {
-               ret = PTR_ERR(clk);
-               dev_err(&pdev->dev,
-                       "can't identify CAAM aclk clk: %d\n", ret);
-               return ret;
-       }
-       ctrlpriv->caam_aclk = clk;
-
-       if (!of_machine_is_compatible("fsl,imx6ul") &&
-           !of_machine_is_compatible("fsl,imx7d") &&
-           !of_machine_is_compatible("fsl,imx7s")) {
-               clk = caam_drv_identify_clk(&pdev->dev, "emi_slow");
-               if (IS_ERR(clk)) {
-                       ret = PTR_ERR(clk);
-                       dev_err(&pdev->dev,
-                               "can't identify CAAM emi_slow clk: %d\n", ret);
-                       return ret;
-               }
-               ctrlpriv->caam_emi_slow = clk;
-       }
-
-       ret = clk_prepare_enable(ctrlpriv->caam_ipg);
-       if (ret < 0) {
-               dev_err(&pdev->dev, "can't enable CAAM ipg clock: %d\n", ret);
-               return ret;
-       }
-
-       if (ctrlpriv->caam_mem) {
-               ret = clk_prepare_enable(ctrlpriv->caam_mem);
-               if (ret < 0) {
-                       dev_err(&pdev->dev, "can't enable CAAM secure mem 
clock: %d\n",
-                               ret);
-                       goto disable_caam_ipg;
-               }
-       }
-
-       ret = clk_prepare_enable(ctrlpriv->caam_aclk);
-       if (ret < 0) {
-               dev_err(&pdev->dev, "can't enable CAAM aclk clock: %d\n", ret);
-               goto disable_caam_mem;
-       }
-
-       if (ctrlpriv->caam_emi_slow) {
-               ret = clk_prepare_enable(ctrlpriv->caam_emi_slow);
-               if (ret < 0) {
-                       dev_err(&pdev->dev, "can't enable CAAM emi slow clock: 
%d\n",
-                               ret);
-                       goto disable_caam_aclk;
-               }
+       if (!of_machine_is_compatible("fsl,imx8mq")) {
+               ret = init_clocks(ctrlpriv);
+               if (ret)
+                       goto exit;
        }
 
        /* Get configuration properties from device tree */
@@ -596,7 +613,7 @@ static int caam_probe(struct platform_device *pdev)
        if (ctrl == NULL) {
                dev_err(dev, "caam: of_iomap() failed\n");
                ret = -ENOMEM;
-               goto disable_caam_emi_slow;
+               goto disable_clocks;
        }
 
        caam_little_end = !(bool)(rd_reg32(&ctrl->perfmon.status) &
@@ -894,16 +911,15 @@ static int caam_probe(struct platform_device *pdev)
 
 iounmap_ctrl:
        iounmap(ctrl);
-disable_caam_emi_slow:
-       if (ctrlpriv->caam_emi_slow)
+disable_clocks:
+       if (!of_machine_is_compatible("fsl,imx8mq")) {
                clk_disable_unprepare(ctrlpriv->caam_emi_slow);
-disable_caam_aclk:
-       clk_disable_unprepare(ctrlpriv->caam_aclk);
-disable_caam_mem:
-       if (ctrlpriv->caam_mem)
+               clk_disable_unprepare(ctrlpriv->caam_aclk);
                clk_disable_unprepare(ctrlpriv->caam_mem);
-disable_caam_ipg:
-       clk_disable_unprepare(ctrlpriv->caam_ipg);
+               clk_disable_unprepare(ctrlpriv->caam_ipg);
+       }
+
+exit:
        return ret;
 }
 
diff --git a/drivers/crypto/caam/intern.h b/drivers/crypto/caam/intern.h
index babc78abd155..a4baa6a3d2f1 100644
--- a/drivers/crypto/caam/intern.h
+++ b/drivers/crypto/caam/intern.h
@@ -68,6 +68,7 @@ struct caam_drv_private {
 #ifdef CONFIG_CAAM_QI
        struct device *qidev;
 #endif
+       struct device *dev;
 
        /* Physical-presence section */
        struct caam_ctrl __iomem *ctrl; /* controller region */
-- 
2.17.1

Reply via email to