drm: bridge: panel: Reset the connector state pointer
Trigger hotplug event with drm_kms_helper_hotplug_event might fail if the
connector state pointer is NULL.
BUG observed in exynos dsi driver where drm_bridge_attach is trying to
register a connector in panel_bridge before the hotplug event is triggered.
WARNING: CPU: 1 PID: 1 at drivers/gpu/drm/drm_atomic_state_helper.c:494 drm_atomic_helper_connector_duplicate_state+0x94/0x9c
Modules linked in:
CPU: 1 PID: 1 Comm: swapper/0 Tainted: G W 5.16.0-rc1-00009-g704b1dbfa4c2 #11058
Hardware name: Samsung Exynos (Flattened Device Tree)
[<
c0110b30>] (unwind_backtrace) from [<
c010c618>] (show_stack+0x10/0x14)
[<
c010c618>] (show_stack) from [<
c0b657d4>] (dump_stack_lvl+0x58/0x70)
[<
c0b657d4>] (dump_stack_lvl) from [<
c01261dc>] (__warn+0xd0/0x134)
[<
c01261dc>] (__warn) from [<
c0b5f628>] (warn_slowpath_fmt+0x5c/0xb4)
[<
c0b5f628>] (warn_slowpath_fmt) from [<
c064bce4>] (drm_atomic_helper_connector_duplicate_state+0x94/0x9c)
[<
c064bce4>] (drm_atomic_helper_connector_duplicate_state) from [<
c0666b64>] (drm_atomic_get_connector_state+0xd4/0x190)
[<
c0666b64>] (drm_atomic_get_connector_state) from [<
c0667928>] (__drm_atomic_helper_set_config+0x314/0x368)
[<
c0667928>] (__drm_atomic_helper_set_config) from [<
c067e628>] (drm_client_modeset_commit_atomic+0x170/0x278)
[<
c067e628>] (drm_client_modeset_commit_atomic) from [<
c067e800>] (drm_client_modeset_commit_locked+0x60/0x1c8)
[<
c067e800>] (drm_client_modeset_commit_locked) from [<
c067e98c>] (drm_client_modeset_commit+0x24/0x40)
[<
c067e98c>] (drm_client_modeset_commit) from [<
c06509c0>] (drm_fb_helper_set_par+0xb8/0xf8)
[<
c06509c0>] (drm_fb_helper_set_par) from [<
c05b86d0>] (fbcon_init+0x2c0/0x518)
[<
c05b86d0>] (fbcon_init) from [<
c060636c>] (visual_init+0xc0/0x108)
[<
c060636c>] (visual_init) from [<
c06085e4>] (do_bind_con_driver+0x1b8/0x3a4)
[<
c06085e4>] (do_bind_con_driver) from [<
c0608b40>] (do_take_over_console+0x13c/0x1e8)
[<
c0608b40>] (do_take_over_console) from [<
c05b6854>] (do_fbcon_takeover+0x78/0xd8)
[<
c05b6854>] (do_fbcon_takeover) from [<
c05b1154>] (register_framebuffer+0x208/0x2e0)
[<
c05b1154>] (register_framebuffer) from [<
c064ead0>] (__drm_fb_helper_initial_config_and_unlock+0x400/0x63c)
[<
c064ead0>] (__drm_fb_helper_initial_config_and_unlock) from [<
c063a718>] (drm_kms_helper_hotplug_event+0x24/0x30)
[<
c063a718>] (drm_kms_helper_hotplug_event) from [<
c068f668>] (exynos_dsi_host_attach+0x174/0x1fc)
[<
c068f668>] (exynos_dsi_host_attach) from [<
c0699354>] (s6e8aa0_probe+0x1b4/0x218)
So reset the atomic state for a given connector by freeing the state pointer
and allocate a new empty state object. This can be done using connector
funcs->reset helper and has to be done before the hotplug even calls.
This patch calls the connector->funcs->reset in panel_bridge_attach.
Signed-off-by: Jagan Teki <jagan@amarulasolutions.com>
Acked-by: Marek Szyprowski <m.szyprowski@samsung.com>
Tested-by: Marek Szyprowski <m.szyprowski@samsung.com>
Signed-off-by: Robert Foss <robert.foss@linaro.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20220303163654.3381470-3-jagan@amarulasolutions.com