{
        struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req);
        struct rk_cipher_ctx *ctx = crypto_skcipher_ctx(tfm);
+       struct rk_cipher_rctx *rctx = skcipher_request_ctx(req);
        struct rk_crypto_info *dev = ctx->dev;
 
-       ctx->mode = RK_CRYPTO_AES_ECB_MODE;
+       rctx->mode = RK_CRYPTO_AES_ECB_MODE;
        return rk_handle_req(dev, req);
 }
 
 {
        struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req);
        struct rk_cipher_ctx *ctx = crypto_skcipher_ctx(tfm);
+       struct rk_cipher_rctx *rctx = skcipher_request_ctx(req);
        struct rk_crypto_info *dev = ctx->dev;
 
-       ctx->mode = RK_CRYPTO_AES_ECB_MODE | RK_CRYPTO_DEC;
+       rctx->mode = RK_CRYPTO_AES_ECB_MODE | RK_CRYPTO_DEC;
        return rk_handle_req(dev, req);
 }
 
 {
        struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req);
        struct rk_cipher_ctx *ctx = crypto_skcipher_ctx(tfm);
+       struct rk_cipher_rctx *rctx = skcipher_request_ctx(req);
        struct rk_crypto_info *dev = ctx->dev;
 
-       ctx->mode = RK_CRYPTO_AES_CBC_MODE;
+       rctx->mode = RK_CRYPTO_AES_CBC_MODE;
        return rk_handle_req(dev, req);
 }
 
 {
        struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req);
        struct rk_cipher_ctx *ctx = crypto_skcipher_ctx(tfm);
+       struct rk_cipher_rctx *rctx = skcipher_request_ctx(req);
        struct rk_crypto_info *dev = ctx->dev;
 
-       ctx->mode = RK_CRYPTO_AES_CBC_MODE | RK_CRYPTO_DEC;
+       rctx->mode = RK_CRYPTO_AES_CBC_MODE | RK_CRYPTO_DEC;
        return rk_handle_req(dev, req);
 }
 
 {
        struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req);
        struct rk_cipher_ctx *ctx = crypto_skcipher_ctx(tfm);
+       struct rk_cipher_rctx *rctx = skcipher_request_ctx(req);
        struct rk_crypto_info *dev = ctx->dev;
 
-       ctx->mode = 0;
+       rctx->mode = 0;
        return rk_handle_req(dev, req);
 }
 
 {
        struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req);
        struct rk_cipher_ctx *ctx = crypto_skcipher_ctx(tfm);
+       struct rk_cipher_rctx *rctx = skcipher_request_ctx(req);
        struct rk_crypto_info *dev = ctx->dev;
 
-       ctx->mode = RK_CRYPTO_DEC;
+       rctx->mode = RK_CRYPTO_DEC;
        return rk_handle_req(dev, req);
 }
 
 {
        struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req);
        struct rk_cipher_ctx *ctx = crypto_skcipher_ctx(tfm);
+       struct rk_cipher_rctx *rctx = skcipher_request_ctx(req);
        struct rk_crypto_info *dev = ctx->dev;
 
-       ctx->mode = RK_CRYPTO_TDES_CHAINMODE_CBC;
+       rctx->mode = RK_CRYPTO_TDES_CHAINMODE_CBC;
        return rk_handle_req(dev, req);
 }
 
 {
        struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req);
        struct rk_cipher_ctx *ctx = crypto_skcipher_ctx(tfm);
+       struct rk_cipher_rctx *rctx = skcipher_request_ctx(req);
        struct rk_crypto_info *dev = ctx->dev;
 
-       ctx->mode = RK_CRYPTO_TDES_CHAINMODE_CBC | RK_CRYPTO_DEC;
+       rctx->mode = RK_CRYPTO_TDES_CHAINMODE_CBC | RK_CRYPTO_DEC;
        return rk_handle_req(dev, req);
 }
 
 {
        struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req);
        struct rk_cipher_ctx *ctx = crypto_skcipher_ctx(tfm);
+       struct rk_cipher_rctx *rctx = skcipher_request_ctx(req);
        struct rk_crypto_info *dev = ctx->dev;
 
-       ctx->mode = RK_CRYPTO_TDES_SELECT;
+       rctx->mode = RK_CRYPTO_TDES_SELECT;
        return rk_handle_req(dev, req);
 }
 
 {
        struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req);
        struct rk_cipher_ctx *ctx = crypto_skcipher_ctx(tfm);
+       struct rk_cipher_rctx *rctx = skcipher_request_ctx(req);
        struct rk_crypto_info *dev = ctx->dev;
 
-       ctx->mode = RK_CRYPTO_TDES_SELECT | RK_CRYPTO_DEC;
+       rctx->mode = RK_CRYPTO_TDES_SELECT | RK_CRYPTO_DEC;
        return rk_handle_req(dev, req);
 }
 
 {
        struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req);
        struct rk_cipher_ctx *ctx = crypto_skcipher_ctx(tfm);
+       struct rk_cipher_rctx *rctx = skcipher_request_ctx(req);
        struct rk_crypto_info *dev = ctx->dev;
 
-       ctx->mode = RK_CRYPTO_TDES_SELECT | RK_CRYPTO_TDES_CHAINMODE_CBC;
+       rctx->mode = RK_CRYPTO_TDES_SELECT | RK_CRYPTO_TDES_CHAINMODE_CBC;
        return rk_handle_req(dev, req);
 }
 
 {
        struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req);
        struct rk_cipher_ctx *ctx = crypto_skcipher_ctx(tfm);
