Commit 44f04c1d authored by Mark A. Greer's avatar Mark A. Greer Committed by Herbert Xu

crypto: omap-aes - Remove usage of private DMA API

Remove usage of the private OMAP DMA API.
The dmaengine API will be used instead.

CC: Russell King <rmk+kernel@arm.linux.org.uk>
CC: Dmitry Kasatkin <dmitry.kasatkin@intel.com>
Signed-off-by: default avatarMark A. Greer <mgreer@animalcreek.com>
Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
parent ebedbf79
...@@ -12,8 +12,6 @@ ...@@ -12,8 +12,6 @@
* *
*/ */
#define OMAP_AES_DMA_PRIVATE
#define pr_fmt(fmt) "%s: " fmt, __func__ #define pr_fmt(fmt) "%s: " fmt, __func__
#include <linux/err.h> #include <linux/err.h>
...@@ -115,33 +113,21 @@ struct omap_aes_dev { ...@@ -115,33 +113,21 @@ struct omap_aes_dev {
struct ablkcipher_request *req; struct ablkcipher_request *req;
size_t total; size_t total;
struct scatterlist *in_sg; struct scatterlist *in_sg;
#ifndef OMAP_AES_DMA_PRIVATE
struct scatterlist in_sgl; struct scatterlist in_sgl;
#endif
size_t in_offset; size_t in_offset;
struct scatterlist *out_sg; struct scatterlist *out_sg;
#ifndef OMAP_AES_DMA_PRIVATE
struct scatterlist out_sgl; struct scatterlist out_sgl;
#endif
size_t out_offset; size_t out_offset;
size_t buflen; size_t buflen;
void *buf_in; void *buf_in;
size_t dma_size; size_t dma_size;
int dma_in; int dma_in;
#ifdef OMAP_AES_DMA_PRIVATE
int dma_lch_in;
#else
struct dma_chan *dma_lch_in; struct dma_chan *dma_lch_in;
#endif
dma_addr_t dma_addr_in; dma_addr_t dma_addr_in;
void *buf_out; void *buf_out;
int dma_out; int dma_out;
#ifdef OMAP_AES_DMA_PRIVATE
int dma_lch_out;
#else
struct dma_chan *dma_lch_out; struct dma_chan *dma_lch_out;
#endif
dma_addr_t dma_addr_out; dma_addr_t dma_addr_out;
}; };
...@@ -206,17 +192,10 @@ static int omap_aes_write_ctrl(struct omap_aes_dev *dd) ...@@ -206,17 +192,10 @@ static int omap_aes_write_ctrl(struct omap_aes_dev *dd)
return err; return err;
val = 0; val = 0;
#ifdef OMAP_AES_DMA_PRIVATE
if (dd->dma_lch_out >= 0)
val |= AES_REG_MASK_DMA_OUT_EN;
if (dd->dma_lch_in >= 0)
val |= AES_REG_MASK_DMA_IN_EN;
#else
if (dd->dma_lch_out != NULL) if (dd->dma_lch_out != NULL)
val |= AES_REG_MASK_DMA_OUT_EN; val |= AES_REG_MASK_DMA_OUT_EN;
if (dd->dma_lch_in != NULL) if (dd->dma_lch_in != NULL)
val |= AES_REG_MASK_DMA_IN_EN; val |= AES_REG_MASK_DMA_IN_EN;
#endif
mask = AES_REG_MASK_DMA_IN_EN | AES_REG_MASK_DMA_OUT_EN; mask = AES_REG_MASK_DMA_IN_EN | AES_REG_MASK_DMA_OUT_EN;
...@@ -244,22 +223,6 @@ static int omap_aes_write_ctrl(struct omap_aes_dev *dd) ...@@ -244,22 +223,6 @@ static int omap_aes_write_ctrl(struct omap_aes_dev *dd)
omap_aes_write_mask(dd, AES_REG_CTRL, val, mask); omap_aes_write_mask(dd, AES_REG_CTRL, val, mask);
#ifdef OMAP_AES_DMA_PRIVATE
/* IN */
omap_set_dma_dest_params(dd->dma_lch_in, 0, OMAP_DMA_AMODE_CONSTANT,
dd->phys_base + AES_REG_DATA, 0, 4);
omap_set_dma_dest_burst_mode(dd->dma_lch_in, OMAP_DMA_DATA_BURST_4);
omap_set_dma_src_burst_mode(dd->dma_lch_in, OMAP_DMA_DATA_BURST_4);
/* OUT */
omap_set_dma_src_params(dd->dma_lch_out, 0, OMAP_DMA_AMODE_CONSTANT,
dd->phys_base + AES_REG_DATA, 0, 4);
omap_set_dma_src_burst_mode(dd->dma_lch_out, OMAP_DMA_DATA_BURST_4);
omap_set_dma_dest_burst_mode(dd->dma_lch_out, OMAP_DMA_DATA_BURST_4);
#endif
return 0; return 0;
} }
...@@ -284,23 +247,6 @@ static struct omap_aes_dev *omap_aes_find_dev(struct omap_aes_ctx *ctx) ...@@ -284,23 +247,6 @@ static struct omap_aes_dev *omap_aes_find_dev(struct omap_aes_ctx *ctx)
return dd; return dd;
} }
#ifdef OMAP_AES_DMA_PRIVATE
static void omap_aes_dma_callback(int lch, u16 ch_status, void *data)
{
struct omap_aes_dev *dd = data;
if (ch_status != OMAP_DMA_BLOCK_IRQ) {
pr_err("omap-aes DMA error status: 0x%hx\n", ch_status);
dd->err = -EIO;
dd->flags &= ~FLAGS_INIT; /* request to re-initialize */
} else if (lch == dd->dma_lch_in) {
return;
}
/* dma_lch_out - completed */
tasklet_schedule(&dd->done_task);
}
#else
static void omap_aes_dma_out_callback(void *data) static void omap_aes_dma_out_callback(void *data)
{ {
struct omap_aes_dev *dd = data; struct omap_aes_dev *dd = data;
...@@ -308,22 +254,14 @@ static void omap_aes_dma_out_callback(void *data) ...@@ -308,22 +254,14 @@ static void omap_aes_dma_out_callback(void *data)
/* dma_lch_out - completed */ /* dma_lch_out - completed */
tasklet_schedule(&dd->done_task); tasklet_schedule(&dd->done_task);
} }
#endif
static int omap_aes_dma_init(struct omap_aes_dev *dd) static int omap_aes_dma_init(struct omap_aes_dev *dd)
{ {
int err = -ENOMEM; int err = -ENOMEM;
#ifndef OMAP_AES_DMA_PRIVATE
dma_cap_mask_t mask; dma_cap_mask_t mask;
#endif
#ifdef OMAP_AES_DMA_PRIVATE
dd->dma_lch_out = -1;
dd->dma_lch_in = -1;
#else
dd->dma_lch_out = NULL; dd->dma_lch_out = NULL;
dd->dma_lch_in = NULL; dd->dma_lch_in = NULL;
#endif
dd->buf_in = (void *)__get_free_pages(GFP_KERNEL, OMAP_AES_CACHE_SIZE); dd->buf_in = (void *)__get_free_pages(GFP_KERNEL, OMAP_AES_CACHE_SIZE);
dd->buf_out = (void *)__get_free_pages(GFP_KERNEL, OMAP_AES_CACHE_SIZE); dd->buf_out = (void *)__get_free_pages(GFP_KERNEL, OMAP_AES_CACHE_SIZE);
...@@ -352,20 +290,6 @@ static int omap_aes_dma_init(struct omap_aes_dev *dd) ...@@ -352,20 +290,6 @@ static int omap_aes_dma_init(struct omap_aes_dev *dd)
goto err_map_out; goto err_map_out;
} }
#ifdef OMAP_AES_DMA_PRIVATE
err = omap_request_dma(dd->dma_in, "omap-aes-rx",
omap_aes_dma_callback, dd, &dd->dma_lch_in);
if (err) {
dev_err(dd->dev, "Unable to request DMA channel\n");
goto err_dma_in;
}
err = omap_request_dma(dd->dma_out, "omap-aes-tx",
omap_aes_dma_callback, dd, &dd->dma_lch_out);
if (err) {
dev_err(dd->dev, "Unable to request DMA channel\n");
goto err_dma_out;
}
#else
dma_cap_zero(mask); dma_cap_zero(mask);
dma_cap_set(DMA_SLAVE, mask); dma_cap_set(DMA_SLAVE, mask);
...@@ -382,16 +306,11 @@ static int omap_aes_dma_init(struct omap_aes_dev *dd) ...@@ -382,16 +306,11 @@ static int omap_aes_dma_init(struct omap_aes_dev *dd)
dev_err(dd->dev, "Unable to request out DMA channel\n"); dev_err(dd->dev, "Unable to request out DMA channel\n");
goto err_dma_out; goto err_dma_out;
} }
#endif
return 0; return 0;
err_dma_out: err_dma_out:
#ifdef OMAP_AES_DMA_PRIVATE
omap_free_dma(dd->dma_lch_in);
#else
dma_release_channel(dd->dma_lch_in); dma_release_channel(dd->dma_lch_in);
#endif
err_dma_in: err_dma_in:
dma_unmap_single(dd->dev, dd->dma_addr_out, dd->buflen, dma_unmap_single(dd->dev, dd->dma_addr_out, dd->buflen,
DMA_FROM_DEVICE); DMA_FROM_DEVICE);
...@@ -408,13 +327,8 @@ static int omap_aes_dma_init(struct omap_aes_dev *dd) ...@@ -408,13 +327,8 @@ static int omap_aes_dma_init(struct omap_aes_dev *dd)
static void omap_aes_dma_cleanup(struct omap_aes_dev *dd) static void omap_aes_dma_cleanup(struct omap_aes_dev *dd)
{ {
#ifdef OMAP_AES_DMA_PRIVATE
omap_free_dma(dd->dma_lch_out);
omap_free_dma(dd->dma_lch_in);
#else
dma_release_channel(dd->dma_lch_out); dma_release_channel(dd->dma_lch_out);
dma_release_channel(dd->dma_lch_in); dma_release_channel(dd->dma_lch_in);
#endif
dma_unmap_single(dd->dev, dd->dma_addr_out, dd->buflen, dma_unmap_single(dd->dev, dd->dma_addr_out, dd->buflen,
DMA_FROM_DEVICE); DMA_FROM_DEVICE);
dma_unmap_single(dd->dev, dd->dma_addr_in, dd->buflen, DMA_TO_DEVICE); dma_unmap_single(dd->dev, dd->dma_addr_in, dd->buflen, DMA_TO_DEVICE);
...@@ -472,24 +386,15 @@ static int sg_copy(struct scatterlist **sg, size_t *offset, void *buf, ...@@ -472,24 +386,15 @@ static int sg_copy(struct scatterlist **sg, size_t *offset, void *buf,
return off; return off;
} }
#ifdef OMAP_AES_DMA_PRIVATE
static int omap_aes_crypt_dma(struct crypto_tfm *tfm, dma_addr_t dma_addr_in,
dma_addr_t dma_addr_out, int length)
#else
static int omap_aes_crypt_dma(struct crypto_tfm *tfm, static int omap_aes_crypt_dma(struct crypto_tfm *tfm,
struct scatterlist *in_sg, struct scatterlist *out_sg) struct scatterlist *in_sg, struct scatterlist *out_sg)
#endif
{ {
struct omap_aes_ctx *ctx = crypto_tfm_ctx(tfm); struct omap_aes_ctx *ctx = crypto_tfm_ctx(tfm);
struct omap_aes_dev *dd = ctx->dd; struct omap_aes_dev *dd = ctx->dd;
#ifdef OMAP_AES_DMA_PRIVATE
int len32;
#else
struct dma_async_tx_descriptor *tx_in, *tx_out; struct dma_async_tx_descriptor *tx_in, *tx_out;
struct dma_slave_config cfg; struct dma_slave_config cfg;
dma_addr_t dma_addr_in = sg_dma_address(in_sg); dma_addr_t dma_addr_in = sg_dma_address(in_sg);
int ret, length = sg_dma_len(in_sg); int ret, length = sg_dma_len(in_sg);
#endif
pr_debug("len: %d\n", length); pr_debug("len: %d\n", length);
...@@ -499,28 +404,6 @@ static int omap_aes_crypt_dma(struct crypto_tfm *tfm, ...@@ -499,28 +404,6 @@ static int omap_aes_crypt_dma(struct crypto_tfm *tfm,
dma_sync_single_for_device(dd->dev, dma_addr_in, length, dma_sync_single_for_device(dd->dev, dma_addr_in, length,
DMA_TO_DEVICE); DMA_TO_DEVICE);
#ifdef OMAP_AES_DMA_PRIVATE
len32 = DIV_ROUND_UP(length, sizeof(u32));
/* IN */
omap_set_dma_transfer_params(dd->dma_lch_in, OMAP_DMA_DATA_TYPE_S32,
len32, 1, OMAP_DMA_SYNC_PACKET, dd->dma_in,
OMAP_DMA_DST_SYNC);
omap_set_dma_src_params(dd->dma_lch_in, 0, OMAP_DMA_AMODE_POST_INC,
dma_addr_in, 0, 0);
/* OUT */
omap_set_dma_transfer_params(dd->dma_lch_out, OMAP_DMA_DATA_TYPE_S32,
len32, 1, OMAP_DMA_SYNC_PACKET,
dd->dma_out, OMAP_DMA_SRC_SYNC);
omap_set_dma_dest_params(dd->dma_lch_out, 0, OMAP_DMA_AMODE_POST_INC,
dma_addr_out, 0, 0);
omap_start_dma(dd->dma_lch_in);
omap_start_dma(dd->dma_lch_out);
#else
memset(&cfg, 0, sizeof(cfg)); memset(&cfg, 0, sizeof(cfg));
cfg.src_addr = dd->phys_base + AES_REG_DATA; cfg.src_addr = dd->phys_base + AES_REG_DATA;
...@@ -573,7 +456,6 @@ static int omap_aes_crypt_dma(struct crypto_tfm *tfm, ...@@ -573,7 +456,6 @@ static int omap_aes_crypt_dma(struct crypto_tfm *tfm,
dma_async_issue_pending(dd->dma_lch_in); dma_async_issue_pending(dd->dma_lch_in);
dma_async_issue_pending(dd->dma_lch_out); dma_async_issue_pending(dd->dma_lch_out);
#endif
/* start DMA or disable idle mode */ /* start DMA or disable idle mode */
omap_aes_write_mask(dd, AES_REG_MASK, AES_REG_MASK_START, omap_aes_write_mask(dd, AES_REG_MASK, AES_REG_MASK_START,
...@@ -589,10 +471,8 @@ static int omap_aes_crypt_dma_start(struct omap_aes_dev *dd) ...@@ -589,10 +471,8 @@ static int omap_aes_crypt_dma_start(struct omap_aes_dev *dd)
int err, fast = 0, in, out; int err, fast = 0, in, out;
size_t count; size_t count;
dma_addr_t addr_in, addr_out; dma_addr_t addr_in, addr_out;
#ifndef OMAP_AES_DMA_PRIVATE
struct scatterlist *in_sg, *out_sg; struct scatterlist *in_sg, *out_sg;
int len32; int len32;
#endif
pr_debug("total: %d\n", dd->total); pr_debug("total: %d\n", dd->total);
...@@ -631,10 +511,8 @@ static int omap_aes_crypt_dma_start(struct omap_aes_dev *dd) ...@@ -631,10 +511,8 @@ static int omap_aes_crypt_dma_start(struct omap_aes_dev *dd)
addr_in = sg_dma_address(dd->in_sg); addr_in = sg_dma_address(dd->in_sg);
addr_out = sg_dma_address(dd->out_sg); addr_out = sg_dma_address(dd->out_sg);
#ifndef OMAP_AES_DMA_PRIVATE
in_sg = dd->in_sg; in_sg = dd->in_sg;
out_sg = dd->out_sg; out_sg = dd->out_sg;
#endif
dd->flags |= FLAGS_FAST; dd->flags |= FLAGS_FAST;
...@@ -643,7 +521,6 @@ static int omap_aes_crypt_dma_start(struct omap_aes_dev *dd) ...@@ -643,7 +521,6 @@ static int omap_aes_crypt_dma_start(struct omap_aes_dev *dd)
count = sg_copy(&dd->in_sg, &dd->in_offset, dd->buf_in, count = sg_copy(&dd->in_sg, &dd->in_offset, dd->buf_in,
dd->buflen, dd->total, 0); dd->buflen, dd->total, 0);
#ifndef OMAP_AES_DMA_PRIVATE
len32 = DIV_ROUND_UP(count, DMA_MIN) * DMA_MIN; len32 = DIV_ROUND_UP(count, DMA_MIN) * DMA_MIN;
/* /*
...@@ -664,7 +541,6 @@ static int omap_aes_crypt_dma_start(struct omap_aes_dev *dd) ...@@ -664,7 +541,6 @@ static int omap_aes_crypt_dma_start(struct omap_aes_dev *dd)
in_sg = &dd->in_sgl; in_sg = &dd->in_sgl;
out_sg = &dd->out_sgl; out_sg = &dd->out_sgl;
#endif
addr_in = dd->dma_addr_in; addr_in = dd->dma_addr_in;
addr_out = dd->dma_addr_out; addr_out = dd->dma_addr_out;
...@@ -675,11 +551,7 @@ static int omap_aes_crypt_dma_start(struct omap_aes_dev *dd) ...@@ -675,11 +551,7 @@ static int omap_aes_crypt_dma_start(struct omap_aes_dev *dd)
dd->total -= count; dd->total -= count;
#ifdef OMAP_AES_DMA_PRIVATE
err = omap_aes_crypt_dma(tfm, addr_in, addr_out, count);
#else
err = omap_aes_crypt_dma(tfm, in_sg, out_sg); err = omap_aes_crypt_dma(tfm, in_sg, out_sg);
#endif
if (err) { if (err) {
dma_unmap_sg(dd->dev, dd->in_sg, 1, DMA_TO_DEVICE); dma_unmap_sg(dd->dev, dd->in_sg, 1, DMA_TO_DEVICE);
dma_unmap_sg(dd->dev, dd->out_sg, 1, DMA_TO_DEVICE); dma_unmap_sg(dd->dev, dd->out_sg, 1, DMA_TO_DEVICE);
...@@ -709,13 +581,8 @@ static int omap_aes_crypt_dma_stop(struct omap_aes_dev *dd) ...@@ -709,13 +581,8 @@ static int omap_aes_crypt_dma_stop(struct omap_aes_dev *dd)
omap_aes_write_mask(dd, AES_REG_MASK, 0, AES_REG_MASK_START); omap_aes_write_mask(dd, AES_REG_MASK, 0, AES_REG_MASK_START);
#ifdef OMAP_AES_DMA_PRIVATE
omap_stop_dma(dd->dma_lch_in);
omap_stop_dma(dd->dma_lch_out);
#else
dmaengine_terminate_all(dd->dma_lch_in); dmaengine_terminate_all(dd->dma_lch_in);
dmaengine_terminate_all(dd->dma_lch_out); dmaengine_terminate_all(dd->dma_lch_out);
#endif
if (dd->flags & FLAGS_FAST) { if (dd->flags & FLAGS_FAST) {
dma_unmap_sg(dd->dev, dd->out_sg, 1, DMA_FROM_DEVICE); dma_unmap_sg(dd->dev, dd->out_sg, 1, DMA_FROM_DEVICE);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment