STM32MP257F-DK: MPI7001 800x480 HDMI panel shows test patterns but no stable image/video (ADV7535, Yocto)
Subject: STM32MP257F-DK - How to get the MPI7001 800x480 HDMI panel working (EDID override gives test patterns, but no stable image/video)
SETUP
- Board: STM32MP257F-DK
- OS: OpenSTLinux (Yocto build), Weston 13.0.1, kernel 6.6.129 (-dirty)
- Panel: MPI7001, 7inch HDMI Display-B (800x480)
- Display path: LTDC -> DSI host -> ADV7535 (i2c0, 0x3d, adv7511 driver) -> HDMI -> panel
- stm_drm and dw_mipi_dsi_stm are built as modules (=m) and loaded via /etc/modules-load.d
PROBLEM
The display never shows a stable image or video from the DK board. With the panel attached, and before loading any EDID:
modetest -M stm -c
32 0 disconnected HDMI-A-1 0x0 0 31 (0 modes)
dmesg shows "EDID block 0 is all zeroes", and Weston logs "connector 32 is disconnected" and exits.
WHAT WE DID
1. Copied the panel's EDID from a PC (cat /sys/class/drm/card1-HDMI-A-2/edid > panel.bin) to /lib/firmware/edid/panel.bin on the board.
2. Loaded it on the board:
mount -t debugfs none /sys/kernel/debug
echo -n reset > /sys/kernel/debug/dri/0/HDMI-A-1/edid_override
cat /lib/firmware/edid/panel.bin > /sys/kernel/debug/dri/0/HDMI-A-1/edid_override
echo on > /sys/kernel/debug/dri/0/HDMI-A-1/force
modetest -M stm -c
The connector then reports connected with modes 800x480 59.98 (preferred) and 720x400 70.08.
Adding drm.edid_firmware=HDMI-A-1:edid/panel.bin to the kernel cmdline was not enough on its own. Only debugfs "force" made the connector connected.
3. Test patterns:
echo 1 > /sys/kernel/debug/48000000.dsi/vpg
-> colour bars appear on the panel
KERNEL STATE WHILE THE PANEL SHOWS NOTHING
- /sys/kernel/debug/dri/0/state:
crtc[41]: enable=1 active=1, mode "800x480": 60 29570 800 816 896 992 480 481 484 497
transfer_error=0, fifo_underrun_error=0, fifo_underrun_warning=0
plane[34]: framebuffer attached (XR24, 800x480), connector[32] linked to crtc-0
- ADV7535 is bound at i2c 0-003d, and i2cget -f -y 0 0x3d 0x42 reads 0x78 continuously.
- All ADV7535 supplies are enabled (v1v8 at 1.8 V, v3v3, v5v_hdmi).
WHAT WORKS
- The same panel with the same HDMI cable works on a PC (Intel iGPU) at 800x480.
- The same panel works on a Raspberry Pi 1A+ with this config.txt:
max_usb_current=1
hdmi_force_hotplug=1
config_hdmi_boost=7
hdmi_group=2
hdmi_mode=87
hdmi_drive=1
hdmi_cvt 800 480 60 6 0 0 0
QUESTION
How can we get this 800x480 HDMI panel (MPI7001) to display a stable image and video on the STM32MP257F-DK?
