diff options
Diffstat (limited to 'drivers/dma/iop-adma.c')
-rw-r--r-- | drivers/dma/iop-adma.c | 66 |
1 files changed, 1 insertions, 65 deletions
diff --git a/drivers/dma/iop-adma.c b/drivers/dma/iop-adma.c index 7dafb9f3785f..c9cc08c2dbba 100644 --- a/drivers/dma/iop-adma.c +++ b/drivers/dma/iop-adma.c | |||
@@ -633,39 +633,6 @@ iop_adma_prep_dma_memcpy(struct dma_chan *chan, dma_addr_t dma_dest, | |||
633 | } | 633 | } |
634 | 634 | ||
635 | static struct dma_async_tx_descriptor * | 635 | static struct dma_async_tx_descriptor * |
636 | iop_adma_prep_dma_memset(struct dma_chan *chan, dma_addr_t dma_dest, | ||
637 | int value, size_t len, unsigned long flags) | ||
638 | { | ||
639 | struct iop_adma_chan *iop_chan = to_iop_adma_chan(chan); | ||
640 | struct iop_adma_desc_slot *sw_desc, *grp_start; | ||
641 | int slot_cnt, slots_per_op; | ||
642 | |||
643 | if (unlikely(!len)) | ||
644 | return NULL; | ||
645 | BUG_ON(len > IOP_ADMA_MAX_BYTE_COUNT); | ||
646 | |||
647 | dev_dbg(iop_chan->device->common.dev, "%s len: %u\n", | ||
648 | __func__, len); | ||
649 | |||
650 | spin_lock_bh(&iop_chan->lock); | ||
651 | slot_cnt = iop_chan_memset_slot_count(len, &slots_per_op); | ||
652 | sw_desc = iop_adma_alloc_slots(iop_chan, slot_cnt, slots_per_op); | ||
653 | if (sw_desc) { | ||
654 | grp_start = sw_desc->group_head; | ||
655 | iop_desc_init_memset(grp_start, flags); | ||
656 | iop_desc_set_byte_count(grp_start, iop_chan, len); | ||
657 | iop_desc_set_block_fill_val(grp_start, value); | ||
658 | iop_desc_set_dest_addr(grp_start, iop_chan, dma_dest); | ||
659 | sw_desc->unmap_src_cnt = 1; | ||
660 | sw_desc->unmap_len = len; | ||
661 | sw_desc->async_tx.flags = flags; | ||
662 | } | ||
663 | spin_unlock_bh(&iop_chan->lock); | ||
664 | |||
665 | return sw_desc ? &sw_desc->async_tx : NULL; | ||
666 | } | ||
667 | |||
668 | static struct dma_async_tx_descriptor * | ||
669 | iop_adma_prep_dma_xor(struct dma_chan *chan, dma_addr_t dma_dest, | 636 | iop_adma_prep_dma_xor(struct dma_chan *chan, dma_addr_t dma_dest, |
670 | dma_addr_t *dma_src, unsigned int src_cnt, size_t len, | 637 | dma_addr_t *dma_src, unsigned int src_cnt, size_t len, |
671 | unsigned long flags) | 638 | unsigned long flags) |
@@ -1176,33 +1143,6 @@ iop_adma_xor_val_self_test(struct iop_adma_device *device) | |||
1176 | goto free_resources; | 1143 | goto free_resources; |
1177 | } | 1144 | } |
1178 | 1145 | ||
1179 | /* test memset */ | ||
1180 | dma_addr = dma_map_page(dma_chan->device->dev, dest, 0, | ||
1181 | PAGE_SIZE, DMA_FROM_DEVICE); | ||
1182 | tx = iop_adma_prep_dma_memset(dma_chan, dma_addr, 0, PAGE_SIZE, | ||
1183 | DMA_PREP_INTERRUPT | DMA_CTRL_ACK); | ||
1184 | |||
1185 | cookie = iop_adma_tx_submit(tx); | ||
1186 | iop_adma_issue_pending(dma_chan); | ||
1187 | msleep(8); | ||
1188 | |||
1189 | if (iop_adma_status(dma_chan, cookie, NULL) != DMA_SUCCESS) { | ||
1190 | dev_err(dma_chan->device->dev, | ||
1191 | "Self-test memset timed out, disabling\n"); | ||
1192 | err = -ENODEV; | ||
1193 | goto free_resources; | ||
1194 | } | ||
1195 | |||
1196 | for (i = 0; i < PAGE_SIZE/sizeof(u32); i++) { | ||
1197 | u32 *ptr = page_address(dest); | ||
1198 | if (ptr[i]) { | ||
1199 | dev_err(dma_chan->device->dev, | ||
1200 | "Self-test memset failed compare, disabling\n"); | ||
1201 | err = -ENODEV; | ||
1202 | goto free_resources; | ||
1203 | } | ||
1204 | } | ||
1205 | |||
1206 | /* test for non-zero parity sum */ | 1146 | /* test for non-zero parity sum */ |
1207 | zero_sum_result = 0; | 1147 | zero_sum_result = 0; |
1208 | for (i = 0; i < IOP_ADMA_NUM_SRC_TEST + 1; i++) | 1148 | for (i = 0; i < IOP_ADMA_NUM_SRC_TEST + 1; i++) |
@@ -1487,8 +1427,6 @@ static int iop_adma_probe(struct platform_device *pdev) | |||
1487 | /* set prep routines based on capability */ | 1427 | /* set prep routines based on capability */ |
1488 | if (dma_has_cap(DMA_MEMCPY, dma_dev->cap_mask)) | 1428 | if (dma_has_cap(DMA_MEMCPY, dma_dev->cap_mask)) |
1489 | dma_dev->device_prep_dma_memcpy = iop_adma_prep_dma_memcpy; | 1429 | dma_dev->device_prep_dma_memcpy = iop_adma_prep_dma_memcpy; |
1490 | if (dma_has_cap(DMA_MEMSET, dma_dev->cap_mask)) | ||
1491 | dma_dev->device_prep_dma_memset = iop_adma_prep_dma_memset; | ||
1492 | if (dma_has_cap(DMA_XOR, dma_dev->cap_mask)) { | 1430 | if (dma_has_cap(DMA_XOR, dma_dev->cap_mask)) { |
1493 | dma_dev->max_xor = iop_adma_get_max_xor(); | 1431 | dma_dev->max_xor = iop_adma_get_max_xor(); |
1494 | dma_dev->device_prep_dma_xor = iop_adma_prep_dma_xor; | 1432 | dma_dev->device_prep_dma_xor = iop_adma_prep_dma_xor; |
@@ -1556,8 +1494,7 @@ static int iop_adma_probe(struct platform_device *pdev) | |||
1556 | goto err_free_iop_chan; | 1494 | goto err_free_iop_chan; |
1557 | } | 1495 | } |
1558 | 1496 | ||
1559 | if (dma_has_cap(DMA_XOR, dma_dev->cap_mask) || | 1497 | if (dma_has_cap(DMA_XOR, dma_dev->cap_mask)) { |
1560 | dma_has_cap(DMA_MEMSET, dma_dev->cap_mask)) { | ||
1561 | ret = iop_adma_xor_val_self_test(adev); | 1498 | ret = iop_adma_xor_val_self_test(adev); |
1562 | dev_dbg(&pdev->dev, "xor self test returned %d\n", ret); | 1499 | dev_dbg(&pdev->dev, "xor self test returned %d\n", ret); |
1563 | if (ret) | 1500 | if (ret) |
@@ -1584,7 +1521,6 @@ static int iop_adma_probe(struct platform_device *pdev) | |||
1584 | dma_has_cap(DMA_PQ_VAL, dma_dev->cap_mask) ? "pq_val " : "", | 1521 | dma_has_cap(DMA_PQ_VAL, dma_dev->cap_mask) ? "pq_val " : "", |
1585 | dma_has_cap(DMA_XOR, dma_dev->cap_mask) ? "xor " : "", | 1522 | dma_has_cap(DMA_XOR, dma_dev->cap_mask) ? "xor " : "", |
1586 | dma_has_cap(DMA_XOR_VAL, dma_dev->cap_mask) ? "xor_val " : "", | 1523 | dma_has_cap(DMA_XOR_VAL, dma_dev->cap_mask) ? "xor_val " : "", |
1587 | dma_has_cap(DMA_MEMSET, dma_dev->cap_mask) ? "fill " : "", | ||
1588 | dma_has_cap(DMA_MEMCPY, dma_dev->cap_mask) ? "cpy " : "", | 1524 | dma_has_cap(DMA_MEMCPY, dma_dev->cap_mask) ? "cpy " : "", |
1589 | dma_has_cap(DMA_INTERRUPT, dma_dev->cap_mask) ? "intr " : ""); | 1525 | dma_has_cap(DMA_INTERRUPT, dma_dev->cap_mask) ? "intr " : ""); |
1590 | 1526 | ||