1280x800 hdmi screen not displaying via hdmi

Hello,
Hardware:
Apalis IMX8 v1.1
ixora carrier board v1.2
torizoncore 6

we are currently having an issue where our 1280x800 hdmi screen is not displaying anything via hdmi. This only happens occasionally probably ~20% of the time. The board detects that a display is present however has an edid error then display at the output of “dmesg | grep drm” We had previously posted about this before here: HDMI failing to recognize screen on Apalis-IMX8 - #4 by jeremias.tx

We had thought that updating to torizoncore 6 had fixed it but it is now starting to occur again. We are currently using Torizoncore 6.4+build.5 with the imx8qm-apalis-v1.1-ixora-v1.2 device tree overlay and adding the apalis-imx8_hdmi_overlay device tree.

Any suggestions would be great.
Thanks, Mike

Partial output of “dmesg | grep drm”:
[ 17.637216] systemd-journald[612]: /run/log/journal/3ea7e9cc298a4af9a621c32701b3266c/system.journal: Journal header limits reached or header out-of-date, rotating.
[ 24.135541] [drm:cdns_hdmi_get_edid_block [cdns_mhdp_drmcore]] ERROR get block[0] edid failed: -110
[ 24.144918] [drm:cdns_hdmi_connector_get_modes [cdns_mhdp_drmcore]] ERROR Invalid edid

drm:cdns_mhdp_read_hpd [cdns_mhdp_drmcore]] ERROR read hpd failed: -110
[ 34.583769] [drm] Unknow cable status, hdp=146

Greetings @MikeHA,

This only happens occasionally probably ~20% of the time.

Just to clarify are you saying that out of all your displays 20% are affected? Or are you saying that a single specific display will fail 20% of the time? Basically, if a specific display exhibits this issue will it always exhibit this issue going forward?

Also have you seen this issue with other HDMI displays? Or is it just this specific model?

The fact this only happens sometimes is strange. I mean all we have to go off of is the error messages. If we assume these are true then that would mean your displays have a bad EDID sometimes.

Best Regards,
Jeremias

Hey Jeremias, thanks for the response.

This has happened across multiple displays but it is the same brand. It happens ~20% of the time when we start our systems. Leading to us needing to restart the system multiple times until everything is successful.

Is there other information/logs that would be helpful for you?

Thanks, Mike

This has happened across multiple displays but it is the same brand. It happens ~20% of the time when we start our systems. Leading to us needing to restart the system multiple times until everything is successful.

Hmm okay so the EDID isn’t actually bad then since restarting can fix the issue. I recall in your previous thread you mentioned:

We are currently running the screen and compute module off of a single power supply

I understand this to mean that both module and display get powered on at the same time by the same power supply, yes?

Maybe, and I’m just theorizing now, there’s a race condition here. Perhaps the module probes the display for EDID information, but in some cases the display is still in state of starting up and then for some reason it provides garbage EDID information to the module.

This might explain why you only see this issue a fraction of the time and why restarting the system can “fix” the issue.

Can you try putting the display and module on separate power supplies. Power the display on first and make sure it’s fully-powered on, then power on the module. Can you see if this setup has any effect at all on the issue?

Best Regards,
Jeremias

We also believe that this is creating a race condition after looking at it a bit more. We tried powering the screen on first and then the compute module and everything seems to work in that scenario.

Is there a way that we could delay the module from probing the display?

I have tried to change the status of the hdmi connection when the unit is on to try and restart the hdmi connection with no success by running:
echo off > /sys/class/drm/card0-HDMI-A-1/status
echo on > /sys/class/drm/card0-HDMI-A-1/status

We also have attempted to restart the system via reboot in the command line to no success there either.

Thanks, Mike

Normally you’d be able to do something like reloading the driver for the DRM subsystem. But this is built into the kernel directly so you can’t really reload it without reloading the entire system. I did some research and found this: How to make linux detect/re-probe monitors with intel i915 driver? - Unix & Linux Stack Exchange

