Skip to content

Commit

Permalink
crypto: atmel-aes - remove calls of clk_prepare() from atomic contexts
Browse files Browse the repository at this point in the history
clk_prepare()/clk_unprepare() must not be called within atomic context.

This patch calls clk_prepare() once for all from atmel_aes_probe() and
clk_unprepare() from atmel_aes_remove().

Then calls of clk_prepare_enable()/clk_disable_unprepare() were replaced
by calls of clk_enable()/clk_disable().

Cc: [email protected]
Signed-off-by: Cyrille Pitchen <[email protected]>
Reported-by: Matthias Mayr <[email protected]>
Signed-off-by: Herbert Xu <[email protected]>
  • Loading branch information
Cyrille Pitchen authored and herbertx committed Jan 30, 2016
1 parent fe09786 commit 49a2045
Showing 1 changed file with 12 additions and 4 deletions.
16 changes: 12 additions & 4 deletions drivers/crypto/atmel-aes.c
Original file line number Diff line number Diff line change
Expand Up @@ -400,7 +400,7 @@ static int atmel_aes_hw_init(struct atmel_aes_dev *dd)
{
int err;

err = clk_prepare_enable(dd->iclk);
err = clk_enable(dd->iclk);
if (err)
return err;

Expand Down Expand Up @@ -430,7 +430,7 @@ static int atmel_aes_hw_version_init(struct atmel_aes_dev *dd)

dev_info(dd->dev, "version: 0x%x\n", dd->hw_version);

clk_disable_unprepare(dd->iclk);
clk_disable(dd->iclk);
return 0;
}

Expand All @@ -448,7 +448,7 @@ static inline bool atmel_aes_is_encrypt(const struct atmel_aes_dev *dd)

static inline int atmel_aes_complete(struct atmel_aes_dev *dd, int err)
{
clk_disable_unprepare(dd->iclk);
clk_disable(dd->iclk);
dd->flags &= ~AES_FLAGS_BUSY;

if (dd->is_async)
Expand Down Expand Up @@ -2091,10 +2091,14 @@ static int atmel_aes_probe(struct platform_device *pdev)
goto res_err;
}

err = atmel_aes_hw_version_init(aes_dd);
err = clk_prepare(aes_dd->iclk);
if (err)
goto res_err;

err = atmel_aes_hw_version_init(aes_dd);
if (err)
goto iclk_unprepare;

atmel_aes_get_cap(aes_dd);

err = atmel_aes_buff_init(aes_dd);
Expand Down Expand Up @@ -2127,6 +2131,8 @@ static int atmel_aes_probe(struct platform_device *pdev)
err_aes_dma:
atmel_aes_buff_cleanup(aes_dd);
err_aes_buff:
iclk_unprepare:
clk_unprepare(aes_dd->iclk);
res_err:
tasklet_kill(&aes_dd->done_task);
tasklet_kill(&aes_dd->queue_task);
Expand Down Expand Up @@ -2155,6 +2161,8 @@ static int atmel_aes_remove(struct platform_device *pdev)
atmel_aes_dma_cleanup(aes_dd);
atmel_aes_buff_cleanup(aes_dd);

clk_unprepare(aes_dd->iclk);

return 0;
}

Expand Down

0 comments on commit 49a2045

Please sign in to comment.