cancel
Showing results for 
Search instead for 
Did you mean: 

STM32MP257F-DK: HDMI output non-functional - ADV7535 driver probe() never executes

danis11
Associate

Summary:

HDMI output on STM32MP257F-DK board does not function with 800x480 HDMI display. The ADV7535 DSI-to-HDMI bridge driver loads and binds successfully, but the probe() function never executes, leaving the bridge in powered-down state. Display shows only backlight, no image.

Hardware Configuration:

Board: STM32MP257F-DK Discovery Board
Firmware: OpenSTLinux v25.06.11 (latest as of Jan 2026)
Display: 800x480 HDMI display (Raspberry Pi compatible)

  • EDID: Acer G50 (110x60mm)
  • Native resolution: 800x480 @ 60Hz
  • HDMI cable: Standard HDMI-to-HDM

Connection: HDMI port (CN14) → Display via HDMI cable

Software Configuration:

Images tested:

  1. FlashLayout_emmc_stm32mp257f-dk-fastboot.tsv (eMMC)
  2. FlashLayout_sdcard_stm32mp257f-dk-optee.tsv (microSD)

DTB variants tested:

  1. stm32mp257f-dk-ca35tdcid-ostl-m33-examples.dtb (default)
  2. stm32mp257f-dk.dtb (standard)

Result: Same behavior with all combinations

Kernel: 6.6.78
OS: ST OpenSTLinux - Weston - v5.0.8-openstlinux-6.6-yocto-scarthgap-mpu-v25.06.11

Problem Description:

Observed Behavior:

Display backlight turns on (5V power present)

Screen remains completely black (no image, no test pattern)

  1. DRM reports HDMI-A-1 as "connected" and "enabled"
  2. EDID is successfully read and parsed
  3. 800x480 @ 60Hz mode is correctly detected
  4. modetest reports proper refresh rate (60.18Hz) but no image displayed

Root Cause Analysis:

ADV7535 driver probe() never executes:bash

root@stm32mp2-e3-d0-ef:~# dmesg | grep -i adv
[    1.006254] Advanced Linux Sound Architecture Driver Initialized.[    3.856755] systemd[1]: System time before build time, advancing clock.[   12.779970] stm32-dwmac 482c0000.eth1 end0: IEEE 1588-2008 Advanced Timestamp supported

No ADV7535-specific initialization logs - only "Advanced Linux Sound Architecture" appears.

Driver is bound but not initialized:

root@stm32mp2-e3-d0-ef:~# ls -la /sys/bus/i2c/devices/0-003d/driver
lrwxrwxrwx 1 root root 0 Jan  1 00:03 /sys/bus/i2c/devices/0-003d/driver -> ../../../../../../../bus/i2c/drivers/adv7511

ADV7535 remains powered down:

root@stm32mp2-e3-d0-ef:~# i2cget -y 0 0x3d 0x41  # Power control register
0x10  # Power down bit set

root@stm32mp2-e3-d0-ef:~# i2cget -y 0 0x3d 0xa1  # HDMI mode register
0x00  # HDMI transmitter powered off

Attempting manual I2C configuration fails:

# Manual power-up attempts
root@stm32mp2-e3-d0-ef:~# echo "0-003d" > /sys/bus/i2c/drivers/adv7511/unbind
root@stm32mp2-e3-d0-ef:~# i2cset -y 0 0x3d 0x41 0x00  # Clear power down
root@stm32mp2-e3-d0-ef:~# i2cget -y 0 0x3d 0x41
0x00  # Register writes succeed

root@stm32mp2-e3-d0-ef:~# i2cget -y 0 0x3d 0xa1
0x00  # But HDMI transmitter remains off

root@stm32mp2-e3-d0-ef:~# echo "0-003d" > /sys/bus/i2c/drivers/adv7511/bind
# Result: System crash (kernel oops) - backlight turns off

