|
@@ -789,10 +789,13 @@ static int omap_sham_update_cpu(struct omap_sham_dev *dd)
|
|
|
dev_dbg(dd->dev, "cpu: bufcnt: %u, digcnt: %d, final: %d\n",
|
|
|
ctx->bufcnt, ctx->digcnt, final);
|
|
|
|
|
|
- bufcnt = ctx->bufcnt;
|
|
|
- ctx->bufcnt = 0;
|
|
|
+ if (final || (ctx->bufcnt == ctx->buflen && ctx->total)) {
|
|
|
+ bufcnt = ctx->bufcnt;
|
|
|
+ ctx->bufcnt = 0;
|
|
|
+ return omap_sham_xmit_cpu(dd, ctx->buffer, bufcnt, final);
|
|
|
+ }
|
|
|
|
|
|
- return omap_sham_xmit_cpu(dd, ctx->buffer, bufcnt, final);
|
|
|
+ return 0;
|
|
|
}
|
|
|
|
|
|
static int omap_sham_update_dma_stop(struct omap_sham_dev *dd)
|
|
@@ -1103,6 +1106,9 @@ static int omap_sham_update(struct ahash_request *req)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+ if (dd->polling_mode)
|
|
|
+ ctx->flags |= BIT(FLAGS_CPU);
|
|
|
+
|
|
|
return omap_sham_enqueue(req, OP_UPDATE);
|
|
|
}
|
|
|
|