aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorMark A. Greer <mgreer@animalcreek.com>2013-01-08 13:57:43 -0500
committerHerbert Xu <herbert@gondor.apana.org.au>2013-01-19 18:16:42 -0500
commit44f04c1d6f34fee940daed71151ca35b3f1f1e64 (patch)
treeb537d0a2d986d13ef930d48dea998626763f521e /drivers
parentebedbf79026bebe6667322c2407bf05023600929 (diff)
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: Mark A. Greer <mgreer@animalcreek.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/crypto/omap-aes.c133
1 files changed, 0 insertions, 133 deletions
diff --git a/drivers/crypto/omap-aes.c b/drivers/crypto/omap-aes.c
index 14ec9e209ef8..faf522ff82d7 100644
--- a/drivers/crypto/omap-aes.c
+++ b/drivers/crypto/omap-aes.c
@@ -12,8 +12,6 @@
12 * 12 *
13 */ 13 */
14 14
15#define OMAP_AES_DMA_PRIVATE
16
17#define pr_fmt(fmt) "%s: " fmt, __func__ 15#define pr_fmt(fmt) "%s: " fmt, __func__
18 16
19#include <linux/err.h> 17#include <linux/err.h>
@@ -115,33 +113,21 @@ struct omap_aes_dev {
115 struct ablkcipher_request *req; 113 struct ablkcipher_request *req;
116 size_t total; 114 size_t total;
117 struct scatterlist *in_sg; 115 struct scatterlist *in_sg;
118#ifndef OMAP_AES_DMA_PRIVATE
119 struct scatterlist in_sgl; 116 struct scatterlist in_sgl;
120#endif
121 size_t in_offset; 117 size_t in_offset;
122 struct scatterlist *out_sg; 118 struct scatterlist *out_sg;
123#ifndef OMAP_AES_DMA_PRIVATE
124 struct scatterlist out_sgl; 119 struct scatterlist out_sgl;
125#endif
126 size_t out_offset; 120 size_t out_offset;
127 121
128 size_t buflen; 122 size_t buflen;
129 void *buf_in; 123 void *buf_in;
130 size_t dma_size; 124 size_t dma_size;
131 int dma_in; 125 int dma_in;
132#ifdef OMAP_AES_DMA_PRIVATE
133 int dma_lch_in;
134#else
135 struct dma_chan *dma_lch_in; 126 struct dma_chan *dma_lch_in;
136#endif
137 dma_addr_t dma_addr_in; 127 dma_addr_t dma_addr_in;
138 void *buf_out; 128 void *buf_out;
139 int dma_out; 129 int dma_out;
140#ifdef OMAP_AES_DMA_PRIVATE
141 int dma_lch_out;
142#else
143 struct dma_chan *dma_lch_out; 130 struct dma_chan *dma_lch_out;
144#endif
145 dma_addr_t dma_addr_out; 131 dma_addr_t dma_addr_out;
146}; 132};
147 133
@@ -206,17 +192,10 @@ static int omap_aes_write_ctrl(struct omap_aes_dev *dd)
206 return err; 192 return err;
207 193
208 val = 0; 194 val = 0;
209#ifdef OMAP_AES_DMA_PRIVATE
210 if (dd->dma_lch_out >= 0)
211 val |= AES_REG_MASK_DMA_OUT_EN;
212 if (dd->dma_lch_in >= 0)
213 val |= AES_REG_MASK_DMA_IN_EN;
214#else
215 if (dd->dma_lch_out != NULL) 195 if (dd->dma_lch_out != NULL)
216 val |= AES_REG_MASK_DMA_OUT_EN; 196 val |= AES_REG_MASK_DMA_OUT_EN;
217 if (dd->dma_lch_in != NULL) 197 if (dd->dma_lch_in != NULL)
218 val |= AES_REG_MASK_DMA_IN_EN; 198 val |= AES_REG_MASK_DMA_IN_EN;
219#endif
220 199
221 mask = AES_REG_MASK_DMA_IN_EN | AES_REG_MASK_DMA_OUT_EN; 200 mask = AES_REG_MASK_DMA_IN_EN | AES_REG_MASK_DMA_OUT_EN;
222 201
@@ -244,22 +223,6 @@ static int omap_aes_write_ctrl(struct omap_aes_dev *dd)
244 223
245 omap_aes_write_mask(dd, AES_REG_CTRL, val, mask); 224 omap_aes_write_mask(dd, AES_REG_CTRL, val, mask);
246 225
247#ifdef OMAP_AES_DMA_PRIVATE
248 /* IN */
249 omap_set_dma_dest_params(dd->dma_lch_in, 0, OMAP_DMA_AMODE_CONSTANT,
250 dd->phys_base + AES_REG_DATA, 0, 4);
251
252 omap_set_dma_dest_burst_mode(dd->dma_lch_in, OMAP_DMA_DATA_BURST_4);
253 omap_set_dma_src_burst_mode(dd->dma_lch_in, OMAP_DMA_DATA_BURST_4);
254
255 /* OUT */
256 omap_set_dma_src_params(dd->dma_lch_out, 0, OMAP_DMA_AMODE_CONSTANT,
257 dd->phys_base + AES_REG_DATA, 0, 4);
258
259 omap_set_dma_src_burst_mode(dd->dma_lch_out, OMAP_DMA_DATA_BURST_4);
260 omap_set_dma_dest_burst_mode(dd->dma_lch_out, OMAP_DMA_DATA_BURST_4);
261#endif
262
263 return 0; 226 return 0;
264} 227}
265 228
@@ -284,23 +247,6 @@ static struct omap_aes_dev *omap_aes_find_dev(struct omap_aes_ctx *ctx)
284 return dd; 247 return dd;
285} 248}
286 249
287#ifdef OMAP_AES_DMA_PRIVATE
288static void omap_aes_dma_callback(int lch, u16 ch_status, void *data)
289{
290 struct omap_aes_dev *dd = data;
291
292 if (ch_status != OMAP_DMA_BLOCK_IRQ) {
293 pr_err("omap-aes DMA error status: 0x%hx\n", ch_status);
294 dd->err = -EIO;
295 dd->flags &= ~FLAGS_INIT; /* request to re-initialize */
296 } else if (lch == dd->dma_lch_in) {
297 return;
298 }
299
300 /* dma_lch_out - completed */
301 tasklet_schedule(&dd->done_task);
302}
303#else
304static void omap_aes_dma_out_callback(void *data) 250static void omap_aes_dma_out_callback(void *data)
305{ 251{
306 struct omap_aes_dev *dd = data; 252 struct omap_aes_dev *dd = data;
@@ -308,22 +254,14 @@ static void omap_aes_dma_out_callback(void *data)
308 /* dma_lch_out - completed */ 254 /* dma_lch_out - completed */
309 tasklet_schedule(&dd->done_task); 255 tasklet_schedule(&dd->done_task);
310} 256}
311#endif
312 257
313static int omap_aes_dma_init(struct omap_aes_dev *dd) 258static int omap_aes_dma_init(struct omap_aes_dev *dd)
314{ 259{
315 int err = -ENOMEM; 260 int err = -ENOMEM;
316#ifndef OMAP_AES_DMA_PRIVATE
317 dma_cap_mask_t mask; 261 dma_cap_mask_t mask;
318#endif
319 262
320#ifdef OMAP_AES_DMA_PRIVATE
321 dd->dma_lch_out = -1;
322 dd->dma_lch_in = -1;
323#else
324 dd->dma_lch_out = NULL; 263 dd->dma_lch_out = NULL;
325 dd->dma_lch_in = NULL; 264 dd->dma_lch_in = NULL;
326#endif
327 265
328 dd->buf_in = (void *)__get_free_pages(GFP_KERNEL, OMAP_AES_CACHE_SIZE); 266 dd->buf_in = (void *)__get_free_pages(GFP_KERNEL, OMAP_AES_CACHE_SIZE);
329 dd->buf_out = (void *)__get_free_pages(GFP_KERNEL, OMAP_AES_CACHE_SIZE); 267 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 goto err_map_out; 290 goto err_map_out;
353 } 291 }
354 292
355#ifdef OMAP_AES_DMA_PRIVATE
356 err = omap_request_dma(dd->dma_in, "omap-aes-rx",
357 omap_aes_dma_callback, dd, &dd->dma_lch_in);
358 if (err) {
359 dev_err(dd->dev, "Unable to request DMA channel\n");
360 goto err_dma_in;
361 }
362 err = omap_request_dma(dd->dma_out, "omap-aes-tx",
363 omap_aes_dma_callback, dd, &dd->dma_lch_out);
364 if (err) {
365 dev_err(dd->dev, "Unable to request DMA channel\n");
366 goto err_dma_out;
367 }
368#else
369 dma_cap_zero(mask); 293 dma_cap_zero(mask);
370 dma_cap_set(DMA_SLAVE, mask); 294 dma_cap_set(DMA_SLAVE, mask);
371 295
@@ -382,16 +306,11 @@ static int omap_aes_dma_init(struct omap_aes_dev *dd)
382 dev_err(dd->dev, "Unable to request out DMA channel\n"); 306 dev_err(dd->dev, "Unable to request out DMA channel\n");
383 goto err_dma_out; 307 goto err_dma_out;
384 } 308 }
385#endif
386 309
387 return 0; 310 return 0;
388 311
389err_dma_out: 312err_dma_out:
390#ifdef OMAP_AES_DMA_PRIVATE
391 omap_free_dma(dd->dma_lch_in);
392#else
393 dma_release_channel(dd->dma_lch_in); 313 dma_release_channel(dd->dma_lch_in);
394#endif
395err_dma_in: 314err_dma_in:
396 dma_unmap_single(dd->dev, dd->dma_addr_out, dd->buflen, 315 dma_unmap_single(dd->dev, dd->dma_addr_out, dd->buflen,
397 DMA_FROM_DEVICE); 316 DMA_FROM_DEVICE);
@@ -408,13 +327,8 @@ err_alloc:
408 327
409static void omap_aes_dma_cleanup(struct omap_aes_dev *dd) 328static void omap_aes_dma_cleanup(struct omap_aes_dev *dd)
410{ 329{
411#ifdef OMAP_AES_DMA_PRIVATE
412 omap_free_dma(dd->dma_lch_out);
413 omap_free_dma(dd->dma_lch_in);
414#else
415 dma_release_channel(dd->dma_lch_out); 330 dma_release_channel(dd->dma_lch_out);
416 dma_release_channel(dd->dma_lch_in); 331 dma_release_channel(dd->dma_lch_in);
417#endif
418 dma_unmap_single(dd->dev, dd->dma_addr_out, dd->buflen, 332 dma_unmap_single(dd->dev, dd->dma_addr_out, dd->buflen,
419 DMA_FROM_DEVICE); 333 DMA_FROM_DEVICE);
420 dma_unmap_single(dd->dev, dd->dma_addr_in, dd->buflen, DMA_TO_DEVICE); 334 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 return off; 386 return off;
473} 387}
474 388
475#ifdef OMAP_AES_DMA_PRIVATE
476static int omap_aes_crypt_dma(struct crypto_tfm *tfm, dma_addr_t dma_addr_in,
477 dma_addr_t dma_addr_out, int length)
478#else
479static int omap_aes_crypt_dma(struct crypto_tfm *tfm, 389static int omap_aes_crypt_dma(struct crypto_tfm *tfm,
480 struct scatterlist *in_sg, struct scatterlist *out_sg) 390 struct scatterlist *in_sg, struct scatterlist *out_sg)
481#endif
482{ 391{
483 struct omap_aes_ctx *ctx = crypto_tfm_ctx(tfm); 392 struct omap_aes_ctx *ctx = crypto_tfm_ctx(tfm);
484 struct omap_aes_dev *dd = ctx->dd; 393 struct omap_aes_dev *dd = ctx->dd;
485#ifdef OMAP_AES_DMA_PRIVATE
486 int len32;
487#else
488 struct dma_async_tx_descriptor *tx_in, *tx_out; 394 struct dma_async_tx_descriptor *tx_in, *tx_out;
489 struct dma_slave_config cfg; 395 struct dma_slave_config cfg;
490 dma_addr_t dma_addr_in = sg_dma_address(in_sg); 396 dma_addr_t dma_addr_in = sg_dma_address(in_sg);
491 int ret, length = sg_dma_len(in_sg); 397 int ret, length = sg_dma_len(in_sg);
492#endif
493 398
494 pr_debug("len: %d\n", length); 399 pr_debug("len: %d\n", length);
495 400
@@ -499,28 +404,6 @@ static int omap_aes_crypt_dma(struct crypto_tfm *tfm,
499 dma_sync_single_for_device(dd->dev, dma_addr_in, length, 404 dma_sync_single_for_device(dd->dev, dma_addr_in, length,
500 DMA_TO_DEVICE); 405 DMA_TO_DEVICE);
501 406
502#ifdef OMAP_AES_DMA_PRIVATE
503 len32 = DIV_ROUND_UP(length, sizeof(u32));
504
505 /* IN */
506 omap_set_dma_transfer_params(dd->dma_lch_in, OMAP_DMA_DATA_TYPE_S32,
507 len32, 1, OMAP_DMA_SYNC_PACKET, dd->dma_in,
508 OMAP_DMA_DST_SYNC);
509
510 omap_set_dma_src_params(dd->dma_lch_in, 0, OMAP_DMA_AMODE_POST_INC,
511 dma_addr_in, 0, 0);
512
513 /* OUT */
514 omap_set_dma_transfer_params(dd->dma_lch_out, OMAP_DMA_DATA_TYPE_S32,
515 len32, 1, OMAP_DMA_SYNC_PACKET,
516 dd->dma_out, OMAP_DMA_SRC_SYNC);
517
518 omap_set_dma_dest_params(dd->dma_lch_out, 0, OMAP_DMA_AMODE_POST_INC,
519 dma_addr_out, 0, 0);
520
521 omap_start_dma(dd->dma_lch_in);
522 omap_start_dma(dd->dma_lch_out);
523#else
524 memset(&cfg, 0, sizeof(cfg)); 407 memset(&cfg, 0, sizeof(cfg));
525 408
526 cfg.src_addr = dd->phys_base + AES_REG_DATA; 409 cfg.src_addr = dd->phys_base + AES_REG_DATA;
@@ -573,7 +456,6 @@ static int omap_aes_crypt_dma(struct crypto_tfm *tfm,
573 456
574 dma_async_issue_pending(dd->dma_lch_in); 457 dma_async_issue_pending(dd->dma_lch_in);
575 dma_async_issue_pending(dd->dma_lch_out); 458 dma_async_issue_pending(dd->dma_lch_out);
576#endif
577 459
578 /* start DMA or disable idle mode */ 460 /* start DMA or disable idle mode */
579 omap_aes_write_mask(dd, AES_REG_MASK, AES_REG_MASK_START, 461 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 int err, fast = 0, in, out; 471 int err, fast = 0, in, out;
590 size_t count; 472 size_t count;
591 dma_addr_t addr_in, addr_out; 473 dma_addr_t addr_in, addr_out;
592#ifndef OMAP_AES_DMA_PRIVATE
593 struct scatterlist *in_sg, *out_sg; 474 struct scatterlist *in_sg, *out_sg;
594 int len32; 475 int len32;
595#endif
596 476
597 pr_debug("total: %d\n", dd->total); 477 pr_debug("total: %d\n", dd->total);
598 478
@@ -631,10 +511,8 @@ static int omap_aes_crypt_dma_start(struct omap_aes_dev *dd)
631 addr_in = sg_dma_address(dd->in_sg); 511 addr_in = sg_dma_address(dd->in_sg);
632 addr_out = sg_dma_address(dd->out_sg); 512 addr_out = sg_dma_address(dd->out_sg);
633 513
634#ifndef OMAP_AES_DMA_PRIVATE
635 in_sg = dd->in_sg; 514 in_sg = dd->in_sg;
636 out_sg = dd->out_sg; 515 out_sg = dd->out_sg;
637#endif
638 516
639 dd->flags |= FLAGS_FAST; 517 dd->flags |= FLAGS_FAST;
640 518
@@ -643,7 +521,6 @@ static int omap_aes_crypt_dma_start(struct omap_aes_dev *dd)
643 count = sg_copy(&dd->in_sg, &dd->in_offset, dd->buf_in, 521 count = sg_copy(&dd->in_sg, &dd->in_offset, dd->buf_in,
644 dd->buflen, dd->total, 0); 522 dd->buflen, dd->total, 0);
645 523
646#ifndef OMAP_AES_DMA_PRIVATE
647 len32 = DIV_ROUND_UP(count, DMA_MIN) * DMA_MIN; 524 len32 = DIV_ROUND_UP(count, DMA_MIN) * DMA_MIN;
648 525
649 /* 526 /*
@@ -664,7 +541,6 @@ static int omap_aes_crypt_dma_start(struct omap_aes_dev *dd)
664 541
665 in_sg = &dd->in_sgl; 542 in_sg = &dd->in_sgl;
666 out_sg = &dd->out_sgl; 543 out_sg = &dd->out_sgl;
667#endif
668 544
669 addr_in = dd->dma_addr_in; 545 addr_in = dd->dma_addr_in;
670 addr_out = dd->dma_addr_out; 546 addr_out = dd->dma_addr_out;
@@ -675,11 +551,7 @@ static int omap_aes_crypt_dma_start(struct omap_aes_dev *dd)
675 551
676 dd->total -= count; 552 dd->total -= count;
677 553
678#ifdef OMAP_AES_DMA_PRIVATE
679 err = omap_aes_crypt_dma(tfm, addr_in, addr_out, count);
680#else
681 err = omap_aes_crypt_dma(tfm, in_sg, out_sg); 554 err = omap_aes_crypt_dma(tfm, in_sg, out_sg);
682#endif
683 if (err) { 555 if (err) {
684 dma_unmap_sg(dd->dev, dd->in_sg, 1, DMA_TO_DEVICE); 556 dma_unmap_sg(dd->dev, dd->in_sg, 1, DMA_TO_DEVICE);
685 dma_unmap_sg(dd->dev, dd->out_sg, 1, DMA_TO_DEVICE); 557 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 581
710 omap_aes_write_mask(dd, AES_REG_MASK, 0, AES_REG_MASK_START); 582 omap_aes_write_mask(dd, AES_REG_MASK, 0, AES_REG_MASK_START);
711 583
712#ifdef OMAP_AES_DMA_PRIVATE
713 omap_stop_dma(dd->dma_lch_in);
714 omap_stop_dma(dd->dma_lch_out);
715#else
716 dmaengine_terminate_all(dd->dma_lch_in); 584 dmaengine_terminate_all(dd->dma_lch_in);
717 dmaengine_terminate_all(dd->dma_lch_out); 585 dmaengine_terminate_all(dd->dma_lch_out);
718#endif
719 586
720 if (dd->flags & FLAGS_FAST) { 587 if (dd->flags & FLAGS_FAST) {
721 dma_unmap_sg(dd->dev, dd->out_sg, 1, DMA_FROM_DEVICE); 588 dma_unmap_sg(dd->dev, dd->out_sg, 1, DMA_FROM_DEVICE);