<feed xmlns='http://www.w3.org/2005/Atom'>
<title>video/utils, branch master</title>
<subtitle>Mirror of video feed</subtitle>
<id>https://git-03.infra.openwrt.org/feed/video/atom?h=master</id>
<link rel='self' href='https://git-03.infra.openwrt.org/feed/video/atom?h=master'/>
<link rel='alternate' type='text/html' href='https://git-03.infra.openwrt.org/feed/video/'/>
<updated>2026-10-11T17:23:56Z</updated>
<entry>
<title>plymouth-theme-openwrt-demo: suit small hi-DPI panels</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-03.infra.openwrt.org/feed/video/commit/?id=6917907d4d6c670cf85be525d23216595655061d'/>
<id>urn:sha1:6917907d4d6c670cf85be525d23216595655061d</id>
<content type='text'>
The theme was laid out and drawn with a 1080p screen in mind, and on a
small panel with a device scale above one it falls short.

The backdrop holding the logo, links and nodes is now allocated in
device pixels and drawn through a canvas scaled by the device scale, so
the static scene is as sharp as what is drawn on top of it. At scale 1
the texture matrix is the identity and plutovg keeps its plain blit.

The pictograms get a floor of 12 logical pixels and shrink only as far
as needed for the row to fit the screen width. The row is reserved for
that size and the logo and graph are laid out in the height left above
it; where the floor does not apply, the layout is unchanged.

In boot-up mode the backlight that the DRM panel references through its
backlight phandle is taken to zero before the first frame and faded in
over 1.5 s to 80% of its maximum, as full brightness lifts the black
background to grey. A panel carrying the bootloader-initialized
property already shows the bootloader's picture and is left alone. On
a backlight whose scale is not perceptual the ramp follows the CIE 1931
lightness curve pwm_bl uses for its own tables.

Nothing reports how far a system upgrade has got, so the upgrade modes
keep the whole graph and turn a spinner around the router node instead
of dismantling the graph on a timer, which would read as progress.
The pictograms stand for services coming up, so only boot-up mode
shows them. A router shuts down within a few seconds, so shutdown and
reboot take the graph down one level every 250 ms, leaves first, and
only the logo is left after three steps.

paint() walked every packet and pulse once per damaged rectangle, and
every packet and pulse damaged a rectangle of its own, so the cost of a
frame grew with the square of the packet count and was spent in script
loops rather than in pixels. A splash connecting to a running bus
received one packet per existing ubus object, without the cap
flow_spawn() observes, and dropped far below its frame rate. Damage is
now collected into one box per frame, paint() draws each packet once
with colours built when the packet is created, pulse rings are filled
as annuli where a stroke cost considerably more, and FLOW_CAP, lowered
to 8 as a handful of packets conveys activity as well as two dozen,
applies to packets launched by ubus objects too.

Fixes: 6aca04f33413 ("plymouth-theme-openwrt-demo: add a demo theme for the ucode engine")
Signed-off-by: Daniel Golle &lt;daniel@makrotopia.org&gt;
</content>
</entry>
<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-03.infra.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: hand the display over and take it back</title>
<updated>2026-10-11T17:23:56Z</updated>
<author>
<name>Daniel Golle</name>
</author>
<published>2026-10-05T17:16:01Z</published>
<link rel='alternate' type='text/html' href='https://git-03.infra.openwrt.org/feed/video/commit/?id=eb8e5b3614bf15d01d9ed7c6fd836f457e27057e'/>
<id>urn:sha1:eb8e5b3614bf15d01d9ed7c6fd836f457e27057e</id>
<content type='text'>
A deactivated splash kept flushing its displays from a timer. When the
shutdown sequence reactivated the daemon waiting since boot, whatever
had taken the display over still held DRM master, so the splash never
appeared, and the last frame gave way to the console during the final
kill. libudev-zero cannot tie a frame buffer device to its DRM card, so
every fbdev emulation of a DRM driver was driven as a second display.

Carry a patch that stops the frame timer while the splash is
deactivated. Add plymouth-evict, which stops every process holding a
KMS device other than plymouthd and waits until they are gone. A
process that belongs to a procd service is stopped through procd,
which applies the service's own term_timeout and does not respawn it,
and the wait ends on procd's instance.stop notifications; anything
else, and everything once ubus is gone as in sysupgrade's stage2, gets
SIGTERM directly. The shutdown action runs it, ignores rcS cancelling
the K script, and switches to shutdown mode before reactivating, so
the first frame back is already the shutdown splash.

Install plymouthd-fd-escrow, which keeps the last frame on the display
through the final kill, and install the DRM renderer alone, as the
splash is meant for devices with a KMS driver.

Fixes: 1a39b47dbdac ("plymouth: add boot splash for KMS devices")
Signed-off-by: Daniel Golle &lt;daniel@makrotopia.org&gt;
</content>
</entry>
<entry>
<title>kmscon: wait for the splash, add unifont, depend on evdev</title>
<updated>2026-10-07T07:23:38Z</updated>
<author>
<name>Daniel Golle</name>
</author>
<published>2026-10-05T16:08:48Z</published>
<link rel='alternate' type='text/html' href='https://git-03.infra.openwrt.org/feed/video/commit/?id=8d4551ceb287527f6a2ba99f9e86ded782a937bb'/>
<id>urn:sha1:8d4551ceb287527f6a2ba99f9e86ded782a937bb</id>
<content type='text'>
Started while plymouth holds DRM master, kmscon retries taking it from
a timer and logs a failure on every attempt. Its built-in 8x16 font
covers the first 256 code points only, held in CP437 order while
kmscon looks glyphs up by Unicode code point, so box drawing, block and
braille characters come out wrong. The input event nodes it reads only
exist with the evdev handler, which nothing pulled in.

