Skip to content

Commit

Permalink
crypto: omap-sham - 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 <[email protected]>
CC: Dmitry Kasatkin <[email protected]>
Signed-off-by: Mark A. Greer <[email protected]>
Signed-off-by: Herbert Xu <[email protected]>
  • Loading branch information
mgreeraz authored and herbertx committed Jan 5, 2013
1 parent dfd061d commit dd49a69
Showing 1 changed file with 0 additions and 109 deletions.
109 changes: 0 additions & 109 deletions drivers/crypto/omap-sham.c
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,6 @@
* Some ideas are from old omap-sha1-md5.c driver.
*/

#define OMAP_SHAM_DMA_PRIVATE

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

#include <linux/err.h>
Expand Down Expand Up @@ -113,9 +111,7 @@ struct omap_sham_reqctx {

/* walk state */
struct scatterlist *sg;
#ifndef OMAP_SHAM_DMA_PRIVATE
struct scatterlist sgl;
#endif
unsigned int offset; /* offset in current sg */
unsigned int total; /* total request */

Expand Down Expand Up @@ -149,12 +145,7 @@ struct omap_sham_dev {
int irq;
spinlock_t lock;
int err;
#ifdef OMAP_SHAM_DMA_PRIVATE
int dma;
int dma_lch;
#else
struct dma_chan *dma_lch;
#endif
struct tasklet_struct done_task;

unsigned long flags;
Expand Down Expand Up @@ -324,42 +315,25 @@ static int omap_sham_xmit_cpu(struct omap_sham_dev *dd, const u8 *buf,
return -EINPROGRESS;
}

#ifndef OMAP_SHAM_DMA_PRIVATE
static void omap_sham_dma_callback(void *param)
{
struct omap_sham_dev *dd = param;

set_bit(FLAGS_DMA_READY, &dd->flags);
tasklet_schedule(&dd->done_task);
}
#endif

static int omap_sham_xmit_dma(struct omap_sham_dev *dd, dma_addr_t dma_addr,
size_t length, int final, int is_sg)
{
struct omap_sham_reqctx *ctx = ahash_request_ctx(dd->req);
#ifdef OMAP_SHAM_DMA_PRIVATE
int len32;
#else
struct dma_async_tx_descriptor *tx;
struct dma_slave_config cfg;
int len32, ret;
#endif

dev_dbg(dd->dev, "xmit_dma: digcnt: %d, length: %d, final: %d\n",
ctx->digcnt, length, final);

#ifdef OMAP_SHAM_DMA_PRIVATE
len32 = DIV_ROUND_UP(length, sizeof(u32));

omap_set_dma_transfer_params(dd->dma_lch, OMAP_DMA_DATA_TYPE_S32, len32,
1, OMAP_DMA_SYNC_PACKET, dd->dma,
OMAP_DMA_DST_SYNC_PREFETCH);

omap_set_dma_src_params(dd->dma_lch, 0, OMAP_DMA_AMODE_POST_INC,
dma_addr, 0, 0);

#else
memset(&cfg, 0, sizeof(cfg));

cfg.dst_addr = dd->phys_base + SHA_REG_DIN(0);
Expand Down Expand Up @@ -401,7 +375,6 @@ static int omap_sham_xmit_dma(struct omap_sham_dev *dd, dma_addr_t dma_addr,

tx->callback = omap_sham_dma_callback;
tx->callback_param = dd;
#endif

omap_sham_write_ctrl(dd, length, final, 1);

Expand All @@ -412,12 +385,8 @@ static int omap_sham_xmit_dma(struct omap_sham_dev *dd, dma_addr_t dma_addr,

set_bit(FLAGS_DMA_ACTIVE, &dd->flags);

#ifdef OMAP_SHAM_DMA_PRIVATE
omap_start_dma(dd->dma_lch);
#else
dmaengine_submit(tx);
dma_async_issue_pending(dd->dma_lch);
#endif

return -EINPROGRESS;
}
Expand Down Expand Up @@ -523,7 +492,6 @@ static int omap_sham_update_dma_start(struct omap_sham_dev *dd)
if (ctx->bufcnt || ctx->offset)
return omap_sham_update_dma_slow(dd);

#ifndef OMAP_SHAM_DMA_PRIVATE
/*
* Don't use the sg interface when the transfer size is less
* than the number of elements in a DMA frame. Otherwise,
Expand All @@ -532,7 +500,6 @@ static int omap_sham_update_dma_start(struct omap_sham_dev *dd)
*/
if (ctx->total < (DST_MAXBURST * sizeof(u32)))
return omap_sham_update_dma_slow(dd);
#endif

dev_dbg(dd->dev, "fast: digcnt: %d, bufcnt: %u, total: %u\n",
ctx->digcnt, ctx->bufcnt, ctx->total);
Expand Down Expand Up @@ -594,11 +561,7 @@ static int omap_sham_update_dma_stop(struct omap_sham_dev *dd)
{
struct omap_sham_reqctx *ctx = ahash_request_ctx(dd->req);

#ifdef OMAP_SHAM_DMA_PRIVATE
omap_stop_dma(dd->dma_lch);
#else
dmaengine_terminate_all(dd->dma_lch);
#endif

if (ctx->flags & BIT(FLAGS_SG)) {
dma_unmap_sg(dd->dev, ctx->sg, 1, DMA_TO_DEVICE);
Expand Down Expand Up @@ -802,18 +765,6 @@ static int omap_sham_handle_queue(struct omap_sham_dev *dd,
if (err)
goto err1;

#ifdef OMAP_SHAM_DMA_PRIVATE
omap_set_dma_dest_params(dd->dma_lch, 0,
OMAP_DMA_AMODE_CONSTANT,
dd->phys_base + SHA_REG_DIN(0), 0, 16);

omap_set_dma_dest_burst_mode(dd->dma_lch,
OMAP_DMA_DATA_BURST_16);

omap_set_dma_src_burst_mode(dd->dma_lch,
OMAP_DMA_DATA_BURST_4);
#endif

if (ctx->digcnt)
/* request has changed - restore hash */
omap_sham_copy_hash(req, 0);
Expand Down Expand Up @@ -1204,55 +1155,13 @@ static irqreturn_t omap_sham_irq(int irq, void *dev_id)
return IRQ_HANDLED;
}

#ifdef OMAP_SHAM_DMA_PRIVATE
static void omap_sham_dma_callback(int lch, u16 ch_status, void *data)
{
struct omap_sham_dev *dd = data;

if (ch_status != OMAP_DMA_BLOCK_IRQ) {
pr_err("omap-sham DMA error status: 0x%hx\n", ch_status);
dd->err = -EIO;
clear_bit(FLAGS_INIT, &dd->flags);/* request to re-initialize */
}

set_bit(FLAGS_DMA_READY, &dd->flags);
tasklet_schedule(&dd->done_task);
}

static int omap_sham_dma_init(struct omap_sham_dev *dd)
{
int err;

dd->dma_lch = -1;

err = omap_request_dma(dd->dma, dev_name(dd->dev),
omap_sham_dma_callback, dd, &dd->dma_lch);
if (err) {
dev_err(dd->dev, "Unable to request DMA channel\n");
return err;
}

return 0;
}

static void omap_sham_dma_cleanup(struct omap_sham_dev *dd)
{
if (dd->dma_lch >= 0) {
omap_free_dma(dd->dma_lch);
dd->dma_lch = -1;
}
}
#endif

static int __devinit omap_sham_probe(struct platform_device *pdev)
{
struct omap_sham_dev *dd;
struct device *dev = &pdev->dev;
struct resource *res;
#ifndef OMAP_SHAM_DMA_PRIVATE
dma_cap_mask_t mask;
unsigned dma_chan;
#endif
int err, i, j;

dd = kzalloc(sizeof(struct omap_sham_dev), GFP_KERNEL);
Expand Down Expand Up @@ -1287,11 +1196,7 @@ static int __devinit omap_sham_probe(struct platform_device *pdev)
err = -ENODEV;
goto res_err;
}
#ifdef OMAP_SHAM_DMA_PRIVATE
dd->dma = res->start;
#else
dma_chan = res->start;
#endif

/* Get the IRQ */
dd->irq = platform_get_irq(pdev, 0);
Expand All @@ -1308,11 +1213,6 @@ static int __devinit omap_sham_probe(struct platform_device *pdev)
goto res_err;
}

#ifdef OMAP_SHAM_DMA_PRIVATE
err = omap_sham_dma_init(dd);
if (err)
goto dma_err;
#else
dma_cap_zero(mask);
dma_cap_set(DMA_SLAVE, mask);

Expand All @@ -1323,7 +1223,6 @@ static int __devinit omap_sham_probe(struct platform_device *pdev)
err = -ENXIO;
goto dma_err;
}
#endif

dd->io_base = ioremap(dd->phys_base, SZ_4K);
if (!dd->io_base) {
Expand Down Expand Up @@ -1359,11 +1258,7 @@ static int __devinit omap_sham_probe(struct platform_device *pdev)
iounmap(dd->io_base);
pm_runtime_disable(dev);
io_err:
#ifdef OMAP_SHAM_DMA_PRIVATE
omap_sham_dma_cleanup(dd);
#else
dma_release_channel(dd->dma_lch);
#endif
dma_err:
if (dd->irq >= 0)
free_irq(dd->irq, dd);
Expand Down Expand Up @@ -1392,11 +1287,7 @@ static int __devexit omap_sham_remove(struct platform_device *pdev)
tasklet_kill(&dd->done_task);
iounmap(dd->io_base);
pm_runtime_disable(&pdev->dev);
#ifdef OMAP_SHAM_DMA_PRIVATE
omap_sham_dma_cleanup(dd);
#else
dma_release_channel(dd->dma_lch);
#endif
if (dd->irq >= 0)
free_irq(dd->irq, dd);
kfree(dd);
Expand Down

0 comments on commit dd49a69

Please sign in to comment.