Re: [PATCH 07/10] drm/exynos: add pm_runtime to FIMD
Also ping~~ 2015년 09월 19일 12:53에 Inki Dae 이(가) 쓴 글: On 2015년 09월 05일 05:15, Gustavo Padovan wrote: From: Gustavo PadovanLet pm_runtime handle the enabling/disabling of the device with proper refcnt instead of rely on specific flags to track the enabled state. Signed-off-by: Gustavo Padovan --- drivers/gpu/drm/exynos/exynos5433_drm_decon.c | 1 - drivers/gpu/drm/exynos/exynos7_drm_decon.c| 1 - drivers/gpu/drm/exynos/exynos_drm_fimd.c | 91 +++ 3 files changed, 37 insertions(+), 56 deletions(-) diff --git a/drivers/gpu/drm/exynos/exynos5433_drm_decon.c b/drivers/gpu/drm/exynos/exynos5433_drm_decon.c index 79b2b22..838a9c1 100644 --- a/drivers/gpu/drm/exynos/exynos5433_drm_decon.c +++ b/drivers/gpu/drm/exynos/exynos5433_drm_decon.c @@ -478,7 +478,6 @@ static struct exynos_drm_crtc_ops decon_crtc_ops = { .commit = decon_commit, .enable_vblank = decon_enable_vblank, .disable_vblank = decon_disable_vblank, - .commit = decon_commit, Above wouldn't be related to this patch. .atomic_begin = decon_atomic_begin, .update_plane = decon_update_plane, .disable_plane = decon_disable_plane, diff --git a/drivers/gpu/drm/exynos/exynos7_drm_decon.c b/drivers/gpu/drm/exynos/exynos7_drm_decon.c index f3826dc..e4646e2 100644 --- a/drivers/gpu/drm/exynos/exynos7_drm_decon.c +++ b/drivers/gpu/drm/exynos/exynos7_drm_decon.c @@ -637,7 +637,6 @@ static const struct exynos_drm_crtc_ops decon_crtc_ops = { .enable = decon_enable, .disable = decon_disable, .mode_fixup = decon_mode_fixup, - .commit = decon_commit, Ditto. Thanks, Inki Dae .enable_vblank = decon_enable_vblank, .disable_vblank = decon_disable_vblank, .wait_for_vblank = decon_wait_for_vblank, diff --git a/drivers/gpu/drm/exynos/exynos_drm_fimd.c b/drivers/gpu/drm/exynos/exynos_drm_fimd.c index 0bbe537..0f17ae0 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_fimd.c +++ b/drivers/gpu/drm/exynos/exynos_drm_fimd.c @@ -160,7 +160,6 @@ struct fimd_context { u32 vidout_con; u32 i80ifcon; booli80_if; - boolsuspended; int pipe; wait_queue_head_t wait_vsync_queue; atomic_twait_vsync_event; @@ -209,9 +208,6 @@ static int fimd_enable_vblank(struct exynos_drm_crtc *crtc) struct fimd_context *ctx = crtc->ctx; u32 val; - if (ctx->suspended) - return -EPERM; - if (!test_and_set_bit(0, >irq_flags)) { val = readl(ctx->regs + VIDINTCON0); @@ -241,9 +237,6 @@ static void fimd_disable_vblank(struct exynos_drm_crtc *crtc) struct fimd_context *ctx = crtc->ctx; u32 val; - if (ctx->suspended) - return; - if (test_and_clear_bit(0, >irq_flags)) { val = readl(ctx->regs + VIDINTCON0); @@ -264,9 +257,6 @@ static void fimd_wait_for_vblank(struct exynos_drm_crtc *crtc) { struct fimd_context *ctx = crtc->ctx; - if (ctx->suspended) - return; - atomic_set(>wait_vsync_event, 1); /* @@ -339,14 +329,12 @@ static void fimd_clear_channels(struct exynos_drm_crtc *crtc) int pipe = ctx->pipe; /* ensure that vblank interrupt won't be reported to core */ - ctx->suspended = false; ctx->pipe = -1; fimd_enable_vblank(ctx->crtc); fimd_wait_for_vblank(ctx->crtc); fimd_disable_vblank(ctx->crtc); - ctx->suspended = true; ctx->pipe = pipe; } @@ -394,9 +382,6 @@ static void fimd_commit(struct exynos_drm_crtc *crtc) void *timing_base = ctx->regs + driver_data->timing_base; u32 val, clkdiv; - if (ctx->suspended) - return; - /* nothing to do if we haven't set the mode yet */ if (mode->htotal == 0 || mode->vtotal == 0) return; @@ -630,9 +615,6 @@ static void fimd_atomic_begin(struct exynos_drm_crtc *crtc, { struct fimd_context *ctx = crtc->ctx; - if (ctx->suspended) - return; - fimd_shadow_protect_win(ctx, plane->zpos, true); } @@ -641,9 +623,6 @@ static void fimd_atomic_flush(struct exynos_drm_crtc *crtc, { struct fimd_context *ctx = crtc->ctx; - if (ctx->suspended) - return; - fimd_shadow_protect_win(ctx, plane->zpos, false); } @@ -659,9 +638,6 @@ static void fimd_update_plane(struct exynos_drm_crtc *crtc, unsigned int bpp = state->fb->bits_per_pixel >> 3; unsigned int pitch = state->fb->pitches[0]; -
Re: [PATCH 07/10] drm/exynos: add pm_runtime to FIMD
On 2015년 09월 05일 05:15, Gustavo Padovan wrote: > From: Gustavo Padovan> > Let pm_runtime handle the enabling/disabling of the device with proper > refcnt instead of rely on specific flags to track the enabled state. > > Signed-off-by: Gustavo Padovan > --- > drivers/gpu/drm/exynos/exynos5433_drm_decon.c | 1 - > drivers/gpu/drm/exynos/exynos7_drm_decon.c| 1 - > drivers/gpu/drm/exynos/exynos_drm_fimd.c | 91 > +++ > 3 files changed, 37 insertions(+), 56 deletions(-) > > diff --git a/drivers/gpu/drm/exynos/exynos5433_drm_decon.c > b/drivers/gpu/drm/exynos/exynos5433_drm_decon.c > index 79b2b22..838a9c1 100644 > --- a/drivers/gpu/drm/exynos/exynos5433_drm_decon.c > +++ b/drivers/gpu/drm/exynos/exynos5433_drm_decon.c > @@ -478,7 +478,6 @@ static struct exynos_drm_crtc_ops decon_crtc_ops = { > .commit = decon_commit, > .enable_vblank = decon_enable_vblank, > .disable_vblank = decon_disable_vblank, > - .commit = decon_commit, Above wouldn't be related to this patch. > .atomic_begin = decon_atomic_begin, > .update_plane = decon_update_plane, > .disable_plane = decon_disable_plane, > diff --git a/drivers/gpu/drm/exynos/exynos7_drm_decon.c > b/drivers/gpu/drm/exynos/exynos7_drm_decon.c > index f3826dc..e4646e2 100644 > --- a/drivers/gpu/drm/exynos/exynos7_drm_decon.c > +++ b/drivers/gpu/drm/exynos/exynos7_drm_decon.c > @@ -637,7 +637,6 @@ static const struct exynos_drm_crtc_ops decon_crtc_ops = { > .enable = decon_enable, > .disable = decon_disable, > .mode_fixup = decon_mode_fixup, > - .commit = decon_commit, Ditto. Thanks, Inki Dae > .enable_vblank = decon_enable_vblank, > .disable_vblank = decon_disable_vblank, > .wait_for_vblank = decon_wait_for_vblank, > diff --git a/drivers/gpu/drm/exynos/exynos_drm_fimd.c > b/drivers/gpu/drm/exynos/exynos_drm_fimd.c > index 0bbe537..0f17ae0 100644 > --- a/drivers/gpu/drm/exynos/exynos_drm_fimd.c > +++ b/drivers/gpu/drm/exynos/exynos_drm_fimd.c > @@ -160,7 +160,6 @@ struct fimd_context { > u32 vidout_con; > u32 i80ifcon; > booli80_if; > - boolsuspended; > int pipe; > wait_queue_head_t wait_vsync_queue; > atomic_twait_vsync_event; > @@ -209,9 +208,6 @@ static int fimd_enable_vblank(struct exynos_drm_crtc > *crtc) > struct fimd_context *ctx = crtc->ctx; > u32 val; > > - if (ctx->suspended) > - return -EPERM; > - > if (!test_and_set_bit(0, >irq_flags)) { > val = readl(ctx->regs + VIDINTCON0); > > @@ -241,9 +237,6 @@ static void fimd_disable_vblank(struct exynos_drm_crtc > *crtc) > struct fimd_context *ctx = crtc->ctx; > u32 val; > > - if (ctx->suspended) > - return; > - > if (test_and_clear_bit(0, >irq_flags)) { > val = readl(ctx->regs + VIDINTCON0); > > @@ -264,9 +257,6 @@ static void fimd_wait_for_vblank(struct exynos_drm_crtc > *crtc) > { > struct fimd_context *ctx = crtc->ctx; > > - if (ctx->suspended) > - return; > - > atomic_set(>wait_vsync_event, 1); > > /* > @@ -339,14 +329,12 @@ static void fimd_clear_channels(struct exynos_drm_crtc > *crtc) > int pipe = ctx->pipe; > > /* ensure that vblank interrupt won't be reported to core */ > - ctx->suspended = false; > ctx->pipe = -1; > > fimd_enable_vblank(ctx->crtc); > fimd_wait_for_vblank(ctx->crtc); > fimd_disable_vblank(ctx->crtc); > > - ctx->suspended = true; > ctx->pipe = pipe; > } > > @@ -394,9 +382,6 @@ static void fimd_commit(struct exynos_drm_crtc *crtc) > void *timing_base = ctx->regs + driver_data->timing_base; > u32 val, clkdiv; > > - if (ctx->suspended) > - return; > - > /* nothing to do if we haven't set the mode yet */ > if (mode->htotal == 0 || mode->vtotal == 0) > return; > @@ -630,9 +615,6 @@ static void fimd_atomic_begin(struct exynos_drm_crtc > *crtc, > { > struct fimd_context *ctx = crtc->ctx; > > - if (ctx->suspended) > - return; > - > fimd_shadow_protect_win(ctx, plane->zpos, true); > } > > @@ -641,9 +623,6 @@ static void fimd_atomic_flush(struct exynos_drm_crtc > *crtc, > { > struct fimd_context *ctx = crtc->ctx; > > - if (ctx->suspended) > - return; > - > fimd_shadow_protect_win(ctx, plane->zpos, false); > } > > @@ -659,9 +638,6 @@ static void fimd_update_plane(struct exynos_drm_crtc > *crtc, > unsigned int bpp
[PATCH 07/10] drm/exynos: add pm_runtime to FIMD
From: Gustavo PadovanLet pm_runtime handle the enabling/disabling of the device with proper refcnt instead of rely on specific flags to track the enabled state. Signed-off-by: Gustavo Padovan --- drivers/gpu/drm/exynos/exynos5433_drm_decon.c | 1 - drivers/gpu/drm/exynos/exynos7_drm_decon.c| 1 - drivers/gpu/drm/exynos/exynos_drm_fimd.c | 91 +++ 3 files changed, 37 insertions(+), 56 deletions(-) diff --git a/drivers/gpu/drm/exynos/exynos5433_drm_decon.c b/drivers/gpu/drm/exynos/exynos5433_drm_decon.c index 79b2b22..838a9c1 100644 --- a/drivers/gpu/drm/exynos/exynos5433_drm_decon.c +++ b/drivers/gpu/drm/exynos/exynos5433_drm_decon.c @@ -478,7 +478,6 @@ static struct exynos_drm_crtc_ops decon_crtc_ops = { .commit = decon_commit, .enable_vblank = decon_enable_vblank, .disable_vblank = decon_disable_vblank, - .commit = decon_commit, .atomic_begin = decon_atomic_begin, .update_plane = decon_update_plane, .disable_plane = decon_disable_plane, diff --git a/drivers/gpu/drm/exynos/exynos7_drm_decon.c b/drivers/gpu/drm/exynos/exynos7_drm_decon.c index f3826dc..e4646e2 100644 --- a/drivers/gpu/drm/exynos/exynos7_drm_decon.c +++ b/drivers/gpu/drm/exynos/exynos7_drm_decon.c @@ -637,7 +637,6 @@ static const struct exynos_drm_crtc_ops decon_crtc_ops = { .enable = decon_enable, .disable = decon_disable, .mode_fixup = decon_mode_fixup, - .commit = decon_commit, .enable_vblank = decon_enable_vblank, .disable_vblank = decon_disable_vblank, .wait_for_vblank = decon_wait_for_vblank, diff --git a/drivers/gpu/drm/exynos/exynos_drm_fimd.c b/drivers/gpu/drm/exynos/exynos_drm_fimd.c index 0bbe537..0f17ae0 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_fimd.c +++ b/drivers/gpu/drm/exynos/exynos_drm_fimd.c @@ -160,7 +160,6 @@ struct fimd_context { u32 vidout_con; u32 i80ifcon; booli80_if; - boolsuspended; int pipe; wait_queue_head_t wait_vsync_queue; atomic_twait_vsync_event; @@ -209,9 +208,6 @@ static int fimd_enable_vblank(struct exynos_drm_crtc *crtc) struct fimd_context *ctx = crtc->ctx; u32 val; - if (ctx->suspended) - return -EPERM; - if (!test_and_set_bit(0, >irq_flags)) { val = readl(ctx->regs + VIDINTCON0); @@ -241,9 +237,6 @@ static void fimd_disable_vblank(struct exynos_drm_crtc *crtc) struct fimd_context *ctx = crtc->ctx; u32 val; - if (ctx->suspended) - return; - if (test_and_clear_bit(0, >irq_flags)) { val = readl(ctx->regs + VIDINTCON0); @@ -264,9 +257,6 @@ static void fimd_wait_for_vblank(struct exynos_drm_crtc *crtc) { struct fimd_context *ctx = crtc->ctx; - if (ctx->suspended) - return; - atomic_set(>wait_vsync_event, 1); /* @@ -339,14 +329,12 @@ static void fimd_clear_channels(struct exynos_drm_crtc *crtc) int pipe = ctx->pipe; /* ensure that vblank interrupt won't be reported to core */ - ctx->suspended = false; ctx->pipe = -1; fimd_enable_vblank(ctx->crtc); fimd_wait_for_vblank(ctx->crtc); fimd_disable_vblank(ctx->crtc); - ctx->suspended = true; ctx->pipe = pipe; } @@ -394,9 +382,6 @@ static void fimd_commit(struct exynos_drm_crtc *crtc) void *timing_base = ctx->regs + driver_data->timing_base; u32 val, clkdiv; - if (ctx->suspended) - return; - /* nothing to do if we haven't set the mode yet */ if (mode->htotal == 0 || mode->vtotal == 0) return; @@ -630,9 +615,6 @@ static void fimd_atomic_begin(struct exynos_drm_crtc *crtc, { struct fimd_context *ctx = crtc->ctx; - if (ctx->suspended) - return; - fimd_shadow_protect_win(ctx, plane->zpos, true); } @@ -641,9 +623,6 @@ static void fimd_atomic_flush(struct exynos_drm_crtc *crtc, { struct fimd_context *ctx = crtc->ctx; - if (ctx->suspended) - return; - fimd_shadow_protect_win(ctx, plane->zpos, false); } @@ -659,9 +638,6 @@ static void fimd_update_plane(struct exynos_drm_crtc *crtc, unsigned int bpp = state->fb->bits_per_pixel >> 3; unsigned int pitch = state->fb->pitches[0]; - if (ctx->suspended) - return; - offset = plane->src_x * bpp; offset += plane->src_y * pitch; @@ -743,9 +719,6 @@ static void