<feed xmlns='http://www.w3.org/2005/Atom'>
<title>video/utils/plymouth-plugin-ucode, branch master</title>
<subtitle>Mirror of video feed</subtitle>
<id>https://git.openwrt.org/feed/video/atom?h=master</id>
<link rel='self' href='https://git.openwrt.org/feed/video/atom?h=master'/>
<link rel='alternate' type='text/html' href='https://git.openwrt.org/feed/video/'/>
<updated>2026-10-11T17:23:56Z</updated>
<entry>
<title>plymouth-plugin-ucode: hand the display over and back</title>
<updated>2026-10-11T17:23:56Z</updated>
<author>
<name>Daniel Golle</name>
</author>
<published>2026-10-05T00:19:51Z</published>
<link rel='alternate' type='text/html' href='https://git.openwrt.org/feed/video/commit/?id=74c76563c727656023974fa0f4fda6d8f1b4df18'/>
<id>urn:sha1:74c76563c727656023974fa0f4fda6d8f1b4df18</id>
<content type='text'>
A splash shown by the plugin held the display until something told
plymouthd to let go, gave a waiting display client no way to know when
that happened, and crashed or lost its ubus link on changes of mode.

In boot-up mode, open the input event nodes present when the splash
starts and those procd announces later, and on the first key, button
or touch press send plymouthd the deactivate request over its own
socket. procd replaces /dev with a fresh tmpfs after preinit, where the
splash starts, so the nodes it creates cannot be watched for; its
hotplug.d scripts run for every input device once the node exists,
coldplugged ones included, and the one shipped here hands the node to
the plugin as a plymouth status update.

Publish a plymouth object whose status method reports whether the
splash holds the display, and hand procd a plymouth.release event
whenever it lets go, without waiting for the reply, so a service can
wait for it with a trigger; procd runs triggers for events it is
handed, not for broadcasts. Stop the frame timer on the way to idle
and start it again when plymouth redraws the splash after
reactivating, and drop the unused progress callback.

Clear the ucode VM after freeing it, as uc_vm_init() leaves
vm-&gt;registry pointing at the freed registry. Remove the object before
freeing the connection. Drop a connection whose ubusd went away from a
disconnect handler, since plymouth's event loop frees the watch
itself, keep the inotify wait on the ubus socket directory armed so a
restarted ubusd is picked up, and clear the ids libubus caches from
the previous ubusd before registering again.

Keep the splash up through sysupgrade: in stage2, copy plymouth's
files, plugins and ucode modules into the ramfs, take the display back
with plymouth-evict and switch to system-upgrade mode; in do_stage2,
start plymouthd from the ramfs. Schedule frames against a deadline
advancing by one interval, so a theme keeps its frame rate under load.

Fixes: 9ef83aa136c2 ("plymouth-plugin-ucode: add a scripted splash plugin for ucode")
Signed-off-by: Daniel Golle &lt;daniel@makrotopia.org&gt;
</content>
</entry>
<entry>
<title>plymouth-plugin-ucode: start the splash without a console</title>
<updated>2026-10-02T07:56:57Z</updated>
<author>
<name>Daniel Golle</name>
</author>
<published>2026-10-01T11:50:12Z</published>
<link rel='alternate' type='text/html' href='https://git.openwrt.org/feed/video/commit/?id=cf4452f67a10efecc09797516945cf6dbc3481cb'/>
<id>urn:sha1:cf4452f67a10efecc09797516945cf6dbc3481cb</id>
<content type='text'>
The preinit hook asked for a splash by appending "splash" to a faked
kernel command line and told plymouth to ignore serial consoles, which
left it free to take the system console as its terminal anyway.

--graphical-boot covers both and keeps plymouth on KMS only.

Signed-off-by: Daniel Golle &lt;daniel@makrotopia.org&gt;
</content>
</entry>
<entry>
<title>plymouth-plugin-ucode: honour the display device scale</title>
<updated>2026-10-02T07:56:57Z</updated>
<author>
<name>Daniel Golle</name>
</author>
<published>2026-10-01T11:41:24Z</published>
<link rel='alternate' type='text/html' href='https://git.openwrt.org/feed/video/commit/?id=fd188acfb623ffa74918da1a458ffd1fc9125d76'/>
<id>urn:sha1:fd188acfb623ffa74918da1a458ffd1fc9125d76</id>
<content type='text'>
ply_pixel_buffer_get_size() reports the logical area while
ply_pixel_buffer_get_argb32_data() points at the device pixel buffer.
Where the device scale is above one, the plutovg surface then describes
the buffer as too narrow and with too short a stride, so each odd
logical row lands in the right half of the panel and the image collapses
into a fraction of it. The damaged area is handed over in logical
coordinates as well, while ply_renderer_head_flush_area() reads it as
device pixels.

Size the surface in device pixels, scale the canvas by the device scale
so a theme keeps drawing in logical coordinates, and report the damaged
area in device pixels.

Signed-off-by: Daniel Golle &lt;daniel@makrotopia.org&gt;
</content>
</entry>
<entry>
<title>plymouth-plugin-ucode: add a scripted splash plugin for ucode</title>
<updated>2026-09-26T09:21:06Z</updated>
<author>
<name>Daniel Golle</name>
</author>
<published>2026-09-25T23:44:28Z</published>
<link rel='alternate' type='text/html' href='https://git.openwrt.org/feed/video/commit/?id=9ef83aa136c2a9327c0bf4960f958f2a4d24d4b5'/>
<id>urn:sha1:9ef83aa136c2a9327c0bf4960f958f2a4d24d4b5</id>
<content type='text'>
Plymouth's own script plugin has its own little language and draws by
compositing prepared images, which means a theme arrives as a few
hundred PNGs. This plugin makes a theme one ucode program instead, with
a plutovg canvas over plymouth's pixel buffer, so a theme is source and
its artwork is SVG.

A theme returns setup, frame, paint and event. frame advances state and
declares what changed, paint draws one damaged rectangle, and nothing
reaches the screen that the theme did not ask for, which keeps a busy
scene at a couple of milliseconds a frame rather than repainting
everything. Themes are written against the contract in files/README.md
and can be measured offscreen, on any target, with the included
plymouth-theme-bench, which reports the package version it was built
from.

The plugin connects to ubus and passes events through, along with the
objects that already existed when it connected, so a theme can show
what the system is actually doing rather than animating a guess. It
starts the splash from a preinit hook, before the overlay is mounted,
and keeps it up through sysupgrade.

Signed-off-by: Daniel Golle &lt;daniel@makrotopia.org&gt;
</content>
</entry>
</feed>
