crypto: rockchip - remove non-aligned handling
Now driver have fallback for un-aligned cases, remove all code handling
those cases.
Fixes: ce0183cb64
("crypto: rockchip - switch to skcipher API")
Reviewed-by: John Keeping <john@metanate.com>
Signed-off-by: Corentin Labbe <clabbe@baylibre.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
parent
d6b23ccef8
commit
bb3c7b7336
|
@ -88,10 +88,6 @@ static int rk_load_data(struct rk_crypto_info *dev,
|
|||
{
|
||||
unsigned int count;
|
||||
|
||||
dev->aligned = dev->aligned ?
|
||||
check_alignment(sg_src, sg_dst, dev->align_size) :
|
||||
dev->aligned;
|
||||
if (dev->aligned) {
|
||||
count = min(dev->left_bytes, sg_src->length);
|
||||
dev->left_bytes -= count;
|
||||
|
||||
|
@ -113,39 +109,6 @@ static int rk_load_data(struct rk_crypto_info *dev,
|
|||
}
|
||||
dev->addr_out = sg_dma_address(sg_dst);
|
||||
}
|
||||
} else {
|
||||
count = (dev->left_bytes > PAGE_SIZE) ?
|
||||
PAGE_SIZE : dev->left_bytes;
|
||||
|
||||
if (!sg_pcopy_to_buffer(dev->first, dev->src_nents,
|
||||
dev->addr_vir, count,
|
||||
dev->total - dev->left_bytes)) {
|
||||
dev_err(dev->dev, "[%s:%d] pcopy err\n",
|
||||
__func__, __LINE__);
|
||||
return -EINVAL;
|
||||
}
|
||||
dev->left_bytes -= count;
|
||||
sg_init_one(&dev->sg_tmp, dev->addr_vir, count);
|
||||
if (!dma_map_sg(dev->dev, &dev->sg_tmp, 1, DMA_TO_DEVICE)) {
|
||||
dev_err(dev->dev, "[%s:%d] dma_map_sg(sg_tmp) error\n",
|
||||
__func__, __LINE__);
|
||||
return -ENOMEM;
|
||||
}
|
||||
dev->addr_in = sg_dma_address(&dev->sg_tmp);
|
||||
|
||||
if (sg_dst) {
|
||||
if (!dma_map_sg(dev->dev, &dev->sg_tmp, 1,
|
||||
DMA_FROM_DEVICE)) {
|
||||
dev_err(dev->dev,
|
||||
"[%s:%d] dma_map_sg(sg_tmp) error\n",
|
||||
__func__, __LINE__);
|
||||
dma_unmap_sg(dev->dev, &dev->sg_tmp, 1,
|
||||
DMA_TO_DEVICE);
|
||||
return -ENOMEM;
|
||||
}
|
||||
dev->addr_out = sg_dma_address(&dev->sg_tmp);
|
||||
}
|
||||
}
|
||||
dev->count = count;
|
||||
return 0;
|
||||
}
|
||||
|
@ -154,11 +117,11 @@ static void rk_unload_data(struct rk_crypto_info *dev)
|
|||
{
|
||||
struct scatterlist *sg_in, *sg_out;
|
||||
|
||||
sg_in = dev->aligned ? dev->sg_src : &dev->sg_tmp;
|
||||
sg_in = dev->sg_src;
|
||||
dma_unmap_sg(dev->dev, sg_in, 1, DMA_TO_DEVICE);
|
||||
|
||||
if (dev->sg_dst) {
|
||||
sg_out = dev->aligned ? dev->sg_dst : &dev->sg_tmp;
|
||||
sg_out = dev->sg_dst;
|
||||
dma_unmap_sg(dev->dev, sg_out, 1, DMA_FROM_DEVICE);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -204,12 +204,8 @@ struct rk_crypto_info {
|
|||
/* the public variable */
|
||||
struct scatterlist *sg_src;
|
||||
struct scatterlist *sg_dst;
|
||||
struct scatterlist sg_tmp;
|
||||
struct scatterlist *first;
|
||||
unsigned int left_bytes;
|
||||
void *addr_vir;
|
||||
int aligned;
|
||||
int align_size;
|
||||
size_t src_nents;
|
||||
size_t dst_nents;
|
||||
unsigned int total;
|
||||
|
|
|
@ -236,8 +236,6 @@ static int rk_ahash_start(struct rk_crypto_info *dev)
|
|||
|
||||
dev->total = req->nbytes;
|
||||
dev->left_bytes = req->nbytes;
|
||||
dev->aligned = 0;
|
||||
dev->align_size = 4;
|
||||
dev->sg_dst = NULL;
|
||||
dev->sg_src = req->src;
|
||||
dev->first = req->src;
|
||||
|
@ -272,7 +270,6 @@ static int rk_ahash_crypto_rx(struct rk_crypto_info *dev)
|
|||
|
||||
dev->unload_data(dev);
|
||||
if (dev->left_bytes) {
|
||||
if (dev->aligned) {
|
||||
if (sg_is_last(dev->sg_src)) {
|
||||
dev_warn(dev->dev, "[%s:%d], Lack of data\n",
|
||||
__func__, __LINE__);
|
||||
|
@ -280,7 +277,6 @@ static int rk_ahash_crypto_rx(struct rk_crypto_info *dev)
|
|||
goto out_rx;
|
||||
}
|
||||
dev->sg_src = sg_next(dev->sg_src);
|
||||
}
|
||||
err = rk_ahash_set_data_start(dev);
|
||||
} else {
|
||||
/*
|
||||
|
@ -318,11 +314,6 @@ static int rk_cra_hash_init(struct crypto_tfm *tfm)
|
|||
algt = container_of(alg, struct rk_crypto_tmp, alg.hash);
|
||||
|
||||
tctx->dev = algt->dev;
|
||||
tctx->dev->addr_vir = (void *)__get_free_page(GFP_KERNEL);
|
||||
if (!tctx->dev->addr_vir) {
|
||||
dev_err(tctx->dev->dev, "failed to kmalloc for addr_vir\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
tctx->dev->start = rk_ahash_start;
|
||||
tctx->dev->update = rk_ahash_crypto_rx;
|
||||
tctx->dev->complete = rk_ahash_crypto_complete;
|
||||
|
@ -345,7 +336,6 @@ static void rk_cra_hash_exit(struct crypto_tfm *tfm)
|
|||
{
|
||||
struct rk_ahash_ctx *tctx = crypto_tfm_ctx(tfm);
|
||||
|
||||
free_page((unsigned long)tctx->dev->addr_vir);
|
||||
crypto_free_ahash(tctx->fallback_tfm);
|
||||
}
|
||||
|
||||
|
|
|
@ -356,7 +356,6 @@ static int rk_ablk_start(struct rk_crypto_info *dev)
|
|||
dev->src_nents = sg_nents(req->src);
|
||||
dev->sg_dst = req->dst;
|
||||
dev->dst_nents = sg_nents(req->dst);
|
||||
dev->aligned = 1;
|
||||
|
||||
spin_lock_irqsave(&dev->lock, flags);
|
||||
rk_ablk_hw_init(dev);
|
||||
|
@ -376,13 +375,9 @@ static void rk_iv_copyback(struct rk_crypto_info *dev)
|
|||
|
||||
/* Update the IV buffer to contain the next IV for encryption mode. */
|
||||
if (!(rctx->mode & RK_CRYPTO_DEC)) {
|
||||
if (dev->aligned) {
|
||||
memcpy(req->iv, sg_virt(dev->sg_dst) +
|
||||
dev->sg_dst->length - ivsize, ivsize);
|
||||
} else {
|
||||
memcpy(req->iv, dev->addr_vir +
|
||||
dev->count - ivsize, ivsize);
|
||||
}
|
||||
memcpy(req->iv,
|
||||
sg_virt(dev->sg_dst) + dev->sg_dst->length - ivsize,
|
||||
ivsize);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -420,18 +415,8 @@ static int rk_ablk_rx(struct rk_crypto_info *dev)
|
|||
skcipher_request_cast(dev->async_req);
|
||||
|
||||
dev->unload_data(dev);
|
||||
if (!dev->aligned) {
|
||||
if (!sg_pcopy_from_buffer(req->dst, dev->dst_nents,
|
||||
dev->addr_vir, dev->count,
|
||||
dev->total - dev->left_bytes -
|
||||
dev->count)) {
|
||||
err = -EINVAL;
|
||||
goto out_rx;
|
||||
}
|
||||
}
|
||||
if (dev->left_bytes) {
|
||||
rk_update_iv(dev);
|
||||
if (dev->aligned) {
|
||||
if (sg_is_last(dev->sg_src)) {
|
||||
dev_err(dev->dev, "[%s:%d] Lack of data\n",
|
||||
__func__, __LINE__);
|
||||
|
@ -440,7 +425,6 @@ static int rk_ablk_rx(struct rk_crypto_info *dev)
|
|||
}
|
||||
dev->sg_src = sg_next(dev->sg_src);
|
||||
dev->sg_dst = sg_next(dev->sg_dst);
|
||||
}
|
||||
err = rk_set_data_start(dev);
|
||||
} else {
|
||||
rk_iv_copyback(dev);
|
||||
|
@ -462,13 +446,9 @@ static int rk_ablk_init_tfm(struct crypto_skcipher *tfm)
|
|||
algt = container_of(alg, struct rk_crypto_tmp, alg.skcipher);
|
||||
|
||||
ctx->dev = algt->dev;
|
||||
ctx->dev->align_size = crypto_tfm_alg_alignmask(crypto_skcipher_tfm(tfm)) + 1;
|
||||
ctx->dev->start = rk_ablk_start;
|
||||
ctx->dev->update = rk_ablk_rx;
|
||||
ctx->dev->complete = rk_crypto_complete;
|
||||
ctx->dev->addr_vir = (char *)__get_free_page(GFP_KERNEL);
|
||||
if (!ctx->dev->addr_vir)
|
||||
return -ENOMEM;
|
||||
|
||||
ctx->fallback_tfm = crypto_alloc_skcipher(name, 0, CRYPTO_ALG_NEED_FALLBACK);
|
||||
if (IS_ERR(ctx->fallback_tfm)) {
|
||||
|
@ -488,7 +468,6 @@ static void rk_ablk_exit_tfm(struct crypto_skcipher *tfm)
|
|||
struct rk_cipher_ctx *ctx = crypto_skcipher_ctx(tfm);
|
||||
|
||||
memzero_explicit(ctx->key, ctx->keylen);
|
||||
free_page((unsigned long)ctx->dev->addr_vir);
|
||||
crypto_free_skcipher(ctx->fallback_tfm);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue