- Jul 16, 2016
-
-
Vinod Koul authored
-
Vinod Koul authored
-
Vinod Koul authored
-
Vinod Koul authored
-
Vinod Koul authored
-
Vinod Koul authored
-
Vinod Koul authored
-
- Jul 12, 2016
-
-
Michael Olbrich authored
Currently the handler ignores the channel 0 interrupt and thus doesn't ack it properly. This is done in order to allow sdma_run_channel0() to poll on the irq status bit, as this function may be called in atomic context, but needs to know when the channel has finished. This works mostly, as the polling happens under a spinlock, disabling IRQs on the local CPU, leaving only a very slight race window for a spurious IRQ to happen if the handler is executed on another CPU in an SMP system. Still this is clearly suboptimal. This behavior turns into a real problem on an RT system, where the spinlock doesn't disable IRQs on the local CPU. Not acking the IRQ in the handler in such a setup is very likely to drown the CPU in an IRQ storm, leaving it unable to make any progress in the polling loop, leading to the IRQ never being acked. Fix this by properly acknowledging the channel 0 IRQ in the handler. As the IRQ status bit can no longer be used to poll for the channel completion, switch over to using the SDMA_H_STATSTOP register for this purpose, where bit 0 is cleared by the hardware when the channel is done. Signed-off-by:
Michael Olbrich <m.olbrich@pengutronix.de> Signed-off-by:
Lucas Stach <l.stach@pengutronix.de> Signed-off-by:
Vinod Koul <vinod.koul@intel.com>
-
Wei Yongjun authored
In case of error, the function platform_device_register_full() returns ERR_PTR() and never returns NULL. The NULL test in the return value check should be replaced with IS_ERR(). Signed-off-by:
Wei Yongjun <yongjun_wei@trendmicro.com.cn> Signed-off-by:
Vinod Koul <vinod.koul@intel.com>
-
Vinod Koul authored
Signed-off-by:Vinod Koul <vinod.koul@intel.com>
-
Thomas Petazzoni authored
The new mv_xor_v2 driver supports the XOR engines found in the 64-bits ARM from Marvell of the Armada 7K and Armada 8K family. This XOR engine is a completely new hardware block, entirely different from the one used on previous Marvell Armada platforms, which use the existing mv_xor driver. Signed-off-by:
Thomas Petazzoni <thomas.petazzoni@free-electrons.com> Signed-off-by:
Vinod Koul <vinod.koul@intel.com>
-
Thomas Petazzoni authored
This commit adds the Device Tree binding documentation for the Marvell XOR v2 engine, which is found on Marvell Armada 7K/8K ARM64 SoCs. Signed-off-by:
Thomas Petazzoni <thomas.petazzoni@free-electrons.com> Acked-by:
Rob Herring <robh@kernel.org> Signed-off-by:
Vinod Koul <vinod.koul@intel.com>
-
- Jul 08, 2016
-
-
Laurent Pinchart authored
Cookies corresponding to pending transfers have a residue value equal to the full size of the corresponding descriptor. The driver miscomputes that and uses the size of the active descriptor instead. Fix it. Reported-by:
Geert Uytterhoeven <geert@linux-m68k.org> Signed-off-by:
Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> [geert: Also check desc.active list] Signed-off-by:
Geert Uytterhoeven <geert+renesas@glider.be> Signed-off-by:
Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se> Signed-off-by:
Vinod Koul <vinod.koul@intel.com>
-
Muhammad Hamza Farooq authored
Running descriptor pointer is set to NULL upon freeing resources. Other- wise, rcar_dmac_issue_pending might not start new transfers Signed-off-by:
Muhammad Hamza Farooq <mfarooq@visteon.com> Signed-off-by:
Geert Uytterhoeven <geert+renesas@glider.be> Signed-off-by:
Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se> Acked-by:
Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by:
Vinod Koul <vinod.koul@intel.com>
-
Niklas Söderlund authored
The documentation states one should make sure both DE and TE are cleared before starting a transaction. This patch extends the current warning to look at both DE and TE. Based on previous work from Muhammad Hamza Farooq. Suggested-by:
Muhammad Hamza Farooq <mfarooq@visteon.com> Signed-off-by:
Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se> Acked-by:
Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by:
Vinod Koul <vinod.koul@intel.com>
-
Muhammad Hamza Farooq authored
The hardware might have complete the transfer but the interrupt handler might not have had a chance to run. If rcar_dmac_chan_get_residue() which reads HW registers finds that there is no residue return DMA_COMPLETE. Signed-off-by:
Muhammad Hamza Farooq <mfarooq@visteon.com> Signed-off-by:
Geert Uytterhoeven <geert+renesas@glider.be> [Niklas: add explanation in commit message] Signed-off-by:
Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se> Acked-by:
Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by:
Vinod Koul <vinod.koul@intel.com>
-
- Jul 07, 2016
-
-
Arnd Bergmann authored
The bam_dma driver gained runtime PM support, but that causes build warnings whenever CONFIG_PM is disabled: drivers/dma/qcom/bam_dma.c:1324:12: error: 'bam_dma_runtime_resume' defined but not used [-Werror=unused-function] static int bam_dma_runtime_resume(struct device *dev) ^~~~~~~~~~~~~~~~~~~~~~ drivers/dma/qcom/bam_dma.c:1315:12: error: 'bam_dma_runtime_suspend' defined but not used [-Werror=unused-function] static int bam_dma_runtime_suspend(struct device *dev) This removes the incomplete #ifdef guard and instead marks all four PM functions as __maybe_unused, which avoids this kind of warning. Signed-off-by:Arnd Bergmann <arnd@arndb.de> Fixes: 7d254559 ("dmaengine: qcom-bam-dma: Add pm_runtime support") Signed-off-by:
Vinod Koul <vinod.koul@intel.com>
-
Arnd Bergmann authored
When building this driver on arm64, we get a harmless type mismatch warning: drivers/dma/bcm2835-dma.c: In function 'bcm2835_dma_fill_cb_chain_with_sg': include/linux/kernel.h:743:17: warning: comparison of distinct pointer types lacks a cast (void) (&_min1 == &_min2); \ ^ drivers/dma/bcm2835-dma.c:409:21: note: in expansion of macro 'min' cb->cb->length = min(len, max_len); This changes the type of the 'len' variable to size_t, which avoids the problem. Signed-off-by:Arnd Bergmann <arnd@arndb.de> Fixes: 388cc7a2 ("dmaengine: bcm2835: add slave_sg support to bcm2835-dma") Signed-off-by:
Vinod Koul <vinod.koul@intel.com>
-
- Jul 02, 2016
-
-
Lars-Peter Clausen authored
Return IRQ_NONE in the interrupt handler when it is called but no IRQs are pending. This allows the system to recover in case of an interrupt storm e.g. due to a wrong interrupt configuration setup. Signed-off-by:
Lars-Peter Clausen <lars@metafoo.de> Signed-off-by:
Vinod Koul <vinod.koul@intel.com>
-
Lars-Peter Clausen authored
Propagate errors returned by platform_get_irq() to the driver core. This will enable proper probe deferring for the driver in case the IRQ provider has not been registered yet. Signed-off-by:
Lars-Peter Clausen <lars@metafoo.de> Signed-off-by:
Vinod Koul <vinod.koul@intel.com>
-
Lars-Peter Clausen authored
Add MODULE_DEVICE_TABLE() for the axi-dmac driver. This allows the driver to be loaded on demand when built as a module. Signed-off-by:
Lars-Peter Clausen <lars@metafoo.de> Signed-off-by:
Vinod Koul <vinod.koul@intel.com>
-
- Jul 01, 2016
-
-
Arnd Bergmann authored
When building this driver on arm64, we get a harmless type mismatch warning: drivers/dma/bcm2835-dma.c: In function 'bcm2835_dma_fill_cb_chain_with_sg': include/linux/kernel.h:743:17: warning: comparison of distinct pointer types lacks a cast (void) (&_min1 == &_min2); \ ^ drivers/dma/bcm2835-dma.c:409:21: note: in expansion of macro 'min' cb->cb->length = min(len, max_len); This changes the type of the 'len' variable to size_t, which avoids the problem. Signed-off-by:Arnd Bergmann <arnd@arndb.de> Fixes: 388cc7a2 ("dmaengine: bcm2835: add slave_sg support to bcm2835-dma") Signed-off-by:
Vinod Koul <vinod.koul@intel.com>
-
- Jun 30, 2016
-
-
Pramod Gurav authored
Adds pm_runtime support for BAM DMA so that clock is enabled only when there is a transaction going on to help save power. Signed-off-by:
Pramod Gurav <pramod.gurav@linaro.org> Signed-off-by:
Vinod Koul <vinod.koul@intel.com>
-
Jon Hunter authored
Commit 71f7e6cc ('dmaengine: tegra20-apb-dma: Only calculate residue if txstate exists') changed the tegra_dma_tx_status() function to only calculate the residue if there is a valid 'txstate' pointer for storing the residue. Although this makes sense, this changed the behaviour of the function tegra_dma_tx_status() such that if the pointer 'txstate' is not valid, then we will return whatever state is returned by dma_cookie_status() and no longer return the state by looking up the DMA descriptor and returning it's state. Please note that dma_cookie_status() will either return DMA_COMPLETE or DMA_IN_PROGRESS. However, if dma_cookie_status() returns DMA_IN_PROGRESS the actual status could be DMA_ERROR which will only be seen from checking the descriptor status. Therefore, even if 'txstate' is not valid, still check to see if there is a valid descriptor for the cookie in question and if so return the descriptor state. Finally, ensure the residue is still not calculated if the 'txstate' is not valid. Signed-off-by:
Jon Hunter <jonathanh@nvidia.com> Signed-off-by:
Vinod Koul <vinod.koul@intel.com>
-
Jon Hunter authored
The calculation of the DMA residue for the Tegra APB DMA is duplicated in two places in the tegra_dma_tx_status() function. Remove this duplicated code by moving calculation to the end of the function and only calculating if we found a valid descriptor. Signed-off-by:
Jon Hunter <jonathanh@nvidia.com> Signed-off-by:
Vinod Koul <vinod.koul@intel.com>
-
Jon Hunter authored
Correct the grammar in the debug message when no descriptor is found. Signed-off-by:
Jon Hunter <jonathanh@nvidia.com> Signed-off-by:
Vinod Koul <vinod.koul@intel.com>
-
Alexandre Belloni authored
mbr_ds is an integer, don't use %pad to print it. Fixes: commit 268914f4 ("dmaengine: at_xdmac: use %pad format string for dma_addr_t") Reported-by:
Dan Carpenter <dan.carpenter@oracle.com> Signed-off-by:
Alexandre Belloni <alexandre.belloni@free-electrons.com> Signed-off-by:
Vinod Koul <vinod.koul@intel.com>
-
- Jun 22, 2016
-
-
Peter Griffin authored
If kzalloc() fails it will issue it's own error message including a dump_stack(). So remove the site specific error messages. Signed-off-by:
Peter Griffin <peter.griffin@linaro.org> Acked-by:
Jon Hunter <jonathanh@nvidia.com> Acked-by:
Linus Walleij <linus.walleij@linaro.org> Signed-off-by:
Vinod Koul <vinod.koul@intel.com>
-
Peter Griffin authored
There is no point calculating the residue if there is no txstate to store the value. Signed-off-by:
Peter Griffin <peter.griffin@linaro.org> Signed-off-by:
Vinod Koul <vinod.koul@intel.com>
-
Peter Griffin authored
There is no point in calculating the residue if state does not exist to store the value. Signed-off-by:
Peter Griffin <peter.griffin@linaro.org> Signed-off-by:
Vinod Koul <vinod.koul@intel.com>
-
Peter Griffin authored
There is no point calculating the residue if there is no txstate to store the value. Signed-off-by:
Peter Griffin <peter.griffin@linaro.org> Acked-by:
Linus Walleij <linus.walleij@linaro.org> Signed-off-by:
Vinod Koul <vinod.koul@intel.com>
-
Peter Griffin authored
Doing so saves a few lines of code in the driver. Signed-off-by:
Peter Griffin <peter.griffin@linaro.org> Signed-off-by:
Vinod Koul <vinod.koul@intel.com>
-
Peter Griffin authored
There is no point in calculating the residue if there is no txstate to store the value. Signed-off-by:
Peter Griffin <peter.griffin@linaro.org> Acked-by:
Linus Walleij <linus.walleij@linaro.org> Signed-off-by:
Vinod Koul <vinod.koul@intel.com>
-
Peter Griffin authored
It is useful to print the error code as part of the error message. Signed-off-by:
Peter Griffin <peter.griffin@linaro.org> Signed-off-by:
Vinod Koul <vinod.koul@intel.com>
-
Peter Griffin authored
Currently fsl-edma doesn't clk_disable_unprepare() its clocks on error conditions. This patch adds a fsl_disable_clocks helper for this, and also only disables clocks which were enabled if encountering an error whilst enabling clocks. Signed-off-by:
Peter Griffin <peter.griffin@linaro.org> Signed-off-by:
Vinod Koul <vinod.koul@intel.com>
-
- Jun 08, 2016
-
-
Ben Dooks authored
The bcm2835_dma_prep_dma_memcpy() function is not exported outside the driver, so make it static to avoid the following warning: drivers/dma/bcm2835-dma.c:616:32: warning: symbol 'bcm2835_dma_prep_dma_memcpy' was not declared. Should it be static? Signed-off-by:
Ben Dooks <ben.dooks@codethink.co.uk> Reviewed-by:
Eric Anholt <eric@anholt.net> Signed-off-by:
Vinod Koul <vinod.koul@intel.com>
-
Ben Dooks authored
The at_xdmac_init_used_desc() and at_xdmac_prep_dma_memset() functions are not exported outside the driver, so make them static to avoid the following warnings: drivers/dma/at_xdmac.c:459:6: warning: symbol 'at_xdmac_init_used_desc' was not declared. Should it be static? drivers/dma/at_xdmac.c:1205:32: warning: symbol 'at_xdmac_prep_dma_memset' was not declared. Should it be static? Signed-off-by:
Ben Dooks <ben.dooks@codethink.co.uk> Signed-off-by:
Vinod Koul <vinod.koul@intel.com>
-
Peter Ujfalusi authored
The driver limits the physical number of paRAM slots to be used by channels. If the transfer needs more slots (more SGs) then the transfer is broken up to smaller chunks. When the chunk is finished the driver will rewrite the physical slots and continues the transfer. This set up time can take some time and we might miss DMA events. If the intermediate set completion is using early completion (the interrupt will happen when the last slot is issued to the TPTC and not when the transfer is finished by the TPTC) we will have a bit more time to update the paRAM slots and less likely to have missed events. Signed-off-by:
Peter Ujfalusi <peter.ujfalusi@ti.com> Signed-off-by:
Vinod Koul <vinod.koul@intel.com>
-
- Jun 07, 2016
-
-
Stefan Roese authored
Remove the space before the "err_free_dma:" label in mv_xor_channel_add(). Signed-off-by:
Stefan Roese <sr@denx.de> Cc: Gregory CLEMENT <gregory.clement@free-electrons.com> Cc: Marcin Wojtas <mw@semihalf.com> Reviewed-by:
Thomas Petazzoni <thomas.petazzoni@free-electrons.com> Signed-off-by:
Vinod Koul <vinod.koul@intel.com>
-
- May 30, 2016
-
-
Kuninori Morimoto authored
For each descriptor, in addition to the memory used by the descriptors structure itself, the driver allocates a list of chunks as well as a buffer for hardware descriptors. Descriptors themselves are preallocated, and allocation of the chunks and buffer is performed the first time the descriptor is used. The memory isn't freed when the transfer is completed, as the chunks and buffer will be needed again when the descriptor is reused internally, so the driver keeps the memory around. If only a few descriptors are used concurrently, the current list_add_tail() implementation will result in all preallocated descriptors being used before going back to the first one, and will thus allocate chunks and a buffer for all preallocated descriptors. Using list_add() will put the complete descriptor at the head of the list of available descriptors, so the next transfer will be more likely to reuse a descriptor that already has associated memory instead of one that has never been used before. Signed-off-by:
Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Signed-off-by:
Vinod Koul <vinod.koul@intel.com>
-