summaryrefslogtreecommitdiff
path: root/drivers/crypto
diff options
context:
space:
mode:
authorSilvano di Ninno <silvano.dininno@nxp.com>2018-03-16 14:48:10 +0100
committerLeonard Crestez <leonard.crestez@nxp.com>2018-08-24 12:41:33 +0300
commite2c0487aff8b513b172c9022b2163e386118e411 (patch)
tree1fa664e7019a73553cbeec07e3d96955bd125b4a /drivers/crypto
parentaaa0cae5dd7be3e8e1fc21b4015fbfa0123c0068 (diff)
MLK-17674-2: CAAM SM : get base address from device tree
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>
Diffstat (limited to 'drivers/crypto')
-rw-r--r--drivers/crypto/caam/ctrl.c19
-rw-r--r--drivers/crypto/caam/intern.h1
-rw-r--r--drivers/crypto/caam/sm_store.c4
3 files changed, 20 insertions, 4 deletions
diff --git a/drivers/crypto/caam/ctrl.c b/drivers/crypto/caam/ctrl.c
index fb1f919295ca..cff830bcd05c 100644
--- a/drivers/crypto/caam/ctrl.c
+++ b/drivers/crypto/caam/ctrl.c
@@ -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;
diff --git a/drivers/crypto/caam/intern.h b/drivers/crypto/caam/intern.h
index a2b34220966c..81d9bbf53a5c 100644
--- a/drivers/crypto/caam/intern.h
+++ b/drivers/crypto/caam/intern.h
@@ -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;
/*
diff --git a/drivers/crypto/caam/sm_store.c b/drivers/crypto/caam/sm_store.c
index 207ca272ddc1..ed857a2fa89e 100644
--- a/drivers/crypto/caam/sm_store.c
+++ b/drivers/crypto/caam/sm_store.c
@@ -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++;