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

crypto: omap-sham - 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 dfd061d5
...@@ -13,8 +13,6 @@ ...@@ -13,8 +13,6 @@
* Some ideas are from old omap-sha1-md5.c driver. * Some ideas are from old omap-sha1-md5.c driver.
*/ */
#define OMAP_SHAM_DMA_PRIVATE
#define pr_fmt(fmt) "%s: " fmt, __func__ #define pr_fmt(fmt) "%s: " fmt, __func__
#include <linux/err.h> #include <linux/err.h>
...@@ -113,9 +111,7 @@ struct omap_sham_reqctx { ...@@ -113,9 +111,7 @@ struct omap_sham_reqctx {
/* walk state */ /* walk state */
struct scatterlist *sg; struct scatterlist *sg;
#ifndef OMAP_SHAM_DMA_PRIVATE
struct scatterlist sgl; struct scatterlist sgl;
#endif
unsigned int offset; /* offset in current sg */ unsigned int offset; /* offset in current sg */
unsigned int total; /* total request */ unsigned int total; /* total request */
...@@ -149,12 +145,7 @@ struct omap_sham_dev { ...@@ -149,12 +145,7 @@ struct omap_sham_dev {
int irq; int irq;
spinlock_t lock; spinlock_t lock;
int err; int err;
#ifdef OMAP_SHAM_DMA_PRIVATE
int dma;
int dma_lch;
#else
struct dma_chan *dma_lch; struct dma_chan *dma_lch;
#endif
struct tasklet_struct done_task; struct tasklet_struct done_task;
unsigned long flags; unsigned long flags;
...@@ -324,7 +315,6 @@ static int omap_sham_xmit_cpu(struct omap_sham_dev *dd, const u8 *buf, ...@@ -324,7 +315,6 @@ static int omap_sham_xmit_cpu(struct omap_sham_dev *dd, const u8 *buf,
return -EINPROGRESS; return -EINPROGRESS;
} }
#ifndef OMAP_SHAM_DMA_PRIVATE
static void omap_sham_dma_callback(void *param) static void omap_sham_dma_callback(void *param)
{ {
struct omap_sham_dev *dd = param; struct omap_sham_dev *dd = param;
...@@ -332,34 +322,18 @@ static void omap_sham_dma_callback(void *param) ...@@ -332,34 +322,18 @@ static void omap_sham_dma_callback(void *param)
set_bit(FLAGS_DMA_READY, &dd->flags); set_bit(FLAGS_DMA_READY, &dd->flags);
tasklet_schedule(&dd->done_task); tasklet_schedule(&dd->done_task);
} }
#endif
static int omap_sham_xmit_dma(struct omap_sham_dev *dd, dma_addr_t dma_addr, static int omap_sham_xmit_dma(struct omap_sham_dev *dd, dma_addr_t dma_addr,
size_t length, int final, int is_sg) size_t length, int final, int is_sg)
{ {
struct omap_sham_reqctx *ctx = ahash_request_ctx(dd->req); 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_async_tx_descriptor *tx;
struct dma_slave_config cfg; struct dma_slave_config cfg;
int len32, ret; int len32, ret;
#endif
dev_dbg(dd->dev, "xmit_dma: digcnt: %d, length: %d, final: %d\n", dev_dbg(dd->dev, "xmit_dma: digcnt: %d, length: %d, final: %d\n",
ctx->digcnt, length, final); 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)); memset(&cfg, 0, sizeof(cfg));
cfg.dst_addr = dd->phys_base + SHA_REG_DIN(0); cfg.dst_addr = dd->phys_base + SHA_REG_DIN(0);
...@@ -401,7 +375,6 @@ static int omap_sham_xmit_dma(struct omap_sham_dev *dd, dma_addr_t dma_addr, ...@@ -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 = omap_sham_dma_callback;
tx->callback_param = dd; tx->callback_param = dd;
#endif
omap_sham_write_ctrl(dd, length, final, 1); omap_sham_write_ctrl(dd, length, final, 1);
...@@ -412,12 +385,8 @@ static int omap_sham_xmit_dma(struct omap_sham_dev *dd, dma_addr_t dma_addr, ...@@ -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); set_bit(FLAGS_DMA_ACTIVE, &dd->flags);
#ifdef OMAP_SHAM_DMA_PRIVATE
omap_start_dma(dd->dma_lch);
#else
dmaengine_submit(tx); dmaengine_submit(tx);
dma_async_issue_pending(dd->dma_lch); dma_async_issue_pending(dd->dma_lch);
#endif
return -EINPROGRESS; return -EINPROGRESS;
} }
...@@ -523,7 +492,6 @@ static int omap_sham_update_dma_start(struct omap_sham_dev *dd) ...@@ -523,7 +492,6 @@ static int omap_sham_update_dma_start(struct omap_sham_dev *dd)
if (ctx->bufcnt || ctx->offset) if (ctx->bufcnt || ctx->offset)
return omap_sham_update_dma_slow(dd); return omap_sham_update_dma_slow(dd);
#ifndef OMAP_SHAM_DMA_PRIVATE
/* /*
* Don't use the sg interface when the transfer size is less * Don't use the sg interface when the transfer size is less
* than the number of elements in a DMA frame. Otherwise, * than the number of elements in a DMA frame. Otherwise,
...@@ -532,7 +500,6 @@ static int omap_sham_update_dma_start(struct omap_sham_dev *dd) ...@@ -532,7 +500,6 @@ static int omap_sham_update_dma_start(struct omap_sham_dev *dd)
*/ */
if (ctx->total < (DST_MAXBURST * sizeof(u32))) if (ctx->total < (DST_MAXBURST * sizeof(u32)))
return omap_sham_update_dma_slow(dd); return omap_sham_update_dma_slow(dd);
#endif
dev_dbg(dd->dev, "fast: digcnt: %d, bufcnt: %u, total: %u\n", dev_dbg(dd->dev, "fast: digcnt: %d, bufcnt: %u, total: %u\n",
ctx->digcnt, ctx->bufcnt, ctx->total); ctx->digcnt, ctx->bufcnt, ctx->total);
...@@ -594,11 +561,7 @@ static int omap_sham_update_dma_stop(struct omap_sham_dev *dd) ...@@ -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); 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); dmaengine_terminate_all(dd->dma_lch);
#endif
if (ctx->flags & BIT(FLAGS_SG)) { if (ctx->flags & BIT(FLAGS_SG)) {
dma_unmap_sg(dd->dev, ctx->sg, 1, DMA_TO_DEVICE); dma_unmap_sg(dd->dev, ctx->sg, 1, DMA_TO_DEVICE);
...@@ -802,18 +765,6 @@ static int omap_sham_handle_queue(struct omap_sham_dev *dd, ...@@ -802,18 +765,6 @@ static int omap_sham_handle_queue(struct omap_sham_dev *dd,
if (err) if (err)
goto err1; 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) if (ctx->digcnt)
/* request has changed - restore hash */ /* request has changed - restore hash */
omap_sham_copy_hash(req, 0); omap_sham_copy_hash(req, 0);
...@@ -1204,55 +1155,13 @@ static irqreturn_t omap_sham_irq(int irq, void *dev_id) ...@@ -1204,55 +1155,13 @@ static irqreturn_t omap_sham_irq(int irq, void *dev_id)
return IRQ_HANDLED; 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) static int __devinit omap_sham_probe(struct platform_device *pdev)
{ {
struct omap_sham_dev *dd; struct omap_sham_dev *dd;
struct device *dev = &pdev->dev; struct device *dev = &pdev->dev;
struct resource *res; struct resource *res;
#ifndef OMAP_SHAM_DMA_PRIVATE
dma_cap_mask_t mask; dma_cap_mask_t mask;
unsigned dma_chan; unsigned dma_chan;
#endif
int err, i, j; int err, i, j;
dd = kzalloc(sizeof(struct omap_sham_dev), GFP_KERNEL); dd = kzalloc(sizeof(struct omap_sham_dev), GFP_KERNEL);
...@@ -1287,11 +1196,7 @@ static int __devinit omap_sham_probe(struct platform_device *pdev) ...@@ -1287,11 +1196,7 @@ static int __devinit omap_sham_probe(struct platform_device *pdev)
err = -ENODEV; err = -ENODEV;
goto res_err; goto res_err;
} }
#ifdef OMAP_SHAM_DMA_PRIVATE
dd->dma = res->start;
#else
dma_chan = res->start; dma_chan = res->start;
#endif
/* Get the IRQ */ /* Get the IRQ */
dd->irq = platform_get_irq(pdev, 0); dd->irq = platform_get_irq(pdev, 0);
...@@ -1308,11 +1213,6 @@ static int __devinit omap_sham_probe(struct platform_device *pdev) ...@@ -1308,11 +1213,6 @@ static int __devinit omap_sham_probe(struct platform_device *pdev)
goto res_err; 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_zero(mask);
dma_cap_set(DMA_SLAVE, mask); dma_cap_set(DMA_SLAVE, mask);
...@@ -1323,7 +1223,6 @@ static int __devinit omap_sham_probe(struct platform_device *pdev) ...@@ -1323,7 +1223,6 @@ static int __devinit omap_sham_probe(struct platform_device *pdev)
err = -ENXIO; err = -ENXIO;
goto dma_err; goto dma_err;
} }
#endif
dd->io_base = ioremap(dd->phys_base, SZ_4K); dd->io_base = ioremap(dd->phys_base, SZ_4K);
if (!dd->io_base) { if (!dd->io_base) {
...@@ -1359,11 +1258,7 @@ static int __devinit omap_sham_probe(struct platform_device *pdev) ...@@ -1359,11 +1258,7 @@ static int __devinit omap_sham_probe(struct platform_device *pdev)
iounmap(dd->io_base); iounmap(dd->io_base);
pm_runtime_disable(dev); pm_runtime_disable(dev);
io_err: io_err:
#ifdef OMAP_SHAM_DMA_PRIVATE
omap_sham_dma_cleanup(dd);
#else
dma_release_channel(dd->dma_lch); dma_release_channel(dd->dma_lch);
#endif
dma_err: dma_err:
if (dd->irq >= 0) if (dd->irq >= 0)
free_irq(dd->irq, dd); free_irq(dd->irq, dd);
...@@ -1392,11 +1287,7 @@ static int __devexit omap_sham_remove(struct platform_device *pdev) ...@@ -1392,11 +1287,7 @@ static int __devexit omap_sham_remove(struct platform_device *pdev)
tasklet_kill(&dd->done_task); tasklet_kill(&dd->done_task);
iounmap(dd->io_base); iounmap(dd->io_base);
pm_runtime_disable(&pdev->dev); pm_runtime_disable(&pdev->dev);
#ifdef OMAP_SHAM_DMA_PRIVATE
omap_sham_dma_cleanup(dd);
#else
dma_release_channel(dd->dma_lch); dma_release_channel(dd->dma_lch);
#endif
if (dd->irq >= 0) if (dd->irq >= 0)
free_irq(dd->irq, dd); free_irq(dd->irq, dd);
kfree(dd); kfree(dd);
......
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