{ "//": [ "Declarative balena fleet host configuration (the config.txt knobs).", "Source of truth for what .github/workflows/build-balena-disk-image.yaml", "applies to each `screenly_ose/anthias-*` fleet: it upserts every entry", "below under the canonical `BALENA_HOST_CONFIG_` name and prunes any", "config var not listed here (including legacy `RESIN_HOST_CONFIG_*`", "duplicates), so this file is authoritative. Supervisor vars", "(RESIN_SUPERVISOR_*) are platform settings, not config.txt, and are out", "of scope. See docs/balena-fleet-host-config.md for the full audit.", "", "Reconciled from the live fleets on 2026-05-30. Corrections vs what was", "live:", " * pi4-64 dtoverlay was the malformed `\"vc4-kms-v3d\"` (literal quotes)", " on the RESIN_ prefix; the quotes stopped the firmware loading the", " overlay, so the board fell back to firmware-KMS and Qt eglfs_kms", " (the viewer's renderer since #2905) could not start the display ->", " boot-splash hang (issue #2947). Stored clean. Its dtparam was", " `i2c_arm=on,spi=on,audio=on` (plus a bogus trailing `vc4-kms-v3d`).", " That comma-joined multi-value never round-tripped through balena's", " config.txt reconcile, so the pi4 supervisor thrashed boot-config and", " reboot-looped fleet-wide (blocking the 2026.5.2 rollout). Set to", " `audio=on` to match ansible/roles/system/templates/config.txt.j2", " (the installer sets only `dtparam=audio=on`); i2c_arm/spi are unused", " by the viewer. Single-value form is canary-verified to converge.", " * pi2 / pi3 dtoverlay was on the legacy RESIN_ prefix -> standardized.", " * pi3-64 is the 64-bit-OS variant of Pi 3 hardware (same BCM2837", " SoC, balenaOS device-type raspberrypi3-64). config.txt is", " arch-independent, so it mirrors the pi3 entry; the viewer runs the", " arm64 Qt6/eglfs_kms image, which is why vc4-kms-v3d (full KMS) is", " required exactly as on pi4-64.", " * pi5 carried `gpu_mem=1024`, which a Pi 5 ignores entirely (BCM2712", " has no firmware memory split; it is CMA-only) -> dropped. Added", " `cma-512` to the overlay, which docs/board-enablement.md documents as", " required for 4K HEVC hardware decode.", "", "Notes:", " * rockpi4 (device type rockpi-4b-rk3399) and x86 are declared as {}:", " config.txt is Raspberry-Pi-firmware-only, so those fleets have no", " host config. The empty object is still required — the reconcile", " step hard-fails on a missing board key to keep the prune from", " wiping a fleet.", " * gpu_mem is retained on Pi <=4: it still backs the VideoCore hardware", " video decoders (bcm2835-codec / V4L2 M2M) used for playback.", " * framebuffer_depth / framebuffer_ignore_alpha are legacy firmware-", " framebuffer knobs that the full-KMS driver ignores. They are inert,", " so they are kept as-is rather than churned on working boards." ], "boards": { "pi2": { "dtoverlay": "vc4-kms-v3d", "gpu_mem": "128", "disable_overscan": "1", "framebuffer_depth": "32", "framebuffer_ignore_alpha": "1" }, "pi3": { "dtoverlay": "vc4-kms-v3d", "gpu_mem": "128", "disable_overscan": "1", "framebuffer_depth": "32", "framebuffer_ignore_alpha": "1" }, "pi3-64": { "dtoverlay": "vc4-kms-v3d", "gpu_mem": "128", "disable_overscan": "1", "framebuffer_depth": "32", "framebuffer_ignore_alpha": "1" }, "pi4-64": { "dtoverlay": "vc4-kms-v3d", "dtparam": "audio=on", "gpu_mem": "256", "disable_overscan": "1", "framebuffer_depth": "32", "framebuffer_ignore_alpha": "1" }, "pi5": { "dtoverlay": "vc4-kms-v3d,cma-512" }, "x86": {}, "rockpi4": {} } }