On 4/20/2022 9:38 AM, Meenakshi Aggarwal wrote: > +static void caam_prng_done(struct device *jrdev, u32 *desc, u32 err, > + void *context) > +{ > + struct caam_prng_ctx *jctx = context; > + > + if (err >> JRSTA_SSRC_SHIFT) > + jctx->err = caam_jr_strstatus(jrdev, err); The details of error handling are in error.c, let's keep this abstraction. > + else > + jctx->err = 0; > + > + complete(&jctx->done); > +} > + [...] > +static int caam_prng_seed(struct crypto_rng *tfm, > + const u8 *seed, unsigned int slen) > +{ > + struct caam_prng_ctx ctx; > + struct device *jrdev; > + dma_addr_t seed_dma; > + u32 *desc; > + u8 *buf; > + int ret = 0; > + > + if (seed == NULL) { > + pr_err("Seed not provided\n"); > + return ret; > + } > + > + buf = kzalloc(slen, GFP_KERNEL); > + if (!buf) > + return -ENOMEM; > + > + jrdev = caam_jr_alloc(); > + ret = PTR_ERR_OR_ZERO(jrdev); > + if (ret) { > + pr_err("Job Ring Device allocation failed\n"); > + kfree(buf); > + return ret; > + } > + > + desc = kzalloc(CAAM_PRNG_DESC_LEN, GFP_KERNEL | GFP_DMA); > + if (!desc) { > + ret = -ENOMEM; > + goto out1; > + } > + > + memcpy(buf, seed, slen); > + > + seed_dma = dma_map_single(jrdev, buf, slen, DMA_FROM_DEVICE); Now that seedsize is 0, the .seed callback is called with slen = 0. Reseed descriptor should be updated too. Horia