diff options
Diffstat (limited to 'drivers/dma')
-rw-r--r-- | drivers/dma/dmatest.c | 39 | ||||
-rw-r--r-- | drivers/dma/dw-edma/dw-edma-v0-debugfs.c | 2 | ||||
-rw-r--r-- | drivers/dma/ioat/dma.c | 4 | ||||
-rw-r--r-- | drivers/dma/iop-adma.c | 11 | ||||
-rw-r--r-- | drivers/dma/mediatek/mtk-uart-apdma.c | 7 | ||||
-rw-r--r-- | drivers/dma/ti/k3-udma-glue.c | 17 | ||||
-rw-r--r-- | drivers/dma/zx_dma.c | 6 |
7 files changed, 38 insertions, 48 deletions
diff --git a/drivers/dma/dmatest.c b/drivers/dma/dmatest.c index 8bd1a25ad3e3..a3a172173e34 100644 --- a/drivers/dma/dmatest.c +++ b/drivers/dma/dmatest.c @@ -130,6 +130,7 @@ struct dmatest_params { * @nr_channels: number of channels under test * @lock: access protection to the fields of this structure * @did_init: module has been initialized completely + * @last_error: test has faced configuration issues */ static struct dmatest_info { /* Test parameters */ @@ -138,6 +139,7 @@ static struct dmatest_info { /* Internal state */ struct list_head channels; unsigned int nr_channels; + int last_error; struct mutex lock; bool did_init; } test_info = { @@ -1056,13 +1058,7 @@ static int dmatest_add_channel(struct dmatest_info *info, static bool filter(struct dma_chan *chan, void *param) { - struct dmatest_params *params = param; - - if (!dmatest_match_channel(params, chan) || - !dmatest_match_device(params, chan->device)) - return false; - else - return true; + return dmatest_match_channel(param, chan) && dmatest_match_device(param, chan->device); } static void request_channels(struct dmatest_info *info, @@ -1190,10 +1186,22 @@ static int dmatest_run_set(const char *val, const struct kernel_param *kp) return ret; } else if (dmatest_run) { if (!is_threaded_test_pending(info)) { - pr_info("No channels configured, continue with any\n"); - if (!is_threaded_test_run(info)) - stop_threaded_test(info); - add_threaded_test(info); + /* + * We have nothing to run. This can be due to: + */ + ret = info->last_error; + if (ret) { + /* 1) Misconfiguration */ + pr_err("Channel misconfigured, can't continue\n"); + mutex_unlock(&info->lock); + return ret; + } else { + /* 2) We rely on defaults */ + pr_info("No channels configured, continue with any\n"); + if (!is_threaded_test_run(info)) + stop_threaded_test(info); + add_threaded_test(info); + } } start_threaded_tests(info); } else { @@ -1210,7 +1218,7 @@ static int dmatest_chan_set(const char *val, const struct kernel_param *kp) struct dmatest_info *info = &test_info; struct dmatest_chan *dtc; char chan_reset_val[20]; - int ret = 0; + int ret; mutex_lock(&info->lock); ret = param_set_copystring(val, kp); @@ -1241,15 +1249,14 @@ static int dmatest_chan_set(const char *val, const struct kernel_param *kp) add_threaded_test(info); /* Check if channel was added successfully */ - dtc = list_last_entry(&info->channels, struct dmatest_chan, node); - - if (dtc->chan) { + if (!list_empty(&info->channels)) { /* * if new channel was not successfully added, revert the * "test_channel" string to the name of the last successfully * added channel. exception for when users issues empty string * to channel parameter. */ + dtc = list_last_entry(&info->channels, struct dmatest_chan, node); if ((strcmp(dma_chan_name(dtc->chan), strim(test_channel)) != 0) && (strcmp("", strim(test_channel)) != 0)) { ret = -EINVAL; @@ -1265,12 +1272,14 @@ static int dmatest_chan_set(const char *val, const struct kernel_param *kp) goto add_chan_err; } + info->last_error = ret; mutex_unlock(&info->lock); return ret; add_chan_err: param_set_copystring(chan_reset_val, kp); + info->last_error = ret; mutex_unlock(&info->lock); return ret; diff --git a/drivers/dma/dw-edma/dw-edma-v0-debugfs.c b/drivers/dma/dw-edma/dw-edma-v0-debugfs.c index 42739508c0d8..6f62711a4c94 100644 --- a/drivers/dma/dw-edma/dw-edma-v0-debugfs.c +++ b/drivers/dma/dw-edma/dw-edma-v0-debugfs.c @@ -293,7 +293,7 @@ void dw_edma_v0_debugfs_on(struct dw_edma_chip *chip) if (!regs) return; - base_dir = debugfs_create_dir(dw->name, 0); + base_dir = debugfs_create_dir(dw->name, NULL); if (!base_dir) return; diff --git a/drivers/dma/ioat/dma.c b/drivers/dma/ioat/dma.c index bfcf67febfe6..736b2658245f 100644 --- a/drivers/dma/ioat/dma.c +++ b/drivers/dma/ioat/dma.c @@ -26,11 +26,11 @@ #include "../dmaengine.h" -int completion_timeout = 200; +static int completion_timeout = 200; module_param(completion_timeout, int, 0644); MODULE_PARM_DESC(completion_timeout, "set ioat completion timeout [msec] (default 200 [msec])"); -int idle_timeout = 2000; +static int idle_timeout = 2000; module_param(idle_timeout, int, 0644); MODULE_PARM_DESC(idle_timeout, "set ioat idel timeout [msec] (default 2000 [msec])"); diff --git a/drivers/dma/iop-adma.c b/drivers/dma/iop-adma.c index 81f177894d1f..310b899d581f 100644 --- a/drivers/dma/iop-adma.c +++ b/drivers/dma/iop-adma.c @@ -417,6 +417,7 @@ static void iop_chan_start_null_xor(struct iop_adma_chan *iop_chan); static int iop_adma_alloc_chan_resources(struct dma_chan *chan) { char *hw_desc; + dma_addr_t dma_desc; int idx; struct iop_adma_chan *iop_chan = to_iop_adma_chan(chan); struct iop_adma_desc_slot *slot = NULL; @@ -445,9 +446,8 @@ static int iop_adma_alloc_chan_resources(struct dma_chan *chan) INIT_LIST_HEAD(&slot->tx_list); INIT_LIST_HEAD(&slot->chain_node); INIT_LIST_HEAD(&slot->slot_node); - hw_desc = (char *) iop_chan->device->dma_desc_pool; - slot->async_tx.phys = - (dma_addr_t) &hw_desc[idx * IOP_ADMA_SLOT_SIZE]; + dma_desc = iop_chan->device->dma_desc_pool; + slot->async_tx.phys = dma_desc + idx * IOP_ADMA_SLOT_SIZE; slot->idx = idx; spin_lock_bh(&iop_chan->lock); @@ -1297,9 +1297,8 @@ static int iop_adma_probe(struct platform_device *pdev) goto err_free_adev; } - dev_dbg(&pdev->dev, "%s: allocated descriptor pool virt %p phys %p\n", - __func__, adev->dma_desc_pool_virt, - (void *) adev->dma_desc_pool); + dev_dbg(&pdev->dev, "%s: allocated descriptor pool virt %p phys %pad\n", + __func__, adev->dma_desc_pool_virt, &adev->dma_desc_pool); adev->id = plat_data->hw_id; diff --git a/drivers/dma/mediatek/mtk-uart-apdma.c b/drivers/dma/mediatek/mtk-uart-apdma.c index 29f1223b285a..27c07350971d 100644 --- a/drivers/dma/mediatek/mtk-uart-apdma.c +++ b/drivers/dma/mediatek/mtk-uart-apdma.c @@ -624,14 +624,9 @@ static int mtk_uart_apdma_runtime_suspend(struct device *dev) static int mtk_uart_apdma_runtime_resume(struct device *dev) { - int ret; struct mtk_uart_apdmadev *mtkd = dev_get_drvdata(dev); - ret = clk_prepare_enable(mtkd->clk); - if (ret) - return ret; - - return 0; + return clk_prepare_enable(mtkd->clk); } #endif /* CONFIG_PM */ diff --git a/drivers/dma/ti/k3-udma-glue.c b/drivers/dma/ti/k3-udma-glue.c index 3a5d33ea5ebe..42c8ad10d75e 100644 --- a/drivers/dma/ti/k3-udma-glue.c +++ b/drivers/dma/ti/k3-udma-glue.c @@ -378,17 +378,11 @@ EXPORT_SYMBOL_GPL(k3_udma_glue_pop_tx_chn); int k3_udma_glue_enable_tx_chn(struct k3_udma_glue_tx_channel *tx_chn) { - u32 txrt_ctl; - - txrt_ctl = UDMA_PEER_RT_EN_ENABLE; xudma_tchanrt_write(tx_chn->udma_tchanx, UDMA_CHAN_RT_PEER_RT_EN_REG, - txrt_ctl); + UDMA_PEER_RT_EN_ENABLE); - txrt_ctl = xudma_tchanrt_read(tx_chn->udma_tchanx, - UDMA_CHAN_RT_CTL_REG); - txrt_ctl |= UDMA_CHAN_RT_CTL_EN; xudma_tchanrt_write(tx_chn->udma_tchanx, UDMA_CHAN_RT_CTL_REG, - txrt_ctl); + UDMA_CHAN_RT_CTL_EN); k3_udma_glue_dump_tx_rt_chn(tx_chn, "txchn en"); return 0; @@ -1058,19 +1052,14 @@ EXPORT_SYMBOL_GPL(k3_udma_glue_rx_flow_disable); int k3_udma_glue_enable_rx_chn(struct k3_udma_glue_rx_channel *rx_chn) { - u32 rxrt_ctl; - if (rx_chn->remote) return -EINVAL; if (rx_chn->flows_ready < rx_chn->flow_num) return -EINVAL; - rxrt_ctl = xudma_rchanrt_read(rx_chn->udma_rchanx, - UDMA_CHAN_RT_CTL_REG); - rxrt_ctl |= UDMA_CHAN_RT_CTL_EN; xudma_rchanrt_write(rx_chn->udma_rchanx, UDMA_CHAN_RT_CTL_REG, - rxrt_ctl); + UDMA_CHAN_RT_CTL_EN); xudma_rchanrt_write(rx_chn->udma_rchanx, UDMA_CHAN_RT_PEER_RT_EN_REG, UDMA_PEER_RT_EN_ENABLE); diff --git a/drivers/dma/zx_dma.c b/drivers/dma/zx_dma.c index 5fe2e8b9a7b8..b057582b2fac 100644 --- a/drivers/dma/zx_dma.c +++ b/drivers/dma/zx_dma.c @@ -285,9 +285,7 @@ static irqreturn_t zx_dma_int_handler(int irq, void *dev_id) p = &d->phy[i]; c = p->vchan; if (c) { - unsigned long flags; - - spin_lock_irqsave(&c->vc.lock, flags); + spin_lock(&c->vc.lock); if (c->cyclic) { vchan_cyclic_callback(&p->ds_run->vd); } else { @@ -295,7 +293,7 @@ static irqreturn_t zx_dma_int_handler(int irq, void *dev_id) p->ds_done = p->ds_run; task = 1; } - spin_unlock_irqrestore(&c->vc.lock, flags); + spin_unlock(&c->vc.lock); irq_chan |= BIT(i); } } |