Reproducible Steps:

  1. Connect 800x480 HDMI display to CN14 (HDMI port)
  2. Flash board with FlashLayout_sdcard_stm32mp257f-dk-optee.tsv
  3. Boot system
  4. Observe: Display backlight on, screen black
  5. Check driver status:
dmesg | grep -i adv  # No probe logs
cat /sys/class/drm/card0-HDMI-A-1/status  # Shows "connected"
modetest -M stm  # Shows 800x480 mode available
  1. Test output:
killall westonmodetest -M stm -s 32:800x480 -v# Result: Reports freq: 60.18Hz but screen remains black
```
---
## **Diagnostics Data:**

### **modetest output:**
```Connectors:id      encoder status          name            size (mm)       modes   encoders32      31      connected       HDMI-A-1        110x60          1       31
  modes:        index name refresh (Hz) hdisp hss hse htot vdisp vss vse vtot  #0 800x480 60.00 800 816 876 940 480 486 495 525 29610 flags: nhsync, nvsync; type: driver

EDID (decoded):

  • Manufacturer: Acer
  • Model: G50
  • Native resolution: 800x480 @ 60Hz
  • Display size: 110mm x 60mm
  • Timing: 29.610 MHz pixel clock

DRM state:

CRTCs:id      fb      pos     size41      55      (0,0)   (800x480)
  #0 800x480 60.00 800 816 876 940 480 486 495 525 29610 flags: nhsync, nvsync; type: driver

Framebuffer is active (fb=55), but no signal reaches display

DSI device:

root@stm32mp2-e3-d0-ef:~# ls -la /sys/bus/mipi-dsi/devices/
lrwxrwxrwx 1 root root 0 Jan  1 00:01 48000000.dsi.0 -> ../../../devices/platform/soc@0/42080000.bus/48000000.dsi/48000000.dsi.0

DSI device exists and is bound to adv7533 driver.

Device Tree verification:

root@stm32mp2-e3-d0-ef:~# cat /proc/device-tree/soc*/bus*/i2c*/hdmi@3d/adi,dsi-lanes
# Returns: 04 (4 lanes configured correctly)
```
--- ## **What Works:** :white_heavy_check_mark: I2C communication with ADV7535 (address 0x3d responds) :white_heavy_check_mark: EDID reading from display :white_heavy_check_mark: DRM/KMS pipeline (LTDC → DSI) :white_heavy_check_mark: Display power (backlight illuminates) :white_heavy_check_mark: Mode detection (800x480 @ 60Hz) :white_heavy_check_mark: Driver binding (`adv7511` driver binds to device) --- ## **What Doesn't Work:** :cross_mark: ADV7535 probe() function never executes :cross_mark: Bridge remains in powered-down state :cross_mark: No video signal output to HDMI :cross_mark: Manual driver bind/unbind causes kernel crash :cross_mark: Manual I2C configuration has no effect --- ## **Analysis:** ### **The Pipeline:** ```LTDC → DSI → [ADV7535 bridge] → HDMI → Display ✓ ✓ :cross_mark: :cross_mark: ✓

The ADV7535 bridge never initializes, breaking the DSI-to-HDMI conversion.

Probable Root Cause:

The adv7511 kernel driver appears to have an incomplete or buggy probe sequence for this hardware configuration. Possible causes:

  1. Missing probe trigger: Device tree configuration may be correct, but something prevents the probe() callback from being invoked
  2. Silent probe failure: Probe may execute but fail early without logging
  3. Resource dependency: Driver may be waiting for a resource that never becomes available (no deferred probe indication)

Device Tree Analysis:

Device tree configuration appears correct:

  • compatible = "adi,adv7535"
  • adi,dsi-lanes = <0x04> ✓
  • Regulators configured ✓
  • Reset GPIO configured ✓

Comparison with Working Configurations:

Users on ST Community have reported success with HDMI output, but notably:

  1. They used different displays (with 800x600 or 1280x720 native resolution)
  2. No users have reported success with 800x480 displays specifically
  3. Bootlin buildroot documentation notes: "On the STM32MP257-DK, HDMI does not function if the LVDS is connected" (LVDS is not connected in this case)

Request for ST Engineering:

  1. Confirm ADV7535 driver status: Is probe() expected to execute automatically, or is additional configuration required?
  2. 800x480 support: Is this resolution officially supported via HDMI on STM32MP257F-DK?
  3. Debug logging: Can you provide guidance on enabling verbose ADV7535 driver logging to diagnose why probe() doesn't execute?
  4. Known issues: Are there known issues with ADV7535 initialization in v25.06.11 firmware?
  5. Workaround: Is there a kernel parameter, device tree modification, or driver patch that enables ADV7535 probe?
  6. Additional Information:

System info:

root@stm32mp2-e3-d0-ef:~# uname -a
Linux stm32mp2-e3-d0-ef 6.6.78 #1 SMP PREEMPT Mon Feb 17 08:40:43 UTC 2025 aarch64 GNU/Linux

root@stm32mp2-e3-d0-ef:~# dmesg | grep "Machine model"
[    0.000000] Machine model: STMicroelectronics STM32MP257F-DK Discovery Board

Regulators:

root@stm32mp2-e3-d0-ef:~# cat /sys/class/regulator/regulator.12/name
v5v_hdmi
root@stm32mp2-e3-d0-ef:~# cat /sys/class/regulator/regulator.12/state
enabled
root@stm32mp2-e3-d0-ef:~# cat /sys/class/regulator/regulator.12/num_users
1

v5v_hdmi regulator is enabled and has 1 consumer (presumably ADV7535).

Attempted Solutions:

  1. :white_heavy_check_mark: Tested multiple firmware images (fastboot, optee)
  2. :white_heavy_check_mark: Tested multiple DTB variants (standard, M33 examples)
  3. :white_heavy_check_mark: Verified all hardware connections
  4. :white_heavy_check_mark: Tested with different HDMI cables
  5. :white_heavy_check_mark: Manually configured ADV7535 via I2C (no effect)
  6. :white_heavy_check_mark: Verified Device Tree configuration (correct)
  7. :cross_mark: All attempts unsuccessful
  8. Expected Behavior:

HDMI output should display test pattern with modetest -M stm -s 32:800x480 -v and Weston desktop after boot.

Impact:

This issue prevents use of HDMI displays (particularly 800x480 resolution) with STM32MP257F-DK, despite HDMI being an advertised feature of the board.

Board info: STM32MP257F-DK (MB1605)
Firmware version: v25.06.11 (latest)
Date tested: January 2026

Thank you for investigating this issue!

3 REPLIES 3
danis11
Associate

