From e2c0487aff8b513b172c9022b2163e386118e411 Mon Sep 17 00:00:00 2001 From: Silvano di Ninno Date: Fri, 16 Mar 2018 14:48:10 +0100 Subject: 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 --- drivers/crypto/caam/ctrl.c | 19 +++++++++++++++++-- drivers/crypto/caam/intern.h | 1 + drivers/crypto/caam/sm_store.c | 4 ++-- 3 files changed, 20 insertions(+), 4 deletions(-) (limited to 'drivers/crypto') 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++; -- cgit v1.2.3