MLK-17674-2: CAAM SM : get base address from device tree
authorSilvano di Ninno <silvano.dininno@nxp.com>
Fri, 16 Mar 2018 13:48:10 +0000 (14:48 +0100)
committerNitin Garg <nitin.garg@nxp.com>
Tue, 20 Mar 2018 19:57:00 +0000 (14:57 -0500)
Remove hard coded value for base physical address.
Use device tree to get this value.

i.MX8 with seco is still not address since CAAM uses a private bus
to access secure memory

Signed-off-by: Silvano di Ninno <silvano.dininno@nxp.com>
drivers/crypto/caam/ctrl.c
drivers/crypto/caam/intern.h
drivers/crypto/caam/sm_store.c

index fb1f919..cff830b 100644 (file)
@@ -578,6 +578,7 @@ static int caam_probe(struct platform_device *pdev)
        u64 caam_id;
        struct device *dev;
        struct device_node *nprop, *np;
+       struct resource res_regs;
        struct caam_ctrl __iomem *ctrl;
        struct caam_drv_private *ctrlpriv;
        u32 comp_params;
@@ -652,11 +653,25 @@ static int caam_probe(struct platform_device *pdev)
                goto disable_clocks;
        }
 
-       ctrlpriv->sm_base = of_iomap(np, 0);
+       /* Get CAAM SM registers base address from device tree */
+       ret = of_address_to_resource(np, 0, &res_regs);
+       if (ret) {
+               dev_err(dev, "failed to retrieve registers base from device tree\n");
+               ret = -ENODEV;
+               goto disable_clocks;
+       }
+
+       ctrlpriv->sm_phy = res_regs.start;
+       ctrlpriv->sm_base = devm_ioremap_resource(dev, &res_regs);
+       if (IS_ERR(ctrlpriv->sm_base)) {
+               ret = PTR_ERR(ctrlpriv->sm_base);
+               goto disable_clocks;
+       }
+
        if (!of_machine_is_compatible("fsl,imx8mq") &&
             !of_machine_is_compatible("fsl,imx8qm") &&
             !of_machine_is_compatible("fsl,imx8qxp"))
-               ctrlpriv->sm_size = 0x3fff;
+               ctrlpriv->sm_size = resource_size(&res_regs);
        else
            ctrlpriv->sm_size = PG_SIZE_64K;
 
index a2b3422..81d9bbf 100644 (file)
@@ -91,6 +91,7 @@ struct caam_drv_private {
        /* JobR's register space */
        struct caam_job_ring __iomem *jr[JOBR_MAX_COUNT];
        dma_addr_t __iomem *sm_base;    /* Secure memory storage base */
+       phys_addr_t sm_phy;             /* Secure memory storage physical */
        u32 sm_size;
 
        /*
index 207ca27..ed857a2 100644 (file)
@@ -1121,8 +1121,8 @@ int caam_sm_startup(struct platform_device *pdev)
                                lpagedesc[page].pg_phys = (u8 *)0x20800000 +
                                        (smpriv->page_size * page);
                        } else {
-/* FIXME: get base address from platform property... */
-                               lpagedesc[page].pg_phys = (u8 *)0x00100000 +
+                               lpagedesc[page].pg_phys =
+                                       (u8 *) ctrlpriv->sm_phy +
                                        (smpriv->page_size * page);
                        }
                        lpagect++;