oot@stm32mp2-e3-d0-ef:~# dmesg -C
root@stm32mp2-e3-d0-ef:~# echo 4 > /sys/module/drm/parameters/debug
root@stm32mp2-e3-d0-ef:~# systemctl restart weston-graphical-session
root@stm32mp2-e3-d0-ef:~# dmesg
[ 59.658701] [drm:drm_helper_probe_single_connector_modes] [CONNECTOR:32:HDMI-A-1]
[ 59.721604] stm32-display 48010000.display-controller: [drm:update_display_info.part.0] [CONNECTOR:32:HDMI-A-1] HDMI: DVI dual 0, max TMDS clock 0 kHz
[ 59.721647] stm32-display 48010000.display-controller: [drm:update_display_info.part.0] [CONNECTOR:32:HDMI-A-1] ELD monitor Acer G50
[ 59.721662] stm32-display 48010000.display-controller: [drm:update_display_info.part.0] [CONNECTOR:32:HDMI-A-1] HDMI: latency present 0 0, video latency 0 0, audio latency 0 0
[ 59.721680] stm32-display 48010000.display-controller: [drm:update_display_info.part.0] [CONNECTOR:32:HDMI-A-1] ELD size 32, SAD count 1
[ 59.721711] stm32-display 48010000.display-controller: [drm:update_display_info.part.0] [CONNECTOR:32:HDMI-A-1] HDMI: DVI dual 0, max TMDS clock 0 kHz
[ 59.721728] stm32-display 48010000.display-controller: [drm:update_display_info.part.0] [CONNECTOR:32:HDMI-A-1] ELD monitor Acer G50
[ 59.721742] stm32-display 48010000.display-controller: [drm:update_display_info.part.0] [CONNECTOR:32:HDMI-A-1] HDMI: latency present 0 0, video latency 0 0, audio latency 0 0
[ 59.721759] stm32-display 48010000.display-controller: [drm:update_display_info.part.0] [CONNECTOR:32:HDMI-A-1] ELD size 32, SAD count 1
[ 59.723883] [drm:drm_mode_debug_printmodeline] Modeline "640x480": 60 25175 640 656 752 800 480 490 492 525 0x40 0xa
[ 59.723920] [drm:drm_mode_prune_invalid] Not using 640x480 mode: CLOCK_LOW
[ 59.723931] [drm:drm_mode_debug_printmodeline] Modeline "640x480": 60 25200 640 656 752 800 480 490 492 525 0x40 0xa
[ 59.723948] [drm:drm_mode_prune_invalid] Not using 640x480 mode: CLOCK_LOW
[ 59.723960] [drm:drm_helper_probe_single_connector_modes] [CONNECTOR:32:HDMI-A-1] probed modes :
[ 59.723976] [drm:drm_mode_debug_printmodeline] Modeline "800x480": 60 29610 800 816 876 940 480 486 495 525 0x40 0xa
[ 59.760303] stm32-display 48010000.display-controller: [drm:drm_mode_addfb2] [FB:55]
[ 60.654588] stm32-display 48010000.display-controller: [drm:drm_mode_addfb2] [FB:57]
root@stm32mp2-e3-d0-ef:~#

root@stm32mp2-e3-d0-ef:~# dmesg | grep -i "dsi\|adv753" [ 0.304252] /soc@0/bus@42080000/i2c@40130000/hdmi@3d: Fixed dependency cycle(s) with /soc@0/bus@42080000/dsi@48000000 [ 0.315119] /soc@0/bus@42080000/display-controller@48010000: Fixed dependency cycle(s) with /soc@0/bus@42080000/dsi@48000000 [ 0.368817] /soc@0/bus@42080000/dsi@48000000: Fixed dependency cycle(s) with /soc@0/bus@42080000/i2c@40130000/hdmi@3d [ 0.378851] /soc@0/bus@42080000/dsi@48000000: Fixed dependency cycle(s) with /soc@0/bus@42080000/display-controller@48010000 [ 0.390040] /soc@0/bus@42080000/dsi@48000000: Fixed dependency cycle(s) with /soc@0/clock-controller@44200000 [ 0.400172] /soc@0/clock-controller@44200000: Fixed dependency cycle(s) with /soc@0/bus@42080000/dsi@48000000 [ 0.454990] /soc@0/bus@42080000/i2c@40130000/hdmi@3d: Fixed dependency cycle(s) with /soc@0/bus@42080000/dsi@48000000 [ 0.465834] /soc@0/bus@42080000/display-controller@48010000: Fixed dependency cycle(s) with /soc@0/bus@42080000/dsi@48000000 [ 0.519534] /soc@0/bus@42080000/dsi@48000000: Fixed dependency cycle(s) with /soc@0/bus@42080000/i2c@40130000/hdmi@3d [ 0.529583] /soc@0/bus@42080000/dsi@48000000: Fixed dependency cycle(s) with /soc@0/bus@42080000/display-controller@48010000 [ 0.540768] /soc@0/bus@42080000/dsi@48000000: Fixed dependency cycle(s) with /soc@0/clock-controller@44200000 [ 0.605755] /soc@0/bus@42080000/i2c@40130000/hdmi@3d: Fixed dependency cycle(s) with /soc@0/bus@42080000/dsi@48000000 [ 0.617828] /soc@0/bus@42080000/display-controller@48010000: Fixed dependency cycle(s) with /soc@0/bus@42080000/dsi@48000000 [ 0.693202] /soc@0/bus@42080000/display-controller@48010000: Fixed dependency cycle(s) with /soc@0/bus@42080000/dsi@48000000 [ 0.701852] /soc@0/bus@42080000/i2c@40130000/hdmi@3d: Fixed dependency cycle(s) with /soc@0/bus@42080000/dsi@48000000 [ 0.712430] /soc@0/bus@42080000/dsi@48000000: Fixed dependency cycle(s) with /soc@0/bus@42080000/i2c@40130000/hdmi@3d [ 0.722932] /soc@0/bus@42080000/dsi@48000000: Fixed dependency cycle(s) with /soc@0/bus@42080000/display-controller@48010000 [ 0.734301] /soc@0/bus@42080000/dsi@48000000: Fixed dependency cycle(s) with /soc@0/clock-controller@44200000 [ 0.747126] /soc@0/bus@42080000/dsi@48000000: Fixed dependency cycle(s) with /soc@0/clock-controller@44200000 [ 0.786427] /soc@0/clock-controller@44200000: Fixed dependency cycle(s) with /soc@0/bus@42080000/dsi@48000000 root@stm32mp2-e3-d0-ef:~#

