mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-27 17:18:59 +00:00
cddd459140
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>
180 lines
5.2 KiB
Diff
180 lines
5.2 KiB
Diff
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;
|
|
}
|
|
|