crypto: caam - fix RNG init descriptor ret. code checking
authorHoria Geant? <horia.geanta@freescale.com>
Fri, 17 Jul 2015 13:54:53 +0000 (16:54 +0300)
committerHerbert Xu <herbert@gondor.apana.org.au>
Mon, 20 Jul 2015 07:53:42 +0000 (15:53 +0800)
When successful, the descriptor that performs RNG initialization
is allowed to return a status code of 7000_0000h, since last command
in the descriptor is a JUMP HALT.

Signed-off-by: Horia Geant? <horia.geanta@freescale.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
drivers/crypto/caam/ctrl.c

index b924477c0d83fedf45e8e0ba0cd0eb9507603360..189180976167abbf7f24235b0c77b9cc36d9b274 100644 (file)
@@ -175,7 +175,7 @@ static int instantiate_rng(struct device *ctrldev, int state_handle_mask,
 {
        struct caam_drv_private *ctrlpriv = dev_get_drvdata(ctrldev);
        struct caam_ctrl __iomem *ctrl;
-       u32 *desc, status, rdsta_val;
+       u32 *desc, status = 0, rdsta_val;
        int ret = 0, sh_idx;
 
        ctrl = (struct caam_ctrl __iomem *)ctrlpriv->ctrl;
@@ -207,7 +207,8 @@ static int instantiate_rng(struct device *ctrldev, int state_handle_mask,
                 * CAAM eras), then try again.
                 */
                rdsta_val = rd_reg32(&ctrl->r4tst[0].rdsta) & RDSTA_IFMASK;
-               if (status || !(rdsta_val & (1 << sh_idx)))
+               if ((status && status != JRSTA_SSRC_JUMP_HALT_CC) ||
+                   !(rdsta_val & (1 << sh_idx)))
                        ret = -EAGAIN;
                if (ret)
                        break;