CRITICAL FINDING - Root cause identified:

Kernel detects circular dependency and attempts to "fix" it:
[dmesg output showing "Fixed dependency cycle(s)"]

This circular dependency resolution appears to break ADV7535 probe()
initialization sequence, preventing the bridge from ever powering on.

 

root@stm32mp2-e3-d0-ef:~# cat /sys/class/drm/card0-HDMI-A-1/edid | hexdump -C > edid.txt
root@stm32mp2-e3-d0-ef:~# ls -la edid.txt
-rw-r--r-- 1 root root 959 Jan 1 00:40 edid.txt
root@stm32mp2-e3-d0-ef:~# cat edid.txt
00000000 00 ff ff ff ff ff ff 00 04 72 18 00 db 8d 10 20 |.........r..... |
00000010 01 16 01 03 80 0b 06 78 08 67 60 a2 5a 49 9e 23 |.......x.g`.ZI.#|
00000020 13 50 54 00 00 00 01 01 01 01 01 01 01 01 01 01 |.PT.............|
00000030 01 01 01 01 01 01 91 0b 20 8c 30 e0 2d 10 10 3c |........ .0.-..<|
00000040 69 00 20 e0 31 00 00 18 00 00 00 fd 00 37 41 1e |i. .1........7A.|
00000050 28 03 00 0a 20 20 20 20 20 20 00 00 00 10 00 00 |(... ......|
00000060 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 fc |................|
00000070 00 41 63 65 72 20 47 35 30 0a 20 20 20 20 01 27 |.Acer G50. .'|
00000080 02 03 1a 41 47 01 01 01 01 01 01 01 23 09 07 07 |...AG.......#...|
00000090 83 01 00 00 65 03 0c 00 10 00 00 00 00 00 00 00 |....e...........|
000000a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
000000f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 10 |................|
00000100

 

CEA Extension Block (byte 0x88-0x8D):

65 03 0c 00 10 00

HDMI Vendor-Specific Data Block:

  • Tag: 0x65 (HDMI VSDB)
  • Max TMDS clock: 0x10 00 = 16 × 5MHz = 80 MHz

Ko tu teiksi par šo izdruku -
root@stm32mp2-e3-d0-ef:~# dmesg -C
root@stm32mp2-e3-d0-ef:~# echo 4 > /sys/module/drm/parameters/debug
root@stm32mp2-e3-d0-ef:~# systemctl restart weston-graphical-session
root@stm32mp2-e3-d0-ef:~# dmesg
[ 28.779122] [drm:drm_helper_probe_single_connector_modes] [CONNECTOR:32:HDMI-A-1]
[ 28.779635] [drm:drm_helper_probe_single_connector_modes] [CONNECTOR:32:HDMI-A-1] disconnected
[ 28.892795] [drm:drm_mode_setcrtc] [CRTC:41:crtc-0]
root@stm32mp2-e3-d0-ef:~# dmesg -C
root@stm32mp2-e3-d0-ef:~# echo 4 > /sys/module/drm/parameters/debug
root@stm32mp2-e3-d0-ef:~# systemctl restart weston-graphical-session
root@stm32mp2-e3-d0-ef:~# dmesg
[ 59.658701] [drm:drm_helper_probe_single_connector_modes] [CONNECTOR:32:HDMI-A-1]
[ 59.721604] stm32-display 48010000.display-controller: [drm:update_display_info.part.0] [CONNECTOR:32:HDMI-A-1] HDMI: DVI dual 0, max TMDS clock 0 kHz
[ 59.721647] stm32-display 48010000.display-controller: [drm:update_display_info.part.0] [CONNECTOR:32:HDMI-A-1] ELD monitor Acer G50
[ 59.721662] stm32-display 48010000.display-controller: [drm:update_display_info.part.0] [CONNECTOR:32:HDMI-A-1] HDMI: latency present 0 0, video latency 0 0, audio latency 0 0
[ 59.721680] stm32-display 48010000.display-controller: [drm:update_display_info.part.0] [CONNECTOR:32:HDMI-A-1] ELD size 32, SAD count 1
[ 59.721711] stm32-display 48010000.display-controller: [drm:update_display_info.part.0] [CONNECTOR:32:HDMI-A-1] HDMI: DVI dual 0, max TMDS clock 0 kHz
[ 59.721728] stm32-display 48010000.display-controller: [drm:update_display_info.part.0] [CONNECTOR:32:HDMI-A-1] ELD monitor Acer G50
[ 59.721742] stm32-display 48010000.display-controller: [drm:update_display_info.part.0] [CONNECTOR:32:HDMI-A-1] HDMI: latency present 0 0, video latency 0 0, audio latency 0 0
[ 59.721759] stm32-display 48010000.display-controller: [drm:update_display_info.part.0] [CONNECTOR:32:HDMI-A-1] ELD size 32, SAD count 1
[ 59.723883] [drm:drm_mode_debug_printmodeline] Modeline "640x480": 60 25175 640 656 752 800 480 490 492 525 0x40 0xa
[ 59.723920] [drm:drm_mode_prune_invalid] Not using 640x480 mode: CLOCK_LOW
[ 59.723931] [drm:drm_mode_debug_printmodeline] Modeline "640x480": 60 25200 640 656 752 800 480 490 492 525 0x40 0xa
[ 59.723948] [drm:drm_mode_prune_invalid] Not using 640x480 mode: CLOCK_LOW
[ 59.723960] [drm:drm_helper_probe_single_connector_modes] [CONNECTOR:32:HDMI-A-1] probed modes :
[ 59.723976] [drm:drm_mode_debug_printmodeline] Modeline "800x480": 60 29610 800 816 876 940 480 486 495 525 0x40 0xa
[ 59.760303] stm32-display 48010000.display-controller: [drm:drm_mode_addfb2] [FB:55]
[ 60.654588] stm32-display 48010000.display-controller: [drm:drm_mode_addfb2] [FB:57]
root@stm32mp2-e3-d0-ef:~#

"[CONNECTOR:32:HDMI-A-1] HDMI: DVI dual 0, max TMDS clock 0 kHz"............