Hi Sachin, Thanks for testing. Even I tested with both PM enable/disable with EXYNOS_IOMMU. I didn't face any issues. Let me check with out IOMMU. I will update the status soon. Regards, Shaik Ameer Basha On Tue, Jul 22, 2014 at 10:31 AM, Sachin Kamat <spk.linux@xxxxxxxxx> wrote: > Hi Shaik, > > On Mon, Jul 21, 2014 at 10:24 AM, Shaik Ameer Basha > <shaik.ameer@xxxxxxxxxxx> wrote: >> 1] Currently Gscaler clock is enabled only inside pm_runtime callbacks. >> If PM_RUNTIME is disabled, driver hangs. This patch removes the >> PM_RUNTIME dependency by keeping the clock enable/disable functions >> in m2m start/stop streaming callbacks. >> >> 2] For Exynos5420/5800, Gscaler clock has to be Turned ON before powering >> on/off the Gscaler power domain. This dependency is taken care by >> this patch at driver level. >> >> Signed-off-by: Shaik Ameer Basha <shaik.ameer@xxxxxxxxxxx> >> --- >> drivers/media/platform/exynos-gsc/gsc-core.c | 10 ++-------- >> drivers/media/platform/exynos-gsc/gsc-m2m.c | 13 +++++++++++++ >> 2 files changed, 15 insertions(+), 8 deletions(-) >> >> diff --git a/drivers/media/platform/exynos-gsc/gsc-core.c b/drivers/media/platform/exynos-gsc/gsc-core.c >> index 9d0cc04..39c0953 100644 >> --- a/drivers/media/platform/exynos-gsc/gsc-core.c >> +++ b/drivers/media/platform/exynos-gsc/gsc-core.c >> @@ -1132,23 +1132,17 @@ static int gsc_probe(struct platform_device *pdev) >> >> platform_set_drvdata(pdev, gsc); >> pm_runtime_enable(dev); >> - ret = pm_runtime_get_sync(&pdev->dev); >> - if (ret < 0) >> - goto err_m2m; >> >> /* Initialize continious memory allocator */ >> gsc->alloc_ctx = vb2_dma_contig_init_ctx(dev); >> if (IS_ERR(gsc->alloc_ctx)) { >> ret = PTR_ERR(gsc->alloc_ctx); >> - goto err_pm; >> + goto err_m2m; >> } >> >> dev_dbg(dev, "gsc-%d registered successfully\n", gsc->id); >> - >> - pm_runtime_put(dev); >> return 0; >> -err_pm: >> - pm_runtime_put(dev); >> + >> err_m2m: >> gsc_unregister_m2m_device(gsc); >> err_v4l2: >> diff --git a/drivers/media/platform/exynos-gsc/gsc-m2m.c b/drivers/media/platform/exynos-gsc/gsc-m2m.c >> index e434f1f0..a98462c 100644 >> --- a/drivers/media/platform/exynos-gsc/gsc-m2m.c >> +++ b/drivers/media/platform/exynos-gsc/gsc-m2m.c >> @@ -60,19 +60,32 @@ static void __gsc_m2m_job_abort(struct gsc_ctx *ctx) >> static int gsc_m2m_start_streaming(struct vb2_queue *q, unsigned int count) >> { >> struct gsc_ctx *ctx = q->drv_priv; >> + struct gsc_dev *gsc = ctx->gsc_dev; >> int ret; >> >> + ret = clk_enable(gsc->clock); >> + if (ret) >> + return ret; >> + >> ret = pm_runtime_get_sync(&ctx->gsc_dev->pdev->dev); >> + >> + if (!pm_runtime_enabled(&gsc->pdev->dev)) { >> + gsc_hw_set_sw_reset(gsc); >> + gsc_wait_reset(gsc); >> + } >> + >> return ret > 0 ? 0 : ret; >> } >> >> static void gsc_m2m_stop_streaming(struct vb2_queue *q) >> { >> struct gsc_ctx *ctx = q->drv_priv; >> + struct gsc_dev *gsc = ctx->gsc_dev; >> >> __gsc_m2m_job_abort(ctx); >> >> pm_runtime_put(&ctx->gsc_dev->pdev->dev); >> + clk_disable(gsc->clock); >> } >> >> void gsc_m2m_job_finish(struct gsc_ctx *ctx, int vb_state) >> -- >> 1.7.9.5 >> > > Looks like there is some issue while runtime PM is disabled. The > conversion operation hangs. Tested on 5420 based Arndale Octa > board with latest next kernel. > > -- > Regards, > Sachin. -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html