When converting to atomic the state reset was done by directly calling
the functions, and before the modeset object was fully initialized.
This means the various ->dev pointers weren't set up.

After

commit 51f644b40b4b794b28b982fdd5d0dd8ee63f9272
Author: Daniel Vetter <[email protected]>
Date:   Fri Jun 12 18:00:49 2020 +0200

    drm/atomic-helper: reset vblank on crtc reset

this started to oops because now we're trying to derefence
drm_crtc->dev. Fix this up by entirely switching over to
drm_mode_config_reset, called once everything is set up.

Fixes: 51f644b40b4b ("drm/atomic-helper: reset vblank on crtc reset")
Reported-by: Tetsuo Handa <[email protected]>
Cc: Tetsuo Handa <[email protected]>
Signed-off-by: Daniel Vetter <[email protected]>
Cc: VMware Graphics <[email protected]>
Cc: Roland Scheidegger <[email protected]>
---
 drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c | 9 ++-------
 1 file changed, 2 insertions(+), 7 deletions(-)

diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c 
b/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c
index 16b385629688..cf3aafd00837 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c
@@ -1738,8 +1738,6 @@ static int vmw_stdu_init(struct vmw_private *dev_priv, 
unsigned unit)
        stdu->base.is_implicit = false;
 
        /* Initialize primary plane */
-       vmw_du_plane_reset(primary);
-
        ret = drm_universal_plane_init(dev, primary,
                                       0, &vmw_stdu_plane_funcs,
                                       vmw_primary_plane_formats,
@@ -1754,8 +1752,6 @@ static int vmw_stdu_init(struct vmw_private *dev_priv, 
unsigned unit)
        drm_plane_enable_fb_damage_clips(primary);
 
        /* Initialize cursor plane */
-       vmw_du_plane_reset(cursor);
-
        ret = drm_universal_plane_init(dev, cursor,
                        0, &vmw_stdu_cursor_funcs,
                        vmw_cursor_plane_formats,
@@ -1769,8 +1765,6 @@ static int vmw_stdu_init(struct vmw_private *dev_priv, 
unsigned unit)
 
        drm_plane_helper_add(cursor, &vmw_stdu_cursor_plane_helper_funcs);
 
-       vmw_du_connector_reset(connector);
-
        ret = drm_connector_init(dev, connector, &vmw_stdu_connector_funcs,
                                 DRM_MODE_CONNECTOR_VIRTUAL);
        if (ret) {
@@ -1798,7 +1792,6 @@ static int vmw_stdu_init(struct vmw_private *dev_priv, 
unsigned unit)
                goto err_free_encoder;
        }
 
-       vmw_du_crtc_reset(crtc);
        ret = drm_crtc_init_with_planes(dev, crtc, &stdu->base.primary,
                                        &stdu->base.cursor,
                                        &vmw_stdu_crtc_funcs, NULL);
@@ -1894,6 +1887,8 @@ int vmw_kms_stdu_init_display(struct vmw_private 
*dev_priv)
                }
        }
 
+       drm_mode_config_reset(dev);
+
        DRM_INFO("Screen Target Display device initialized\n");
 
        return 0;
-- 
2.28.0

_______________________________________________
dri-devel mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to