LF-3705-1: caam: imx8m: fix the built-in caam driver cannot match soc_id
authorAlice Guo <alice.guo@nxp.com>
Thu, 29 Apr 2021 05:48:03 +0000 (13:48 +0800)
committerAlice Guo <alice.guo@nxp.com>
Thu, 29 Apr 2021 10:59:57 +0000 (18:59 +0800)
drivers/soc/imx/soc-imx8m.c is probed later than the caam driver so that
return -EPROBE_DEFER is needed after calling soc_device_match() in
drivers/crypto/caam/ctrl.c. For i.MX8M, soc_device_match returning NULL
can be considered that the SoC device has not been probed yet, so it
returns -EPROBE_DEFER directly.

Fixes: 6375d33dce9a ("soc: imx8m: change to use platform driver")
Signed-off-by: Alice Guo <alice.guo@nxp.com>
Reviewed-by: Horia Geantă <horia.geanta@nxp.com>
drivers/crypto/caam/ctrl.c

index fff36be..2202b49 100644 (file)
@@ -81,6 +81,14 @@ static void build_deinstantiation_desc(u32 *desc, int handle)
        append_jump(desc, JUMP_CLASS_CLASS1 | JUMP_TYPE_HALT);
 }
 
+static const struct of_device_id imx8m_machine_match[] = {
+       { .compatible = "fsl,imx8mm", },
+       { .compatible = "fsl,imx8mn", },
+       { .compatible = "fsl,imx8mp", },
+       { .compatible = "fsl,imx8mq", },
+       { }
+};
+
 /*
  * run_descriptor_deco0 - runs a descriptor on DECO0, under direct control of
  *                       the software (no JR/QI used).
@@ -862,6 +870,9 @@ static int caam_probe(struct platform_device *pdev)
        nprop = pdev->dev.of_node;
 
        imx_soc_match = soc_device_match(caam_imx_soc_table);
+       if (!imx_soc_match && of_match_node(imx8m_machine_match, of_root))
+               return -EPROBE_DEFER;
+
        caam_imx = (bool)imx_soc_match;
 
 #ifdef CONFIG_PM_SLEEP