diff options
author | Mark A. Greer <mgreer@animalcreek.com> | 2013-01-08 13:57:43 -0500 |
---|---|---|
committer | Herbert Xu <herbert@gondor.apana.org.au> | 2013-01-19 18:16:42 -0500 |
commit | 44f04c1d6f34fee940daed71151ca35b3f1f1e64 (patch) | |
tree | b537d0a2d986d13ef930d48dea998626763f521e /drivers | |
parent | ebedbf79026bebe6667322c2407bf05023600929 (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.c | 133 |
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 | ||
288 | static 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 | ||
304 | static void omap_aes_dma_out_callback(void *data) | 250 | static 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 | ||
313 | static int omap_aes_dma_init(struct omap_aes_dev *dd) | 258 | static 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 | ||
389 | err_dma_out: | 312 | err_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 | ||
395 | err_dma_in: | 314 | err_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 | ||
409 | static void omap_aes_dma_cleanup(struct omap_aes_dev *dd) | 328 | static 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 | ||
476 | static 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 | ||
479 | static int omap_aes_crypt_dma(struct crypto_tfm *tfm, | 389 | static 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); |