brcm2708: add linux 4.19 support
[openwrt/openwrt.git] / target / linux / brcm2708 / patches-4.19 / 950-0388-bcm2835-mmc-Fix-DMA-channel-leak.patch
1 From 94a6414f6aaef2575eeb36149d65c79c13b85922 Mon Sep 17 00:00:00 2001
2 From: Lukas Wunner <lukas@wunner.de>
3 Date: Wed, 16 Jan 2019 12:22:32 +0100
4 Subject: [PATCH 388/703] bcm2835-mmc: Fix DMA channel leak
5
6 The BCM2835 MMC host driver requests a DMA channel on probe but neglects
7 to release the channel in the probe error path and on driver unbind.
8
9 I'm seeing this happen on every boot of the Compute Module 3: On first
10 driver probe, DMA channel 2 is allocated and then leaked with a "could
11 not get clk, deferring probe" message. On second driver probe, channel 4
12 is allocated.
13
14 Fix it.
15
16 Signed-off-by: Lukas Wunner <lukas@wunner.de>
17 Cc: Frank Pavlic <f.pavlic@kunbus.de>
18 ---
19 drivers/mmc/host/bcm2835-mmc.c | 5 +++++
20 1 file changed, 5 insertions(+)
21
22 --- a/drivers/mmc/host/bcm2835-mmc.c
23 +++ b/drivers/mmc/host/bcm2835-mmc.c
24 @@ -1503,6 +1503,8 @@ static int bcm2835_mmc_probe(struct plat
25
26 return 0;
27 err:
28 + if (host->dma_chan_rxtx)
29 + dma_release_channel(host->dma_chan_rxtx);
30 mmc_free_host(mmc);
31
32 return ret;
33 @@ -1548,6 +1550,9 @@ static int bcm2835_mmc_remove(struct pla
34
35 tasklet_kill(&host->finish_tasklet);
36
37 + if (host->dma_chan_rxtx)
38 + dma_release_channel(host->dma_chan_rxtx);
39 +
40 mmc_free_host(host->mmc);
41 platform_set_drvdata(pdev, NULL);
42