@@ -369,7 +369,6 @@ struct hash_device_data {
spinlock_t power_state_lock;
struct regulator *regulator;
struct clk *clk;
- struct hash_state state; /* Used for saving and resuming state */
struct hash_dma dma;
};
@@ -674,19 +674,7 @@ static int hash_process_data(struct hash_device_data *device_data,
break;
}
- if (req_ctx->hw_initialized) {
- ret = hash_resume_state(device_data,
- &device_data->state);
- memmove(req_ctx->state.buffer,
- device_data->state.buffer,
- HASH_BLOCK_SIZE);
- if (ret) {
- dev_err(device_data->dev,
- "%s: hash_resume_state() failed!\n",
- __func__);
- goto out;
- }
- } else {
+ if (!req_ctx->hw_initialized) {
ret = init_hash_hw(device_data, ctx);
if (ret) {
dev_err(device_data->dev,
@@ -725,17 +713,6 @@ static int hash_process_data(struct hash_device_data *device_data,
msg_length -= (HASH_BLOCK_SIZE - *index);
*index = 0;
- ret = hash_save_state(device_data,
- &device_data->state);
-
- memmove(device_data->state.buffer,
- req_ctx->state.buffer,
- HASH_BLOCK_SIZE);
- if (ret) {
- dev_err(device_data->dev, "%s: hash_save_state() failed!\n",
- __func__);
- goto out;
- }
} while (msg_length != 0);
out:
@@ -759,15 +736,7 @@ static int hash_dma_final(struct ahash_request *req)
dev_dbg(device_data->dev, "%s: (ctx=0x%lx)!\n", __func__,
(unsigned long)ctx);
- if (req_ctx->hw_initialized) {
- ret = hash_resume_state(device_data, &device_data->state);
-
- if (ret) {
- dev_err(device_data->dev, "%s: hash_resume_state() failed!\n",
- __func__);
- goto out;
- }
- } else {
+ if (!req_ctx->hw_initialized) {
ret = hash_setconfiguration(device_data, ctx);
if (ret) {
dev_err(device_data->dev,
@@ -858,13 +827,8 @@ static int hash_hw_final(struct ahash_request *req)
(unsigned long)ctx);
if (req_ctx->hw_initialized) {
- ret = hash_resume_state(device_data, &device_data->state);
-
- if (ret) {
- dev_err(device_data->dev,
- "%s: hash_resume_state() failed!\n", __func__);
- goto out;
- }
+ /* That's fine, result is in HW */
+ dev_dbg(device_data->dev, "%s hw initialized\n", __func__);
} else if (req->nbytes == 0 && ctx->keylen == 0) {
u8 zero_hash[SHA256_DIGEST_SIZE];
u32 zero_hash_size = 0;
The driver is saving/restoring state very intensively, because of assumptions that suspend/resume can be called at any time. (Android behaviours.) We removed the state save/restore from the PM hooks and will use runtime PM for this instead so get rid of this. Signed-off-by: Linus Walleij <linus.walleij@linaro.org> --- ChangeLog v1->v2: - No changes --- drivers/crypto/ux500/hash/hash_alg.h | 1 - drivers/crypto/ux500/hash/hash_core.c | 44 +++------------------------ 2 files changed, 4 insertions(+), 41 deletions(-)