aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLokesh Vutla <lokeshvutla@ti.com>2013-08-20 11:02:35 -0400
committerHerbert Xu <herbert@gondor.apana.org.au>2013-08-21 07:28:08 -0400
commitf5e4626097f865783177f265d7793995bd8a2a76 (patch)
treefb3e80ece1d2ab75c89c5275da67a19b63db9c78
parentb8411ccd613fc7c504104f56265bd640b6c42d8e (diff)
crypto: omap-sham - correct dma burst size
Each cycle of SHA512 operates on 32 data words where as SHA256 operates on 16 data words. This needs to be updated while configuring DMA channels. Doing the same. Signed-off-by: Lokesh Vutla <lokeshvutla@ti.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
-rw-r--r--drivers/crypto/omap-sham.c11
1 files changed, 4 insertions, 7 deletions
diff --git a/drivers/crypto/omap-sham.c b/drivers/crypto/omap-sham.c
index 0a2bd160849a..8bdde57f6bb1 100644
--- a/drivers/crypto/omap-sham.c
+++ b/drivers/crypto/omap-sham.c
@@ -46,9 +46,6 @@
46 46
47#define MD5_DIGEST_SIZE 16 47#define MD5_DIGEST_SIZE 16
48 48
49#define DST_MAXBURST 16
50#define DMA_MIN (DST_MAXBURST * sizeof(u32))
51
52#define SHA_REG_IDIGEST(dd, x) ((dd)->pdata->idigest_ofs + ((x)*0x04)) 49#define SHA_REG_IDIGEST(dd, x) ((dd)->pdata->idigest_ofs + ((x)*0x04))
53#define SHA_REG_DIN(dd, x) ((dd)->pdata->din_ofs + ((x) * 0x04)) 50#define SHA_REG_DIN(dd, x) ((dd)->pdata->din_ofs + ((x) * 0x04))
54#define SHA_REG_DIGCNT(dd) ((dd)->pdata->digcnt_ofs) 51#define SHA_REG_DIGCNT(dd) ((dd)->pdata->digcnt_ofs)
@@ -558,7 +555,7 @@ static int omap_sham_xmit_dma(struct omap_sham_dev *dd, dma_addr_t dma_addr,
558 struct omap_sham_reqctx *ctx = ahash_request_ctx(dd->req); 555 struct omap_sham_reqctx *ctx = ahash_request_ctx(dd->req);
559 struct dma_async_tx_descriptor *tx; 556 struct dma_async_tx_descriptor *tx;
560 struct dma_slave_config cfg; 557 struct dma_slave_config cfg;
561 int len32, ret; 558 int len32, ret, dma_min = get_block_size(ctx);
562 559
563 dev_dbg(dd->dev, "xmit_dma: digcnt: %d, length: %d, final: %d\n", 560 dev_dbg(dd->dev, "xmit_dma: digcnt: %d, length: %d, final: %d\n",
564 ctx->digcnt, length, final); 561 ctx->digcnt, length, final);
@@ -567,7 +564,7 @@ static int omap_sham_xmit_dma(struct omap_sham_dev *dd, dma_addr_t dma_addr,
567 564
568 cfg.dst_addr = dd->phys_base + SHA_REG_DIN(dd, 0); 565 cfg.dst_addr = dd->phys_base + SHA_REG_DIN(dd, 0);
569 cfg.dst_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES; 566 cfg.dst_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
570 cfg.dst_maxburst = DST_MAXBURST; 567 cfg.dst_maxburst = dma_min / DMA_SLAVE_BUSWIDTH_4_BYTES;
571 568
572 ret = dmaengine_slave_config(dd->dma_lch, &cfg); 569 ret = dmaengine_slave_config(dd->dma_lch, &cfg);
573 if (ret) { 570 if (ret) {
@@ -575,7 +572,7 @@ static int omap_sham_xmit_dma(struct omap_sham_dev *dd, dma_addr_t dma_addr,
575 return ret; 572 return ret;
576 } 573 }
577 574
578 len32 = DIV_ROUND_UP(length, DMA_MIN) * DMA_MIN; 575 len32 = DIV_ROUND_UP(length, dma_min) * dma_min;
579 576
580 if (is_sg) { 577 if (is_sg) {
581 /* 578 /*
@@ -729,7 +726,7 @@ static int omap_sham_update_dma_start(struct omap_sham_dev *dd)
729 * the dmaengine infrastructure will calculate that it needs 726 * the dmaengine infrastructure will calculate that it needs
730 * to transfer 0 frames which ultimately fails. 727 * to transfer 0 frames which ultimately fails.
731 */ 728 */
732 if (ctx->total < (DST_MAXBURST * sizeof(u32))) 729 if (ctx->total < get_block_size(ctx))
733 return omap_sham_update_dma_slow(dd); 730 return omap_sham_update_dma_slow(dd);
734 731
735 dev_dbg(dd->dev, "fast: digcnt: %d, bufcnt: %u, total: %u\n", 732 dev_dbg(dd->dev, "fast: digcnt: %d, bufcnt: %u, total: %u\n",