hdmi_force_hotplug is a parameter for the legacy display stack. The legacy display stack never supported hotplug in any meaningful way, and framebuffers did persist until eternity once allocated. This isn't supported on Pi5.
The default is now to use the vc4 kernel display driver via the "dtoverlay=vc4-kms-v3d" line in /boot/firmware/config.txt.
It uses the standard DRM framebuffer emulation for creating framebuffers, so the resolution is set when the first connector becomes active on a DRM card (or all connected when first initialised), and is at the resolution that is the minimum width and minimum height of all connected devices.
The framebuffer does not get resized on subsequent hot plug events, but will always be displayed starting at offset 0,0 (ie top left) at 1:1, so it may not cover the entire display.
That is all standard Linux kernel behaviour, so will be consistent on any normal Linux device. If you want to respond to hotplug, then your application should drive the DRM / KMS API directly to render what it wishes.
You can emulate the hdmi_force_hotplug behaviour by editing /boot/firmware/cmdline.txt and adding "vc4.force_hotplug=1" to force HDMI-1, vc4.force_hotplug=2" to force HDMI-2, or "vc4.force_hotplug=3" to force both. Note that the kernel will then never reconfigure the display pipeline, and you probably want to combine it with some fixed EDIDs via a "drm.edid_firmware=edid.bin" type entry, otherwise you will get 1024x768 if no display is connected.
The default is now to use the vc4 kernel display driver via the "dtoverlay=vc4-kms-v3d" line in /boot/firmware/config.txt.
It uses the standard DRM framebuffer emulation for creating framebuffers, so the resolution is set when the first connector becomes active on a DRM card (or all connected when first initialised), and is at the resolution that is the minimum width and minimum height of all connected devices.
The framebuffer does not get resized on subsequent hot plug events, but will always be displayed starting at offset 0,0 (ie top left) at 1:1, so it may not cover the entire display.
That is all standard Linux kernel behaviour, so will be consistent on any normal Linux device. If you want to respond to hotplug, then your application should drive the DRM / KMS API directly to render what it wishes.
You can emulate the hdmi_force_hotplug behaviour by editing /boot/firmware/cmdline.txt and adding "vc4.force_hotplug=1" to force HDMI-1, vc4.force_hotplug=2" to force HDMI-2, or "vc4.force_hotplug=3" to force both. Note that the kernel will then never reconfigure the display pipeline, and you probably want to combine it with some fixed EDIDs via a "drm.edid_firmware=edid.bin" type entry, otherwise you will get 1024x768 if no display is connected.
Statistics: Posted by 6by9 — Thu Apr 10, 2025 5:39 pm