From: Russell King Date: Sat, 8 Jul 2017 10:16:42 +0100 Subject: drm/armada: clean up armada_drm_crtc_plane_disable() Git-commit: f1f1bffcf01478883f92b69870fd29a4aae6fd64 Patch-mainline: v4.16-rc1 References: FATE#326289 FATE#326079 FATE#326049 FATE#322398 FATE#326166 Merge armada_drm_primary_disable() into armada_drm_crtc_plane_disable() and rename to armada_drm_plane_disable(). Use this to simplify armada_ovl_plane_disable(). Signed-off-by: Russell King Acked-by: Petr Tesarik --- drivers/gpu/drm/armada/armada_crtc.c | 21 +++++++++------------ drivers/gpu/drm/armada/armada_crtc.h | 4 ++-- drivers/gpu/drm/armada/armada_overlay.c | 9 +++------ 3 files changed, 14 insertions(+), 20 deletions(-) --- a/drivers/gpu/drm/armada/armada_crtc.c +++ b/drivers/gpu/drm/armada/armada_crtc.c @@ -1123,12 +1123,16 @@ static const struct drm_crtc_funcs armad .disable_vblank = armada_drm_crtc_disable_vblank, }; -void armada_drm_crtc_plane_disable(struct armada_crtc *dcrtc, - struct drm_plane *plane) +int armada_drm_plane_disable(struct drm_plane *plane, + struct drm_modeset_acquire_ctx *ctx) { struct armada_plane *dplane = drm_to_armada_plane(plane); + struct armada_crtc *dcrtc; u32 sram_para1, dma_ctrl0_mask; + if (!plane->crtc) + return 0; + /* * Drop our reference on any framebuffer attached to this plane. * We don't need to NULL this out as drm_plane_force_disable(), @@ -1150,6 +1154,8 @@ void armada_drm_crtc_plane_disable(struc dma_ctrl0_mask = CFG_DMA_ENA; } + dcrtc = drm_to_armada_crtc(plane->crtc); + /* Wait for any preceding work to complete, but don't wedge */ if (WARN_ON(!armada_drm_plane_work_wait(dplane, HZ))) armada_drm_plane_work_cancel(dcrtc, dplane); @@ -1159,22 +1165,13 @@ void armada_drm_crtc_plane_disable(struc spin_unlock_irq(&dcrtc->irq_lock); armada_updatel(sram_para1, 0, dcrtc->base + LCD_SPU_SRAM_PARA1); -} -static int armada_drm_primary_disable(struct drm_plane *plane, - struct drm_modeset_acquire_ctx *ctx) -{ - if (plane->crtc) { - struct armada_crtc *dcrtc = drm_to_armada_crtc(plane->crtc); - - armada_drm_crtc_plane_disable(dcrtc, plane); - } return 0; } static const struct drm_plane_funcs armada_primary_plane_funcs = { .update_plane = drm_primary_helper_update, - .disable_plane = armada_drm_primary_disable, + .disable_plane = armada_drm_plane_disable, .destroy = drm_primary_helper_destroy, }; --- a/drivers/gpu/drm/armada/armada_crtc.h +++ b/drivers/gpu/drm/armada/armada_crtc.h @@ -106,8 +106,8 @@ struct armada_crtc { void armada_drm_crtc_update_regs(struct armada_crtc *, struct armada_regs *); -void armada_drm_crtc_plane_disable(struct armada_crtc *dcrtc, - struct drm_plane *plane); +int armada_drm_plane_disable(struct drm_plane *plane, + struct drm_modeset_acquire_ctx *ctx); extern struct platform_driver armada_lcd_platform_driver; --- a/drivers/gpu/drm/armada/armada_overlay.c +++ b/drivers/gpu/drm/armada/armada_overlay.c @@ -264,15 +264,12 @@ static int armada_ovl_plane_disable(stru { struct armada_ovl_plane *dplane = drm_to_armada_ovl_plane(plane); struct drm_framebuffer *fb; - struct armada_crtc *dcrtc; - if (!dplane->base.base.crtc) - return 0; + armada_drm_plane_disable(plane, ctx); - dcrtc = drm_to_armada_crtc(dplane->base.base.crtc); - armada_drm_crtc_plane_disable(dcrtc, plane); + if (dplane->base.base.crtc) + drm_to_armada_crtc(dplane->base.base.crtc)->plane = NULL; - dcrtc->plane = NULL; dplane->base.state.ctrl0 = 0; fb = xchg(&dplane->old_fb, NULL);