-
Notifications
You must be signed in to change notification settings - Fork 122
Description
Description
In BalenaOS 6.4.2 (kernel 6.1.77), the drm.edid_firmware kernel parameter successfully loads an EDID file from /lib/firmware (e.g., rt73.bin.xz as a test), though it fails with an "invalid size" error due to the file’s format. In BalenaOS 6.4.3 (kernel 6.12.1), it fails with "error -2" (ENOENT, "No such file or directory"), indicating the file isn’t found at the time of loading. This regression prevents me from using a custom EDID for my 800x480 TFT display on a Raspberry Pi Compute Module 4. For reference, my hardware doesn't have an EDID eeprom, but in earlier versions of the Linux kernel this worked fine with just the video= parameter, however in 6.12.x this seems to be changed where EDID is expected (I'm not getting anything on my display and 1000s of errors in dmesg, like these vc4-drm gpu: [drm] HDMI Sink doesn't support RGB, something's wrong.).
Analysis of dmesg logs shows that in 6.4.3, the vc4 DRM driver initializes before /lib/firmware is mounted, causing a race condition not present in 6.4.2. I’m using off-the-shelf BalenaOS images and would like this fixed without resorting to a custom build.
Steps to Reproduce
- Flash a Raspberry Pi CM4 with BalenaOS 6.4.2 or 6.4.3.
- Edit
cmdline.txtto includedrm.edid_firmware=rt73.bin.xz(a test file in/lib/firmware; replace with a validedid.datfor real use). - Boot the device and check
dmesgfor EDID loading messages.
Expected Behavior
- The EDID file should load during boot, as in 6.4.2, applying my 800x480 @ 60Hz display configuration without requiring a manual
video=override. - If the file is invalid (e.g.,
rt73.bin.xz), it should fail gracefully with a size/format error, not ENOENT.
Actual Behavior
- 6.4.2 (kernel 6.1.77):
- Filesystem mounts at ~3.2-3.7s (
mmcblk0p3,p5,p6). vc4initializes at ~7.4s, findsrt73.bin.xz, and errors with:
- Filesystem mounts at ~3.2-3.7s (
[ 7.494731] [drm:edid_load [drm]] ERROR Size of EDID firmware "rt73.bin.xz" is invalid (expected 11264, got 1164)
- 6.4.3 (kernel 6.12.1):
vc4initializes at ~0.64-0.92s, before filesystem mounts at ~2.77-3.11s (mmcblk0p2,p5,p6).- Fails with:
[ 0.921901] vc4-drm gpu: Direct firmware load for rt73.bin.xz failed with error -2
[ 0.921910] vc4-drm gpu: [drm] ERROR [CONNECTOR:33:HDMI-A-1] Requesting EDID firmware "rt73.bin.xz" failed (err=-2)
- Later (~21.9s), after mounts, it finds the file but flags it as invalid:
[ 21.903345] vc4-drm gpu: [drm] ERROR Invalid firmware EDID "rt73.bin.xz"
Root Cause
In 6.4.3, the vc4 driver probes before /lib/firmware is mounted, unlike 6.4.2 where mounts precede vc4 init. This appears to stem from a BalenaOS boot sequence change (e.g., initramfs or mount timing) rather than a kernel change in drm.edid_firmware handling. The faster probe in kernel 6.12.1 may exacerbate this race.
Impact
I rely on a custom EDID (edid.dat) for my 800x480 display. Without this working, I’m forced to:
- Stay on 6.4.2, missing updates.
Request
Can this be fixed in a future BalenaOS release by ensuring /lib/firmware is available before vc4 loads? A potential solution is embedding firmware in the initramfs, as I’d rather not build a custom OS.
Environment
- Device: Raspberry Pi Compute Module 4 Rev 1.1
- BalenaOS Versions: 6.4.2 (kernel 6.1.77), 6.4.3 (kernel 6.12.1)
- Command Line:
drm.edid_firmware=rt73.bin.xz video=HDMI-A-1:800x480M-32@60D ...
Logs
Attached:
dmesg_6.4.2.txt: Successful load with size error.dmesg_6.4.3.txt: ENOENT failure due to timing.
Additional Notes
-
I tested with
rt73.bin.xz(a Wi-Fi firmware in/lib/firmware) to confirm accessibility, not as my real EDID. My actualedid.datworks in 6.4.2 but fails in 6.4.3 due to this issue (file not found, not invalid file). -
Reported as of March 19, 2025.
Related Forum post: https://forums.balena.io/t/edid-not-loaded-on-balenaos-6-4-and-later/373899