ASR_BASE

Change-Id: Icf3719cc0afe3eeb3edc7fa80a2eb5199ca9dda1
diff --git a/target/linux/layerscape/patches-5.4/804-crypto-0007-crypto-caam-use-devres-to-de-initialize-QI.patch b/target/linux/layerscape/patches-5.4/804-crypto-0007-crypto-caam-use-devres-to-de-initialize-QI.patch
new file mode 100644
index 0000000..f9e7940
--- /dev/null
+++ b/target/linux/layerscape/patches-5.4/804-crypto-0007-crypto-caam-use-devres-to-de-initialize-QI.patch
@@ -0,0 +1,114 @@
+From 5a359d189f9938d30046aedfc94c9cd7fe383e34 Mon Sep 17 00:00:00 2001
+From: Andrey Smirnov <andrew.smirnov@gmail.com>
+Date: Tue, 22 Oct 2019 08:30:11 -0700
+Subject: [PATCH] crypto: caam - use devres to de-initialize QI
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Use devres to de-initialize the QI and drop explicit de-initialization
+code in caam_remove().
+
+Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com>
+Reviewed-by: Horia Geantă <horia.geanta@nxp.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
+Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
+(cherry picked from commit f414de2e2fffd89c8a4e5b5e06b0eba5f9d8b1eb)
+---
+ drivers/crypto/caam/ctrl.c   | 14 +-------------
+ drivers/crypto/caam/intern.h |  3 ---
+ drivers/crypto/caam/qi.c     |  8 ++++++--
+ drivers/crypto/caam/qi.h     |  1 -
+ 4 files changed, 7 insertions(+), 19 deletions(-)
+
+--- a/drivers/crypto/caam/ctrl.c
++++ b/drivers/crypto/caam/ctrl.c
+@@ -332,11 +332,6 @@ static int caam_remove(struct platform_d
+ 	/* Remove platform devices under the crypto node */
+ 	of_platform_depopulate(ctrldev);
+ 
+-#ifdef CONFIG_CAAM_QI
+-	if (ctrlpriv->qi_init)
+-		caam_qi_shutdown(ctrldev);
+-#endif
+-
+ 	return 0;
+ }
+ 
+@@ -767,7 +762,7 @@ static int caam_probe(struct platform_de
+ 	ret = of_platform_populate(nprop, caam_match, NULL, dev);
+ 	if (ret) {
+ 		dev_err(dev, "JR platform devices creation error\n");
+-		goto shutdown_qi;
++		return ret;
+ 	}
+ 
+ 	ring = 0;
+@@ -928,13 +923,6 @@ static int caam_probe(struct platform_de
+ caam_remove:
+ 	caam_remove(pdev);
+ 	return ret;
+-
+-shutdown_qi:
+-#ifdef CONFIG_CAAM_QI
+-	if (ctrlpriv->qi_init)
+-		caam_qi_shutdown(dev);
+-#endif
+-	return ret;
+ }
+ 
+ static struct platform_driver caam_driver = {
+--- a/drivers/crypto/caam/intern.h
++++ b/drivers/crypto/caam/intern.h
+@@ -81,9 +81,6 @@ struct caam_drv_private {
+ 	 */
+ 	u8 total_jobrs;		/* Total Job Rings in device */
+ 	u8 qi_present;		/* Nonzero if QI present in device */
+-#ifdef CONFIG_CAAM_QI
+-	u8 qi_init;		/* Nonzero if QI has been initialized */
+-#endif
+ 	u8 mc_en;		/* Nonzero if MC f/w is active */
+ 	int secvio_irq;		/* Security violation interrupt number */
+ 	int virt_en;		/* Virtualization enabled in CAAM */
+--- a/drivers/crypto/caam/qi.c
++++ b/drivers/crypto/caam/qi.c
+@@ -500,9 +500,10 @@ void caam_drv_ctx_rel(struct caam_drv_ct
+ }
+ EXPORT_SYMBOL(caam_drv_ctx_rel);
+ 
+-void caam_qi_shutdown(struct device *qidev)
++static void caam_qi_shutdown(void *data)
+ {
+ 	int i;
++	struct device *qidev = data;
+ 	struct caam_qi_priv *priv = &qipriv;
+ 	const cpumask_t *cpus = qman_affine_cpus();
+ 
+@@ -761,7 +762,10 @@ int caam_qi_init(struct platform_device
+ 			    &times_congested, &caam_fops_u64_ro);
+ #endif
+ 
+-	ctrlpriv->qi_init = 1;
++	err = devm_add_action_or_reset(qidev, caam_qi_shutdown, ctrlpriv);
++	if (err)
++		return err;
++
+ 	dev_info(qidev, "Linux CAAM Queue I/F driver initialised\n");
+ 	return 0;
+ }
+--- a/drivers/crypto/caam/qi.h
++++ b/drivers/crypto/caam/qi.h
+@@ -147,7 +147,6 @@ int caam_drv_ctx_update(struct caam_drv_
+ void caam_drv_ctx_rel(struct caam_drv_ctx *drv_ctx);
+ 
+ int caam_qi_init(struct platform_device *pdev);
+-void caam_qi_shutdown(struct device *dev);
+ 
+ /**
+  * qi_cache_alloc - Allocate buffers from CAAM-QI cache