Skip to content

Commit

Permalink
dmaengine: qcom: bam_dma: check if the runtime pm enabled
Browse files Browse the repository at this point in the history
Disabling pm runtime at probe is not sufficient to get BAM working
on remotely controller instances. pm_runtime_get_sync() would return
-EACCES in such cases.
So check if runtime pm is enabled before returning error from bam functions.

Fixes: 5b4a689 ("dmaengine: qcom: bam_dma: disable runtime pm on remote controlled")
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Signed-off-by: Vinod Koul <vkoul@kernel.org>
  • Loading branch information
Srinivas Kandagatla authored and Vinod Koul committed May 17, 2018
1 parent 019fca2 commit dbad41e
Showing 1 changed file with 13 additions and 5 deletions.
18 changes: 13 additions & 5 deletions drivers/dma/qcom/bam_dma.c
Original file line number Diff line number Diff line change
Expand Up @@ -524,6 +524,14 @@ static int bam_alloc_chan(struct dma_chan *chan)
return 0;
}

static int bam_pm_runtime_get_sync(struct device *dev)
{
if (pm_runtime_enabled(dev))
return pm_runtime_get_sync(dev);

return 0;
}

/**
* bam_free_chan - Frees dma resources associated with specific channel
* @chan: specified channel
Expand All @@ -539,7 +547,7 @@ static void bam_free_chan(struct dma_chan *chan)
unsigned long flags;
int ret;

ret = pm_runtime_get_sync(bdev->dev);
ret = bam_pm_runtime_get_sync(bdev->dev);
if (ret < 0)
return;

Expand Down Expand Up @@ -720,7 +728,7 @@ static int bam_pause(struct dma_chan *chan)
unsigned long flag;
int ret;

ret = pm_runtime_get_sync(bdev->dev);
ret = bam_pm_runtime_get_sync(bdev->dev);
if (ret < 0)
return ret;

Expand All @@ -746,7 +754,7 @@ static int bam_resume(struct dma_chan *chan)
unsigned long flag;
int ret;

ret = pm_runtime_get_sync(bdev->dev);
ret = bam_pm_runtime_get_sync(bdev->dev);
if (ret < 0)
return ret;

Expand Down Expand Up @@ -852,7 +860,7 @@ static irqreturn_t bam_dma_irq(int irq, void *data)
if (srcs & P_IRQ)
tasklet_schedule(&bdev->task);

ret = pm_runtime_get_sync(bdev->dev);
ret = bam_pm_runtime_get_sync(bdev->dev);
if (ret < 0)
return ret;

Expand Down Expand Up @@ -969,7 +977,7 @@ static void bam_start_dma(struct bam_chan *bchan)
if (!vd)
return;

ret = pm_runtime_get_sync(bdev->dev);
ret = bam_pm_runtime_get_sync(bdev->dev);
if (ret < 0)
return;

Expand Down

0 comments on commit dbad41e

Please sign in to comment.