diff options
author | Yangbo Lu <yangbo.lu@nxp.com> | 2020-04-10 10:47:05 +0800 |
---|---|---|
committer | Petr Štetiar <ynezz@true.cz> | 2020-05-07 12:53:06 +0200 |
commit | cddd4591404fb4c53dc0b3c0b15b942cdbed4356 (patch) | |
tree | 392c1179de46b0f804e3789edca19069b64e6b44 /target/linux/layerscape/patches-5.4/804-crypto-0006-crypto-caam-use-devres-to-de-initialize-the-RNG.patch | |
parent | d1d2c0b5579ea4f69a42246c9318539d61ba1999 (diff) | |
download | upstream-cddd4591404fb4c53dc0b3c0b15b942cdbed4356.tar.gz upstream-cddd4591404fb4c53dc0b3c0b15b942cdbed4356.tar.bz2 upstream-cddd4591404fb4c53dc0b3c0b15b942cdbed4356.zip |
layerscape: add patches-5.4
Add patches for linux-5.4. The patches are from NXP LSDK-20.04 release
which was tagged LSDK-20.04-V5.4.
https://source.codeaurora.org/external/qoriq/qoriq-components/linux/
For boards LS1021A-IOT, and Traverse-LS1043 which are not involved in
LSDK, port the dts patches from 4.14.
The patches are sorted into the following categories:
301-arch-xxxx
302-dts-xxxx
303-core-xxxx
701-net-xxxx
801-audio-xxxx
802-can-xxxx
803-clock-xxxx
804-crypto-xxxx
805-display-xxxx
806-dma-xxxx
807-gpio-xxxx
808-i2c-xxxx
809-jailhouse-xxxx
810-keys-xxxx
811-kvm-xxxx
812-pcie-xxxx
813-pm-xxxx
814-qe-xxxx
815-sata-xxxx
816-sdhc-xxxx
817-spi-xxxx
818-thermal-xxxx
819-uart-xxxx
820-usb-xxxx
821-vfio-xxxx
Signed-off-by: Yangbo Lu <yangbo.lu@nxp.com>
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, 179 insertions, 0 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 new file mode 100644 index 0000000000..6e3cd24ac0 --- /dev/null +++ b/target/linux/layerscape/patches-5.4/804-crypto-0006-crypto-caam-use-devres-to-de-initialize-the-RNG.patch @@ -0,0 +1,179 @@ +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; + } + |