* Re: [v3,3/7] drm/bridge_connector: rely on drm_kms_helper_poll_* for HPD enablement [not found] ` <CGME20230111124140eucas1p21242c8b4cb0fc8a994d66827ca76a3ee@eucas1p2.samsung.com> @ 2023-01-11 12:41 ` Marek Szyprowski 2023-01-12 9:35 ` Neil Armstrong 0 siblings, 1 reply; 4+ messages in thread From: Marek Szyprowski @ 2023-01-11 12:41 UTC (permalink / raw) To: Dmitry Baryshkov, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, David Airlie, Daniel Vetter, Laurentiu Palcu, Lucas Stach, Philipp Zabel, Shawn Guo, Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam, NXP Linux Team, Rob Clark, Sean Paul, Abhinav Kumar, Tomi Valkeinen, Neil Armstrong Cc: linux-arm-msm, freedreno, linux-arm-kernel, dri-devel, linux-amlogic On 02.11.2022 19:07, Dmitry Baryshkov wrote: > Use drm_connector's helpers enable_hpd and disable_hpd to enable and > disable HPD automatically by the means of drm_kms_helper_poll_* > functions. As the drm_bridge_connector_enable_hpd() and > drm_bridge_connector_disable_hpd() functions are now unused, replace > them with stubs to ease driver migration. > > Enabling the HPD from drm_bridge_connector_init() can happen too early, > before the driver is prepared to handle HPD events. As the > drm_bridge_connector_enable_hpd() is empty anyway, drop this call > anyway. > > Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> > --- This patch, merged to recent linux-next as commit 92d755d8f13b ("drm/bridge_connector: rely on drm_kms_helper_poll_* for HPD enablement"), triggers the following warning on all my Amlogic Meson based boards: ------------[ cut here ]------------ Hot plug detection already enabled WARNING: CPU: 2 PID: 285 at drivers/gpu/drm/drm_bridge.c:1257 drm_bridge_hpd_enable+0x90/0xa0 Modules linked in: snd_soc_meson_axg_frddr snd_soc_meson_axg_fifo dwmac_generic panfrost(+) reset_meson_audio_arb(+) drm_shmem_helper meson_dw_hdmi(+) dw_hdmi rc_odroid drm_display_helper meson_ir(+) gpu_sched meson_rng rng_core meson_gxbb_wdt crct10dif_ce dwmac_meson8b stmmac_platform snd_soc_meson_axg_sound_card snd_soc_meson_card_utils mdio_mux_meson_g12a stmmac meson_drm pwm_meson pcs_xpcs meson_canvas snd_soc_meson_axg_tdm_interface rtc_meson_vrtc snd_soc_meson_axg_tdm_formatter nvmem_meson_efuse display_connector CPU: 2 PID: 285 Comm: systemd-udevd Not tainted 6.1.0-rc6+ #13236 Hardware name: Hardkernel ODROID-C4 (DT) pstate: 60400009 (nZCv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--) pc : drm_bridge_hpd_enable+0x90/0xa0 lr : drm_bridge_hpd_enable+0x90/0xa0 ... Call trace: drm_bridge_hpd_enable+0x90/0xa0 _drm_bridge_connector_enable_hpd+0x24/0x34 drm_kms_helper_poll_enable.part.0+0x50/0xd0 drm_helper_probe_single_connector_modes+0x400/0x530 drm_client_modeset_probe+0x1ec/0xba0 __drm_fb_helper_initial_config_and_unlock+0x4c/0x630 drm_fb_helper_initial_config+0x50/0x60 drm_fbdev_client_hotplug+0xc4/0x150 drm_fbdev_generic_setup+0x88/0x150 meson_drv_bind_master+0x3d4/0x4a0 [meson_drm] meson_drv_bind+0x14/0x20 [meson_drm] try_to_bring_up_aggregate_device+0x164/0x1d0 __component_add+0xa8/0x174 component_add+0x14/0x20 meson_dw_hdmi_probe+0x1c/0x30 [meson_dw_hdmi] platform_probe+0x68/0xe0 really_probe+0xbc/0x2e0 __driver_probe_device+0x78/0xe0 driver_probe_device+0x3c/0x160 __driver_attach+0x88/0x1a0 bus_for_each_dev+0x70/0xd0 driver_attach+0x24/0x30 bus_add_driver+0x154/0x204 driver_register+0x78/0x130 __platform_driver_register+0x28/0x34 meson_dw_hdmi_platform_driver_init+0x24/0x1000 [meson_dw_hdmi] do_one_initcall+0x74/0x400 do_init_module+0x48/0x1d4 load_module+0x1818/0x1de0 __do_sys_finit_module+0xc0/0x114 __arm64_sys_finit_module+0x20/0x30 invoke_syscall+0x48/0x114 el0_svc_common.constprop.0+0x60/0x11c do_el0_svc_compat+0x1c/0x40 el0_svc_compat+0x48/0xc0 el0t_32_sync_handler+0x90/0x140 el0t_32_sync+0x190/0x194 irq event stamp: 17422 hardirqs last enabled at (17421): [<ffff800009196058>] __schedule+0x998/0xa14 hardirqs last disabled at (17422): [<ffff80000918e4a4>] el1_dbg+0x24/0x90 softirqs last enabled at (17404): [<ffff80000801046c>] _stext+0x46c/0x5d8 softirqs last disabled at (17383): [<ffff8000080166d0>] ____do_softirq+0x10/0x20 ---[ end trace 0000000000000000 ]--- I looks that this change requires some additional changes/fixes in the drivers/gpu/drm/meson/meson_dw_hdmi.c > drivers/gpu/drm/drm_bridge_connector.c | 18 +++++++++++++----- > 1 file changed, 13 insertions(+), 5 deletions(-) > > diff --git a/drivers/gpu/drm/drm_bridge_connector.c b/drivers/gpu/drm/drm_bridge_connector.c > index 1c7d936523df..0e13bc87a6ac 100644 > --- a/drivers/gpu/drm/drm_bridge_connector.c > +++ b/drivers/gpu/drm/drm_bridge_connector.c > @@ -136,6 +136,11 @@ static void drm_bridge_connector_hpd_cb(void *cb_data, > * This is typically used by display drivers in their resume handler. > */ > void drm_bridge_connector_enable_hpd(struct drm_connector *connector) > +{ > +} > +EXPORT_SYMBOL_GPL(drm_bridge_connector_enable_hpd); > + > +static void _drm_bridge_connector_enable_hpd(struct drm_connector *connector) > { > struct drm_bridge_connector *bridge_connector = > to_drm_bridge_connector(connector); > @@ -145,7 +150,6 @@ void drm_bridge_connector_enable_hpd(struct drm_connector *connector) > drm_bridge_hpd_enable(hpd, drm_bridge_connector_hpd_cb, > bridge_connector); > } > -EXPORT_SYMBOL_GPL(drm_bridge_connector_enable_hpd); > > /** > * drm_bridge_connector_disable_hpd - Disable hot-plug detection for the > @@ -156,6 +160,11 @@ EXPORT_SYMBOL_GPL(drm_bridge_connector_enable_hpd); > * This is typically used by display drivers in their suspend handler. > */ > void drm_bridge_connector_disable_hpd(struct drm_connector *connector) > +{ > +} > +EXPORT_SYMBOL_GPL(drm_bridge_connector_disable_hpd); > + > +static void _drm_bridge_connector_disable_hpd(struct drm_connector *connector) > { > struct drm_bridge_connector *bridge_connector = > to_drm_bridge_connector(connector); > @@ -164,7 +173,6 @@ void drm_bridge_connector_disable_hpd(struct drm_connector *connector) > if (hpd) > drm_bridge_hpd_disable(hpd); > } > -EXPORT_SYMBOL_GPL(drm_bridge_connector_disable_hpd); > > /* ----------------------------------------------------------------------------- > * Bridge Connector Functions > @@ -305,6 +313,8 @@ static int drm_bridge_connector_get_modes(struct drm_connector *connector) > static const struct drm_connector_helper_funcs drm_bridge_connector_helper_funcs = { > .get_modes = drm_bridge_connector_get_modes, > /* No need for .mode_valid(), the bridges are checked by the core. */ > + .enable_hpd = _drm_bridge_connector_enable_hpd, > + .disable_hpd = _drm_bridge_connector_disable_hpd, > }; > > /* ----------------------------------------------------------------------------- > @@ -387,10 +397,8 @@ struct drm_connector *drm_bridge_connector_init(struct drm_device *drm, > connector_type, ddc); > drm_connector_helper_add(connector, &drm_bridge_connector_helper_funcs); > > - if (bridge_connector->bridge_hpd) { > + if (bridge_connector->bridge_hpd) > connector->polled = DRM_CONNECTOR_POLL_HPD; > - drm_bridge_connector_enable_hpd(connector); > - } > else if (bridge_connector->bridge_detect) > connector->polled = DRM_CONNECTOR_POLL_CONNECT > | DRM_CONNECTOR_POLL_DISCONNECT; Best regards -- Marek Szyprowski, PhD Samsung R&D Institute Poland _______________________________________________ linux-amlogic mailing list linux-amlogic@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-amlogic ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [v3,3/7] drm/bridge_connector: rely on drm_kms_helper_poll_* for HPD enablement 2023-01-11 12:41 ` [v3,3/7] drm/bridge_connector: rely on drm_kms_helper_poll_* for HPD enablement Marek Szyprowski @ 2023-01-12 9:35 ` Neil Armstrong 2023-01-12 9:36 ` Dmitry Baryshkov 2023-01-12 10:48 ` Marek Szyprowski 0 siblings, 2 replies; 4+ messages in thread From: Neil Armstrong @ 2023-01-12 9:35 UTC (permalink / raw) To: Marek Szyprowski, Dmitry Baryshkov, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, David Airlie, Daniel Vetter, Laurentiu Palcu, Lucas Stach, Philipp Zabel, Shawn Guo, Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam, NXP Linux Team, Rob Clark, Sean Paul, Abhinav Kumar, Tomi Valkeinen Cc: linux-arm-msm, freedreno, linux-arm-kernel, dri-devel, linux-amlogic On 11/01/2023 13:41, Marek Szyprowski wrote: > On 02.11.2022 19:07, Dmitry Baryshkov wrote: >> Use drm_connector's helpers enable_hpd and disable_hpd to enable and >> disable HPD automatically by the means of drm_kms_helper_poll_* >> functions. As the drm_bridge_connector_enable_hpd() and >> drm_bridge_connector_disable_hpd() functions are now unused, replace >> them with stubs to ease driver migration. >> >> Enabling the HPD from drm_bridge_connector_init() can happen too early, >> before the driver is prepared to handle HPD events. As the >> drm_bridge_connector_enable_hpd() is empty anyway, drop this call >> anyway. >> >> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> >> --- > > This patch, merged to recent linux-next as commit 92d755d8f13b > ("drm/bridge_connector: rely on drm_kms_helper_poll_* for HPD > enablement"), triggers the following warning on all my Amlogic Meson > based boards: > > ------------[ cut here ]------------ > Hot plug detection already enabled > WARNING: CPU: 2 PID: 285 at drivers/gpu/drm/drm_bridge.c:1257 > drm_bridge_hpd_enable+0x90/0xa0 > Modules linked in: snd_soc_meson_axg_frddr snd_soc_meson_axg_fifo > dwmac_generic panfrost(+) reset_meson_audio_arb(+) drm_shmem_helper > meson_dw_hdmi(+) dw_hdmi rc_odroid drm_display_helper meson_ir(+) > gpu_sched meson_rng rng_core meson_gxbb_wdt crct10dif_ce dwmac_meson8b > stmmac_platform snd_soc_meson_axg_sound_card snd_soc_meson_card_utils > mdio_mux_meson_g12a stmmac meson_drm pwm_meson pcs_xpcs meson_canvas > snd_soc_meson_axg_tdm_interface rtc_meson_vrtc > snd_soc_meson_axg_tdm_formatter nvmem_meson_efuse display_connector > CPU: 2 PID: 285 Comm: systemd-udevd Not tainted 6.1.0-rc6+ #13236 > Hardware name: Hardkernel ODROID-C4 (DT) > pstate: 60400009 (nZCv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--) > pc : drm_bridge_hpd_enable+0x90/0xa0 > lr : drm_bridge_hpd_enable+0x90/0xa0 > ... > Call trace: > drm_bridge_hpd_enable+0x90/0xa0 > _drm_bridge_connector_enable_hpd+0x24/0x34 Weird because _drm_bridge_connector_enable_hpd() has been removed with 4c00ac500d0e ("drm/bridge_connector: drop drm_bridge_connector_en/disable_hpd()") > drm_kms_helper_poll_enable.part.0+0x50/0xd0 It seems drm_kms_helper_poll_enable is called again by drm_helper_probe_single_connector_modes() because poll_running isn't set. Can you try with this change: ===============><=========================================== diff --git a/drivers/gpu/drm/drm_probe_helper.c b/drivers/gpu/drm/drm_probe_helper.c index 7973f2589ced..5d60d4fd868f 100644 --- a/drivers/gpu/drm/drm_probe_helper.c +++ b/drivers/gpu/drm/drm_probe_helper.c @@ -245,7 +245,7 @@ void drm_kms_helper_poll_enable(struct drm_device *dev) struct drm_connector_list_iter conn_iter; unsigned long delay = DRM_OUTPUT_POLL_PERIOD; - if (!dev->mode_config.poll_enabled || !drm_kms_helper_poll) + if (!dev->mode_config.poll_init || !drm_kms_helper_poll || dev->mode_config.poll_enabled) return; drm_connector_list_iter_begin(dev, &conn_iter); @@ -279,6 +279,8 @@ void drm_kms_helper_poll_enable(struct drm_device *dev) if (poll) schedule_delayed_work(&dev->mode_config.output_poll_work, delay); + + dev->mode_config.poll_enabled = true; } EXPORT_SYMBOL(drm_kms_helper_poll_enable); @@ -561,7 +563,7 @@ int drm_helper_probe_single_connector_modes(struct drm_connector *connector, * disable itself again. */ dev->mode_config.delayed_event = true; - if (dev->mode_config.poll_enabled) + if (dev->mode_config.poll_init) schedule_delayed_work(&dev->mode_config.output_poll_work, 0); } @@ -703,7 +705,7 @@ static void output_poll_execute(struct work_struct *work) bool repoll = false, changed; u64 old_epoch_counter; - if (!dev->mode_config.poll_enabled) + if (!dev->mode_config.poll_init) return; /* Pick up any changes detected by the probe functions. */ @@ -813,11 +815,11 @@ static void drm_kms_helper_poll_disable_fini(struct drm_device *dev, bool fini) struct drm_connector *connector; struct drm_connector_list_iter conn_iter; - if (!dev->mode_config.poll_enabled) + if (!dev->mode_config.poll_init || !dev->mode_config.poll_enabled) return; if (fini) - dev->mode_config.poll_enabled = false; + dev->mode_config.poll_init = false; drm_connector_list_iter_begin(dev, &conn_iter); drm_for_each_connector_iter(connector, &conn_iter) { @@ -830,6 +832,8 @@ static void drm_kms_helper_poll_disable_fini(struct drm_device *dev, bool fini) drm_connector_list_iter_end(&conn_iter); cancel_delayed_work_sync(&dev->mode_config.output_poll_work); + + dev->mode_config.poll_enabled = false; } /** @@ -874,7 +878,7 @@ EXPORT_SYMBOL(drm_kms_helper_poll_disable); void drm_kms_helper_poll_init(struct drm_device *dev) { INIT_DELAYED_WORK(&dev->mode_config.output_poll_work, output_poll_execute); - dev->mode_config.poll_enabled = true; + dev->mode_config.poll_init = true; drm_kms_helper_poll_enable(dev); } @@ -1003,7 +1007,7 @@ bool drm_helper_hpd_irq_event(struct drm_device *dev) struct drm_connector_list_iter conn_iter; int changed = 0; - if (!dev->mode_config.poll_enabled) + if (!dev->mode_config.poll_init) return false; mutex_lock(&dev->mode_config.mutex); diff --git a/include/drm/drm_mode_config.h b/include/drm/drm_mode_config.h index e5b053001d22..86c5f66f1a6c 100644 --- a/include/drm/drm_mode_config.h +++ b/include/drm/drm_mode_config.h @@ -345,6 +345,7 @@ struct drm_mode_config_funcs { * @max_width: maximum fb pixel width on this device * @max_height: maximum fb pixel height on this device * @funcs: core driver provided mode setting functions + * @poll_init: track polling initialization for this device * @poll_enabled: track polling support for this device * @poll_running: track polling status for this device * @delayed_event: track delayed poll uevent deliver for this device @@ -543,6 +544,7 @@ struct drm_mode_config { const struct drm_mode_config_funcs *funcs; /* output poll support */ + bool poll_init; bool poll_enabled; bool poll_running; bool delayed_event; ===============><=========================================== Neil > drm_helper_probe_single_connector_modes+0x400/0x530 > drm_client_modeset_probe+0x1ec/0xba0 > __drm_fb_helper_initial_config_and_unlock+0x4c/0x630 > drm_fb_helper_initial_config+0x50/0x60 > drm_fbdev_client_hotplug+0xc4/0x150 > drm_fbdev_generic_setup+0x88/0x150 > meson_drv_bind_master+0x3d4/0x4a0 [meson_drm] > meson_drv_bind+0x14/0x20 [meson_drm] > try_to_bring_up_aggregate_device+0x164/0x1d0 > __component_add+0xa8/0x174 > component_add+0x14/0x20 > meson_dw_hdmi_probe+0x1c/0x30 [meson_dw_hdmi] > platform_probe+0x68/0xe0 > really_probe+0xbc/0x2e0 > __driver_probe_device+0x78/0xe0 > driver_probe_device+0x3c/0x160 > __driver_attach+0x88/0x1a0 > bus_for_each_dev+0x70/0xd0 > driver_attach+0x24/0x30 > bus_add_driver+0x154/0x204 > driver_register+0x78/0x130 > __platform_driver_register+0x28/0x34 > meson_dw_hdmi_platform_driver_init+0x24/0x1000 [meson_dw_hdmi] > do_one_initcall+0x74/0x400 > do_init_module+0x48/0x1d4 > load_module+0x1818/0x1de0 > __do_sys_finit_module+0xc0/0x114 > __arm64_sys_finit_module+0x20/0x30 > invoke_syscall+0x48/0x114 > el0_svc_common.constprop.0+0x60/0x11c > do_el0_svc_compat+0x1c/0x40 > el0_svc_compat+0x48/0xc0 > el0t_32_sync_handler+0x90/0x140 > el0t_32_sync+0x190/0x194 > irq event stamp: 17422 > hardirqs last enabled at (17421): [<ffff800009196058>] > __schedule+0x998/0xa14 > hardirqs last disabled at (17422): [<ffff80000918e4a4>] el1_dbg+0x24/0x90 > softirqs last enabled at (17404): [<ffff80000801046c>] _stext+0x46c/0x5d8 > softirqs last disabled at (17383): [<ffff8000080166d0>] > ____do_softirq+0x10/0x20 > ---[ end trace 0000000000000000 ]--- > > I looks that this change requires some additional changes/fixes in the > drivers/gpu/drm/meson/meson_dw_hdmi.c > > >> drivers/gpu/drm/drm_bridge_connector.c | 18 +++++++++++++----- >> 1 file changed, 13 insertions(+), 5 deletions(-) >> >> diff --git a/drivers/gpu/drm/drm_bridge_connector.c b/drivers/gpu/drm/drm_bridge_connector.c >> index 1c7d936523df..0e13bc87a6ac 100644 >> --- a/drivers/gpu/drm/drm_bridge_connector.c >> +++ b/drivers/gpu/drm/drm_bridge_connector.c >> @@ -136,6 +136,11 @@ static void drm_bridge_connector_hpd_cb(void *cb_data, >> * This is typically used by display drivers in their resume handler. >> */ >> void drm_bridge_connector_enable_hpd(struct drm_connector *connector) >> +{ >> +} >> +EXPORT_SYMBOL_GPL(drm_bridge_connector_enable_hpd); >> + >> +static void _drm_bridge_connector_enable_hpd(struct drm_connector *connector) >> { >> struct drm_bridge_connector *bridge_connector = >> to_drm_bridge_connector(connector); >> @@ -145,7 +150,6 @@ void drm_bridge_connector_enable_hpd(struct drm_connector *connector) >> drm_bridge_hpd_enable(hpd, drm_bridge_connector_hpd_cb, >> bridge_connector); >> } >> -EXPORT_SYMBOL_GPL(drm_bridge_connector_enable_hpd); >> >> /** >> * drm_bridge_connector_disable_hpd - Disable hot-plug detection for the >> @@ -156,6 +160,11 @@ EXPORT_SYMBOL_GPL(drm_bridge_connector_enable_hpd); >> * This is typically used by display drivers in their suspend handler. >> */ >> void drm_bridge_connector_disable_hpd(struct drm_connector *connector) >> +{ >> +} >> +EXPORT_SYMBOL_GPL(drm_bridge_connector_disable_hpd); >> + >> +static void _drm_bridge_connector_disable_hpd(struct drm_connector *connector) >> { >> struct drm_bridge_connector *bridge_connector = >> to_drm_bridge_connector(connector); >> @@ -164,7 +173,6 @@ void drm_bridge_connector_disable_hpd(struct drm_connector *connector) >> if (hpd) >> drm_bridge_hpd_disable(hpd); >> } >> -EXPORT_SYMBOL_GPL(drm_bridge_connector_disable_hpd); >> >> /* ----------------------------------------------------------------------------- >> * Bridge Connector Functions >> @@ -305,6 +313,8 @@ static int drm_bridge_connector_get_modes(struct drm_connector *connector) >> static const struct drm_connector_helper_funcs drm_bridge_connector_helper_funcs = { >> .get_modes = drm_bridge_connector_get_modes, >> /* No need for .mode_valid(), the bridges are checked by the core. */ >> + .enable_hpd = _drm_bridge_connector_enable_hpd, >> + .disable_hpd = _drm_bridge_connector_disable_hpd, >> }; >> >> /* ----------------------------------------------------------------------------- >> @@ -387,10 +397,8 @@ struct drm_connector *drm_bridge_connector_init(struct drm_device *drm, >> connector_type, ddc); >> drm_connector_helper_add(connector, &drm_bridge_connector_helper_funcs); >> >> - if (bridge_connector->bridge_hpd) { >> + if (bridge_connector->bridge_hpd) >> connector->polled = DRM_CONNECTOR_POLL_HPD; >> - drm_bridge_connector_enable_hpd(connector); >> - } >> else if (bridge_connector->bridge_detect) >> connector->polled = DRM_CONNECTOR_POLL_CONNECT >> | DRM_CONNECTOR_POLL_DISCONNECT; > > Best regards _______________________________________________ linux-amlogic mailing list linux-amlogic@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-amlogic ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [v3,3/7] drm/bridge_connector: rely on drm_kms_helper_poll_* for HPD enablement 2023-01-12 9:35 ` Neil Armstrong @ 2023-01-12 9:36 ` Dmitry Baryshkov 2023-01-12 10:48 ` Marek Szyprowski 1 sibling, 0 replies; 4+ messages in thread From: Dmitry Baryshkov @ 2023-01-12 9:36 UTC (permalink / raw) To: neil.armstrong, Marek Szyprowski, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, David Airlie, Daniel Vetter, Laurentiu Palcu, Lucas Stach, Philipp Zabel, Shawn Guo, Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam, NXP Linux Team, Rob Clark, Sean Paul, Abhinav Kumar, Tomi Valkeinen Cc: linux-arm-msm, freedreno, linux-arm-kernel, dri-devel, linux-amlogic On 12/01/2023 11:35, Neil Armstrong wrote: > On 11/01/2023 13:41, Marek Szyprowski wrote: >> On 02.11.2022 19:07, Dmitry Baryshkov wrote: >>> Use drm_connector's helpers enable_hpd and disable_hpd to enable and >>> disable HPD automatically by the means of drm_kms_helper_poll_* >>> functions. As the drm_bridge_connector_enable_hpd() and >>> drm_bridge_connector_disable_hpd() functions are now unused, replace >>> them with stubs to ease driver migration. >>> >>> Enabling the HPD from drm_bridge_connector_init() can happen too early, >>> before the driver is prepared to handle HPD events. As the >>> drm_bridge_connector_enable_hpd() is empty anyway, drop this call >>> anyway. >>> >>> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> >>> --- >> >> This patch, merged to recent linux-next as commit 92d755d8f13b >> ("drm/bridge_connector: rely on drm_kms_helper_poll_* for HPD >> enablement"), triggers the following warning on all my Amlogic Meson >> based boards: >> >> ------------[ cut here ]------------ >> Hot plug detection already enabled >> WARNING: CPU: 2 PID: 285 at drivers/gpu/drm/drm_bridge.c:1257 >> drm_bridge_hpd_enable+0x90/0xa0 >> Modules linked in: snd_soc_meson_axg_frddr snd_soc_meson_axg_fifo >> dwmac_generic panfrost(+) reset_meson_audio_arb(+) drm_shmem_helper >> meson_dw_hdmi(+) dw_hdmi rc_odroid drm_display_helper meson_ir(+) >> gpu_sched meson_rng rng_core meson_gxbb_wdt crct10dif_ce dwmac_meson8b >> stmmac_platform snd_soc_meson_axg_sound_card snd_soc_meson_card_utils >> mdio_mux_meson_g12a stmmac meson_drm pwm_meson pcs_xpcs meson_canvas >> snd_soc_meson_axg_tdm_interface rtc_meson_vrtc >> snd_soc_meson_axg_tdm_formatter nvmem_meson_efuse display_connector >> CPU: 2 PID: 285 Comm: systemd-udevd Not tainted 6.1.0-rc6+ #13236 >> Hardware name: Hardkernel ODROID-C4 (DT) >> pstate: 60400009 (nZCv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--) >> pc : drm_bridge_hpd_enable+0x90/0xa0 >> lr : drm_bridge_hpd_enable+0x90/0xa0 >> ... >> Call trace: >> drm_bridge_hpd_enable+0x90/0xa0 >> _drm_bridge_connector_enable_hpd+0x24/0x34 > > Weird because _drm_bridge_connector_enable_hpd() has been removed with > 4c00ac500d0e ("drm/bridge_connector: drop > drm_bridge_connector_en/disable_hpd()") > > >> drm_kms_helper_poll_enable.part.0+0x50/0xd0 > > It seems drm_kms_helper_poll_enable is called again by > drm_helper_probe_single_connector_modes() because poll_running isn't set. Yes, I'm currently reworking poll_running handling. I hope to post a patch today. -- With best wishes Dmitry _______________________________________________ linux-amlogic mailing list linux-amlogic@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-amlogic ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [v3,3/7] drm/bridge_connector: rely on drm_kms_helper_poll_* for HPD enablement 2023-01-12 9:35 ` Neil Armstrong 2023-01-12 9:36 ` Dmitry Baryshkov @ 2023-01-12 10:48 ` Marek Szyprowski 1 sibling, 0 replies; 4+ messages in thread From: Marek Szyprowski @ 2023-01-12 10:48 UTC (permalink / raw) To: neil.armstrong, Dmitry Baryshkov, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, David Airlie, Daniel Vetter, Laurentiu Palcu, Lucas Stach, Philipp Zabel, Shawn Guo, Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam, NXP Linux Team, Rob Clark, Sean Paul, Abhinav Kumar, Tomi Valkeinen Cc: linux-arm-msm, freedreno, linux-arm-kernel, dri-devel, linux-amlogic Hi Neil, On 12.01.2023 10:35, Neil Armstrong wrote: > On 11/01/2023 13:41, Marek Szyprowski wrote: >> On 02.11.2022 19:07, Dmitry Baryshkov wrote: >>> Use drm_connector's helpers enable_hpd and disable_hpd to enable and >>> disable HPD automatically by the means of drm_kms_helper_poll_* >>> functions. As the drm_bridge_connector_enable_hpd() and >>> drm_bridge_connector_disable_hpd() functions are now unused, replace >>> them with stubs to ease driver migration. >>> >>> Enabling the HPD from drm_bridge_connector_init() can happen too early, >>> before the driver is prepared to handle HPD events. As the >>> drm_bridge_connector_enable_hpd() is empty anyway, drop this call >>> anyway. >>> >>> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> >>> --- >> >> This patch, merged to recent linux-next as commit 92d755d8f13b >> ("drm/bridge_connector: rely on drm_kms_helper_poll_* for HPD >> enablement"), triggers the following warning on all my Amlogic Meson >> based boards: >> >> ------------[ cut here ]------------ >> Hot plug detection already enabled >> WARNING: CPU: 2 PID: 285 at drivers/gpu/drm/drm_bridge.c:1257 >> drm_bridge_hpd_enable+0x90/0xa0 >> Modules linked in: snd_soc_meson_axg_frddr snd_soc_meson_axg_fifo >> dwmac_generic panfrost(+) reset_meson_audio_arb(+) drm_shmem_helper >> meson_dw_hdmi(+) dw_hdmi rc_odroid drm_display_helper meson_ir(+) >> gpu_sched meson_rng rng_core meson_gxbb_wdt crct10dif_ce dwmac_meson8b >> stmmac_platform snd_soc_meson_axg_sound_card snd_soc_meson_card_utils >> mdio_mux_meson_g12a stmmac meson_drm pwm_meson pcs_xpcs meson_canvas >> snd_soc_meson_axg_tdm_interface rtc_meson_vrtc >> snd_soc_meson_axg_tdm_formatter nvmem_meson_efuse display_connector >> CPU: 2 PID: 285 Comm: systemd-udevd Not tainted 6.1.0-rc6+ #13236 >> Hardware name: Hardkernel ODROID-C4 (DT) >> pstate: 60400009 (nZCv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--) >> pc : drm_bridge_hpd_enable+0x90/0xa0 >> lr : drm_bridge_hpd_enable+0x90/0xa0 >> ... >> Call trace: >> drm_bridge_hpd_enable+0x90/0xa0 >> _drm_bridge_connector_enable_hpd+0x24/0x34 > > Weird because _drm_bridge_connector_enable_hpd() has been removed with > 4c00ac500d0e ("drm/bridge_connector: drop > drm_bridge_connector_en/disable_hpd()") The above log has been captured at commit 92d755d8f13b during bisecting, so 4c00ac500d0e is not applied yet. Maybe I should have mention that. The issue on top of linux-next is similar. > >> drm_kms_helper_poll_enable.part.0+0x50/0xd0 > > It seems drm_kms_helper_poll_enable is called again by > drm_helper_probe_single_connector_modes() because poll_running isn't set. > > Can you try with this change: This fixes the issue on top of linux next-20230112. Thanks! Feel free to add if you plan to submit it as a formal patch: Reported-by: Marek Szyprowski <m.szyprowski@samsung.com> Tested-by: Marek Szyprowski <m.szyprowski@samsung.com> > ... Best regards -- Marek Szyprowski, PhD Samsung R&D Institute Poland _______________________________________________ linux-amlogic mailing list linux-amlogic@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-amlogic ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2023-01-12 10:49 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
[not found] <20221102180705.459294-4-dmitry.baryshkov@linaro.org>
[not found] ` <CGME20230111124140eucas1p21242c8b4cb0fc8a994d66827ca76a3ee@eucas1p2.samsung.com>
2023-01-11 12:41 ` [v3,3/7] drm/bridge_connector: rely on drm_kms_helper_poll_* for HPD enablement Marek Szyprowski
2023-01-12 9:35 ` Neil Armstrong
2023-01-12 9:36 ` Dmitry Baryshkov
2023-01-12 10:48 ` Marek Szyprowski
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®