The tilcdc crtc reset hook performs both atomic state initialization
using drm_atomic_helper_crtc_reset() and hardware-level register
writes to disable the raster and clear IRQ status.

The hardware reset is not related to atomic state initialization, and
the reset hook is being converted to atomic_create_state which only
deals with state allocation. Move the hardware reset to the hw_reset
helper hook instead.

Reviewed-by: Thomas Zimmermann <[email protected]>
Signed-off-by: Maxime Ripard <[email protected]>
---
Cc: Jyri Sarha <[email protected]>
Cc: Tomi Valkeinen <[email protected]>
---
 drivers/gpu/drm/tilcdc/tilcdc_crtc.c | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/tilcdc/tilcdc_crtc.c 
b/drivers/gpu/drm/tilcdc/tilcdc_crtc.c
index e07ecb36a27a..b299d73ce385 100644
--- a/drivers/gpu/drm/tilcdc/tilcdc_crtc.c
+++ b/drivers/gpu/drm/tilcdc/tilcdc_crtc.c
@@ -683,18 +683,16 @@ static void tilcdc_crtc_disable_vblank(struct drm_crtc 
*crtc)
                             LCDC_V2_END_OF_FRAME0_INT_ENA);
 
        spin_unlock_irqrestore(&tilcdc_crtc->irq_lock, flags);
 }
 
-static void tilcdc_crtc_reset(struct drm_crtc *crtc)
+static void tilcdc_crtc_hw_reset(struct drm_crtc *crtc)
 {
        struct tilcdc_crtc *tilcdc_crtc = to_tilcdc_crtc(crtc);
        struct drm_device *dev = crtc->dev;
        int ret;
 
-       drm_atomic_helper_crtc_reset(crtc);
-
        /* Turn the raster off if it for some reason is on. */
        pm_runtime_get_sync(dev->dev);
        if (tilcdc_read(dev, LCDC_RASTER_CTRL_REG) & LCDC_RASTER_ENABLE) {
                /* Enable DMA Frame Done Interrupt */
                tilcdc_write(dev, LCDC_INT_ENABLE_SET_REG, LCDC_FRAME_DONE);
@@ -714,11 +712,11 @@ static void tilcdc_crtc_reset(struct drm_crtc *crtc)
 }
 
 static const struct drm_crtc_funcs tilcdc_crtc_funcs = {
        .set_config     = drm_atomic_helper_set_config,
        .page_flip      = drm_atomic_helper_page_flip,
-       .reset          = tilcdc_crtc_reset,
+       .reset          = drm_atomic_helper_crtc_reset,
        .atomic_duplicate_state = drm_atomic_helper_crtc_duplicate_state,
        .atomic_destroy_state = drm_atomic_helper_crtc_destroy_state,
        .enable_vblank  = tilcdc_crtc_enable_vblank,
        .disable_vblank = tilcdc_crtc_disable_vblank,
 };
@@ -818,10 +816,11 @@ static const struct drm_crtc_helper_funcs 
tilcdc_crtc_helper_funcs = {
        .mode_fixup     = tilcdc_crtc_mode_fixup,
        .atomic_check   = tilcdc_crtc_atomic_check,
        .atomic_enable  = tilcdc_crtc_atomic_enable,
        .atomic_disable = tilcdc_crtc_atomic_disable,
        .atomic_flush   = tilcdc_crtc_atomic_flush,
+       .hw_reset       = tilcdc_crtc_hw_reset,
 };
 
 void tilcdc_crtc_update_clk(struct drm_crtc *crtc)
 {
        struct drm_device *dev = crtc->dev;

-- 
2.55.0

Reply via email to