diff options
Diffstat (limited to 'target/linux/layerscape/patches-5.4/804-crypto-0006-crypto-caam-use-devres-to-de-initialize-the-RNG.patch')
-rw-r--r-- | target/linux/layerscape/patches-5.4/804-crypto-0006-crypto-caam-use-devres-to-de-initialize-the-RNG.patch | 179 |
1 files changed, 0 insertions, 179 deletions
diff --git a/target/linux/layerscape/patches-5.4/804-crypto-0006-crypto-caam-use-devres-to-de-initialize-the-RNG.patch b/target/linux/layerscape/patches-5.4/804-crypto-0006-crypto-caam-use-devres-to-de-initialize-the-RNG.patch deleted file mode 100644 index 6e3cd24ac0..0000000000 --- a/target/linux/layerscape/patches-5.4/804-crypto-0006-crypto-caam-use-devres-to-de-initialize-the-RNG.patch +++ /dev/null @@ -1,179 +0,0 @@ -From 4719469bf1e6d5bac8bb0426be4dd6a124471b69 Mon Sep 17 00:00:00 2001 -From: Andrey Smirnov <andrew.smirnov@gmail.com> -Date: Tue, 22 Oct 2019 08:30:10 -0700 -Subject: [PATCH] crypto: caam - use devres to de-initialize the RNG -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Use devres to de-initialize the RNG and drop explicit de-initialization -code in caam_remove(). - -Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com> -Cc: Chris Healy <cphealy@gmail.com> -Cc: Lucas Stach <l.stach@pengutronix.de> -Cc: Horia Geantă <horia.geanta@nxp.com> -Cc: Herbert Xu <herbert@gondor.apana.org.au> -Cc: Iuliana Prodan <iuliana.prodan@nxp.com> -Cc: linux-crypto@vger.kernel.org -Cc: linux-kernel@vger.kernel.org -Reviewed-by: Horia Geantă <horia.geanta@nxp.com> -Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> -(cherry picked from commit e57acaf0dfe0c8f63411d43cf7c689e43f6810c0) ---- - drivers/crypto/caam/ctrl.c | 130 ++++++++++++++++++++++++--------------------- - 1 file changed, 70 insertions(+), 60 deletions(-) - ---- a/drivers/crypto/caam/ctrl.c -+++ b/drivers/crypto/caam/ctrl.c -@@ -176,6 +176,73 @@ static inline int run_descriptor_deco0(s - } - - /* -+ * deinstantiate_rng - builds and executes a descriptor on DECO0, -+ * which deinitializes the RNG block. -+ * @ctrldev - pointer to device -+ * @state_handle_mask - bitmask containing the instantiation status -+ * for the RNG4 state handles which exist in -+ * the RNG4 block: 1 if it's been instantiated -+ * -+ * Return: - 0 if no error occurred -+ * - -ENOMEM if there isn't enough memory to allocate the descriptor -+ * - -ENODEV if DECO0 couldn't be acquired -+ * - -EAGAIN if an error occurred when executing the descriptor -+ */ -+static int deinstantiate_rng(struct device *ctrldev, int state_handle_mask) -+{ -+ u32 *desc, status; -+ int sh_idx, ret = 0; -+ -+ desc = kmalloc(CAAM_CMD_SZ * 3, GFP_KERNEL); -+ if (!desc) -+ return -ENOMEM; -+ -+ for (sh_idx = 0; sh_idx < RNG4_MAX_HANDLES; sh_idx++) { -+ /* -+ * If the corresponding bit is set, then it means the state -+ * handle was initialized by us, and thus it needs to be -+ * deinitialized as well -+ */ -+ if ((1 << sh_idx) & state_handle_mask) { -+ /* -+ * Create the descriptor for deinstantating this state -+ * handle -+ */ -+ build_deinstantiation_desc(desc, sh_idx); -+ -+ /* Try to run it through DECO0 */ -+ ret = run_descriptor_deco0(ctrldev, desc, &status); -+ -+ if (ret || -+ (status && status != JRSTA_SSRC_JUMP_HALT_CC)) { -+ dev_err(ctrldev, -+ "Failed to deinstantiate RNG4 SH%d\n", -+ sh_idx); -+ break; -+ } -+ dev_info(ctrldev, "Deinstantiated RNG4 SH%d\n", sh_idx); -+ } -+ } -+ -+ kfree(desc); -+ -+ return ret; -+} -+ -+static void devm_deinstantiate_rng(void *data) -+{ -+ struct device *ctrldev = data; -+ struct caam_drv_private *ctrlpriv = dev_get_drvdata(ctrldev); -+ -+ /* -+ * De-initialize RNG state handles initialized by this driver. -+ * In case of SoCs with Management Complex, RNG is managed by MC f/w. -+ */ -+ if (ctrlpriv->rng4_sh_init) -+ deinstantiate_rng(ctrldev, ctrlpriv->rng4_sh_init); -+} -+ -+/* - * instantiate_rng - builds and executes a descriptor on DECO0, - * which initializes the RNG block. - * @ctrldev - pointer to device -@@ -247,59 +314,9 @@ static int instantiate_rng(struct device - - kfree(desc); - -- return ret; --} -- --/* -- * deinstantiate_rng - builds and executes a descriptor on DECO0, -- * which deinitializes the RNG block. -- * @ctrldev - pointer to device -- * @state_handle_mask - bitmask containing the instantiation status -- * for the RNG4 state handles which exist in -- * the RNG4 block: 1 if it's been instantiated -- * -- * Return: - 0 if no error occurred -- * - -ENOMEM if there isn't enough memory to allocate the descriptor -- * - -ENODEV if DECO0 couldn't be acquired -- * - -EAGAIN if an error occurred when executing the descriptor -- */ --static int deinstantiate_rng(struct device *ctrldev, int state_handle_mask) --{ -- u32 *desc, status; -- int sh_idx, ret = 0; -- -- desc = kmalloc(CAAM_CMD_SZ * 3, GFP_KERNEL); -- if (!desc) -- return -ENOMEM; -- -- for (sh_idx = 0; sh_idx < RNG4_MAX_HANDLES; sh_idx++) { -- /* -- * If the corresponding bit is set, then it means the state -- * handle was initialized by us, and thus it needs to be -- * deinitialized as well -- */ -- if ((1 << sh_idx) & state_handle_mask) { -- /* -- * Create the descriptor for deinstantating this state -- * handle -- */ -- build_deinstantiation_desc(desc, sh_idx); -- -- /* Try to run it through DECO0 */ -- ret = run_descriptor_deco0(ctrldev, desc, &status); -- -- if (ret || -- (status && status != JRSTA_SSRC_JUMP_HALT_CC)) { -- dev_err(ctrldev, -- "Failed to deinstantiate RNG4 SH%d\n", -- sh_idx); -- break; -- } -- dev_info(ctrldev, "Deinstantiated RNG4 SH%d\n", sh_idx); -- } -- } -- -- kfree(desc); -+ if (!ret) -+ ret = devm_add_action_or_reset(ctrldev, devm_deinstantiate_rng, -+ ctrldev); - - return ret; - } -@@ -320,13 +337,6 @@ static int caam_remove(struct platform_d - caam_qi_shutdown(ctrldev); - #endif - -- /* -- * De-initialize RNG state handles initialized by this driver. -- * In case of SoCs with Management Complex, RNG is managed by MC f/w. -- */ -- if (!ctrlpriv->mc_en && ctrlpriv->rng4_sh_init) -- deinstantiate_rng(ctrldev, ctrlpriv->rng4_sh_init); -- - return 0; - } - |