summaryrefslogtreecommitdiff
path: root/drivers/crypto/ux500/cryp/cryp_core.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/crypto/ux500/cryp/cryp_core.c')
-rw-r--r--drivers/crypto/ux500/cryp/cryp_core.c23
1 files changed, 10 insertions, 13 deletions
diff --git a/drivers/crypto/ux500/cryp/cryp_core.c b/drivers/crypto/ux500/cryp/cryp_core.c
index 0276501831a..da168cb57f6 100644
--- a/drivers/crypto/ux500/cryp/cryp_core.c
+++ b/drivers/crypto/ux500/cryp/cryp_core.c
@@ -376,11 +376,11 @@ static int cryp_setup_context(struct cryp_ctx *ctx,
switch (cryp_mode) {
case CRYP_MODE_INTERRUPT:
- writel(CRYP_IMSC_DEFAULT, &device_data->base->imsc);
+ writel_relaxed(CRYP_IMSC_DEFAULT, &device_data->base->imsc);
break;
case CRYP_MODE_DMA:
- writel(CRYP_DMACR_DEFAULT, &device_data->base->dmacr);
+ writel_relaxed(CRYP_DMACR_DEFAULT, &device_data->base->dmacr);
break;
default:
@@ -416,7 +416,8 @@ static int cryp_setup_context(struct cryp_ctx *ctx,
} else
control_register = ctx->dev_ctx.cr;
- writel(control_register | (CRYP_CRYPEN_ENABLE << CRYP_CR_CRYPEN_POS),
+ writel(control_register |
+ (CRYP_CRYPEN_ENABLE << CRYP_CR_CRYPEN_POS),
&device_data->base->cr);
return 0;
@@ -634,23 +635,19 @@ static int cryp_dma_read(struct cryp_ctx *ctx, struct scatterlist *sg, int len)
static void cryp_polling_mode(struct cryp_ctx *ctx,
struct cryp_device_data *device_data)
{
- int i;
+ int len = ctx->blocksize / BYTES_PER_WORD;
int remaining_length = ctx->datalen;
u32 *indata = (u32 *)ctx->indata;
u32 *outdata = (u32 *)ctx->outdata;
while (remaining_length > 0) {
- for (i = 0; i < ctx->blocksize / BYTES_PER_WORD; i++) {
- writel(*indata, &device_data->base->din);
- ++indata;
- remaining_length -= BYTES_PER_WORD;
- }
+ writesl(&device_data->base->din, indata, len);
+ indata += len;
+ remaining_length -= (len * BYTES_PER_WORD);
cryp_wait_until_done(device_data);
- for (i = 0; i < ctx->blocksize / BYTES_PER_WORD; i++) {
- *outdata = readl(&device_data->base->dout);
- ++outdata;
- }
+ readsl(&device_data->base->dout, outdata, len);
+ outdata += len;
cryp_wait_until_done(device_data);
}
}