Skip to content

j713 (MacBook Air M4): appledrm idle cache freezes a console-only screen (fbcon never swaps) #409

Closed

Description

@niteria

On a J713 whose greeter is a text UI on the framebuffer console (tuigreet on tty1, through appledrm's fbdev emulation), the panel freezes about a second after KMS takes over. The rest of the system keeps running: keyboard input reaches the kernel and the greeter, and writes to /dev/tty1 complete, but nothing new is shown.

Cause

idle_cache_ms (default 1000) has the DCP cache the last frame once nothing has flipped for that long. It was added in aurora-silicon/linux a150a02 "drm/apple: m4: Cache a static frame while nothing is flipping", merged in aurora-silicon/linux#830.

fbcon draws straight into the scanout buffer and never submits a swap, so the DCP never leaves the cached frame. With appledrm.enable_verbose_logging=Y, a console write produces no appledrm or DCP activity at all.

Setting idle_cache_ms=0 at runtime doesn't help on its own, because it "applies from the next swap" and none comes. Forcing a swap restores a live screen straight away:

echo 0 > /sys/module/appledrm/parameters/idle_cache_ms
echo 1 > /sys/class/graphics/fb0/blank; echo 0 > /sys/class/graphics/fb0/blank

A compositor that flips regularly is presumably unaffected. This mainly hits console-only screens: text greeters, VTs, a graphical session that fails and falls back to fbcon, and early boot.

Workaround

appledrm.idle_cache_ms=0 on the kernel command line.

Possible fixes

  • Don't engage the idle cache while the fbdev client (fbcon) owns the CRTC.
  • Or have fbdev damage wake the DCP from the cached frame, for example a dirty or flush path that schedules a swap when the buffer changes.

Environment

Found while moving this Air to the monitorless b9 boot for suspend-to-RAM work.

🤖 Generated with Claude Code

Activity

  1. niteria commented on Nov 7, 2026

    @niteria
    Author

    Moved to aurora-silicon/linux#1185, which is where this kernel work lives. Sorry for the noise here.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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