It is possible, that caam_jr_alloc() is called before JR devices are
probed. Return -EPROBE_DEFER in drivers that rely on JR devices, so
they are probed at later stage.

Signed-off-by: Marcin Niestroj <m.niest...@grinn-global.com>
---
 drivers/crypto/caam/caamalg.c    | 3 +++
 drivers/crypto/caam/caamalg_qi.c | 3 +++
 drivers/crypto/caam/caamhash.c   | 3 +++
 drivers/crypto/caam/caampkc.c    | 3 +++
 drivers/crypto/caam/caamrng.c    | 3 +++
 5 files changed, 15 insertions(+)

diff --git a/drivers/crypto/caam/caamalg.c b/drivers/crypto/caam/caamalg.c
index d67667970f7e..610a3f72ac5d 100644
--- a/drivers/crypto/caam/caamalg.c
+++ b/drivers/crypto/caam/caamalg.c
@@ -3253,6 +3253,9 @@ static int caam_init_common(struct caam_ctx *ctx, struct 
caam_alg_entry *caam,
 
        ctx->jrdev = caam_jr_alloc();
        if (IS_ERR(ctx->jrdev)) {
+               if (PTR_ERR(ctx->jrdev))
+                       return -EPROBE_DEFER;
+
                pr_err("Job Ring Device allocation for transform failed\n");
                return PTR_ERR(ctx->jrdev);
        }
diff --git a/drivers/crypto/caam/caamalg_qi.c b/drivers/crypto/caam/caamalg_qi.c
index 6e61cc93c2b0..85c69a8b5126 100644
--- a/drivers/crypto/caam/caamalg_qi.c
+++ b/drivers/crypto/caam/caamalg_qi.c
@@ -2547,6 +2547,9 @@ static int caam_init_common(struct caam_ctx *ctx, struct 
caam_alg_entry *caam,
         */
        ctx->jrdev = caam_jr_alloc();
        if (IS_ERR(ctx->jrdev)) {
+               if (PTR_ERR(ctx->jrdev))
+                       return -EPROBE_DEFER;
+
                pr_err("Job Ring Device allocation for transform failed\n");
                return PTR_ERR(ctx->jrdev);
        }
diff --git a/drivers/crypto/caam/caamhash.c b/drivers/crypto/caam/caamhash.c
index 0beb28196e20..c2ccb802b7d5 100644
--- a/drivers/crypto/caam/caamhash.c
+++ b/drivers/crypto/caam/caamhash.c
@@ -1746,6 +1746,9 @@ static int caam_hash_cra_init(struct crypto_tfm *tfm)
         */
        ctx->jrdev = caam_jr_alloc();
        if (IS_ERR(ctx->jrdev)) {
+               if (PTR_ERR(ctx->jrdev))
+                       return -EPROBE_DEFER;
+
                pr_err("Job Ring Device allocation for transform failed\n");
                return PTR_ERR(ctx->jrdev);
        }
diff --git a/drivers/crypto/caam/caampkc.c b/drivers/crypto/caam/caampkc.c
index 578ea63a3109..072da03207a1 100644
--- a/drivers/crypto/caam/caampkc.c
+++ b/drivers/crypto/caam/caampkc.c
@@ -972,6 +972,9 @@ static int caam_rsa_init_tfm(struct crypto_akcipher *tfm)
        ctx->dev = caam_jr_alloc();
 
        if (IS_ERR(ctx->dev)) {
+               if (PTR_ERR(ctx->dev))
+                       return -EPROBE_DEFER;
+
                pr_err("Job Ring Device allocation for transform failed\n");
                return PTR_ERR(ctx->dev);
        }
diff --git a/drivers/crypto/caam/caamrng.c b/drivers/crypto/caam/caamrng.c
index fde07d4ff019..56616b94416b 100644
--- a/drivers/crypto/caam/caamrng.c
+++ b/drivers/crypto/caam/caamrng.c
@@ -340,6 +340,9 @@ static int __init caam_rng_init(void)
 
        dev = caam_jr_alloc();
        if (IS_ERR(dev)) {
+               if (PTR_ERR(dev))
+                       return -EPROBE_DEFER;
+
                pr_err("Job Ring Device allocation for transform failed\n");
                return PTR_ERR(dev);
        }
-- 
2.18.0

Reply via email to