Skip to content

Commit

Permalink
crypto: omap-aes - Remove usage of private DMA API
Browse files Browse the repository at this point in the history
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: Mark A. Greer <mgreer@animalcreek.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
  • Loading branch information
Mark A. Greer authored and Herbert Xu committed Jan 19, 2013
1 parent ebedbf7 commit 44f04c1
Showing 1 changed file with 0 additions and 133 deletions.
133 changes: 0 additions & 133 deletions drivers/crypto/omap-aes.c
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,6 @@
*
*/

#define OMAP_AES_DMA_PRIVATE

#define pr_fmt(fmt) "%s: " fmt, __func__

#include <linux/err.h>
Expand Down Expand Up @@ -115,33 +113,21 @@ struct omap_aes_dev {
struct ablkcipher_request *req;
size_t total;
struct scatterlist *in_sg;
#ifndef OMAP_AES_DMA_PRIVATE
struct scatterlist in_sgl;
#endif
size_t in_offset;
struct scatterlist *out_sg;
#ifndef OMAP_AES_DMA_PRIVATE
struct scatterlist out_sgl;
#endif
size_t out_offset;

size_t buflen;
void *buf_in;
size_t dma_size;
int dma_in;
#ifdef OMAP_AES_DMA_PRIVATE
int dma_lch_in;
#else
struct dma_chan *dma_lch_in;
#endif
dma_addr_t dma_addr_in;
void *buf_out;
int dma_out;
#ifdef OMAP_AES_DMA_PRIVATE
int dma_lch_out;
#else
struct dma_chan *dma_lch_out;
#endif
dma_addr_t dma_addr_out;
};

Expand Down Expand Up @@ -206,17 +192,10 @@ static int omap_aes_write_ctrl(struct omap_aes_dev *dd)
return err;

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)
val |= AES_REG_MASK_DMA_OUT_EN;
if (dd->dma_lch_in != NULL)
val |= AES_REG_MASK_DMA_IN_EN;
#endif

mask = AES_REG_MASK_DMA_IN_EN | AES_REG_MASK_DMA_OUT_EN;

Expand Down Expand Up @@ -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);

#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;
}

Expand All @@ -284,46 +247,21 @@ static struct omap_aes_dev *omap_aes_find_dev(struct omap_aes_ctx *ctx)
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)
{
struct omap_aes_dev *dd = data;

/* dma_lch_out - completed */
tasklet_schedule(&dd->done_task);
}
#endif

static int omap_aes_dma_init(struct omap_aes_dev *dd)
{
int err = -ENOMEM;
#ifndef OMAP_AES_DMA_PRIVATE
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_in = NULL;
#endif

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);
Expand Down Expand Up @@ -352,20 +290,6 @@ static int omap_aes_dma_init(struct omap_aes_dev *dd)
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_set(DMA_SLAVE, mask);

Expand All @@ -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");
goto err_dma_out;
}
#endif

return 0;

err_dma_out:
#ifdef OMAP_AES_DMA_PRIVATE
omap_free_dma(dd->dma_lch_in);
#else
dma_release_channel(dd->dma_lch_in);
#endif
err_dma_in:
dma_unmap_single(dd->dev, dd->dma_addr_out, dd->buflen,
DMA_FROM_DEVICE);
Expand All @@ -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)
{
#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_in);
#endif
dma_unmap_single(dd->dev, dd->dma_addr_out, dd->buflen,
DMA_FROM_DEVICE);
dma_unmap_single(dd->dev, dd->dma_addr_in, dd->buflen, DMA_TO_DEVICE);
Expand Down Expand Up @@ -472,24 +386,15 @@ static int sg_copy(struct scatterlist **sg, size_t *offset, void *buf,
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,
struct scatterlist *in_sg, struct scatterlist *out_sg)
#endif
{
struct omap_aes_ctx *ctx = crypto_tfm_ctx(tfm);
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_slave_config cfg;
dma_addr_t dma_addr_in = sg_dma_address(in_sg);
int ret, length = sg_dma_len(in_sg);
#endif

pr_debug("len: %d\n", length);

Expand All @@ -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_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));

cfg.src_addr = dd->phys_base + AES_REG_DATA;
Expand Down Expand Up @@ -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_out);
#endif

/* start DMA or disable idle mode */
omap_aes_write_mask(dd, AES_REG_MASK, AES_REG_MASK_START,
Expand All @@ -589,10 +471,8 @@ static int omap_aes_crypt_dma_start(struct omap_aes_dev *dd)
int err, fast = 0, in, out;
size_t count;
dma_addr_t addr_in, addr_out;
#ifndef OMAP_AES_DMA_PRIVATE
struct scatterlist *in_sg, *out_sg;
int len32;
#endif

pr_debug("total: %d\n", dd->total);

Expand Down Expand Up @@ -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_out = sg_dma_address(dd->out_sg);

#ifndef OMAP_AES_DMA_PRIVATE
in_sg = dd->in_sg;
out_sg = dd->out_sg;
#endif

dd->flags |= FLAGS_FAST;

Expand All @@ -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,
dd->buflen, dd->total, 0);

#ifndef OMAP_AES_DMA_PRIVATE
len32 = DIV_ROUND_UP(count, DMA_MIN) * DMA_MIN;

/*
Expand All @@ -664,7 +541,6 @@ static int omap_aes_crypt_dma_start(struct omap_aes_dev *dd)

in_sg = &dd->in_sgl;
out_sg = &dd->out_sgl;
#endif

addr_in = dd->dma_addr_in;
addr_out = dd->dma_addr_out;
Expand All @@ -675,11 +551,7 @@ static int omap_aes_crypt_dma_start(struct omap_aes_dev *dd)

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);
#endif
if (err) {
dma_unmap_sg(dd->dev, dd->in_sg, 1, DMA_TO_DEVICE);
dma_unmap_sg(dd->dev, dd->out_sg, 1, DMA_TO_DEVICE);
Expand Down Expand Up @@ -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);

#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_out);
#endif

if (dd->flags & FLAGS_FAST) {
dma_unmap_sg(dd->dev, dd->out_sg, 1, DMA_FROM_DEVICE);
Expand Down

0 comments on commit 44f04c1

Please sign in to comment.