Do not start the instance while plymouth reports that it holds the
display, and start it on the plymouth.release event the splash hands
procd when it lets go. Build the GNU Unifont engine into a
kmscon-mod-unifont package; its generator genunifont is packaged as a
host build, and a patch lets meson use that one. The init script
passes --font-engine only when one is configured, so kmscon falls
through to unifont when the module is installed. GNU Unifont is
dual-licensed under GPL-2.0-or-later with a font embedding exception
and OFL-1.1; kmscon takes the font under OFL-1.1, so the module
package carries that licence besides MIT. Depend on kmod-input-evdev.

Fixes: 3c8ebee9b4f7 ("kmscon: depend on input-support for the evdev nodes")
Signed-off-by: Daniel Golle &lt;daniel@makrotopia.org&gt;
</content>
</entry>
<entry>
<title>kmscon: drop the enabled option</title>
<updated>2026-10-03T15:57:13Z</updated>
<author>
<name>Daniel Golle</name>
</author>
<published>2026-10-01T23:37:26Z</published>
<link rel='alternate' type='text/html' href='https://git-03.infra.openwrt.org/feed/video/commit/?id=afb0a7453e4ecebe4b59f9c1b5f8d5413fb652f2'/>
<id>urn:sha1:afb0a7453e4ecebe4b59f9c1b5f8d5413fb652f2</id>
<content type='text'>
Whether a service runs at boot is already expressed by its rc.d symlink,
which service enable and service disable maintain. A UCI option saying
the same thing is a second source of truth that disagrees with the first
as soon as either is touched on its own.

Signed-off-by: Daniel Golle &lt;daniel@makrotopia.org&gt;
</content>
</entry>
<entry>
<title>kmscon: make the libseat backend activate its seat</title>
<updated>2026-10-03T15:57:13Z</updated>
<author>
<name>Daniel Golle</name>
</author>
<published>2026-10-01T14:04:00Z</published>
<link rel='alternate' type='text/html' href='https://git-03.infra.openwrt.org/feed/video/commit/?id=42627cc49924ced14c292010b046525c69d46638'/>
<id>urn:sha1:42627cc49924ced14c292010b046525c69d46638</id>
<content type='text'>
The seat is enabled while libseat_open_seat() is still running, before
uterm_vt_allocate() has installed the callbacks an activation needs, and
whatever libseat has buffered is never dispatched because watching its fd
for readability yields nothing. kmscon therefore stayed asleep with
--libseat: no video device was initialised and the display stayed dark.

Carry patches that dispatch libseat once from an idle callback and replay
an enable that arrived too early, and that mark an unopened tty as -1 so
the backend stops issuing VT ioctls on file descriptor 0.

Signed-off-by: Daniel Golle &lt;daniel@makrotopia.org&gt;
</content>
</entry>
<entry>
<title>plymouth-theme-openwrt-demo: fix the theme descriptor name</title>
<updated>2026-10-02T07:56:57Z</updated>
<author>
<name>Daniel Golle</name>
</author>
<published>2026-10-01T11:41:17Z</published>
<link rel='alternate' type='text/html' href='https://git-03.infra.openwrt.org/feed/video/commit/?id=816fa8fe0ca759cc5d1ba71af1a716405bf4dda4'/>
<id>urn:sha1:816fa8fe0ca759cc5d1ba71af1a716405bf4dda4</id>
<content type='text'>
plymouth resolves a configured theme as themes/&lt;name&gt;/&lt;name&gt;.plymouth,
so the descriptor has to carry the name of its directory. Named
openwrt.plymouth it is never found, and plymouth walks its fallback
chain down to the built-in text splash, which draws nothing at all on a
board that has no text console.

Name the descriptor after the theme so the configured theme loads.

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-03.infra.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-03.infra.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: keep the daemon off the system console</title>
<updated>2026-10-02T07:56:57Z</updated>
<author>
<name>Daniel Golle</name>
</author>
<published>2026-10-01T11:50:05Z</published>
<link rel='alternate' type='text/html' href='https://git-03.infra.openwrt.org/feed/video/commit/?id=389a52b148db60bc48c9122316ebaeffc033f25e'/>
<id>urn:sha1:389a52b148db60bc48c9122316ebaeffc033f25e</id>
<content type='text'>
OpenWrt builds the kernel without CONFIG_VT, so BOOT_TTY never exists
and plymouth falls back to the first serial device it finds, which is
the system console. It opens that console, watches it for input, puts it
in raw mode and locks every termios bit, so a shell sharing it loses its
cursor keys, its interrupt character and a share of everything typed.
Forcing details mode along the way also costs the splash its renderer.

Carry a patch that makes --graphical-boot keep plymouth away from a
console altogether and pass it from both entry points. The faked
"splash" kernel argument and --ignore-serial-consoles go with it, both
implied now, as does --attach-to-session, which redirected the console
into plymouth's pty with TIOCCONS and stopped kernel messages reaching
the serial port.

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