Skip to content

Commit 49a2045

Browse files
Cyrille Pitchenherbertx
authored andcommitted
crypto: atmel-aes - remove calls of clk_prepare() from atomic contexts
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]>
1 parent fe09786 commit 49a2045

File tree

1 file changed

+12
-4
lines changed

1 file changed

+12
-4
lines changed

drivers/crypto/atmel-aes.c

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -400,7 +400,7 @@ static int atmel_aes_hw_init(struct atmel_aes_dev *dd)
400400
{
401401
int err;
402402

403-
err = clk_prepare_enable(dd->iclk);
403+
err = clk_enable(dd->iclk);
404404
if (err)
405405
return err;
406406

@@ -430,7 +430,7 @@ static int atmel_aes_hw_version_init(struct atmel_aes_dev *dd)
430430

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

433-
clk_disable_unprepare(dd->iclk);
433+
clk_disable(dd->iclk);
434434
return 0;
435435
}
436436

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

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

454454
if (dd->is_async)
@@ -2091,10 +2091,14 @@ static int atmel_aes_probe(struct platform_device *pdev)
20912091
goto res_err;
20922092
}
20932093

2094-
err = atmel_aes_hw_version_init(aes_dd);
2094+
err = clk_prepare(aes_dd->iclk);
20952095
if (err)
20962096
goto res_err;
20972097

2098+
err = atmel_aes_hw_version_init(aes_dd);
2099+
if (err)
2100+
goto iclk_unprepare;
2101+
20982102
atmel_aes_get_cap(aes_dd);
20992103

21002104
err = atmel_aes_buff_init(aes_dd);
@@ -2127,6 +2131,8 @@ static int atmel_aes_probe(struct platform_device *pdev)
21272131
err_aes_dma:
21282132
atmel_aes_buff_cleanup(aes_dd);
21292133
err_aes_buff:
2134+
iclk_unprepare:
2135+
clk_unprepare(aes_dd->iclk);
21302136
res_err:
21312137
tasklet_kill(&aes_dd->done_task);
21322138
tasklet_kill(&aes_dd->queue_task);
@@ -2155,6 +2161,8 @@ static int atmel_aes_remove(struct platform_device *pdev)
21552161
atmel_aes_dma_cleanup(aes_dd);
21562162
atmel_aes_buff_cleanup(aes_dd);
21572163

2164+
clk_unprepare(aes_dd->iclk);
2165+
21582166
return 0;
21592167
}
21602168

0 commit comments

Comments
 (0)