if (ret)
                return ret;
 
+       if (in_state->byte_count >= sizeof(in_state->block))
+               mv_cesa_update_op_cfg(&creq->op_tmpl,
+                                     CESA_SA_DESC_CFG_MID_FRAG,
+                                     CESA_SA_DESC_CFG_FRAG_MSK);
+
        creq->len = in_state->byte_count;
        memcpy(creq->state, in_state->hash, digsize);
        creq->cache_ptr = 0;
        if (ret)
                return ret;
 
+       if (in_state->count >= SHA1_BLOCK_SIZE)
+               mv_cesa_update_op_cfg(&creq->op_tmpl,
+                                     CESA_SA_DESC_CFG_MID_FRAG,
+                                     CESA_SA_DESC_CFG_FRAG_MSK);
+
        creq->len = in_state->count;
        memcpy(creq->state, in_state->state, digsize);
        creq->cache_ptr = 0;
        if (ret)
                return ret;
 
+       if (in_state->count >= SHA256_BLOCK_SIZE)
+               mv_cesa_update_op_cfg(&creq->op_tmpl,
+                                     CESA_SA_DESC_CFG_MID_FRAG,
+                                     CESA_SA_DESC_CFG_FRAG_MSK);
+
        creq->len = in_state->count;
        memcpy(creq->state, in_state->state, digsize);
        creq->cache_ptr = 0;