+       struct rk_cipher_rctx *rctx = skcipher_request_ctx(req);
        struct rk_crypto_info *dev = ctx->dev;
 
-       ctx->mode = RK_CRYPTO_TDES_SELECT | RK_CRYPTO_TDES_CHAINMODE_CBC |
+       rctx->mode = RK_CRYPTO_TDES_SELECT | RK_CRYPTO_TDES_CHAINMODE_CBC |
                    RK_CRYPTO_DEC;
        return rk_handle_req(dev, req);
 }
                skcipher_request_cast(dev->async_req);
        struct crypto_skcipher *cipher = crypto_skcipher_reqtfm(req);
        struct crypto_tfm *tfm = crypto_skcipher_tfm(cipher);
+       struct rk_cipher_rctx *rctx = skcipher_request_ctx(req);
        struct rk_cipher_ctx *ctx = crypto_skcipher_ctx(cipher);
        u32 ivsize, block, conf_reg = 0;
 
        ivsize = crypto_skcipher_ivsize(cipher);
 
        if (block == DES_BLOCK_SIZE) {
-               ctx->mode |= RK_CRYPTO_TDES_FIFO_MODE |
+               rctx->mode |= RK_CRYPTO_TDES_FIFO_MODE |
                             RK_CRYPTO_TDES_BYTESWAP_KEY |
                             RK_CRYPTO_TDES_BYTESWAP_IV;
-               CRYPTO_WRITE(dev, RK_CRYPTO_TDES_CTRL, ctx->mode);
+               CRYPTO_WRITE(dev, RK_CRYPTO_TDES_CTRL, rctx->mode);
                memcpy_toio(dev->reg + RK_CRYPTO_TDES_IV_0, req->iv, ivsize);
                conf_reg = RK_CRYPTO_DESSEL;
        } else {
-               ctx->mode |= RK_CRYPTO_AES_FIFO_MODE |
+               rctx->mode |= RK_CRYPTO_AES_FIFO_MODE |
                             RK_CRYPTO_AES_KEY_CHANGE |
                             RK_CRYPTO_AES_BYTESWAP_KEY |
                             RK_CRYPTO_AES_BYTESWAP_IV;
                if (ctx->keylen == AES_KEYSIZE_192)
-                       ctx->mode |= RK_CRYPTO_AES_192BIT_key;
+                       rctx->mode |= RK_CRYPTO_AES_192BIT_key;
                else if (ctx->keylen == AES_KEYSIZE_256)
-                       ctx->mode |= RK_CRYPTO_AES_256BIT_key;
-               CRYPTO_WRITE(dev, RK_CRYPTO_AES_CTRL, ctx->mode);
+                       rctx->mode |= RK_CRYPTO_AES_256BIT_key;
+               CRYPTO_WRITE(dev, RK_CRYPTO_AES_CTRL, rctx->mode);
                memcpy_toio(dev->reg + RK_CRYPTO_AES_IV_0, req->iv, ivsize);
        }
        conf_reg |= RK_CRYPTO_BYTESWAP_BTFIFO |
        struct skcipher_request *req =
                skcipher_request_cast(dev->async_req);
        struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req);
+       struct rk_cipher_rctx *rctx = skcipher_request_ctx(req);
        struct rk_cipher_ctx *ctx = crypto_skcipher_ctx(tfm);
        u32 ivsize = crypto_skcipher_ivsize(tfm);
        u8 *src_last_blk = page_address(sg_page(dev->sg_src)) +
        /* Store the iv that need to be updated in chain mode.
         * And update the IV buffer to contain the next IV for decryption mode.
         */
-       if (ctx->mode & RK_CRYPTO_DEC) {
+       if (rctx->mode & RK_CRYPTO_DEC) {
                memcpy(ctx->iv, src_last_blk, ivsize);
                sg_pcopy_to_buffer(dev->first, dev->src_nents, req->iv,
                                   ivsize, dev->total - ivsize);
        struct skcipher_request *req =
                skcipher_request_cast(dev->async_req);
        struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req);
+       struct rk_cipher_rctx *rctx = skcipher_request_ctx(req);
        struct rk_cipher_ctx *ctx = crypto_skcipher_ctx(tfm);
        u32 ivsize = crypto_skcipher_ivsize(tfm);
 
        /* Update the IV buffer to contain the next IV for encryption mode. */
-       if (!(ctx->mode & RK_CRYPTO_DEC)) {
+       if (!(rctx->mode & RK_CRYPTO_DEC)) {
                if (dev->aligned) {
                        memcpy(req->iv, sg_virt(dev->sg_dst) +
                                dev->sg_dst->length - ivsize, ivsize);
        struct skcipher_request *req =
                skcipher_request_cast(dev->async_req);
        struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req);
+       struct rk_cipher_rctx *rctx = skcipher_request_ctx(req);
        struct rk_cipher_ctx *ctx = crypto_skcipher_ctx(tfm);
        u32 ivsize = crypto_skcipher_ivsize(tfm);
        u8 *new_iv = NULL;
 
-       if (ctx->mode & RK_CRYPTO_DEC) {
+       if (rctx->mode & RK_CRYPTO_DEC) {
                new_iv = ctx->iv;
        } else {
                new_iv = page_address(sg_page(dev->sg_dst)) +