summaryrefslogtreecommitdiffstats
path: root/freed-ora/tags/f27/4.15.9-300.fc27.gnu/arm-revert-mmc-omap_hsmmc-Use-dma_request_chan-for-reque.patch
diff options
context:
space:
mode:
Diffstat (limited to 'freed-ora/tags/f27/4.15.9-300.fc27.gnu/arm-revert-mmc-omap_hsmmc-Use-dma_request_chan-for-reque.patch')
-rw-r--r--freed-ora/tags/f27/4.15.9-300.fc27.gnu/arm-revert-mmc-omap_hsmmc-Use-dma_request_chan-for-reque.patch100
1 files changed, 100 insertions, 0 deletions
diff --git a/freed-ora/tags/f27/4.15.9-300.fc27.gnu/arm-revert-mmc-omap_hsmmc-Use-dma_request_chan-for-reque.patch b/freed-ora/tags/f27/4.15.9-300.fc27.gnu/arm-revert-mmc-omap_hsmmc-Use-dma_request_chan-for-reque.patch
new file mode 100644
index 000000000..b55dec0cb
--- /dev/null
+++ b/freed-ora/tags/f27/4.15.9-300.fc27.gnu/arm-revert-mmc-omap_hsmmc-Use-dma_request_chan-for-reque.patch
@@ -0,0 +1,100 @@
+From bb3e08008c0e48fd4f51a0f0957eecae61a24d69 Mon Sep 17 00:00:00 2001
+From: Peter Robinson <pbrobinson@gmail.com>
+Date: Tue, 1 Nov 2016 09:35:30 +0000
+Subject: [PATCH] Revert "mmc: omap_hsmmc: Use dma_request_chan() for
+ requesting DMA channel"
+
+This reverts commit 81eef6ca92014845d40e3f1310e42b7010303acc.
+---
+ drivers/mmc/host/omap_hsmmc.c | 50 ++++++++++++++++++++++++++++++++++---------
+ 1 file changed, 40 insertions(+), 10 deletions(-)
+
+diff --git a/drivers/mmc/host/omap_hsmmc.c b/drivers/mmc/host/omap_hsmmc.c
+index 24ebc9a..3563321 100644
+--- a/drivers/mmc/host/omap_hsmmc.c
++++ b/drivers/mmc/host/omap_hsmmc.c
+@@ -32,6 +32,7 @@
+ #include <linux/of_irq.h>
+ #include <linux/of_gpio.h>
+ #include <linux/of_device.h>
++#include <linux/omap-dmaengine.h>
+ #include <linux/mmc/host.h>
+ #include <linux/mmc/core.h>
+ #include <linux/mmc/mmc.h>
+@@ -1992,6 +1993,8 @@ static int omap_hsmmc_probe(struct platform_device *pdev)
+ struct resource *res;
+ int ret, irq;
+ const struct of_device_id *match;
++ dma_cap_mask_t mask;
++ unsigned tx_req, rx_req;
+ const struct omap_mmc_of_data *data;
+ void __iomem *base;
+
+@@ -2121,17 +2124,44 @@ static int omap_hsmmc_probe(struct platform_device *pdev)
+
+ omap_hsmmc_conf_bus_power(host);
+
+- host->rx_chan = dma_request_chan(&pdev->dev, "rx");
+- if (IS_ERR(host->rx_chan)) {
+- dev_err(mmc_dev(host->mmc), "RX DMA channel request failed\n");
+- ret = PTR_ERR(host->rx_chan);
++ if (!pdev->dev.of_node) {
++ res = platform_get_resource_byname(pdev, IORESOURCE_DMA, "tx");
++ if (!res) {
++ dev_err(mmc_dev(host->mmc), "cannot get DMA TX channel\n");
++ ret = -ENXIO;
++ goto err_irq;
++ }
++ tx_req = res->start;
++
++ res = platform_get_resource_byname(pdev, IORESOURCE_DMA, "rx");
++ if (!res) {
++ dev_err(mmc_dev(host->mmc), "cannot get DMA RX channel\n");
++ ret = -ENXIO;
++ goto err_irq;
++ }
++ rx_req = res->start;
++ }
++
++ dma_cap_zero(mask);
++ dma_cap_set(DMA_SLAVE, mask);
++
++ host->rx_chan =
++ dma_request_slave_channel_compat(mask, omap_dma_filter_fn,
++ &rx_req, &pdev->dev, "rx");
++
++ if (!host->rx_chan) {
++ dev_err(mmc_dev(host->mmc), "unable to obtain RX DMA engine channel\n");
++ ret = -ENXIO;
+ goto err_irq;
+ }
+
+- host->tx_chan = dma_request_chan(&pdev->dev, "tx");
+- if (IS_ERR(host->tx_chan)) {
+- dev_err(mmc_dev(host->mmc), "TX DMA channel request failed\n");
+- ret = PTR_ERR(host->tx_chan);
++ host->tx_chan =
++ dma_request_slave_channel_compat(mask, omap_dma_filter_fn,
++ &tx_req, &pdev->dev, "tx");
++
++ if (!host->tx_chan) {
++ dev_err(mmc_dev(host->mmc), "unable to obtain TX DMA engine channel\n");
++ ret = -ENXIO;
+ goto err_irq;
+ }
+
+@@ -2189,9 +2219,9 @@ err_slot_name:
+ mmc_remove_host(mmc);
+ err_irq:
+ device_init_wakeup(&pdev->dev, false);
+- if (!IS_ERR_OR_NULL(host->tx_chan))
++ if (host->tx_chan)
+ dma_release_channel(host->tx_chan);
+- if (!IS_ERR_OR_NULL(host->rx_chan))
++ if (host->rx_chan)
+ dma_release_channel(host->rx_chan);
+ pm_runtime_dont_use_autosuspend(host->dev);
+ pm_runtime_put_sync(host->dev);
+--
+2.9.3
+
OpenPOWER on IntegriCloud