TrueLine Timing
Members
-
Joined
-
Last visited
Solutions
-
TrueLine Timing's post in HDMI0 fails to link at low pixel clocks (hdptx phy lane can't ready) — workaround via patched EDID was marked as the answer@Boardcon_yang thanks for confirming this on the EM3588 — the ~75MHz threshold
you're seeing lines up exactly with what I found: 50.25MHz never locks, 74.25MHz
(the 720p60 clock) locks every time on the same port and cable. Good to know
it's not specific to the Orange Pi 5 Pro or to this particular panel.
Also, apologies: the "[link a deploy/edid/README.md ...]" line at the end of my
first post was a leftover placeholder (the repo is private), and I can no
longer edit the post.
Here are the full steps instead, so this is self-contained:
1) Validate the timing live first (stop getty@tty1 so modetest can take DRM master): sudo systemctl stop getty@tty1 sudo modetest -M rockchip -s <connector_id>:1024,1210,1278,1650,600,625,650,750-60 -> dmesg should show "hdptx phy lane locked!" and the panel should show an image. Timing used (same 1024x600 active area, more blanking, 74.25MHz = the 720p60 clock): H: active 1024, front porch 186, sync 68, back porch 372 -> htotal 1650 V: active 600, front porch 25, sync 25, back porch 100 -> vtotal 750 74,250,000 / (1650 x 750) = 60.0 Hz 2) Patch the EDID: dump the panel's real EDID (modetest -M rockchip -c, EDID blob property of the connector), rewrite only the first Detailed Timing Descriptor (bytes 54-71) with the timing above, keep the physical size bytes (66-71) untouched, and recompute the checksum (byte 127). 3) The initramfs gotcha (as you said, the connector asks for the EDID before the rootfs is up): update-initramfs does NOT pick up loose files in /lib/firmware/edid/ — it only packs firmware referenced by kernel modules. Without this you get "Direct firmware load for edid/<file>.bin failed with error -2". /etc/initramfs-tools/hooks/edid-firmware (chmod +x): #!/bin/sh PREREQ="" prereqs() { echo "$PREREQ"; } case "$1" in prereqs) prereqs; exit 0 ;; esac . /usr/share/initramfs-tools/hook-functions copy_file firmware /lib/firmware/edid/monitor7_1024x600_ib.bin sudo update-initramfs -u lsinitramfs /boot/initrd.img-$(uname -r) | grep edid # must list the file 4) /boot/armbianEnv.txt, extraargs: video=HDMI-A-1:1024x600@60 drm.edid_firmware=HDMI-A-1:edid/monitor7_1024x600_ib.bin Note: use drm.edid_firmware= — the old drm_kms_helper.edid_firmware= is deprecated on this kernel and silently loads nothing (only a warning).