Am 07.08.25 um 09:24 schrieb Derouiche, Oualid:
> 
> Dear Linux DRM Maintainers,

and anyone else who might be able to help or has experienced similar
issues ;)

FWIW, +CC: [email protected]

> 
> I hope this message finds you well.
> 
> I'm currently troubleshooting an HDMI hot-plug detection issue and would 
> greatly appreciate any insights or suggestions you might have. Below is a 
> brief description of the problem:
> 
> Platform: i.MX8MP 
> Driver: fsl,imx8mp-hdmi
> 
> We're experiencing a bad behavior with certain monitors (specifically Terra 
> monitors). On initial boot, when the HDMI cable is already connected, the 
> correct resolution is applied. However, if the cable is unplugged and then 
> reconnected, the resolution is incorrect, and EDID is not being read. (please 
> see attached Log). After several reconnection attempts, the correct 
> resolution is eventually applied.
> 
> Log1 – With Failure
> 
> imx8mp-dw-hdmi 32fd8000.hdmi: EVENT=plugin
> [ 2602.231703] imx8mp-dw-hdmi 32fd8000.hdmi: read_hpd result: 1
> [ 2602.231714] imx-lcdif 32fc6000.display-controller: 
> [drm:check_connector_changed] [CONNECTOR:35:HDMI-A-1] status updated from 
> disconnected to connected
> [ 2602.231735] imx-lcdif 32fc6000.display-controller: 
> [drm:check_connector_changed] [CONNECTOR:35:HDMI-A-1] Changed epoch counter 
> 37 => 38
> [ 2602.231751] [drm:drm_mode_object_get] OBJ ID: 35 (2)
> [ 2602.231765] imx-lcdif 32fc6000.display-controller: 
> [drm:drm_sysfs_connector_hotplug_event] [CONNECTOR:35:HDMI-A-1] generating 
> connector hotplug event
> [ 2602.231815] imx-lcdif 32fc6000.display-controller: 
> [drm:drm_fb_helper_hotplug_event.part.0] 
> [ 2602.231827] [drm:drm_client_modeset_probe] 
> [ 2602.231836] [drm:drm_mode_object_get] OBJ ID: 35 (3)
> [ 2602.231848] [drm:drm_helper_probe_single_connector_modes] 
> [CONNECTOR:35:HDMI-A-1]
> [ 2602.231942] i2c i2c-1: <i2c_imx_xfer_common> transfer message: 0
> [ 2602.231951] i2c i2c-1: <i2c_imx_write> write slave address: addr=0xa0
> [ 2602.231996] i2c i2c-1: <i2c_imx_trx_complete> TRX complete
> [ 2602.232004] i2c i2c-1: <i2c_imx_acked> No ACK
> [ 2602.232015] i2c i2c-1: <i2c_imx_xfer_common> exit with: error: -6
> [ 2602.232025] [drm:drm_do_probe_ddc_edid] drm: skipping non-existent adapter 
> 30a30000.i2c
> [ 2602.232037] imx8mp-dw-hdmi 32fd8000.hdmi: failed to get edid
> [ 2602.232043] drm_add_override_edid_modes
> [ 2602.232057] drm_add_modes_noedid
> 
> Log2 – work correctly
> 
> [  209.462094] imx8mp-dw-hdmi 32fd8000.hdmi: EVENT=plugin
> [  209.464913] imx8mp-dw-hdmi 32fd8000.hdmi: read_hpd result: 1
> [  209.464927] imx-lcdif 32fc6000.display-controller: 
> [drm:check_connector_changed] [CONNECTOR:35:HDMI-A-1] status updated from 
> disconnected to connected
> [  209.472468] imx-lcdif 32fc6000.display-controller: 
> [drm:check_connector_changed] [CONNECTOR:35:HDMI-A-1] Changed epoch counter 
> 15 => 16
> [  209.472484] [drm:drm_mode_object_get] OBJ ID: 35 (2)
> [  209.472516] imx-lcdif 32fc6000.display-controller: 
> [drm:drm_sysfs_connector_hotplug_event] [CONNECTOR:35:HDMI-A-1] generating 
> connector hotplug event
> [  209.472577] imx-lcdif 32fc6000.display-controller: 
> [drm:drm_fb_helper_hotplug_event.part.0] 
> [  209.472588] [drm:drm_client_modeset_probe] 
> [  209.472597] [drm:drm_mode_object_get] OBJ ID: 35 (3)
> [  209.472608] [drm:drm_helper_probe_single_connector_modes] 
> [CONNECTOR:35:HDMI-A-1]
> [  209.472711] i2c i2c-1: <i2c_imx_xfer_common> transfer message: 0
> [  209.482814] i2c i2c-1: <i2c_imx_write> write slave address: addr=0xa0
> [  209.482881] i2c i2c-1: <i2c_imx_trx_complete> TRX complete
> [  209.482890] i2c i2c-1: <i2c_imx_acked> ACK received
> [  209.482896] i2c i2c-1: <i2c_imx_write> write data
> [  209.482902] i2c i2c-1: <i2c_imx_write> write byte: B0=0x0
> [  209.482946] i2c i2c-1: <i2c_imx_trx_complete> TRX complete
> [  209.482953] i2c i2c-1: <i2c_imx_acked> ACK received
> [  209.482959] i2c i2c-1: <i2c_imx_xfer_common> repeated start
> 
> 
> It seems to be a timing-related problem between the EDID read via ddc and HPD 
> signal handling, a workaround by adding a 100 ms delay to the 
> dw_hdmi_phy_read_hpd() function resolves the issue (please see attached).
> 
> Patch1
> 
> --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
> +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
> @@ -1686,8 +1686,13 @@ static void dw_hdmi_phy_disable(struct dw_hdmi *hdmi, 
> void *data)
> enum drm_connector_status dw_hdmi_phy_read_hpd(struct dw_hdmi *hdmi,
>                                                void *data)
> {
> -       return hdmi_readb(hdmi, HDMI_PHY_STAT0) & HDMI_PHY_HPD ?
> +       enum drm_connector_status stat = hdmi_readb(hdmi, HDMI_PHY_STAT0) & 
> HDMI_PHY_HPD ?
>                 connector_status_connected : connector_status_disconnected;
> +
> +       if (stat == connector_status_connected)
> +               msleep(100);
> +
> +       return stat;
> }
> EXPORT_SYMBOL_GPL(dw_hdmi_phy_read_hpd);
> 
> it work also with the following : 
> 
> Patch2
> 
> --- a/drivers/gpu/drm/drm_probe_helper.c
> +++ b/drivers/gpu/drm/drm_probe_helper.c
> @@ -587,6 +587,10 @@ int drm_helper_probe_single_connector_modes(struct 
> drm_connector *connector,
>                               drm_mode_prune_invalid(dev, &connector->modes, 
> false);
>                               goto exit;
>                }
> +             
> +             /*need some delay before reading the EDID somehow the I2C sink 
> slave controller in same monitor are late */
> +             set_current_state(TASK_INTERRUPTIBLE);
> +             schedule_timeout(msecs_to_jiffies(10));
> 
>                 count = drm_helper_probe_get_modes(connector);
> 
> I’ve also tried applying different patches from the following series
>
(https://patchwork.kernel.org/project/dri-devel/cover/[email protected]/),
> but unfortunately it did not resolve the issue.
>
> I’d appreciate any hint or any guidance on what a proper,
> upstream-compatible solution might look like , I don’t
> think this workaround will be a proper one. Thank you in
> advance for your time and support. I look forward to your
> feedback.

Reply via email to