It seems you can also feed detect to status. I’m not sure what the exact effect is, but maybe it will re-trigger a re-probe of the display.

Best Regards,
Jeremias

I tried feeding detect to status and it did not update. The status is still stuck at unknown. I tried to do on and on-digital which updates the status to connected but doesn’t have any impact. Oddly enough feeding detect into status occasionally crashed the system and the screen then booted up as expected.

This is the output of dmesg | grep drm after feeding detect into the hdmi status which still shows the edid error but added other error messages such as “PMA ouput macro power up failed” and the registers failing to read the registers:

[ 141.522929] [drm] Pixel clock: 65000 KHz, character clock: 65000, bpc is 8-bit.
[ 141.522963] [drm] VCO frequency is 2600000 KHz
[ 151.523362] cdns-mhdp-imx 56268000.hdmi: [drm:cdns_mhdp_reg_read [cdns_mhdp_drmcore]] ERROR Failed to read register.
[ 191.538233] cdns-mhdp-imx 56268000.hdmi: [drm:cdns_mhdp_reg_read [cdns_mhdp_drmcore]] ERROR Failed to read register.
[ 201.549999] cdns-mhdp-imx 56268000.hdmi: [drm:cdns_mhdp_reg_read [cdns_mhdp_drmcore]] ERROR Failed to read register.
[ 211.561738] cdns-mhdp-imx 56268000.hdmi: [drm:cdns_mhdp_reg_read [cdns_mhdp_drmcore]] ERROR Failed to read register.
[ 221.573899] cdns-mhdp-imx 56268000.hdmi: [drm:cdns_mhdp_reg_read [cdns_mhdp_drmcore]] ERROR Failed to read register.
[ 231.586078] cdns-mhdp-imx 56268000.hdmi: [drm:cdns_mhdp_reg_read [cdns_mhdp_drmcore]] ERROR Failed to read register.
[ 241.597398] cdns-mhdp-imx 56268000.hdmi: [drm:cdns_mhdp_reg_read [cdns_mhdp_drmcore]] ERROR Failed to read register.
[ 251.609627] cdns-mhdp-imx 56268000.hdmi: [drm:cdns_mhdp_reg_read [cdns_mhdp_drmcore]] ERROR Failed to read register.
[ 261.621157] cdns-mhdp-imx 56268000.hdmi: [drm:cdns_mhdp_reg_read [cdns_mhdp_drmcore]] ERROR Failed to read register.
[ 271.632376] cdns-mhdp-imx 56268000.hdmi: [drm:cdns_mhdp_reg_read [cdns_mhdp_drmcore]] ERROR Failed to read register.
[ 272.368550] [drm:cdns_hdmi_get_edid_block [cdns_mhdp_drmcore]] ERROR get block[0] edid failed: -110
[ 272.377905] [drm:cdns_hdmi_connector_get_modes [cdns_mhdp_drmcore]] ERROR Invalid edid
[ 292.388206] [drm:cdns_hdmi_get_edid_block [cdns_mhdp_drmcore]] ERROR get block[0] edid failed: -110
[ 292.397566] [drm:cdns_hdmi_connector_get_modes [cdns_mhdp_drmcore]] ERROR Invalid edid
[ 356.652680] cdns-mhdp-imx 56268000.hdmi: [drm:cdns_mhdp_reg_read [cdns_mhdp_drmcore]] ERROR Failed to read register.
[ 366.664695] cdns-mhdp-imx 56268000.hdmi: [drm:cdns_mhdp_reg_read [cdns_mhdp_drmcore]] ERROR Failed to read register.
[ 376.676877] cdns-mhdp-imx 56268000.hdmi: [drm:cdns_mhdp_reg_read [cdns_mhdp_drmcore]] ERROR Failed to read register.
[ 386.688309] cdns-mhdp-imx 56268000.hdmi: [drm:cdns_mhdp_reg_read [cdns_mhdp_drmcore]] ERROR Failed to read register.
[ 396.700053] cdns-mhdp-imx 56268000.hdmi: [drm:cdns_mhdp_reg_read [cdns_mhdp_drmcore]] ERROR Failed to read register.
[ 406.711396] cdns-mhdp-imx 56268000.hdmi: [drm:cdns_mhdp_reg_read [cdns_mhdp_drmcore]] ERROR Failed to read register.
[ 416.722923] cdns-mhdp-imx 56268000.hdmi: [drm:cdns_mhdp_reg_read [cdns_mhdp_drmcore]] ERROR Failed to read register.
[ 426.734869] cdns-mhdp-imx 56268000.hdmi: [drm:cdns_mhdp_reg_read [cdns_mhdp_drmcore]] ERROR Failed to read register.
[ 436.746121] cdns-mhdp-imx 56268000.hdmi: [drm:cdns_mhdp_reg_read [cdns_mhdp_drmcore]] ERROR Failed to read register.
[ 486.760455] cdns-mhdp-imx 56268000.hdmi: [drm:cdns_mhdp_reg_read [cdns_mhdp_drmcore]] ERROR Failed to read register.
[ 491.809700] cdns-mhdp-imx 56268000.hdmi: [drm:cdns_mhdp_reg_read [cdns_mhdp_drmcore]] ERROR Failed to read register.
[ 496.859913] cdns-mhdp-imx 56268000.hdmi: [drm:cdns_mhdp_reg_read [cdns_mhdp_drmcore]] ERROR Failed to read register.
[ 501.909867] cdns-mhdp-imx 56268000.hdmi: [drm:cdns_mhdp_reg_read [cdns_mhdp_drmcore]] ERROR Failed to read register.
[ 506.959775] cdns-mhdp-imx 56268000.hdmi: [drm:cdns_mhdp_reg_read [cdns_mhdp_drmcore]] ERROR Failed to read register.
[ 512.010459] cdns-mhdp-imx 56268000.hdmi: [drm:cdns_mhdp_reg_read [cdns_mhdp_drmcore]] ERROR Failed to read register.
[ 517.059794] cdns-mhdp-imx 56268000.hdmi: [drm:cdns_mhdp_reg_read [cdns_mhdp_drmcore]] ERROR Failed to read register.
[ 522.109671] cdns-mhdp-imx 56268000.hdmi: [drm:cdns_mhdp_reg_read [cdns_mhdp_drmcore]] ERROR Failed to read register.
[ 527.160055] cdns-mhdp-imx 56268000.hdmi: [drm:cdns_mhdp_reg_read [cdns_mhdp_drmcore]] ERROR Failed to read register.
[ 532.210101] cdns-mhdp-imx 56268000.hdmi: [drm:cdns_mhdp_reg_read [cdns_mhdp_drmcore]] ERROR Failed to read register.
[ 532.259390] [drm:hdmi_phy_config [cdns_mhdp_imx]] ERROR PMA ouput macro power up failed
[ 532.267701] [drm:cdns_hdmi_phy_set_imx8qm [cdns_mhdp_imx]] ERROR failed to set phy pclock
[ 537.276861] [drm:cdns_hdmi_mode_set [cdns_mhdp_drmcore]] ERROR cdns_hdmi_mode_set, ret = -110
[ 547.342577] cdns-mhdp-imx 56268000.hdmi: [drm:cdns_mhdp_reg_read [cdns_mhdp_drmcore]] ERROR Failed to read register.
[ 1164.504333] [drm:cdns_hdmi_get_edid_block [cdns_mhdp_drmcore]] ERROR get block[0] edid failed: -110
[ 1164.513683] [drm:cdns_hdmi_connector_get_modes [cdns_mhdp_drmcore]] ERROR Invalid edid
[ 1185.392142] [drm:cdns_hdmi_get_edid_block [cdns_mhdp_drmcore]] ERROR get block[0] edid failed: -110
[ 1185.401718] [drm:cdns_hdmi_connector_get_modes [cdns_mhdp_drmcore]] ERROR Invalid edid
[ 1226.615680] [drm:cdns_hdmi_get_edid_block [cdns_mhdp_drmcore]] ERROR get block[0] edid failed: -110
[ 1226.625039] [drm:cdns_hdmi_connector_get_modes [cdns_mhdp_drmcore]] ERROR Invalid edid
[ 1246.636810] [drm:cdns_hdmi_get_edid_block [cdns_mhdp_drmcore]] ERROR get block[0] edid failed: -110
[ 1246.646140] [drm:cdns_hdmi_connector_get_modes [cdns_mhdp_drmcore]] ERROR Invalid edid
[ 1266.657709] [drm:cdns_hdmi_get_edid_block [cdns_mhdp_drmcore]] ERROR get block[0] edid failed: -110
[ 1266.667034] [drm:cdns_hdmi_connector_get_modes [cdns_mhdp_drmcore]] ERROR Invalid edid
[ 1283.633008] [drm:cdns_mhdp_read_hpd [cdns_mhdp_drmcore]] ERROR read hpd failed: -110
[ 1283.641144] [drm] Unknow cable status, hdp=146
[ 1303.643519] [drm:cdns_hdmi_get_edid_block [cdns_mhdp_drmcore]] ERROR get block[0] edid failed: -110
[ 1303.652880] [drm:cdns_hdmi_connector_get_modes [cdns_mhdp_drmcore]] ERROR Invalid edid
[ 1308.662075] [drm:cdns_mhdp_read_hpd [cdns_mhdp_drmcore]] ERROR read hpd failed: -110
[ 1308.670454] [drm] Unknow cable status, hdp=146
[ 1328.672977] [drm:cdns_hdmi_get_edid_block [cdns_mhdp_drmcore]] ERROR get block[0] edid failed: -110
[ 1328.682552] [drm:cdns_hdmi_connector_get_modes [cdns_mhdp_drmcore]] ERROR Invalid edid
[ 1363.968509] [drm:cdns_mhdp_read_hpd [cdns_mhdp_drmcore]] ERROR read hpd failed: -110
[ 1363.976836] [drm] Unknow cable status, hdp=146
[ 1383.978741] [drm:cdns_hdmi_get_edid_block [cdns_mhdp_drmcore]] ERROR get block[0] edid failed: -110
[ 1383.988363] [drm:cdns_hdmi_connector_get_modes [cdns_mhdp_drmcore]] ERROR Invalid edid
[ 1466.144076] [drm:cdns_hdmi_get_edid_block [cdns_mhdp_drmcore]] ERROR get block[0] edid failed: -110
[ 1466.153444] [drm:cdns_hdmi_connector_get_modes [cdns_mhdp_drmcore]] ERROR Invalid edid
[ 1486.163426] [drm:cdns_hdmi_get_edid_block [cdns_mhdp_drmcore]] ERROR get block[0] edid failed: -110
[ 1486.172792] [drm:cdns_hdmi_connector_get_modes [cdns_mhdp_drmcore]] ERROR Invalid edid
[ 1509.488033] [drm:cdns_hdmi_get_edid_block [cdns_mhdp_drmcore]] ERROR get block[0] edid failed: -110
[ 1509.497384] [drm:cdns_hdmi_connector_get_modes [cdns_mhdp_drmcore]] ERROR Invalid edid
[ 1546.626074] [drm:cdns_mhdp_read_hpd [cdns_mhdp_drmcore]] ERROR read hpd failed: -110
[ 1546.634184] [drm] Unknow cable status, hdp=146
[ 1566.637856] [drm:cdns_hdmi_get_edid_block [cdns_mhdp_drmcore]] ERROR get block[0] edid failed: -110
[ 1566.647213] [drm:cdns_hdmi_connector_get_modes [cdns_mhdp_drmcore]] ERROR Invalid edid
[ 1571.656255] [drm:cdns_mhdp_read_hpd [cdns_mhdp_drmcore]] ERROR read hpd failed: -110
[ 1571.664366] [drm] Unknow cable status, hdp=146
[ 1591.667054] [drm:cdns_hdmi_get_edid_block [cdns_mhdp_drmcore]] ERROR get block[0] edid failed: -110
[ 1591.676438] [drm:cdns_hdmi_connector_get_modes [cdns_mhdp_drmcore]] ERROR Invalid edid
[ 1627.632639] [drm:cdns_mhdp_read_hpd [cdns_mhdp_drmcore]] ERROR read hpd failed: -110
[ 1627.640774] [drm] Unknow cable status, hdp=146
[ 1647.643591] [drm:cdns_hdmi_get_edid_block [cdns_mhdp_drmcore]] ERROR get block[0] edid failed: -110
[ 1647.652955] [drm:cdns_hdmi_connector_get_modes [cdns_mhdp_drmcore]] ERROR Invalid edid
[ 1680.831661] [drm:cdns_hdmi_get_edid_block [cdns_mhdp_drmcore]] ERROR get block[0] edid failed: -110
[ 1680.841024] [drm:cdns_hdmi_connector_get_modes [cdns_mhdp_drmcore]] ERROR Invalid edid
[ 1700.852360] [drm:cdns_hdmi_get_edid_block [cdns_mhdp_drmcore]] ERROR get block[0] edid failed: -110
[ 1700.861922] [drm:cdns_hdmi_connector_get_modes [cdns_mhdp_drmcore]] ERROR Invalid edid
[ 1720.872102] [drm:cdns_hdmi_get_edid_block [cdns_mhdp_drmcore]] ERROR get block[0] edid failed: -110
[ 1720.881696] [drm:cdns_hdmi_connector_get_modes [cdns_mhdp_drmcore]] ERROR Invalid edid
[ 1745.446614] [drm:cdns_mhdp_read_hpd [cdns_mhdp_drmcore]] ERROR read hpd failed: -110
[ 1745.454742] [drm] Unknow cable status, hdp=146
[ 1765.456970] [drm:cdns_hdmi_get_edid_block [cdns_mhdp_drmcore]] ERROR get block[0] edid failed: -110
[ 1765.466335] [drm:cdns_hdmi_connector_get_modes [cdns_mhdp_drmcore]] ERROR Invalid edid
[ 1770.475178] [drm:cdns_mhdp_read_hpd [cdns_mhdp_drmcore]] ERROR read hpd failed: -110
[ 1770.483326] [drm] Unknow cable status, hdp=146
[ 1790.485380] [drm:cdns_hdmi_get_edid_block [cdns_mhdp_drmcore]] ERROR get block[0] edid failed: -110
[ 1790.494736] [drm:cdns_hdmi_connector_get_modes [cdns_mhdp_drmcore]] ERROR Invalid edid

Hmm seems like that’s not enough or maybe the entire graphics stack needs to be restarted for anything to change here. Though I’m not sure how to do that without restarting the entire system. Could you try if the following has any affect:

Best Regards,
Jeremias

To close this out, it was a bad edid issue as well as weston not using the proper resolution. Used the kernel command line and proper edid blob to set that and created our own weston.ini file specifying resolution and everything works like a charm!

Thank you for reporting back your findings, and glad to hear you were able to resolve this issue.

It is a bit strange though, did all these displays from this brand you’re using have bad EDIDs?

Best Regards,
Jeremias

they had good edids. The problem was initiated because the power of the board and the screens were coming from the same supply. This seemed to cause a race condition where the edid blob was getting lost due to bring-up time of one of the components. I was able to pull the edid during one of the occasions the screen worked and then just inject that into the drm to use instead of reading the edid from the screen itself.

Interesting, I guess my race condition theory from earlier was on the right track. Well it’s good to know this can happen for future reference, appreciate your analysis here.