Skip to content

Regression in BalenaOS 6.4.3: drm.edid_firmware Fails with ENOENT (-2) Due to vc4 Load Before Filesystem Mount #3635

@HakanL

Description

@HakanL

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

  1. Flash a Raspberry Pi CM4 with BalenaOS 6.4.2 or 6.4.3.
  2. Edit cmdline.txt to include drm.edid_firmware=rt73.bin.xz (a test file in /lib/firmware; replace with a valid edid.dat for real use).
  3. Boot the device and check dmesg for 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).
    • vc4 initializes at ~7.4s, finds rt73.bin.xz, and errors with:
[    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):
  • vc4 initializes 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 actual edid.dat works 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.

dmesg (21).txt
dmesg (20).txt

Related Forum post: https://forums.balena.io/t/edid-not-loaded-on-balenaos-6-4-and-later/373899

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions