2025-11-04 3:26 AM - edited 2025-11-04 3:28 AM
I am trying to drive a 5 inch 800x480 touch display from waveshare using my STM32MP257F-DK development board. My Linux distro is a custom one built using Buildroot via bootlin support.
When running `modetest -M stm -c`, I don't get any resolutions printed. Here's what I get:
# modetest -M stm -c
opened device `STMicroelectronics SoC DRM` on driver `stm` (version 1.0.0 at 20170330)
[ 244.014209] EDID block 0 is all zeroes
Connectors:
id encoder status name size (mm) modes encoders
32 0 connected HDMI-A-1 0x0 0 31
props:
1 EDID:
flags: immutable blob
blobs:
value:
2 DPMS:
flags: enum
enums: On=0 Standby=1 Suspend=2 Off=3
value: 0
5 link-status:
flags: enum
enums: Good=0 Bad=1
value: 0
6 non-desktop:
flags: immutable range
values: 0 1
value: 0
4 TILE:
flags: immutable blob
blobs:
value:
33 dithering:
flags: enum
enums: Off=0 On=1
value: 0Here's what dmesg logs (Increased logging level using: `echo 4 > /sys/module/drm/parameters/debug`):
[ 244.004127] [drm:drm_helper_probe_single_connector_modes] [CONNECTOR:32:HDMI-A-1]
[ 244.014209] EDID block 0 is all zeroes
[ 244.014245] stm32-display 48010000.display-controller: [drm:connector_bad_edid] [CONNECTOR:32:HDMI-A-1] EDID is invalid:
[ 244.014269] [00] ZERO 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
[ 244.014274] [00] ZERO 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
[ 244.014279] [00] ZERO 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
[ 244.014284] [00] ZERO 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
[ 244.014289] [00] ZERO 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
[ 244.014293] [00] ZERO 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
[ 244.014298] [00] ZERO 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
[ 244.014303] [00] ZERO 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
[ 244.019165] [drm:drm_mode_debug_printmodeline] Modeline "640x480": 60 25175 640 656 752 800 480 490 492 525 0x40 0xa
[ 244.019198] [drm:drm_mode_prune_invalid] Not using 640x480 mode: CLOCK_LOW
[ 244.019210] [drm:drm_mode_debug_printmodeline] Modeline "800x600": 56 36000 800 824 896 1024 600 601 603 625 0x40 0x5
[ 244.019230] [drm:drm_mode_prune_invalid] Not using 800x600 mode: CLOCK_LOW
[ 244.019241] [drm:drm_mode_debug_printmodeline] Modeline "800x600": 60 40000 800 840 968 1056 600 601 605 628 0x40 0x5
[ 244.019261] [drm:drm_mode_prune_invalid] Not using 800x600 mode: CLOCK_LOW
[ 244.019272] [drm:drm_mode_debug_printmodeline] Modeline "848x480": 60 33750 848 864 976 1088 480 486 494 517 0x40 0x5
[ 244.019291] [drm:drm_mode_prune_invalid] Not using 848x480 mode: CLOCK_LOW
[ 244.019302] [drm:drm_mode_debug_printmodeline] Modeline "1024x768": 60 65000 1024 1048 1184 1344 768 771 777 806 0x40 0xa
[ 244.019322] [drm:drm_mode_prune_invalid] Not using 1024x768 mode: CLOCK_HIGHI think it is relevant to mention that running `modetest -M nouveau -c` on my laptop with the display 5 inch display connected over HDMI, I do infact get supported modes & EDID does exist:
root@plasma:~# modetest -M nouveau -c
opened device `nVidia Riva/TNT/GeForce/Quadro/Tesla/Tegra K1+` on driver `nouveau` (version 1.4.0 at 0)
Connectors:
id encoder status name size (mm) modes encoders
42 43 connected HDMI-A-1 470x260 24 43
modes:
index name refresh (Hz) hdisp hss hse htot vdisp vss vse vtot
#0 800x480 60.00 800 844 932 1056 480 483 489 535 33900 flags: phsync, pvsync; type: preferred, driver
#1 1920x1080 60.00 1920 2008 2052 2200 1080 1084 1089 1125 148500 flags: phsync, pvsync; type: driver
#2 1920x1080 59.94 1920 2008 2052 2200 1080 1084 1089 1125 148352 flags: phsync, pvsync; type: driver
#3 1920x1080 50.00 1920 2448 2492 2640 1080 1084 1089 1125 148500 flags: phsync, pvsync; type: driver
#4 1280x1024 75.02 1280 1296 1440 1688 1024 1025 1028 1066 135000 flags: phsync, pvsync; type: driver
#5 1280x720 60.00 1280 1390 1430 1650 720 725 730 750 74250 flags: phsync, pvsync; type: driver
#6 1280x720 59.94 1280 1390 1430 1650 720 725 730 750 74176 flags: phsync, pvsync; type: driver
#7 1280x720 50.00 1280 1720 1760 1980 720 725 730 750 74250 flags: phsync, pvsync; type: driver
#8 1024x768 75.03 1024 1040 1136 1312 768 769 772 800 78750 flags: phsync, pvsync; type: driver
#9 1024x768 70.07 1024 1048 1184 1328 768 771 777 806 75000 flags: nhsync, nvsync; type: driver
#10 1024x768 60.00 1024 1048 1184 1344 768 771 777 806 65000 flags: nhsync, nvsync; type: driver
#11 832x624 74.55 832 864 928 1152 624 625 628 667 57284 flags: nhsync, nvsync; type: driver
#12 800x600 75.00 800 816 896 1056 600 601 604 625 49500 flags: phsync, pvsync; type: driver
#13 800x600 72.19 800 856 976 1040 600 637 643 666 50000 flags: phsync, pvsync; type: driver
#14 800x600 60.32 800 840 968 1056 600 601 605 628 40000 flags: phsync, pvsync; type: driver
#15 800x600 56.25 800 824 896 1024 600 601 603 625 36000 flags: phsync, pvsync; type: driver
#16 720x576 50.00 720 732 796 864 576 581 586 625 27000 flags: nhsync, nvsync; type: driver
#17 720x480 60.00 720 736 798 858 480 489 495 525 27027 flags: nhsync, nvsync; type: driver
#18 720x480 59.94 720 736 798 858 480 489 495 525 27000 flags: nhsync, nvsync; type: driver
#19 640x480 75.00 640 656 720 840 480 481 484 500 31500 flags: nhsync, nvsync; type: driver
#20 640x480 72.81 640 664 704 832 480 489 492 520 31500 flags: nhsync, nvsync; type: driver
#21 640x480 60.00 640 656 752 800 480 490 492 525 25200 flags: nhsync, nvsync; type: driver
#22 640x480 59.94 640 656 752 800 480 490 492 525 25175 flags: nhsync, nvsync; type: driver
#23 720x400 70.08 720 738 846 900 400 412 414 449 28320 flags: nhsync, pvsync; type: driver
props:
1 EDID:
flags: immutable blob
blobs:
value:
00ffffffffffff0012e50021502d3101
1c130103812f1a782e3585a656489a24
125054afef0001010101010101010101
0101010101013e0d200031e037102c58
3600dc0c1100001e000000ff00300a0a
0a0a0a0a0a0a0a0a0a0a000000fd0038
4b1e5315000a202020202020000000fc
0048444d490a0a0a0a0a0a0a0a0a01f8
020321714e0607020315961112130414
051f90230907078301000065030c0010
008c0ad090204031200c405500b98821
000018011d8018711c1620582c2500b9
882100009e011d80d0721c1620102c25
80b9882100009e011d00bc52d01e20b8
285540b9882100001e023a80d072382d
40102c4580b9882100001e00000000d0
2 DPMS:
flags: enum
enums: On=0 Standby=1 Suspend=2 Off=3
value: 0
5 link-status:
flags: enum
enums: Good=0 Bad=1
value: 0
6 non-desktop:
flags: immutable range
values: 0 1
value: 0
4 TILE:
flags: immutable blob
blobs:
value:
37 underscan:
flags: enum
enums: auto=2 off=0 on=1
value: 0
38 underscan hborder:
flags: range
values: 0 128
value: 0
39 underscan vborder:
flags: range
values: 0 128
value: 0
40 vibrant hue:
flags: range
values: 0 180
value: 90
41 color vibrance:
flags: range
values: 0 200
value: 150
32 scaling mode:
flags: enum
enums: None=0 Full=1 Center=2 Full aspect=3
value: 0
35 dithering mode:
flags: enum
enums: auto=34 off=0 static 2x2=25 dynamic 2x2=17 temporal=33
value: 34
36 dithering depth:
flags: enum
enums: auto=3 6 bpc=0 8 bpc=2
value: 3I also did try OpenSTLinux (FLASH-stm32mp2-openstlinux-6.6-yocto-scarthgap-mpu-v25.06.11.tar.gz) and got no output either.
I also tried to convert the EDID hex (That I got when I probed the display from my laptop) to binary & Then override the kernel to use that EDID instead of probing the display by setting the following bootargs for the kernel:
drm.edid_firmware=edid/800x480.bin drm_kms_helper.edid_firmware=edid/800x480.bin
in "buildroot-external-st/board/stmicroelectronics/stm32mp2/overlay/boot/extlinux/extlinux.conf" file, And I was able to verify that the bootargs did pass successfully, Yet somehow still the logs mentioned EDID being all 0.
2025-11-04 4:31 AM
I was able to solve the problem with a hack after reading https://wiki.archlinux.org/title/Kernel_mode_setting#Forcing_modes_and_EDID
Basically I mounted debugfs & Then override the EDID using the following commands:
mount -t debugfs none /sys/kernel/debug
cat /lib/firmware/edid/800x480.bin > /sys/kernel/debug/dri/0/HDMI-A-1/edid_override
And after this, `modetest` listed the available modes & I was able to print the test pattern.
But why do I have to do this to begin with?