diff options
author | David S. Miller <davem@davemloft.net> | 2015-03-03 21:16:48 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2015-03-03 21:16:48 -0500 |
commit | 71a83a6db6138b9d41d8a0b6b91cb59f6dc4742c (patch) | |
tree | f74b6e4e48257ec6ce40b95645ecb8533b9cc1f8 /drivers/dma/ste_dma40.c | |
parent | b97526f3ff95f92b107f0fb52cbb8627e395429b (diff) | |
parent | a6c5170d1edea97c538c81e377e56c7b5c5b7e63 (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Conflicts:
drivers/net/ethernet/rocker/rocker.c
The rocker commit was two overlapping changes, one to rename
the ->vport member to ->pport, and another making the bitmask
expression use '1ULL' instead of plain '1'.
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/dma/ste_dma40.c')
-rw-r--r-- | drivers/dma/ste_dma40.c | 63 |
1 files changed, 30 insertions, 33 deletions
diff --git a/drivers/dma/ste_dma40.c b/drivers/dma/ste_dma40.c index 15d49461c0d2..68aca3334a17 100644 --- a/drivers/dma/ste_dma40.c +++ b/drivers/dma/ste_dma40.c | |||
@@ -1429,11 +1429,17 @@ static bool d40_tx_is_linked(struct d40_chan *d40c) | |||
1429 | return is_link; | 1429 | return is_link; |
1430 | } | 1430 | } |
1431 | 1431 | ||
1432 | static int d40_pause(struct d40_chan *d40c) | 1432 | static int d40_pause(struct dma_chan *chan) |
1433 | { | 1433 | { |
1434 | struct d40_chan *d40c = container_of(chan, struct d40_chan, chan); | ||
1434 | int res = 0; | 1435 | int res = 0; |
1435 | unsigned long flags; | 1436 | unsigned long flags; |
1436 | 1437 | ||
1438 | if (d40c->phy_chan == NULL) { | ||
1439 | chan_err(d40c, "Channel is not allocated!\n"); | ||
1440 | return -EINVAL; | ||
1441 | } | ||
1442 | |||
1437 | if (!d40c->busy) | 1443 | if (!d40c->busy) |
1438 | return 0; | 1444 | return 0; |
1439 | 1445 | ||
@@ -1448,11 +1454,17 @@ static int d40_pause(struct d40_chan *d40c) | |||
1448 | return res; | 1454 | return res; |
1449 | } | 1455 | } |
1450 | 1456 | ||
1451 | static int d40_resume(struct d40_chan *d40c) | 1457 | static int d40_resume(struct dma_chan *chan) |
1452 | { | 1458 | { |
1459 | struct d40_chan *d40c = container_of(chan, struct d40_chan, chan); | ||
1453 | int res = 0; | 1460 | int res = 0; |
1454 | unsigned long flags; | 1461 | unsigned long flags; |
1455 | 1462 | ||
1463 | if (d40c->phy_chan == NULL) { | ||
1464 | chan_err(d40c, "Channel is not allocated!\n"); | ||
1465 | return -EINVAL; | ||
1466 | } | ||
1467 | |||
1456 | if (!d40c->busy) | 1468 | if (!d40c->busy) |
1457 | return 0; | 1469 | return 0; |
1458 | 1470 | ||
@@ -2604,12 +2616,17 @@ static void d40_issue_pending(struct dma_chan *chan) | |||
2604 | spin_unlock_irqrestore(&d40c->lock, flags); | 2616 | spin_unlock_irqrestore(&d40c->lock, flags); |
2605 | } | 2617 | } |
2606 | 2618 | ||
2607 | static void d40_terminate_all(struct dma_chan *chan) | 2619 | static int d40_terminate_all(struct dma_chan *chan) |
2608 | { | 2620 | { |
2609 | unsigned long flags; | 2621 | unsigned long flags; |
2610 | struct d40_chan *d40c = container_of(chan, struct d40_chan, chan); | 2622 | struct d40_chan *d40c = container_of(chan, struct d40_chan, chan); |
2611 | int ret; | 2623 | int ret; |
2612 | 2624 | ||
2625 | if (d40c->phy_chan == NULL) { | ||
2626 | chan_err(d40c, "Channel is not allocated!\n"); | ||
2627 | return -EINVAL; | ||
2628 | } | ||
2629 | |||
2613 | spin_lock_irqsave(&d40c->lock, flags); | 2630 | spin_lock_irqsave(&d40c->lock, flags); |
2614 | 2631 | ||
2615 | pm_runtime_get_sync(d40c->base->dev); | 2632 | pm_runtime_get_sync(d40c->base->dev); |
@@ -2627,6 +2644,7 @@ static void d40_terminate_all(struct dma_chan *chan) | |||
2627 | d40c->busy = false; | 2644 | d40c->busy = false; |
2628 | 2645 | ||
2629 | spin_unlock_irqrestore(&d40c->lock, flags); | 2646 | spin_unlock_irqrestore(&d40c->lock, flags); |
2647 | return 0; | ||
2630 | } | 2648 | } |
2631 | 2649 | ||
2632 | static int | 2650 | static int |
@@ -2673,6 +2691,11 @@ static int d40_set_runtime_config(struct dma_chan *chan, | |||
2673 | u32 src_maxburst, dst_maxburst; | 2691 | u32 src_maxburst, dst_maxburst; |
2674 | int ret; | 2692 | int ret; |
2675 | 2693 | ||
2694 | if (d40c->phy_chan == NULL) { | ||
2695 | chan_err(d40c, "Channel is not allocated!\n"); | ||
2696 | return -EINVAL; | ||
2697 | } | ||
2698 | |||
2676 | src_addr_width = config->src_addr_width; | 2699 | src_addr_width = config->src_addr_width; |
2677 | src_maxburst = config->src_maxburst; | 2700 | src_maxburst = config->src_maxburst; |
2678 | dst_addr_width = config->dst_addr_width; | 2701 | dst_addr_width = config->dst_addr_width; |
@@ -2781,35 +2804,6 @@ static int d40_set_runtime_config(struct dma_chan *chan, | |||
2781 | return 0; | 2804 | return 0; |
2782 | } | 2805 | } |
2783 | 2806 | ||
2784 | static int d40_control(struct dma_chan *chan, enum dma_ctrl_cmd cmd, | ||
2785 | unsigned long arg) | ||
2786 | { | ||
2787 | struct d40_chan *d40c = container_of(chan, struct d40_chan, chan); | ||
2788 | |||
2789 | if (d40c->phy_chan == NULL) { | ||
2790 | chan_err(d40c, "Channel is not allocated!\n"); | ||
2791 | return -EINVAL; | ||
2792 | } | ||
2793 | |||
2794 | switch (cmd) { | ||
2795 | case DMA_TERMINATE_ALL: | ||
2796 | d40_terminate_all(chan); | ||
2797 | return 0; | ||
2798 | case DMA_PAUSE: | ||
2799 | return d40_pause(d40c); | ||
2800 | case DMA_RESUME: | ||
2801 | return d40_resume(d40c); | ||
2802 | case DMA_SLAVE_CONFIG: | ||
2803 | return d40_set_runtime_config(chan, | ||
2804 | (struct dma_slave_config *) arg); | ||
2805 | default: | ||
2806 | break; | ||
2807 | } | ||
2808 | |||
2809 | /* Other commands are unimplemented */ | ||
2810 | return -ENXIO; | ||
2811 | } | ||
2812 | |||
2813 | /* Initialization functions */ | 2807 | /* Initialization functions */ |
2814 | 2808 | ||
2815 | static void __init d40_chan_init(struct d40_base *base, struct dma_device *dma, | 2809 | static void __init d40_chan_init(struct d40_base *base, struct dma_device *dma, |
@@ -2870,7 +2864,10 @@ static void d40_ops_init(struct d40_base *base, struct dma_device *dev) | |||
2870 | dev->device_free_chan_resources = d40_free_chan_resources; | 2864 | dev->device_free_chan_resources = d40_free_chan_resources; |
2871 | dev->device_issue_pending = d40_issue_pending; | 2865 | dev->device_issue_pending = d40_issue_pending; |
2872 | dev->device_tx_status = d40_tx_status; | 2866 | dev->device_tx_status = d40_tx_status; |
2873 | dev->device_control = d40_control; | 2867 | dev->device_config = d40_set_runtime_config; |
2868 | dev->device_pause = d40_pause; | ||
2869 | dev->device_resume = d40_resume; | ||
2870 | dev->device_terminate_all = d40_terminate_all; | ||
2874 | dev->dev = base->dev; | 2871 | dev->dev = base->dev; |
2875 | } | 2872 | } |
2876 | 2873 | ||