static int aead_null_set_sh_desc(struct crypto_aead *aead)
 {
-       struct caam_ctx *ctx = crypto_aead_ctx(aead);
+       struct caam_ctx *ctx = crypto_aead_ctx_dma(aead);
        struct device *jrdev = ctx->jrdev;
        struct caam_drv_private *ctrlpriv = dev_get_drvdata(jrdev->parent);
        u32 *desc;
        struct caam_aead_alg *alg = container_of(crypto_aead_alg(aead),
                                                 struct caam_aead_alg, aead);
        unsigned int ivsize = crypto_aead_ivsize(aead);
-       struct caam_ctx *ctx = crypto_aead_ctx(aead);
+       struct caam_ctx *ctx = crypto_aead_ctx_dma(aead);
        struct device *jrdev = ctx->jrdev;
        struct caam_drv_private *ctrlpriv = dev_get_drvdata(jrdev->parent);
        u32 ctx1_iv_off = 0;
 static int aead_setauthsize(struct crypto_aead *authenc,
                                    unsigned int authsize)
 {
-       struct caam_ctx *ctx = crypto_aead_ctx(authenc);
+       struct caam_ctx *ctx = crypto_aead_ctx_dma(authenc);
 
        ctx->authsize = authsize;
        aead_set_sh_desc(authenc);
 
 static int gcm_set_sh_desc(struct crypto_aead *aead)
 {
-       struct caam_ctx *ctx = crypto_aead_ctx(aead);
+       struct caam_ctx *ctx = crypto_aead_ctx_dma(aead);
        struct device *jrdev = ctx->jrdev;
        unsigned int ivsize = crypto_aead_ivsize(aead);
        u32 *desc;
 
 static int gcm_setauthsize(struct crypto_aead *authenc, unsigned int authsize)
 {
-       struct caam_ctx *ctx = crypto_aead_ctx(authenc);
+       struct caam_ctx *ctx = crypto_aead_ctx_dma(authenc);
        int err;
 
        err = crypto_gcm_check_authsize(authsize);
 
 static int rfc4106_set_sh_desc(struct crypto_aead *aead)
 {
-       struct caam_ctx *ctx = crypto_aead_ctx(aead);
+       struct caam_ctx *ctx = crypto_aead_ctx_dma(aead);
        struct device *jrdev = ctx->jrdev;
        unsigned int ivsize = crypto_aead_ivsize(aead);
        u32 *desc;
 static int rfc4106_setauthsize(struct crypto_aead *authenc,
                               unsigned int authsize)
 {
-       struct caam_ctx *ctx = crypto_aead_ctx(authenc);
+       struct caam_ctx *ctx = crypto_aead_ctx_dma(authenc);
        int err;
 
        err = crypto_rfc4106_check_authsize(authsize);
 
 static int rfc4543_set_sh_desc(struct crypto_aead *aead)
 {
-       struct caam_ctx *ctx = crypto_aead_ctx(aead);
+       struct caam_ctx *ctx = crypto_aead_ctx_dma(aead);
        struct device *jrdev = ctx->jrdev;
        unsigned int ivsize = crypto_aead_ivsize(aead);
        u32 *desc;
 static int rfc4543_setauthsize(struct crypto_aead *authenc,
                               unsigned int authsize)
 {
-       struct caam_ctx *ctx = crypto_aead_ctx(authenc);
+       struct caam_ctx *ctx = crypto_aead_ctx_dma(authenc);
 
        if (authsize != 16)
                return -EINVAL;
 
 static int chachapoly_set_sh_desc(struct crypto_aead *aead)
 {
-       struct caam_ctx *ctx = crypto_aead_ctx(aead);
+       struct caam_ctx *ctx = crypto_aead_ctx_dma(aead);
        struct device *jrdev = ctx->jrdev;
        unsigned int ivsize = crypto_aead_ivsize(aead);
        u32 *desc;
 static int chachapoly_setauthsize(struct crypto_aead *aead,
                                  unsigned int authsize)
 {
-       struct caam_ctx *ctx = crypto_aead_ctx(aead);
+       struct caam_ctx *ctx = crypto_aead_ctx_dma(aead);
 
        if (authsize != POLY1305_DIGEST_SIZE)
                return -EINVAL;
 static int chachapoly_setkey(struct crypto_aead *aead, const u8 *key,
                             unsigned int keylen)
 {
-       struct caam_ctx *ctx = crypto_aead_ctx(aead);
+       struct caam_ctx *ctx = crypto_aead_ctx_dma(aead);
        unsigned int ivsize = crypto_aead_ivsize(aead);
        unsigned int saltlen = CHACHAPOLY_IV_SIZE - ivsize;
 
 static int aead_setkey(struct crypto_aead *aead,
                               const u8 *key, unsigned int keylen)
 {
-       struct caam_ctx *ctx = crypto_aead_ctx(aead);
+       struct caam_ctx *ctx = crypto_aead_ctx_dma(aead);
        struct device *jrdev = ctx->jrdev;
        struct caam_drv_private *ctrlpriv = dev_get_drvdata(jrdev->parent);
        struct crypto_authenc_keys keys;
 static int gcm_setkey(struct crypto_aead *aead,
                      const u8 *key, unsigned int keylen)
 {
-       struct caam_ctx *ctx = crypto_aead_ctx(aead);
+       struct caam_ctx *ctx = crypto_aead_ctx_dma(aead);
        struct device *jrdev = ctx->jrdev;
        int err;
 
 static int rfc4106_setkey(struct crypto_aead *aead,
                          const u8 *key, unsigned int keylen)
 {
-       struct caam_ctx *ctx = crypto_aead_ctx(aead);
+       struct caam_ctx *ctx = crypto_aead_ctx_dma(aead);
        struct device *jrdev = ctx->jrdev;
        int err;
 
 static int rfc4543_setkey(struct crypto_aead *aead,
                          const u8 *key, unsigned int keylen)
 {
-       struct caam_ctx *ctx = crypto_aead_ctx(aead);
+       struct caam_ctx *ctx = crypto_aead_ctx_dma(aead);
        struct device *jrdev = ctx->jrdev;
        int err;
 
 static int skcipher_setkey(struct crypto_skcipher *skcipher, const u8 *key,
                           unsigned int keylen, const u32 ctx1_iv_off)
 {
-       struct caam_ctx *ctx = crypto_skcipher_ctx(skcipher);
+       struct caam_ctx *ctx = crypto_skcipher_ctx_dma(skcipher);
        struct caam_skcipher_alg *alg =
                container_of(crypto_skcipher_alg(skcipher), typeof(*alg),
                             skcipher);
 static int xts_skcipher_setkey(struct crypto_skcipher *skcipher, const u8 *key,
                               unsigned int keylen)
 {
-       struct caam_ctx *ctx = crypto_skcipher_ctx(skcipher);
+       struct caam_ctx *ctx = crypto_skcipher_ctx_dma(skcipher);
        struct device *jrdev = ctx->jrdev;
        struct caam_drv_private *ctrlpriv = dev_get_drvdata(jrdev->parent);
        u32 *desc;
                          bool all_contig, bool encrypt)
 {
        struct crypto_aead *aead = crypto_aead_reqtfm(req);
-       struct caam_ctx *ctx = crypto_aead_ctx(aead);
+       struct caam_ctx *ctx = crypto_aead_ctx_dma(aead);
        int authsize = ctx->authsize;
        u32 *desc = edesc->hw_desc;
        u32 out_options, in_options;
                         bool all_contig, bool encrypt)
 {
        struct crypto_aead *aead = crypto_aead_reqtfm(req);
-       struct caam_ctx *ctx = crypto_aead_ctx(aead);
+       struct caam_ctx *ctx = crypto_aead_ctx_dma(aead);
        unsigned int ivsize = crypto_aead_ivsize(aead);
        u32 *desc = edesc->hw_desc;
        bool generic_gcm = (ivsize == GCM_AES_IV_SIZE);
        struct caam_aead_alg *alg = container_of(crypto_aead_alg(aead),
                                                 struct caam_aead_alg, aead);
        unsigned int ivsize = crypto_aead_ivsize(aead);
-       struct caam_ctx *ctx = crypto_aead_ctx(aead);
+       struct caam_ctx *ctx = crypto_aead_ctx_dma(aead);
        struct caam_drv_private *ctrlpriv = dev_get_drvdata(ctx->jrdev->parent);
        const bool ctr_mode = ((ctx->cdata.algtype & OP_ALG_AAI_MASK) ==
                               OP_ALG_AAI_CTR_MOD128);
                              const bool encrypt)
 {
        struct crypto_skcipher *skcipher = crypto_skcipher_reqtfm(req);
-       struct caam_ctx *ctx = crypto_skcipher_ctx(skcipher);
+       struct caam_ctx *ctx = crypto_skcipher_ctx_dma(skcipher);
        struct device *jrdev = ctx->jrdev;
        int ivsize = crypto_skcipher_ivsize(skcipher);
        u32 *desc = edesc->hw_desc;
                                           bool encrypt)
 {
        struct crypto_aead *aead = crypto_aead_reqtfm(req);
-       struct caam_ctx *ctx = crypto_aead_ctx(aead);
+       struct caam_ctx *ctx = crypto_aead_ctx_dma(aead);
        struct device *jrdev = ctx->jrdev;
        struct caam_aead_req_ctx *rctx = aead_request_ctx(req);
        gfp_t flags = (req->base.flags & CRYPTO_TFM_REQ_MAY_SLEEP) ?
 {
        struct aead_edesc *edesc;
        struct crypto_aead *aead = crypto_aead_reqtfm(req);
-       struct caam_ctx *ctx = crypto_aead_ctx(aead);
+       struct caam_ctx *ctx = crypto_aead_ctx_dma(aead);
        struct device *jrdev = ctx->jrdev;
        bool all_contig;
        u32 *desc;
 {
        struct aead_edesc *edesc;
        struct crypto_aead *aead = crypto_aead_reqtfm(req);
-       struct caam_ctx *ctx = crypto_aead_ctx(aead);
+       struct caam_ctx *ctx = crypto_aead_ctx_dma(aead);
        struct device *jrdev = ctx->jrdev;
        bool all_contig;
 
 static int aead_do_one_req(struct crypto_engine *engine, void *areq)
 {
        struct aead_request *req = aead_request_cast(areq);
-       struct caam_ctx *ctx = crypto_aead_ctx(crypto_aead_reqtfm(req));
+       struct caam_ctx *ctx = crypto_aead_ctx_dma(crypto_aead_reqtfm(req));
        struct caam_aead_req_ctx *rctx = aead_request_ctx(req);
        u32 *desc = rctx->edesc->hw_desc;
        int ret;
 {
        struct aead_edesc *edesc;
        struct crypto_aead *aead = crypto_aead_reqtfm(req);
-       struct caam_ctx *ctx = crypto_aead_ctx(aead);
+       struct caam_ctx *ctx = crypto_aead_ctx_dma(aead);
        struct device *jrdev = ctx->jrdev;
        bool all_contig;
 
                                                   int desc_bytes)
 {
        struct crypto_skcipher *skcipher = crypto_skcipher_reqtfm(req);
-       struct caam_ctx *ctx = crypto_skcipher_ctx(skcipher);
+       struct caam_ctx *ctx = crypto_skcipher_ctx_dma(skcipher);
        struct caam_skcipher_req_ctx *rctx = skcipher_request_ctx(req);
        struct device *jrdev = ctx->jrdev;
        gfp_t flags = (req->base.flags & CRYPTO_TFM_REQ_MAY_SLEEP) ?
 static int skcipher_do_one_req(struct crypto_engine *engine, void *areq)
 {
        struct skcipher_request *req = skcipher_request_cast(areq);
-       struct caam_ctx *ctx = crypto_skcipher_ctx(crypto_skcipher_reqtfm(req));
+       struct caam_ctx *ctx = crypto_skcipher_ctx_dma(crypto_skcipher_reqtfm(req));
        struct caam_skcipher_req_ctx *rctx = skcipher_request_ctx(req);
        u32 *desc = rctx->edesc->hw_desc;
        int ret;
 {
        struct skcipher_edesc *edesc;
        struct crypto_skcipher *skcipher = crypto_skcipher_reqtfm(req);
-       struct caam_ctx *ctx = crypto_skcipher_ctx(skcipher);
+       struct caam_ctx *ctx = crypto_skcipher_ctx_dma(skcipher);
        struct device *jrdev = ctx->jrdev;
        struct caam_drv_private_jr *jrpriv = dev_get_drvdata(jrdev);
        struct caam_drv_private *ctrlpriv = dev_get_drvdata(jrdev->parent);
        struct skcipher_alg *alg = crypto_skcipher_alg(tfm);
        struct caam_skcipher_alg *caam_alg =
                container_of(alg, typeof(*caam_alg), skcipher);
-       struct caam_ctx *ctx = crypto_skcipher_ctx(tfm);
+       struct caam_ctx *ctx = crypto_skcipher_ctx_dma(tfm);
        u32 alg_aai = caam_alg->caam.class1_alg_type & OP_ALG_AAI_MASK;
        int ret = 0;
 
        struct aead_alg *alg = crypto_aead_alg(tfm);
        struct caam_aead_alg *caam_alg =
                 container_of(alg, struct caam_aead_alg, aead);
-       struct caam_ctx *ctx = crypto_aead_ctx(tfm);
+       struct caam_ctx *ctx = crypto_aead_ctx_dma(tfm);
 
        crypto_aead_set_reqsize(tfm, sizeof(struct caam_aead_req_ctx));
 
 
 static void caam_cra_exit(struct crypto_skcipher *tfm)
 {
-       struct caam_ctx *ctx = crypto_skcipher_ctx(tfm);
+       struct caam_ctx *ctx = crypto_skcipher_ctx_dma(tfm);
 
        if (ctx->fallback)
                crypto_free_skcipher(ctx->fallback);
 
 static void caam_aead_exit(struct crypto_aead *tfm)
 {
-       caam_exit_common(crypto_aead_ctx(tfm));
+       caam_exit_common(crypto_aead_ctx_dma(tfm));
 }
 
 void caam_algapi_exit(void)
 
        alg->base.cra_module = THIS_MODULE;
        alg->base.cra_priority = CAAM_CRA_PRIORITY;
-       alg->base.cra_ctxsize = sizeof(struct caam_ctx);
+       alg->base.cra_ctxsize = sizeof(struct caam_ctx) + crypto_dma_padding();
        alg->base.cra_flags |= (CRYPTO_ALG_ASYNC | CRYPTO_ALG_ALLOCATES_MEMORY |
                              CRYPTO_ALG_KERN_DRIVER_ONLY);
 
 
        alg->base.cra_module = THIS_MODULE;
        alg->base.cra_priority = CAAM_CRA_PRIORITY;
-       alg->base.cra_ctxsize = sizeof(struct caam_ctx);
+       alg->base.cra_ctxsize = sizeof(struct caam_ctx) + crypto_dma_padding();
        alg->base.cra_flags = CRYPTO_ALG_ASYNC | CRYPTO_ALG_ALLOCATES_MEMORY |
                              CRYPTO_ALG_KERN_DRIVER_ONLY;
 
 
 {
        struct caam_aead_alg *alg = container_of(crypto_aead_alg(aead),
                                                 typeof(*alg), aead);
-       struct caam_ctx *ctx = crypto_aead_ctx(aead);
+       struct caam_ctx *ctx = crypto_aead_ctx_dma(aead);
        unsigned int ivsize = crypto_aead_ivsize(aead);
        u32 ctx1_iv_off = 0;
        u32 *nonce = NULL;
 
 static int aead_setauthsize(struct crypto_aead *authenc, unsigned int authsize)
 {
-       struct caam_ctx *ctx = crypto_aead_ctx(authenc);
+       struct caam_ctx *ctx = crypto_aead_ctx_dma(authenc);
 
        ctx->authsize = authsize;
        aead_set_sh_desc(authenc);
 static int aead_setkey(struct crypto_aead *aead, const u8 *key,
                       unsigned int keylen)
 {
-       struct caam_ctx *ctx = crypto_aead_ctx(aead);
+       struct caam_ctx *ctx = crypto_aead_ctx_dma(aead);
        struct device *jrdev = ctx->jrdev;
        struct caam_drv_private *ctrlpriv = dev_get_drvdata(jrdev->parent);
        struct crypto_authenc_keys keys;
 
 static int gcm_set_sh_desc(struct crypto_aead *aead)
 {
-       struct caam_ctx *ctx = crypto_aead_ctx(aead);
+       struct caam_ctx *ctx = crypto_aead_ctx_dma(aead);
        unsigned int ivsize = crypto_aead_ivsize(aead);
        int rem_bytes = CAAM_DESC_BYTES_MAX - DESC_JOB_IO_LEN -
                        ctx->cdata.keylen;
 
 static int gcm_setauthsize(struct crypto_aead *authenc, unsigned int authsize)
 {
-       struct caam_ctx *ctx = crypto_aead_ctx(authenc);
+       struct caam_ctx *ctx = crypto_aead_ctx_dma(authenc);
        int err;
 
        err = crypto_gcm_check_authsize(authsize);
 static int gcm_setkey(struct crypto_aead *aead,
                      const u8 *key, unsigned int keylen)
 {
-       struct caam_ctx *ctx = crypto_aead_ctx(aead);
+       struct caam_ctx *ctx = crypto_aead_ctx_dma(aead);
        struct device *jrdev = ctx->jrdev;
        int ret;
 
 
 static int rfc4106_set_sh_desc(struct crypto_aead *aead)
 {
-       struct caam_ctx *ctx = crypto_aead_ctx(aead);
+       struct caam_ctx *ctx = crypto_aead_ctx_dma(aead);
        unsigned int ivsize = crypto_aead_ivsize(aead);
        int rem_bytes = CAAM_DESC_BYTES_MAX - DESC_JOB_IO_LEN -
                        ctx->cdata.keylen;
 static int rfc4106_setauthsize(struct crypto_aead *authenc,
                               unsigned int authsize)
 {
-       struct caam_ctx *ctx = crypto_aead_ctx(authenc);
+       struct caam_ctx *ctx = crypto_aead_ctx_dma(authenc);
        int err;
 
        err = crypto_rfc4106_check_authsize(authsize);
 static int rfc4106_setkey(struct crypto_aead *aead,
                          const u8 *key, unsigned int keylen)
 {
-       struct caam_ctx *ctx = crypto_aead_ctx(aead);
+       struct caam_ctx *ctx = crypto_aead_ctx_dma(aead);
        struct device *jrdev = ctx->jrdev;
        int ret;
 
 
 static int rfc4543_set_sh_desc(struct crypto_aead *aead)
 {
-       struct caam_ctx *ctx = crypto_aead_ctx(aead);
+       struct caam_ctx *ctx = crypto_aead_ctx_dma(aead);
        unsigned int ivsize = crypto_aead_ivsize(aead);
        int rem_bytes = CAAM_DESC_BYTES_MAX - DESC_JOB_IO_LEN -
                        ctx->cdata.keylen;
 static int rfc4543_setauthsize(struct crypto_aead *authenc,
                               unsigned int authsize)
 {
-       struct caam_ctx *ctx = crypto_aead_ctx(authenc);
+       struct caam_ctx *ctx = crypto_aead_ctx_dma(authenc);
 
        if (authsize != 16)
                return -EINVAL;
 static int rfc4543_setkey(struct crypto_aead *aead,
                          const u8 *key, unsigned int keylen)
 {
-       struct caam_ctx *ctx = crypto_aead_ctx(aead);
+       struct caam_ctx *ctx = crypto_aead_ctx_dma(aead);
        struct device *jrdev = ctx->jrdev;
        int ret;
 
 static int skcipher_setkey(struct crypto_skcipher *skcipher, const u8 *key,
                           unsigned int keylen, const u32 ctx1_iv_off)
 {
-       struct caam_ctx *ctx = crypto_skcipher_ctx(skcipher);
+       struct caam_ctx *ctx = crypto_skcipher_ctx_dma(skcipher);
        struct caam_skcipher_alg *alg =
                container_of(crypto_skcipher_alg(skcipher), typeof(*alg),
                             skcipher);
 static int xts_skcipher_setkey(struct crypto_skcipher *skcipher, const u8 *key,
                               unsigned int keylen)
 {
-       struct caam_ctx *ctx = crypto_skcipher_ctx(skcipher);
+       struct caam_ctx *ctx = crypto_skcipher_ctx_dma(skcipher);
        struct device *jrdev = ctx->jrdev;
        struct caam_drv_private *ctrlpriv = dev_get_drvdata(jrdev->parent);
        int ret = 0;
        struct aead_edesc *edesc;
        struct aead_request *aead_req = drv_req->app_ctx;
        struct crypto_aead *aead = crypto_aead_reqtfm(aead_req);
-       struct caam_ctx *caam_ctx = crypto_aead_ctx(aead);
+       struct caam_ctx *caam_ctx = crypto_aead_ctx_dma(aead);
        int ecode = 0;
 
        qidev = caam_ctx->qidev;
                                           bool encrypt)
 {
        struct crypto_aead *aead = crypto_aead_reqtfm(req);
-       struct caam_ctx *ctx = crypto_aead_ctx(aead);
+       struct caam_ctx *ctx = crypto_aead_ctx_dma(aead);
        struct caam_aead_alg *alg = container_of(crypto_aead_alg(aead),
                                                 typeof(*alg), aead);
        struct device *qidev = ctx->qidev;
 {
        struct aead_edesc *edesc;
        struct crypto_aead *aead = crypto_aead_reqtfm(req);
-       struct caam_ctx *ctx = crypto_aead_ctx(aead);
+       struct caam_ctx *ctx = crypto_aead_ctx_dma(aead);
        int ret;
 
        if (unlikely(caam_congested))
        struct skcipher_edesc *edesc;
        struct skcipher_request *req = drv_req->app_ctx;
        struct crypto_skcipher *skcipher = crypto_skcipher_reqtfm(req);
-       struct caam_ctx *caam_ctx = crypto_skcipher_ctx(skcipher);
+       struct caam_ctx *caam_ctx = crypto_skcipher_ctx_dma(skcipher);
        struct device *qidev = caam_ctx->qidev;
        int ivsize = crypto_skcipher_ivsize(skcipher);
        int ecode = 0;
                                                   bool encrypt)
 {
        struct crypto_skcipher *skcipher = crypto_skcipher_reqtfm(req);
-       struct caam_ctx *ctx = crypto_skcipher_ctx(skcipher);
+       struct caam_ctx *ctx = crypto_skcipher_ctx_dma(skcipher);
        struct device *qidev = ctx->qidev;
        gfp_t flags = (req->base.flags & CRYPTO_TFM_REQ_MAY_SLEEP) ?
                       GFP_KERNEL : GFP_ATOMIC;
 {
        struct skcipher_edesc *edesc;
        struct crypto_skcipher *skcipher = crypto_skcipher_reqtfm(req);
-       struct caam_ctx *ctx = crypto_skcipher_ctx(skcipher);
+       struct caam_ctx *ctx = crypto_skcipher_ctx_dma(skcipher);
        struct caam_drv_private *ctrlpriv = dev_get_drvdata(ctx->jrdev->parent);
        int ret;
 
        struct skcipher_alg *alg = crypto_skcipher_alg(tfm);
        struct caam_skcipher_alg *caam_alg =
                container_of(alg, typeof(*caam_alg), skcipher);
-       struct caam_ctx *ctx = crypto_skcipher_ctx(tfm);
+       struct caam_ctx *ctx = crypto_skcipher_ctx_dma(tfm);
        u32 alg_aai = caam_alg->caam.class1_alg_type & OP_ALG_AAI_MASK;
        int ret = 0;
 
        struct aead_alg *alg = crypto_aead_alg(tfm);
        struct caam_aead_alg *caam_alg = container_of(alg, typeof(*caam_alg),
                                                      aead);
-       struct caam_ctx *ctx = crypto_aead_ctx(tfm);
+       struct caam_ctx *ctx = crypto_aead_ctx_dma(tfm);
 
        return caam_init_common(ctx, &caam_alg->caam, !caam_alg->caam.nodkp);
 }
 
 static void caam_cra_exit(struct crypto_skcipher *tfm)
 {
-       struct caam_ctx *ctx = crypto_skcipher_ctx(tfm);
+       struct caam_ctx *ctx = crypto_skcipher_ctx_dma(tfm);
 
        if (ctx->fallback)
                crypto_free_skcipher(ctx->fallback);
 
 static void caam_aead_exit(struct crypto_aead *tfm)
 {
-       caam_exit_common(crypto_aead_ctx(tfm));
+       caam_exit_common(crypto_aead_ctx_dma(tfm));
 }
 
 void caam_qi_algapi_exit(void)
 
        alg->base.cra_module = THIS_MODULE;
        alg->base.cra_priority = CAAM_CRA_PRIORITY;
-       alg->base.cra_ctxsize = sizeof(struct caam_ctx);
+       alg->base.cra_ctxsize = sizeof(struct caam_ctx) + crypto_dma_padding();
        alg->base.cra_flags |= (CRYPTO_ALG_ASYNC | CRYPTO_ALG_ALLOCATES_MEMORY |
                                CRYPTO_ALG_KERN_DRIVER_ONLY);
 
 
        alg->base.cra_module = THIS_MODULE;
        alg->base.cra_priority = CAAM_CRA_PRIORITY;
-       alg->base.cra_ctxsize = sizeof(struct caam_ctx);
+       alg->base.cra_ctxsize = sizeof(struct caam_ctx) + crypto_dma_padding();
        alg->base.cra_flags = CRYPTO_ALG_ASYNC | CRYPTO_ALG_ALLOCATES_MEMORY |
                              CRYPTO_ALG_KERN_DRIVER_ONLY;
 
 
 {
        switch (crypto_tfm_alg_type(areq->tfm)) {
        case CRYPTO_ALG_TYPE_SKCIPHER:
-               return skcipher_request_ctx(skcipher_request_cast(areq));
+               return skcipher_request_ctx_dma(skcipher_request_cast(areq));
        case CRYPTO_ALG_TYPE_AEAD:
-               return aead_request_ctx(container_of(areq, struct aead_request,
-                                                    base));
+               return aead_request_ctx_dma(
+                       container_of(areq, struct aead_request, base));
        case CRYPTO_ALG_TYPE_AHASH:
-               return ahash_request_ctx(ahash_request_cast(areq));
+               return ahash_request_ctx_dma(ahash_request_cast(areq));
        default:
                return ERR_PTR(-EINVAL);
        }
 {
        struct caam_aead_alg *alg = container_of(crypto_aead_alg(aead),
                                                 typeof(*alg), aead);
-       struct caam_ctx *ctx = crypto_aead_ctx(aead);
+       struct caam_ctx *ctx = crypto_aead_ctx_dma(aead);
        unsigned int ivsize = crypto_aead_ivsize(aead);
        struct device *dev = ctx->dev;
        struct dpaa2_caam_priv *priv = dev_get_drvdata(dev);
 
 static int aead_setauthsize(struct crypto_aead *authenc, unsigned int authsize)
 {
-       struct caam_ctx *ctx = crypto_aead_ctx(authenc);
+       struct caam_ctx *ctx = crypto_aead_ctx_dma(authenc);
 
        ctx->authsize = authsize;
        aead_set_sh_desc(authenc);
 static int aead_setkey(struct crypto_aead *aead, const u8 *key,
                       unsigned int keylen)
 {
-       struct caam_ctx *ctx = crypto_aead_ctx(aead);
+       struct caam_ctx *ctx = crypto_aead_ctx_dma(aead);
        struct device *dev = ctx->dev;
        struct crypto_authenc_keys keys;
 
                                           bool encrypt)
 {
        struct crypto_aead *aead = crypto_aead_reqtfm(req);
-       struct caam_request *req_ctx = aead_request_ctx(req);
+       struct caam_request *req_ctx = aead_request_ctx_dma(req);
        struct dpaa2_fl_entry *in_fle = &req_ctx->fd_flt[1];
        struct dpaa2_fl_entry *out_fle = &req_ctx->fd_flt[0];
-       struct caam_ctx *ctx = crypto_aead_ctx(aead);
+       struct caam_ctx *ctx = crypto_aead_ctx_dma(aead);
        struct caam_aead_alg *alg = container_of(crypto_aead_alg(aead),
                                                 typeof(*alg), aead);
        struct device *dev = ctx->dev;
 
 static int chachapoly_set_sh_desc(struct crypto_aead *aead)
 {
-       struct caam_ctx *ctx = crypto_aead_ctx(aead);
+       struct caam_ctx *ctx = crypto_aead_ctx_dma(aead);
        unsigned int ivsize = crypto_aead_ivsize(aead);
        struct device *dev = ctx->dev;
        struct caam_flc *flc;
 static int chachapoly_setauthsize(struct crypto_aead *aead,
                                  unsigned int authsize)
 {
-       struct caam_ctx *ctx = crypto_aead_ctx(aead);
+       struct caam_ctx *ctx = crypto_aead_ctx_dma(aead);
 
        if (authsize != POLY1305_DIGEST_SIZE)
                return -EINVAL;
 static int chachapoly_setkey(struct crypto_aead *aead, const u8 *key,
                             unsigned int keylen)
 {
-       struct caam_ctx *ctx = crypto_aead_ctx(aead);
+       struct caam_ctx *ctx = crypto_aead_ctx_dma(aead);
        unsigned int ivsize = crypto_aead_ivsize(aead);
        unsigned int saltlen = CHACHAPOLY_IV_SIZE - ivsize;
 
 
 static int gcm_set_sh_desc(struct crypto_aead *aead)
 {
-       struct caam_ctx *ctx = crypto_aead_ctx(aead);
+       struct caam_ctx *ctx = crypto_aead_ctx_dma(aead);
        struct device *dev = ctx->dev;
        unsigned int ivsize = crypto_aead_ivsize(aead);
        struct caam_flc *flc;
 
 static int gcm_setauthsize(struct crypto_aead *authenc, unsigned int authsize)
 {
-       struct caam_ctx *ctx = crypto_aead_ctx(authenc);
+       struct caam_ctx *ctx = crypto_aead_ctx_dma(authenc);
        int err;
 
        err = crypto_gcm_check_authsize(authsize);
 static int gcm_setkey(struct crypto_aead *aead,
                      const u8 *key, unsigned int keylen)
 {
-       struct caam_ctx *ctx = crypto_aead_ctx(aead);
+       struct caam_ctx *ctx = crypto_aead_ctx_dma(aead);
        struct device *dev = ctx->dev;
        int ret;
 
 
 static int rfc4106_set_sh_desc(struct crypto_aead *aead)
 {
-       struct caam_ctx *ctx = crypto_aead_ctx(aead);
+       struct caam_ctx *ctx = crypto_aead_ctx_dma(aead);
        struct device *dev = ctx->dev;
        unsigned int ivsize = crypto_aead_ivsize(aead);
        struct caam_flc *flc;
 static int rfc4106_setauthsize(struct crypto_aead *authenc,
                               unsigned int authsize)
 {
-       struct caam_ctx *ctx = crypto_aead_ctx(authenc);
+       struct caam_ctx *ctx = crypto_aead_ctx_dma(authenc);
        int err;
 
        err = crypto_rfc4106_check_authsize(authsize);
 static int rfc4106_setkey(struct crypto_aead *aead,
                          const u8 *key, unsigned int keylen)
 {
-       struct caam_ctx *ctx = crypto_aead_ctx(aead);
+       struct caam_ctx *ctx = crypto_aead_ctx_dma(aead);
        struct device *dev = ctx->dev;
        int ret;
 
 
 static int rfc4543_set_sh_desc(struct crypto_aead *aead)
 {
-       struct caam_ctx *ctx = crypto_aead_ctx(aead);
+       struct caam_ctx *ctx = crypto_aead_ctx_dma(aead);
        struct device *dev = ctx->dev;
        unsigned int ivsize = crypto_aead_ivsize(aead);
        struct caam_flc *flc;
 static int rfc4543_setauthsize(struct crypto_aead *authenc,
                               unsigned int authsize)
 {
-       struct caam_ctx *ctx = crypto_aead_ctx(authenc);
+       struct caam_ctx *ctx = crypto_aead_ctx_dma(authenc);
 
        if (authsize != 16)
                return -EINVAL;
 static int rfc4543_setkey(struct crypto_aead *aead,
                          const u8 *key, unsigned int keylen)
 {
-       struct caam_ctx *ctx = crypto_aead_ctx(aead);
+       struct caam_ctx *ctx = crypto_aead_ctx_dma(aead);
        struct device *dev = ctx->dev;
        int ret;
 
 static int skcipher_setkey(struct crypto_skcipher *skcipher, const u8 *key,
                           unsigned int keylen, const u32 ctx1_iv_off)
 {
-       struct caam_ctx *ctx = crypto_skcipher_ctx(skcipher);
+       struct caam_ctx *ctx = crypto_skcipher_ctx_dma(skcipher);
        struct caam_skcipher_alg *alg =
                container_of(crypto_skcipher_alg(skcipher),
                             struct caam_skcipher_alg, skcipher);
 static int xts_skcipher_setkey(struct crypto_skcipher *skcipher, const u8 *key,
                               unsigned int keylen)
 {
-       struct caam_ctx *ctx = crypto_skcipher_ctx(skcipher);
+       struct caam_ctx *ctx = crypto_skcipher_ctx_dma(skcipher);
        struct device *dev = ctx->dev;
        struct dpaa2_caam_priv *priv = dev_get_drvdata(dev);
        struct caam_flc *flc;
 static struct skcipher_edesc *skcipher_edesc_alloc(struct skcipher_request *req)
 {
        struct crypto_skcipher *skcipher = crypto_skcipher_reqtfm(req);
-       struct caam_request *req_ctx = skcipher_request_ctx(req);
+       struct caam_request *req_ctx = skcipher_request_ctx_dma(req);
        struct dpaa2_fl_entry *in_fle = &req_ctx->fd_flt[1];
        struct dpaa2_fl_entry *out_fle = &req_ctx->fd_flt[0];
-       struct caam_ctx *ctx = crypto_skcipher_ctx(skcipher);
+       struct caam_ctx *ctx = crypto_skcipher_ctx_dma(skcipher);
        struct device *dev = ctx->dev;
        gfp_t flags = (req->base.flags & CRYPTO_TFM_REQ_MAY_SLEEP) ?
                       GFP_KERNEL : GFP_ATOMIC;
        struct caam_request *req_ctx = to_caam_req(areq);
        struct aead_edesc *edesc = req_ctx->edesc;
        struct crypto_aead *aead = crypto_aead_reqtfm(req);
-       struct caam_ctx *ctx = crypto_aead_ctx(aead);
+       struct caam_ctx *ctx = crypto_aead_ctx_dma(aead);
        int ecode = 0;
 
        dev_dbg(ctx->dev, "%s %d: err 0x%x\n", __func__, __LINE__, status);
        struct caam_request *req_ctx = to_caam_req(areq);
        struct aead_edesc *edesc = req_ctx->edesc;
        struct crypto_aead *aead = crypto_aead_reqtfm(req);
-       struct caam_ctx *ctx = crypto_aead_ctx(aead);
+       struct caam_ctx *ctx = crypto_aead_ctx_dma(aead);
        int ecode = 0;
 
        dev_dbg(ctx->dev, "%s %d: err 0x%x\n", __func__, __LINE__, status);
 {
        struct aead_edesc *edesc;
        struct crypto_aead *aead = crypto_aead_reqtfm(req);
-       struct caam_ctx *ctx = crypto_aead_ctx(aead);
-       struct caam_request *caam_req = aead_request_ctx(req);
+       struct caam_ctx *ctx = crypto_aead_ctx_dma(aead);
+       struct caam_request *caam_req = aead_request_ctx_dma(req);
        int ret;
 
        /* allocate extended descriptor */
 {
        struct aead_edesc *edesc;
        struct crypto_aead *aead = crypto_aead_reqtfm(req);
-       struct caam_ctx *ctx = crypto_aead_ctx(aead);
-       struct caam_request *caam_req = aead_request_ctx(req);
+       struct caam_ctx *ctx = crypto_aead_ctx_dma(aead);
+       struct caam_request *caam_req = aead_request_ctx_dma(req);
        int ret;
 
        /* allocate extended descriptor */
        struct skcipher_request *req = skcipher_request_cast(areq);
        struct caam_request *req_ctx = to_caam_req(areq);
        struct crypto_skcipher *skcipher = crypto_skcipher_reqtfm(req);
-       struct caam_ctx *ctx = crypto_skcipher_ctx(skcipher);
+       struct caam_ctx *ctx = crypto_skcipher_ctx_dma(skcipher);
        struct skcipher_edesc *edesc = req_ctx->edesc;
        int ecode = 0;
        int ivsize = crypto_skcipher_ivsize(skcipher);
        struct skcipher_request *req = skcipher_request_cast(areq);
        struct caam_request *req_ctx = to_caam_req(areq);
        struct crypto_skcipher *skcipher = crypto_skcipher_reqtfm(req);
-       struct caam_ctx *ctx = crypto_skcipher_ctx(skcipher);
+       struct caam_ctx *ctx = crypto_skcipher_ctx_dma(skcipher);
        struct skcipher_edesc *edesc = req_ctx->edesc;
        int ecode = 0;
        int ivsize = crypto_skcipher_ivsize(skcipher);
 {
        struct skcipher_edesc *edesc;
        struct crypto_skcipher *skcipher = crypto_skcipher_reqtfm(req);
-       struct caam_ctx *ctx = crypto_skcipher_ctx(skcipher);
-       struct caam_request *caam_req = skcipher_request_ctx(req);
+       struct caam_ctx *ctx = crypto_skcipher_ctx_dma(skcipher);
+       struct caam_request *caam_req = skcipher_request_ctx_dma(req);
        struct dpaa2_caam_priv *priv = dev_get_drvdata(ctx->dev);
        int ret;
 
 {
        struct skcipher_edesc *edesc;
        struct crypto_skcipher *skcipher = crypto_skcipher_reqtfm(req);
-       struct caam_ctx *ctx = crypto_skcipher_ctx(skcipher);
-       struct caam_request *caam_req = skcipher_request_ctx(req);
+       struct caam_ctx *ctx = crypto_skcipher_ctx_dma(skcipher);
+       struct caam_request *caam_req = skcipher_request_ctx_dma(req);
        struct dpaa2_caam_priv *priv = dev_get_drvdata(ctx->dev);
        int ret;
 
        struct skcipher_alg *alg = crypto_skcipher_alg(tfm);
        struct caam_skcipher_alg *caam_alg =
                container_of(alg, typeof(*caam_alg), skcipher);
-       struct caam_ctx *ctx = crypto_skcipher_ctx(tfm);
+       struct caam_ctx *ctx = crypto_skcipher_ctx_dma(tfm);
        u32 alg_aai = caam_alg->caam.class1_alg_type & OP_ALG_AAI_MASK;
        int ret = 0;
 
                }
 
                ctx->fallback = fallback;
-               crypto_skcipher_set_reqsize(tfm, sizeof(struct caam_request) +
-                                           crypto_skcipher_reqsize(fallback));
+               crypto_skcipher_set_reqsize_dma(
+                       tfm, sizeof(struct caam_request) +
+                            crypto_skcipher_reqsize(fallback));
        } else {
-               crypto_skcipher_set_reqsize(tfm, sizeof(struct caam_request));
+               crypto_skcipher_set_reqsize_dma(tfm,
+                                               sizeof(struct caam_request));
        }
 
        ret = caam_cra_init(ctx, &caam_alg->caam, false);
        struct caam_aead_alg *caam_alg = container_of(alg, typeof(*caam_alg),
                                                      aead);
 
-       crypto_aead_set_reqsize(tfm, sizeof(struct caam_request));
-       return caam_cra_init(crypto_aead_ctx(tfm), &caam_alg->caam,
+       crypto_aead_set_reqsize_dma(tfm, sizeof(struct caam_request));
+       return caam_cra_init(crypto_aead_ctx_dma(tfm), &caam_alg->caam,
                             !caam_alg->caam.nodkp);
 }
 
 
 static void caam_cra_exit(struct crypto_skcipher *tfm)
 {
-       struct caam_ctx *ctx = crypto_skcipher_ctx(tfm);
+       struct caam_ctx *ctx = crypto_skcipher_ctx_dma(tfm);
 
        if (ctx->fallback)
                crypto_free_skcipher(ctx->fallback);
 
 static void caam_cra_exit_aead(struct crypto_aead *tfm)
 {
-       caam_exit_common(crypto_aead_ctx(tfm));
+       caam_exit_common(crypto_aead_ctx_dma(tfm));
 }
 
 static struct caam_skcipher_alg driver_algs[] = {
 
        alg->base.cra_module = THIS_MODULE;
        alg->base.cra_priority = CAAM_CRA_PRIORITY;
-       alg->base.cra_ctxsize = sizeof(struct caam_ctx);
+       alg->base.cra_ctxsize = sizeof(struct caam_ctx) + crypto_dma_padding();
        alg->base.cra_flags |= (CRYPTO_ALG_ASYNC | CRYPTO_ALG_ALLOCATES_MEMORY |
                              CRYPTO_ALG_KERN_DRIVER_ONLY);
 
 
        alg->base.cra_module = THIS_MODULE;
        alg->base.cra_priority = CAAM_CRA_PRIORITY;
-       alg->base.cra_ctxsize = sizeof(struct caam_ctx);
+       alg->base.cra_ctxsize = sizeof(struct caam_ctx) + crypto_dma_padding();
        alg->base.cra_flags = CRYPTO_ALG_ASYNC | CRYPTO_ALG_ALLOCATES_MEMORY |
                              CRYPTO_ALG_KERN_DRIVER_ONLY;
 
 
 static int ahash_set_sh_desc(struct crypto_ahash *ahash)
 {
-       struct caam_hash_ctx *ctx = crypto_ahash_ctx(ahash);
+       struct caam_hash_ctx *ctx = crypto_ahash_ctx_dma(ahash);
        int digestsize = crypto_ahash_digestsize(ahash);
        struct dpaa2_caam_priv *priv = dev_get_drvdata(ctx->dev);
        struct caam_flc *flc;
 static int ahash_setkey(struct crypto_ahash *ahash, const u8 *key,
                        unsigned int keylen)
 {
-       struct caam_hash_ctx *ctx = crypto_ahash_ctx(ahash);
+       struct caam_hash_ctx *ctx = crypto_ahash_ctx_dma(ahash);
        unsigned int blocksize = crypto_tfm_alg_blocksize(&ahash->base);
        unsigned int digestsize = crypto_ahash_digestsize(ahash);
        int ret;
 static inline void ahash_unmap(struct device *dev, struct ahash_edesc *edesc,
                               struct ahash_request *req)
 {
-       struct caam_hash_state *state = ahash_request_ctx(req);
+       struct caam_hash_state *state = ahash_request_ctx_dma(req);
 
        if (edesc->src_nents)
                dma_unmap_sg(dev, req->src, edesc->src_nents, DMA_TO_DEVICE);
                                   struct ahash_edesc *edesc,
                                   struct ahash_request *req, u32 flag)
 {
-       struct caam_hash_state *state = ahash_request_ctx(req);
+       struct caam_hash_state *state = ahash_request_ctx_dma(req);
 
        if (state->ctx_dma) {
                dma_unmap_single(dev, state->ctx_dma, state->ctx_dma_len, flag);
        struct crypto_async_request *areq = cbk_ctx;
        struct ahash_request *req = ahash_request_cast(areq);
        struct crypto_ahash *ahash = crypto_ahash_reqtfm(req);
-       struct caam_hash_state *state = ahash_request_ctx(req);
+       struct caam_hash_state *state = ahash_request_ctx_dma(req);
        struct ahash_edesc *edesc = state->caam_req.edesc;
-       struct caam_hash_ctx *ctx = crypto_ahash_ctx(ahash);
+       struct caam_hash_ctx *ctx = crypto_ahash_ctx_dma(ahash);
        int digestsize = crypto_ahash_digestsize(ahash);
        int ecode = 0;
 
        struct crypto_async_request *areq = cbk_ctx;
        struct ahash_request *req = ahash_request_cast(areq);
        struct crypto_ahash *ahash = crypto_ahash_reqtfm(req);
-       struct caam_hash_state *state = ahash_request_ctx(req);
+       struct caam_hash_state *state = ahash_request_ctx_dma(req);
        struct ahash_edesc *edesc = state->caam_req.edesc;
-       struct caam_hash_ctx *ctx = crypto_ahash_ctx(ahash);
+       struct caam_hash_ctx *ctx = crypto_ahash_ctx_dma(ahash);
        int ecode = 0;
 
        dev_dbg(ctx->dev, "%s %d: err 0x%x\n", __func__, __LINE__, status);
        struct crypto_async_request *areq = cbk_ctx;
        struct ahash_request *req = ahash_request_cast(areq);
        struct crypto_ahash *ahash = crypto_ahash_reqtfm(req);
-       struct caam_hash_state *state = ahash_request_ctx(req);
+       struct caam_hash_state *state = ahash_request_ctx_dma(req);
        struct ahash_edesc *edesc = state->caam_req.edesc;
-       struct caam_hash_ctx *ctx = crypto_ahash_ctx(ahash);
+       struct caam_hash_ctx *ctx = crypto_ahash_ctx_dma(ahash);
        int digestsize = crypto_ahash_digestsize(ahash);
        int ecode = 0;
 
        struct crypto_async_request *areq = cbk_ctx;
        struct ahash_request *req = ahash_request_cast(areq);
        struct crypto_ahash *ahash = crypto_ahash_reqtfm(req);
-       struct caam_hash_state *state = ahash_request_ctx(req);
+       struct caam_hash_state *state = ahash_request_ctx_dma(req);
        struct ahash_edesc *edesc = state->caam_req.edesc;
-       struct caam_hash_ctx *ctx = crypto_ahash_ctx(ahash);
+       struct caam_hash_ctx *ctx = crypto_ahash_ctx_dma(ahash);
        int ecode = 0;
 
        dev_dbg(ctx->dev, "%s %d: err 0x%x\n", __func__, __LINE__, status);
 static int ahash_update_ctx(struct ahash_request *req)
 {
        struct crypto_ahash *ahash = crypto_ahash_reqtfm(req);
-       struct caam_hash_ctx *ctx = crypto_ahash_ctx(ahash);
-       struct caam_hash_state *state = ahash_request_ctx(req);
+       struct caam_hash_ctx *ctx = crypto_ahash_ctx_dma(ahash);
+       struct caam_hash_state *state = ahash_request_ctx_dma(req);
        struct caam_request *req_ctx = &state->caam_req;
        struct dpaa2_fl_entry *in_fle = &req_ctx->fd_flt[1];
        struct dpaa2_fl_entry *out_fle = &req_ctx->fd_flt[0];
 static int ahash_final_ctx(struct ahash_request *req)
 {
        struct crypto_ahash *ahash = crypto_ahash_reqtfm(req);
-       struct caam_hash_ctx *ctx = crypto_ahash_ctx(ahash);
-       struct caam_hash_state *state = ahash_request_ctx(req);
+       struct caam_hash_ctx *ctx = crypto_ahash_ctx_dma(ahash);
+       struct caam_hash_state *state = ahash_request_ctx_dma(req);
        struct caam_request *req_ctx = &state->caam_req;
        struct dpaa2_fl_entry *in_fle = &req_ctx->fd_flt[1];
        struct dpaa2_fl_entry *out_fle = &req_ctx->fd_flt[0];
 static int ahash_finup_ctx(struct ahash_request *req)
 {
        struct crypto_ahash *ahash = crypto_ahash_reqtfm(req);
-       struct caam_hash_ctx *ctx = crypto_ahash_ctx(ahash);
-       struct caam_hash_state *state = ahash_request_ctx(req);
+       struct caam_hash_ctx *ctx = crypto_ahash_ctx_dma(ahash);
+       struct caam_hash_state *state = ahash_request_ctx_dma(req);
        struct caam_request *req_ctx = &state->caam_req;
        struct dpaa2_fl_entry *in_fle = &req_ctx->fd_flt[1];
        struct dpaa2_fl_entry *out_fle = &req_ctx->fd_flt[0];
 static int ahash_digest(struct ahash_request *req)
 {
        struct crypto_ahash *ahash = crypto_ahash_reqtfm(req);
-       struct caam_hash_ctx *ctx = crypto_ahash_ctx(ahash);
-       struct caam_hash_state *state = ahash_request_ctx(req);
+       struct caam_hash_ctx *ctx = crypto_ahash_ctx_dma(ahash);
+       struct caam_hash_state *state = ahash_request_ctx_dma(req);
        struct caam_request *req_ctx = &state->caam_req;
        struct dpaa2_fl_entry *in_fle = &req_ctx->fd_flt[1];
        struct dpaa2_fl_entry *out_fle = &req_ctx->fd_flt[0];
 static int ahash_final_no_ctx(struct ahash_request *req)
 {
        struct crypto_ahash *ahash = crypto_ahash_reqtfm(req);
-       struct caam_hash_ctx *ctx = crypto_ahash_ctx(ahash);
-       struct caam_hash_state *state = ahash_request_ctx(req);
+       struct caam_hash_ctx *ctx = crypto_ahash_ctx_dma(ahash);
+       struct caam_hash_state *state = ahash_request_ctx_dma(req);
        struct caam_request *req_ctx = &state->caam_req;
        struct dpaa2_fl_entry *in_fle = &req_ctx->fd_flt[1];
        struct dpaa2_fl_entry *out_fle = &req_ctx->fd_flt[0];
 static int ahash_update_no_ctx(struct ahash_request *req)
 {
        struct crypto_ahash *ahash = crypto_ahash_reqtfm(req);
-       struct caam_hash_ctx *ctx = crypto_ahash_ctx(ahash);
-       struct caam_hash_state *state = ahash_request_ctx(req);
+       struct caam_hash_ctx *ctx = crypto_ahash_ctx_dma(ahash);
+       struct caam_hash_state *state = ahash_request_ctx_dma(req);
        struct caam_request *req_ctx = &state->caam_req;
        struct dpaa2_fl_entry *in_fle = &req_ctx->fd_flt[1];
        struct dpaa2_fl_entry *out_fle = &req_ctx->fd_flt[0];
 static int ahash_finup_no_ctx(struct ahash_request *req)
 {
        struct crypto_ahash *ahash = crypto_ahash_reqtfm(req);
-       struct caam_hash_ctx *ctx = crypto_ahash_ctx(ahash);
-       struct caam_hash_state *state = ahash_request_ctx(req);
+       struct caam_hash_ctx *ctx = crypto_ahash_ctx_dma(ahash);
+       struct caam_hash_state *state = ahash_request_ctx_dma(req);
        struct caam_request *req_ctx = &state->caam_req;
        struct dpaa2_fl_entry *in_fle = &req_ctx->fd_flt[1];
        struct dpaa2_fl_entry *out_fle = &req_ctx->fd_flt[0];
 static int ahash_update_first(struct ahash_request *req)
 {
        struct crypto_ahash *ahash = crypto_ahash_reqtfm(req);
-       struct caam_hash_ctx *ctx = crypto_ahash_ctx(ahash);
-       struct caam_hash_state *state = ahash_request_ctx(req);
+       struct caam_hash_ctx *ctx = crypto_ahash_ctx_dma(ahash);
+       struct caam_hash_state *state = ahash_request_ctx_dma(req);
        struct caam_request *req_ctx = &state->caam_req;
        struct dpaa2_fl_entry *in_fle = &req_ctx->fd_flt[1];
        struct dpaa2_fl_entry *out_fle = &req_ctx->fd_flt[0];
 
 static int ahash_init(struct ahash_request *req)
 {
-       struct caam_hash_state *state = ahash_request_ctx(req);
+       struct caam_hash_state *state = ahash_request_ctx_dma(req);
 
        state->update = ahash_update_first;
        state->finup = ahash_finup_first;
 
 static int ahash_update(struct ahash_request *req)
 {
-       struct caam_hash_state *state = ahash_request_ctx(req);
+       struct caam_hash_state *state = ahash_request_ctx_dma(req);
 
        return state->update(req);
 }
 
 static int ahash_finup(struct ahash_request *req)
 {
-       struct caam_hash_state *state = ahash_request_ctx(req);
+       struct caam_hash_state *state = ahash_request_ctx_dma(req);
 
        return state->finup(req);
 }
 
 static int ahash_final(struct ahash_request *req)
 {
-       struct caam_hash_state *state = ahash_request_ctx(req);
+       struct caam_hash_state *state = ahash_request_ctx_dma(req);
 
        return state->final(req);
 }
 
 static int ahash_export(struct ahash_request *req, void *out)
 {
-       struct caam_hash_state *state = ahash_request_ctx(req);
+       struct caam_hash_state *state = ahash_request_ctx_dma(req);
        struct caam_export_state *export = out;
        u8 *buf = state->buf;
        int len = state->buflen;
 
 static int ahash_import(struct ahash_request *req, const void *in)
 {
-       struct caam_hash_state *state = ahash_request_ctx(req);
+       struct caam_hash_state *state = ahash_request_ctx_dma(req);
        const struct caam_export_state *export = in;
 
        memset(state, 0, sizeof(*state));
                 container_of(halg, struct ahash_alg, halg);
        struct caam_hash_alg *caam_hash =
                 container_of(alg, struct caam_hash_alg, ahash_alg);
-       struct caam_hash_ctx *ctx = crypto_tfm_ctx(tfm);
+       struct caam_hash_ctx *ctx = crypto_tfm_ctx_dma(tfm);
        /* Sizes for MDHA running digests: MD5, SHA1, 224, 256, 384, 512 */
        static const u8 runninglen[] = { HASH_MSG_LEN + MD5_DIGEST_SIZE,
                                         HASH_MSG_LEN + SHA1_DIGEST_SIZE,
                                   OP_ALG_ALGSEL_SUBMASK) >>
                                  OP_ALG_ALGSEL_SHIFT];
 
-       crypto_ahash_set_reqsize(__crypto_ahash_cast(tfm),
-                                sizeof(struct caam_hash_state));
+       crypto_ahash_set_reqsize_dma(ahash, sizeof(struct caam_hash_state));
 
        /*
         * For keyed hash algorithms shared descriptors
 
 static void caam_hash_cra_exit(struct crypto_tfm *tfm)
 {
-       struct caam_hash_ctx *ctx = crypto_tfm_ctx(tfm);
+       struct caam_hash_ctx *ctx = crypto_tfm_ctx_dma(tfm);
 
        dma_unmap_single_attrs(ctx->dev, ctx->flc_dma[0], sizeof(ctx->flc),
                               DMA_BIDIRECTIONAL, DMA_ATTR_SKIP_CPU_SYNC);
        alg->cra_module = THIS_MODULE;
        alg->cra_init = caam_hash_cra_init;
        alg->cra_exit = caam_hash_cra_exit;
-       alg->cra_ctxsize = sizeof(struct caam_hash_ctx);
+       alg->cra_ctxsize = sizeof(struct caam_hash_ctx) + crypto_dma_padding();
        alg->cra_priority = CAAM_CRA_PRIORITY;
        alg->cra_blocksize = template->blocksize;
        alg->cra_alignmask = 0;
 
 
 static int ahash_set_sh_desc(struct crypto_ahash *ahash)
 {
-       struct caam_hash_ctx *ctx = crypto_ahash_ctx(ahash);
+       struct caam_hash_ctx *ctx = crypto_ahash_ctx_dma(ahash);
        int digestsize = crypto_ahash_digestsize(ahash);
        struct device *jrdev = ctx->jrdev;
        struct caam_drv_private *ctrlpriv = dev_get_drvdata(jrdev->parent);
 
 static int axcbc_set_sh_desc(struct crypto_ahash *ahash)
 {
-       struct caam_hash_ctx *ctx = crypto_ahash_ctx(ahash);
+       struct caam_hash_ctx *ctx = crypto_ahash_ctx_dma(ahash);
        int digestsize = crypto_ahash_digestsize(ahash);
        struct device *jrdev = ctx->jrdev;
        u32 *desc;
 
 static int acmac_set_sh_desc(struct crypto_ahash *ahash)
 {
-       struct caam_hash_ctx *ctx = crypto_ahash_ctx(ahash);
+       struct caam_hash_ctx *ctx = crypto_ahash_ctx_dma(ahash);
        int digestsize = crypto_ahash_digestsize(ahash);
        struct device *jrdev = ctx->jrdev;
        u32 *desc;
 static int ahash_setkey(struct crypto_ahash *ahash,
                        const u8 *key, unsigned int keylen)
 {
-       struct caam_hash_ctx *ctx = crypto_ahash_ctx(ahash);
+       struct caam_hash_ctx *ctx = crypto_ahash_ctx_dma(ahash);
        struct device *jrdev = ctx->jrdev;
        int blocksize = crypto_tfm_alg_blocksize(&ahash->base);
        int digestsize = crypto_ahash_digestsize(ahash);
 static int axcbc_setkey(struct crypto_ahash *ahash, const u8 *key,
                        unsigned int keylen)
 {
-       struct caam_hash_ctx *ctx = crypto_ahash_ctx(ahash);
+       struct caam_hash_ctx *ctx = crypto_ahash_ctx_dma(ahash);
        struct device *jrdev = ctx->jrdev;
 
        if (keylen != AES_KEYSIZE_128)
 static int acmac_setkey(struct crypto_ahash *ahash, const u8 *key,
                        unsigned int keylen)
 {
-       struct caam_hash_ctx *ctx = crypto_ahash_ctx(ahash);
+       struct caam_hash_ctx *ctx = crypto_ahash_ctx_dma(ahash);
        int err;
 
        err = aes_check_keylen(keylen);
                        struct ahash_edesc *edesc,
                        struct ahash_request *req, int dst_len)
 {
-       struct caam_hash_state *state = ahash_request_ctx(req);
+       struct caam_hash_state *state = ahash_request_ctx_dma(req);
 
        if (edesc->src_nents)
                dma_unmap_sg(dev, req->src, edesc->src_nents, DMA_TO_DEVICE);
                        struct ahash_edesc *edesc,
                        struct ahash_request *req, int dst_len, u32 flag)
 {
-       struct caam_hash_state *state = ahash_request_ctx(req);
+       struct caam_hash_state *state = ahash_request_ctx_dma(req);
 
        if (state->ctx_dma) {
                dma_unmap_single(dev, state->ctx_dma, state->ctx_dma_len, flag);
        struct ahash_edesc *edesc;
        struct crypto_ahash *ahash = crypto_ahash_reqtfm(req);
        int digestsize = crypto_ahash_digestsize(ahash);
-       struct caam_hash_state *state = ahash_request_ctx(req);
-       struct caam_hash_ctx *ctx = crypto_ahash_ctx(ahash);
+       struct caam_hash_state *state = ahash_request_ctx_dma(req);
+       struct caam_hash_ctx *ctx = crypto_ahash_ctx_dma(ahash);
        int ecode = 0;
        bool has_bklog;
 
        struct caam_drv_private_jr *jrp = dev_get_drvdata(jrdev);
        struct ahash_edesc *edesc;
        struct crypto_ahash *ahash = crypto_ahash_reqtfm(req);
-       struct caam_hash_ctx *ctx = crypto_ahash_ctx(ahash);
-       struct caam_hash_state *state = ahash_request_ctx(req);
+       struct caam_hash_ctx *ctx = crypto_ahash_ctx_dma(ahash);
+       struct caam_hash_state *state = ahash_request_ctx_dma(req);
        int digestsize = crypto_ahash_digestsize(ahash);
        int ecode = 0;
        bool has_bklog;
                                             dma_addr_t sh_desc_dma)
 {
        struct crypto_ahash *ahash = crypto_ahash_reqtfm(req);
-       struct caam_hash_ctx *ctx = crypto_ahash_ctx(ahash);
-       struct caam_hash_state *state = ahash_request_ctx(req);
+       struct caam_hash_ctx *ctx = crypto_ahash_ctx_dma(ahash);
+       struct caam_hash_state *state = ahash_request_ctx_dma(req);
        gfp_t flags = (req->base.flags & CRYPTO_TFM_REQ_MAY_SLEEP) ?
                       GFP_KERNEL : GFP_ATOMIC;
        struct ahash_edesc *edesc;
 static int ahash_do_one_req(struct crypto_engine *engine, void *areq)
 {
        struct ahash_request *req = ahash_request_cast(areq);
-       struct caam_hash_ctx *ctx = crypto_ahash_ctx(crypto_ahash_reqtfm(req));
-       struct caam_hash_state *state = ahash_request_ctx(req);
+       struct caam_hash_ctx *ctx = crypto_ahash_ctx_dma(crypto_ahash_reqtfm(req));
+       struct caam_hash_state *state = ahash_request_ctx_dma(req);
        struct device *jrdev = ctx->jrdev;
        u32 *desc = state->edesc->hw_desc;
        int ret;
                             int dst_len, enum dma_data_direction dir)
 {
        struct caam_drv_private_jr *jrpriv = dev_get_drvdata(jrdev);
-       struct caam_hash_state *state = ahash_request_ctx(req);
+       struct caam_hash_state *state = ahash_request_ctx_dma(req);
        struct ahash_edesc *edesc = state->edesc;
        u32 *desc = edesc->hw_desc;
        int ret;
 static int ahash_update_ctx(struct ahash_request *req)
 {
        struct crypto_ahash *ahash = crypto_ahash_reqtfm(req);
-       struct caam_hash_ctx *ctx = crypto_ahash_ctx(ahash);
-       struct caam_hash_state *state = ahash_request_ctx(req);
+       struct caam_hash_ctx *ctx = crypto_ahash_ctx_dma(ahash);
+       struct caam_hash_state *state = ahash_request_ctx_dma(req);
        struct device *jrdev = ctx->jrdev;
        u8 *buf = state->buf;
        int *buflen = &state->buflen;
 static int ahash_final_ctx(struct ahash_request *req)
 {
        struct crypto_ahash *ahash = crypto_ahash_reqtfm(req);
-       struct caam_hash_ctx *ctx = crypto_ahash_ctx(ahash);
-       struct caam_hash_state *state = ahash_request_ctx(req);
+       struct caam_hash_ctx *ctx = crypto_ahash_ctx_dma(ahash);
+       struct caam_hash_state *state = ahash_request_ctx_dma(req);
        struct device *jrdev = ctx->jrdev;
        int buflen = state->buflen;
        u32 *desc;
 static int ahash_finup_ctx(struct ahash_request *req)
 {
        struct crypto_ahash *ahash = crypto_ahash_reqtfm(req);
-       struct caam_hash_ctx *ctx = crypto_ahash_ctx(ahash);
-       struct caam_hash_state *state = ahash_request_ctx(req);
+       struct caam_hash_ctx *ctx = crypto_ahash_ctx_dma(ahash);
+       struct caam_hash_state *state = ahash_request_ctx_dma(req);
        struct device *jrdev = ctx->jrdev;
        int buflen = state->buflen;
        u32 *desc;
 static int ahash_digest(struct ahash_request *req)
 {
        struct crypto_ahash *ahash = crypto_ahash_reqtfm(req);
-       struct caam_hash_ctx *ctx = crypto_ahash_ctx(ahash);
-       struct caam_hash_state *state = ahash_request_ctx(req);
+       struct caam_hash_ctx *ctx = crypto_ahash_ctx_dma(ahash);
+       struct caam_hash_state *state = ahash_request_ctx_dma(req);
        struct device *jrdev = ctx->jrdev;
        u32 *desc;
        int digestsize = crypto_ahash_digestsize(ahash);
 static int ahash_final_no_ctx(struct ahash_request *req)
 {
        struct crypto_ahash *ahash = crypto_ahash_reqtfm(req);
-       struct caam_hash_ctx *ctx = crypto_ahash_ctx(ahash);
-       struct caam_hash_state *state = ahash_request_ctx(req);
+       struct caam_hash_ctx *ctx = crypto_ahash_ctx_dma(ahash);
+       struct caam_hash_state *state = ahash_request_ctx_dma(req);
        struct device *jrdev = ctx->jrdev;
        u8 *buf = state->buf;
        int buflen = state->buflen;
 static int ahash_update_no_ctx(struct ahash_request *req)
 {
        struct crypto_ahash *ahash = crypto_ahash_reqtfm(req);
-       struct caam_hash_ctx *ctx = crypto_ahash_ctx(ahash);
-       struct caam_hash_state *state = ahash_request_ctx(req);
+       struct caam_hash_ctx *ctx = crypto_ahash_ctx_dma(ahash);
+       struct caam_hash_state *state = ahash_request_ctx_dma(req);
        struct device *jrdev = ctx->jrdev;
        u8 *buf = state->buf;
        int *buflen = &state->buflen;
 static int ahash_finup_no_ctx(struct ahash_request *req)
 {
        struct crypto_ahash *ahash = crypto_ahash_reqtfm(req);
-       struct caam_hash_ctx *ctx = crypto_ahash_ctx(ahash);
-       struct caam_hash_state *state = ahash_request_ctx(req);
+       struct caam_hash_ctx *ctx = crypto_ahash_ctx_dma(ahash);
+       struct caam_hash_state *state = ahash_request_ctx_dma(req);
        struct device *jrdev = ctx->jrdev;
        int buflen = state->buflen;
        u32 *desc;
 static int ahash_update_first(struct ahash_request *req)
 {
        struct crypto_ahash *ahash = crypto_ahash_reqtfm(req);
-       struct caam_hash_ctx *ctx = crypto_ahash_ctx(ahash);
-       struct caam_hash_state *state = ahash_request_ctx(req);
+       struct caam_hash_ctx *ctx = crypto_ahash_ctx_dma(ahash);
+       struct caam_hash_state *state = ahash_request_ctx_dma(req);
        struct device *jrdev = ctx->jrdev;
        u8 *buf = state->buf;
        int *buflen = &state->buflen;
 
 static int ahash_init(struct ahash_request *req)
 {
-       struct caam_hash_state *state = ahash_request_ctx(req);
+       struct caam_hash_state *state = ahash_request_ctx_dma(req);
 
        state->update = ahash_update_first;
        state->finup = ahash_finup_first;
 
 static int ahash_update(struct ahash_request *req)
 {
-       struct caam_hash_state *state = ahash_request_ctx(req);
+       struct caam_hash_state *state = ahash_request_ctx_dma(req);
 
        return state->update(req);
 }
 
 static int ahash_finup(struct ahash_request *req)
 {
-       struct caam_hash_state *state = ahash_request_ctx(req);
+       struct caam_hash_state *state = ahash_request_ctx_dma(req);
 
        return state->finup(req);
 }
 
 static int ahash_final(struct ahash_request *req)
 {
-       struct caam_hash_state *state = ahash_request_ctx(req);
+       struct caam_hash_state *state = ahash_request_ctx_dma(req);
 
        return state->final(req);
 }
 
 static int ahash_export(struct ahash_request *req, void *out)
 {
-       struct caam_hash_state *state = ahash_request_ctx(req);
+       struct caam_hash_state *state = ahash_request_ctx_dma(req);
        struct caam_export_state *export = out;
        u8 *buf = state->buf;
        int len = state->buflen;
 
 static int ahash_import(struct ahash_request *req, const void *in)
 {
-       struct caam_hash_state *state = ahash_request_ctx(req);
+       struct caam_hash_state *state = ahash_request_ctx_dma(req);
        const struct caam_export_state *export = in;
 
        memset(state, 0, sizeof(*state));
                 container_of(halg, struct ahash_alg, halg);
        struct caam_hash_alg *caam_hash =
                 container_of(alg, struct caam_hash_alg, ahash_alg);
-       struct caam_hash_ctx *ctx = crypto_tfm_ctx(tfm);
+       struct caam_hash_ctx *ctx = crypto_ahash_ctx_dma(ahash);
        /* Sizes for MDHA running digests: MD5, SHA1, 224, 256, 384, 512 */
        static const u8 runninglen[] = { HASH_MSG_LEN + MD5_DIGEST_SIZE,
                                         HASH_MSG_LEN + SHA1_DIGEST_SIZE,
 
        ctx->enginectx.op.do_one_request = ahash_do_one_req;
 
-       crypto_ahash_set_reqsize(__crypto_ahash_cast(tfm),
-                                sizeof(struct caam_hash_state));
+       crypto_ahash_set_reqsize_dma(ahash, sizeof(struct caam_hash_state));
 
        /*
         * For keyed hash algorithms shared descriptors
 
 static void caam_hash_cra_exit(struct crypto_tfm *tfm)
 {
-       struct caam_hash_ctx *ctx = crypto_tfm_ctx(tfm);
+       struct caam_hash_ctx *ctx = crypto_tfm_ctx_dma(tfm);
 
        dma_unmap_single_attrs(ctx->jrdev, ctx->sh_desc_update_dma,
                               offsetof(struct caam_hash_ctx, key) -
        alg->cra_module = THIS_MODULE;
        alg->cra_init = caam_hash_cra_init;
        alg->cra_exit = caam_hash_cra_exit;
-       alg->cra_ctxsize = sizeof(struct caam_hash_ctx);
+       alg->cra_ctxsize = sizeof(struct caam_hash_ctx) + crypto_dma_padding();
        alg->cra_priority = CAAM_CRA_PRIORITY;
        alg->cra_blocksize = template->blocksize;
        alg->cra_alignmask = 0;
 
                          struct akcipher_request *req)
 {
        struct crypto_akcipher *tfm = crypto_akcipher_reqtfm(req);
-       struct caam_rsa_ctx *ctx = akcipher_tfm_ctx(tfm);
+       struct caam_rsa_ctx *ctx = akcipher_tfm_ctx_dma(tfm);
        struct caam_rsa_key *key = &ctx->key;
        struct rsa_pub_pdb *pdb = &edesc->pdb.pub;
 
                              struct akcipher_request *req)
 {
        struct crypto_akcipher *tfm = crypto_akcipher_reqtfm(req);
-       struct caam_rsa_ctx *ctx = akcipher_tfm_ctx(tfm);
+       struct caam_rsa_ctx *ctx = akcipher_tfm_ctx_dma(tfm);
        struct caam_rsa_key *key = &ctx->key;
        struct rsa_priv_f1_pdb *pdb = &edesc->pdb.priv_f1;
 
                              struct akcipher_request *req)
 {
        struct crypto_akcipher *tfm = crypto_akcipher_reqtfm(req);
-       struct caam_rsa_ctx *ctx = akcipher_tfm_ctx(tfm);
+       struct caam_rsa_ctx *ctx = akcipher_tfm_ctx_dma(tfm);
        struct caam_rsa_key *key = &ctx->key;
        struct rsa_priv_f2_pdb *pdb = &edesc->pdb.priv_f2;
        size_t p_sz = key->p_sz;
                              struct akcipher_request *req)
 {
        struct crypto_akcipher *tfm = crypto_akcipher_reqtfm(req);
-       struct caam_rsa_ctx *ctx = akcipher_tfm_ctx(tfm);
+       struct caam_rsa_ctx *ctx = akcipher_tfm_ctx_dma(tfm);
        struct caam_rsa_key *key = &ctx->key;
        struct rsa_priv_f3_pdb *pdb = &edesc->pdb.priv_f3;
        size_t p_sz = key->p_sz;
        struct akcipher_request *req = context;
        struct crypto_akcipher *tfm = crypto_akcipher_reqtfm(req);
        struct caam_drv_private_jr *jrp = dev_get_drvdata(dev);
-       struct caam_rsa_ctx *ctx = akcipher_tfm_ctx(tfm);
+       struct caam_rsa_ctx *ctx = akcipher_tfm_ctx_dma(tfm);
        struct caam_rsa_key *key = &ctx->key;
        struct caam_rsa_req_ctx *req_ctx = akcipher_request_ctx(req);
        struct rsa_edesc *edesc;
                                         size_t desclen)
 {
        struct crypto_akcipher *tfm = crypto_akcipher_reqtfm(req);
-       struct caam_rsa_ctx *ctx = akcipher_tfm_ctx(tfm);
+       struct caam_rsa_ctx *ctx = akcipher_tfm_ctx_dma(tfm);
        struct device *dev = ctx->dev;
        struct caam_rsa_req_ctx *req_ctx = akcipher_request_ctx(req);
        struct caam_rsa_key *key = &ctx->key;
                                                    base);
        struct crypto_akcipher *tfm = crypto_akcipher_reqtfm(req);
        struct caam_rsa_req_ctx *req_ctx = akcipher_request_ctx(req);
-       struct caam_rsa_ctx *ctx = akcipher_tfm_ctx(tfm);
+       struct caam_rsa_ctx *ctx = akcipher_tfm_ctx_dma(tfm);
        struct device *jrdev = ctx->dev;
        u32 *desc = req_ctx->edesc->hw_desc;
        int ret;
 {
        struct crypto_akcipher *tfm = crypto_akcipher_reqtfm(req);
        struct caam_rsa_req_ctx *req_ctx = akcipher_request_ctx(req);
-       struct caam_rsa_ctx *ctx = akcipher_tfm_ctx(tfm);
+       struct caam_rsa_ctx *ctx = akcipher_tfm_ctx_dma(tfm);
        struct caam_rsa_key *key = &ctx->key;
        struct device *dev = ctx->dev;
        struct rsa_pub_pdb *pdb = &edesc->pdb.pub;
                               struct rsa_edesc *edesc)
 {
        struct crypto_akcipher *tfm = crypto_akcipher_reqtfm(req);
-       struct caam_rsa_ctx *ctx = akcipher_tfm_ctx(tfm);
+       struct caam_rsa_ctx *ctx = akcipher_tfm_ctx_dma(tfm);
        struct caam_rsa_key *key = &ctx->key;
        struct device *dev = ctx->dev;
        struct rsa_priv_f1_pdb *pdb = &edesc->pdb.priv_f1;
                               struct rsa_edesc *edesc)
 {
        struct crypto_akcipher *tfm = crypto_akcipher_reqtfm(req);
-       struct caam_rsa_ctx *ctx = akcipher_tfm_ctx(tfm);
+       struct caam_rsa_ctx *ctx = akcipher_tfm_ctx_dma(tfm);
        struct caam_rsa_key *key = &ctx->key;
        struct device *dev = ctx->dev;
        struct rsa_priv_f2_pdb *pdb = &edesc->pdb.priv_f2;
                               struct rsa_edesc *edesc)
 {
        struct crypto_akcipher *tfm = crypto_akcipher_reqtfm(req);
-       struct caam_rsa_ctx *ctx = akcipher_tfm_ctx(tfm);
+       struct caam_rsa_ctx *ctx = akcipher_tfm_ctx_dma(tfm);
        struct caam_rsa_key *key = &ctx->key;
        struct device *dev = ctx->dev;
        struct rsa_priv_f3_pdb *pdb = &edesc->pdb.priv_f3;
 {
        struct caam_drv_private_jr *jrpriv = dev_get_drvdata(jrdev);
        struct crypto_akcipher *tfm = crypto_akcipher_reqtfm(req);
-       struct caam_rsa_ctx *ctx = akcipher_tfm_ctx(tfm);
+       struct caam_rsa_ctx *ctx = akcipher_tfm_ctx_dma(tfm);
        struct caam_rsa_key *key = &ctx->key;
        struct caam_rsa_req_ctx *req_ctx = akcipher_request_ctx(req);
        struct rsa_edesc *edesc = req_ctx->edesc;
 static int caam_rsa_enc(struct akcipher_request *req)
 {
        struct crypto_akcipher *tfm = crypto_akcipher_reqtfm(req);
-       struct caam_rsa_ctx *ctx = akcipher_tfm_ctx(tfm);
+       struct caam_rsa_ctx *ctx = akcipher_tfm_ctx_dma(tfm);
        struct caam_rsa_key *key = &ctx->key;
        struct device *jrdev = ctx->dev;
        struct rsa_edesc *edesc;
 static int caam_rsa_dec_priv_f1(struct akcipher_request *req)
 {
        struct crypto_akcipher *tfm = crypto_akcipher_reqtfm(req);
-       struct caam_rsa_ctx *ctx = akcipher_tfm_ctx(tfm);
+       struct caam_rsa_ctx *ctx = akcipher_tfm_ctx_dma(tfm);
        struct device *jrdev = ctx->dev;
        struct rsa_edesc *edesc;
        int ret;
 static int caam_rsa_dec_priv_f2(struct akcipher_request *req)
 {
        struct crypto_akcipher *tfm = crypto_akcipher_reqtfm(req);
-       struct caam_rsa_ctx *ctx = akcipher_tfm_ctx(tfm);
+       struct caam_rsa_ctx *ctx = akcipher_tfm_ctx_dma(tfm);
        struct device *jrdev = ctx->dev;
        struct rsa_edesc *edesc;
        int ret;
 static int caam_rsa_dec_priv_f3(struct akcipher_request *req)
 {
        struct crypto_akcipher *tfm = crypto_akcipher_reqtfm(req);
-       struct caam_rsa_ctx *ctx = akcipher_tfm_ctx(tfm);
+       struct caam_rsa_ctx *ctx = akcipher_tfm_ctx_dma(tfm);
        struct device *jrdev = ctx->dev;
        struct rsa_edesc *edesc;
        int ret;
 static int caam_rsa_dec(struct akcipher_request *req)
 {
        struct crypto_akcipher *tfm = crypto_akcipher_reqtfm(req);
-       struct caam_rsa_ctx *ctx = akcipher_tfm_ctx(tfm);
+       struct caam_rsa_ctx *ctx = akcipher_tfm_ctx_dma(tfm);
        struct caam_rsa_key *key = &ctx->key;
        int ret;
 
 static int caam_rsa_set_pub_key(struct crypto_akcipher *tfm, const void *key,
                                unsigned int keylen)
 {
-       struct caam_rsa_ctx *ctx = akcipher_tfm_ctx(tfm);
+       struct caam_rsa_ctx *ctx = akcipher_tfm_ctx_dma(tfm);
        struct rsa_key raw_key = {NULL};
        struct caam_rsa_key *rsa_key = &ctx->key;
        int ret;
 static int caam_rsa_set_priv_key(struct crypto_akcipher *tfm, const void *key,
                                 unsigned int keylen)
 {
-       struct caam_rsa_ctx *ctx = akcipher_tfm_ctx(tfm);
+       struct caam_rsa_ctx *ctx = akcipher_tfm_ctx_dma(tfm);
        struct rsa_key raw_key = {NULL};
        struct caam_rsa_key *rsa_key = &ctx->key;
        int ret;
 
 static unsigned int caam_rsa_max_size(struct crypto_akcipher *tfm)
 {
-       struct caam_rsa_ctx *ctx = akcipher_tfm_ctx(tfm);
+       struct caam_rsa_ctx *ctx = akcipher_tfm_ctx_dma(tfm);
 
        return ctx->key.n_sz;
 }
 /* Per session pkc's driver context creation function */
 static int caam_rsa_init_tfm(struct crypto_akcipher *tfm)
 {
-       struct caam_rsa_ctx *ctx = akcipher_tfm_ctx(tfm);
+       struct caam_rsa_ctx *ctx = akcipher_tfm_ctx_dma(tfm);
 
        akcipher_set_reqsize(tfm, sizeof(struct caam_rsa_req_ctx));
 
 /* Per session pkc's driver context cleanup function */
 static void caam_rsa_exit_tfm(struct crypto_akcipher *tfm)
 {
-       struct caam_rsa_ctx *ctx = akcipher_tfm_ctx(tfm);
+       struct caam_rsa_ctx *ctx = akcipher_tfm_ctx_dma(tfm);
        struct caam_rsa_key *key = &ctx->key;
 
        dma_unmap_single(ctx->dev, ctx->padding_dma, CAAM_RSA_MAX_INPUT_SIZE -
                        .cra_driver_name = "rsa-caam",
                        .cra_priority = 3000,
                        .cra_module = THIS_MODULE,
-                       .cra_ctxsize = sizeof(struct caam_rsa_ctx),
+                       .cra_ctxsize = sizeof(struct caam_rsa_ctx) +
+                                      CRYPTO_DMA_PADDING,
                },
        }
 };