diff mbox series

crypto: caam - limit AXI pipeline to a depth of 1

Message ID 1553261968-5766-1-git-send-email-iuliana.prodan@nxp.com (mailing list archive)
State Accepted
Delegated to: Herbert Xu
Headers show
Series crypto: caam - limit AXI pipeline to a depth of 1 | expand

Commit Message

Iuliana Prodan March 22, 2019, 1:39 p.m. UTC
Some i.MX6 devices (imx6D, imx6Q, imx6DL, imx6S, imx6DP and imx6DQ) have
an issue wherein AXI bus transactions may not occur in the correct order.
This isn't a problem running single descriptors, but can be if running
multiple concurrent descriptors. Reworking the CAAM driver to throttle
to single requests is impractical, so this patch limits the AXI pipeline
to a depth of one (from a default of 4) to preclude this situation from
occurring.
This patch applies to known affected platforms.

Signed-off-by: Radu Solea <radu.solea@nxp.com>
Signed-off-by: Iuliana Prodan <iuliana.prodan@nxp.com>
---
 drivers/crypto/caam/ctrl.c | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

Comments

Horia Geanta March 22, 2019, 1:49 p.m. UTC | #1
On 3/22/2019 3:39 PM, Iuliana Prodan wrote:
> Some i.MX6 devices (imx6D, imx6Q, imx6DL, imx6S, imx6DP and imx6DQ) have
> an issue wherein AXI bus transactions may not occur in the correct order.
> This isn't a problem running single descriptors, but can be if running
> multiple concurrent descriptors. Reworking the CAAM driver to throttle
> to single requests is impractical, so this patch limits the AXI pipeline
> to a depth of one (from a default of 4) to preclude this situation from
> occurring.
> This patch applies to known affected platforms.
> 
> Signed-off-by: Radu Solea <radu.solea@nxp.com>
> Signed-off-by: Iuliana Prodan <iuliana.prodan@nxp.com>
Reviewed-by: Horia Geantă <horia.geanta@nxp.com>

Thanks,
Horia
Herbert Xu March 28, 2019, 6:08 a.m. UTC | #2
On Fri, Mar 22, 2019 at 03:39:28PM +0200, Iuliana Prodan wrote:
> Some i.MX6 devices (imx6D, imx6Q, imx6DL, imx6S, imx6DP and imx6DQ) have
> an issue wherein AXI bus transactions may not occur in the correct order.
> This isn't a problem running single descriptors, but can be if running
> multiple concurrent descriptors. Reworking the CAAM driver to throttle
> to single requests is impractical, so this patch limits the AXI pipeline
> to a depth of one (from a default of 4) to preclude this situation from
> occurring.
> This patch applies to known affected platforms.
> 
> Signed-off-by: Radu Solea <radu.solea@nxp.com>
> Signed-off-by: Iuliana Prodan <iuliana.prodan@nxp.com>
> ---
>  drivers/crypto/caam/ctrl.c | 20 ++++++++++++++++++++
>  1 file changed, 20 insertions(+)

Patch applied.  Thanks.
Email: Herbert Xu <herbert@gondor.apana.org.au>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
diff mbox series

Patch

diff --git a/drivers/crypto/caam/ctrl.c b/drivers/crypto/caam/ctrl.c
index 858bdc9..e2ba3d2 100644
--- a/drivers/crypto/caam/ctrl.c
+++ b/drivers/crypto/caam/ctrl.c
@@ -468,6 +468,24 @@  static int caam_get_era(struct caam_ctrl __iomem *ctrl)
 		return caam_get_era_from_hw(ctrl);
 }
 
+/*
+ * ERRATA: imx6 devices (imx6D, imx6Q, imx6DL, imx6S, imx6DP and imx6DQ)
+ * have an issue wherein AXI bus transactions may not occur in the correct
+ * order. This isn't a problem running single descriptors, but can be if
+ * running multiple concurrent descriptors. Reworking the driver to throttle
+ * to single requests is impractical, thus the workaround is to limit the AXI
+ * pipeline to a depth of 1 (from it's default of 4) to preclude this situation
+ * from occurring.
+ */
+static void handle_imx6_err005766(u32 *mcr)
+{
+	if (of_machine_is_compatible("fsl,imx6q") ||
+	    of_machine_is_compatible("fsl,imx6dl") ||
+	    of_machine_is_compatible("fsl,imx6qp"))
+		clrsetbits_32(mcr, MCFGR_AXIPIPE_MASK,
+			      1 << MCFGR_AXIPIPE_SHIFT);
+}
+
 static const struct of_device_id caam_match[] = {
 	{
 		.compatible = "fsl,sec-v4.0",
@@ -640,6 +658,8 @@  static int caam_probe(struct platform_device *pdev)
 			      (sizeof(dma_addr_t) == sizeof(u64) ?
 			       MCFGR_LONG_PTR : 0));
 
+	handle_imx6_err005766(&ctrl->mcr);
+
 	/*
 	 *  Read the Compile Time paramters and SCFGR to determine
 	 * if Virtualization is enabled for this platform