From 0547020c73ab7a457f3e1601ef822b61f0b963b9 Mon Sep 17 00:00:00 2001 From: Radu Alexe Date: Wed, 8 Nov 2017 17:22:12 +0200 Subject: [PATCH] crypto: caam - add caam_dma device on caam_probe MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Dynamically create a platform device for the caam_dma driver at caam_probe() time. Signed-off-by: Radu Alexe Signed-off-by: Horia Geantă Use devres for caam_dma platform device unregistering. Signed-off-by: Horia Geantă --- drivers/crypto/caam/ctrl.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) --- a/drivers/crypto/caam/ctrl.c +++ b/drivers/crypto/caam/ctrl.c @@ -566,12 +566,22 @@ static void caam_remove_debugfs(void *ro } #endif +static void caam_dma_dev_unregister(void *data) +{ + platform_device_unregister(data); +} + /* Probe routine for CAAM top (controller) level */ static int caam_probe(struct platform_device *pdev) { int ret, ring, gen_sk, ent_delay = RTSDCTL_ENT_DLY_MIN; u64 caam_id; const struct soc_device_attribute *imx_soc_match; + static struct platform_device_info caam_dma_pdev_info = { + .name = "caam-dma", + .id = PLATFORM_DEVID_NONE + }; + static struct platform_device *caam_dma_dev; struct device *dev; struct device_node *nprop, *np; struct resource res_regs; @@ -849,6 +859,20 @@ set_dma_mask: return -ENOMEM; } + caam_dma_pdev_info.parent = dev; + caam_dma_pdev_info.dma_mask = dma_get_mask(dev); + caam_dma_dev = platform_device_register_full(&caam_dma_pdev_info); + if (IS_ERR(caam_dma_dev)) { + dev_err(dev, "Unable to create and register caam-dma dev\n"); + return PTR_ERR(caam_dma_dev); + } else { + set_dma_ops(&caam_dma_dev->dev, get_dma_ops(dev)); + ret = devm_add_action_or_reset(dev, caam_dma_dev_unregister, + caam_dma_dev); + if (ret) + return ret; + } + if (!reg_access) goto report_live;