Skip to content

Commit

Permalink
crypto: omap-sham - use runtime_pm autosuspend for clock handling
Browse files Browse the repository at this point in the history
Calling runtime PM API for every block causes serious performance hit to
crypto operations that are done on a long buffer. As crypto is performed
on a page boundary, encrypting large buffers can cause a series of crypto
operations divided by page. The runtime PM API is also called those many
times.

Convert the driver to use runtime_pm autosuspend instead, with a default
timeout value of 1 second. This results in upto ~50% speedup.

Signed-off-by: Tero Kristo <[email protected]>
Signed-off-by: Herbert Xu <[email protected]>
  • Loading branch information
Tero Kristo authored and herbertx committed Jun 24, 2016
1 parent 3c4b239 commit e93f767
Showing 1 changed file with 7 additions and 1 deletion.
8 changes: 7 additions & 1 deletion drivers/crypto/omap-sham.c
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,8 @@

#define DEFAULT_TIMEOUT_INTERVAL HZ

#define DEFAULT_AUTOSUSPEND_DELAY 1000

/* mostly device flags */
#define FLAGS_BUSY 0
#define FLAGS_FINAL 1
Expand Down Expand Up @@ -999,7 +1001,8 @@ static void omap_sham_finish_req(struct ahash_request *req, int err)
dd->flags &= ~(BIT(FLAGS_BUSY) | BIT(FLAGS_FINAL) | BIT(FLAGS_CPU) |
BIT(FLAGS_DMA_READY) | BIT(FLAGS_OUTPUT_READY));

pm_runtime_put(dd->dev);
pm_runtime_mark_last_busy(dd->dev);
pm_runtime_put_autosuspend(dd->dev);

if (req->base.complete)
req->base.complete(&req->base, err);
Expand Down Expand Up @@ -1946,6 +1949,9 @@ static int omap_sham_probe(struct platform_device *pdev)

dd->flags |= dd->pdata->flags;

pm_runtime_use_autosuspend(dev);
pm_runtime_set_autosuspend_delay(dev, DEFAULT_AUTOSUSPEND_DELAY);

pm_runtime_enable(dev);
pm_runtime_irq_safe(dev);

Expand Down

0 comments on commit e93f767

Please sign in to comment.