@@ -380,7 +380,7 @@ struct hash_device_data {
int hash_check_hw(struct hash_device_data *device_data);
int hash_setconfiguration(struct hash_device_data *device_data,
- struct hash_config *config);
+ struct hash_ctx *ctx);
void hash_begin(struct hash_device_data *device_data, struct hash_ctx *ctx);
@@ -473,7 +473,7 @@ static int init_hash_hw(struct hash_device_data *device_data,
{
int ret = 0;
- ret = hash_setconfiguration(device_data, &ctx->config);
+ ret = hash_setconfiguration(device_data, ctx);
if (ret) {
dev_err(device_data->dev, "%s: hash_setconfiguration() failed!\n",
__func__);
@@ -672,11 +672,12 @@ static void hash_incrementlength(struct hash_req_ctx *ctx, u32 incr)
* hash_setconfiguration - Sets the required configuration for the hash
* hardware.
* @device_data: Structure for the hash device.
- * @config: Pointer to a configuration structure.
+ * @ctx: Current context
*/
int hash_setconfiguration(struct hash_device_data *device_data,
- struct hash_config *config)
+ struct hash_ctx *ctx)
{
+ struct hash_config *config = &ctx->config;
int ret = 0;
if (config->algorithm != HASH_ALGO_SHA1 &&
@@ -711,12 +712,12 @@ int hash_setconfiguration(struct hash_device_data *device_data,
* MODE bit. This bit selects between HASH or HMAC mode for the
* selected algorithm. 0b0 = HASH and 0b1 = HMAC.
*/
- if (HASH_OPER_MODE_HASH == config->oper_mode)
+ if (config->oper_mode == HASH_OPER_MODE_HASH) {
HASH_CLEAR_BITS(&device_data->base->cr,
HASH_CR_MODE_MASK);
- else if (HASH_OPER_MODE_HMAC == config->oper_mode) {
+ } else if (config->oper_mode == HASH_OPER_MODE_HMAC) {
HASH_SET_BITS(&device_data->base->cr, HASH_CR_MODE_MASK);
- if (device_data->current_ctx->keylen > HASH_BLOCK_SIZE) {
+ if (ctx->keylen > HASH_BLOCK_SIZE) {
/* Truncate key to blocksize */
dev_dbg(device_data->dev, "%s: LKEY set\n", __func__);
HASH_SET_BITS(&device_data->base->cr,
@@ -878,7 +879,7 @@ static int hash_dma_final(struct ahash_request *req)
goto out;
}
} else {
- ret = hash_setconfiguration(device_data, &ctx->config);
+ ret = hash_setconfiguration(device_data, ctx);
if (ret) {
dev_err(device_data->dev,
"%s: hash_setconfiguration() failed!\n",
This function was dereferencing device_data->current_ctx to get the context. This is not a good idea, the device_data is serialized with an awkward semaphore construction and fragile. Also fix a checkpatch warning about putting compared constants to the right in an expression. Signed-off-by: Linus Walleij <linus.walleij@linaro.org> --- ChangeLog v1->v2: - No changes --- drivers/crypto/ux500/hash/hash_alg.h | 2 +- drivers/crypto/ux500/hash/hash_core.c | 15 ++++++++------- 2 files changed, 9 insertions(+), 8 deletions(-)