diff --git a/meta-oe/recipes-graphics/kmscon/kmscon/0001-terminal-open-the-pty-only-once-a-display-is-attached.patch b/meta-oe/recipes-graphics/kmscon/kmscon/0001-terminal-open-the-pty-only-once-a-display-is-attached.patch deleted file mode 100644 index 68f2ccc157..0000000000 --- a/meta-oe/recipes-graphics/kmscon/kmscon/0001-terminal-open-the-pty-only-once-a-display-is-attached.patch +++ /dev/null @@ -1,64 +0,0 @@ -From c63a880187db708b50d25c37b6fc1e24ed68492a Mon Sep 17 00:00:00 2001 -From: Markus Volk -Date: Fri, 18 Sep 2026 21:52:35 +0200 -Subject: [PATCH] terminal: open the pty only once a display is attached - -The session type handed to the child (TERM_SESSION_TYPE=kms or fb) is -decided in terminal_open() from the displays attached at that moment. -On a real VT the first session is activated as soon as the seat wakes -up, which happens before the DRM display has finished probing, so the -login is spawned with TERM_SESSION_TYPE=fb even though the terminal -ends up on a KMS display a few hundred milliseconds later. - -Session managers such as uwsm rely on that variable to decide whether -they have to ask kmscon to release the display before starting a -compositor. With the wrong type the request is never sent, kmscon -keeps DRM master, and the compositor fails to open the device until it -gives up. - -Defer opening the pty until the first display has been added to the -terminal, and open it from terminal_add_display() when the terminal is -already awake at that point. - -Upstream-Status: Pending - -AI-Generated: Uses Claude Code (Claude Opus 5) -Signed-off-by: Markus Volk ---- - src/kmscon_terminal.c | 6 +++++- - 1 file changed, 5 insertions(+), 1 deletion(-) - -diff --git a/src/kmscon_terminal.c b/src/kmscon_terminal.c -index 15b00b4..42b6cd9 100644 ---- a/src/kmscon_terminal.c -+++ b/src/kmscon_terminal.c -@@ -107,6 +107,7 @@ struct kmscon_terminal { - #define BLINK_TIMER_NS (500 * 1000 * 1000) - - static int font_set(struct kmscon_terminal *term); -+static int terminal_open(struct kmscon_terminal *term); - - static void coord_to_cell(struct kmscon_terminal *term, int32_t x, int32_t y, unsigned int *posx, - unsigned int *posy) -@@ -726,6 +727,9 @@ int terminal_add_display(struct kmscon_terminal *term, struct display *disp) - update_pointer_max_all(term); - display_ref(scr->disp); - do_redraw_screen(scr); -+ -+ if (term->awake && !term->opened) -+ terminal_open(term); - return 0; - - err_text: -@@ -1124,7 +1128,7 @@ void terminal_activate(struct kmscon_terminal *term) - { - term->awake = true; - ev_timer_enable(term->blink_timer); -- if (!term->opened) -+ if (!term->opened && !shl_dlist_empty(&term->screens)) - terminal_open(term); - if (term->pointer.visible) - hw_cursor_show(term, term->pointer.x, term->pointer.y); --- -2.55.0 - diff --git a/meta-oe/recipes-graphics/kmscon/kmscon/0001-uterm-treat-platform-display-controllers-as-primary-GPUs.patch b/meta-oe/recipes-graphics/kmscon/kmscon/0001-uterm-treat-platform-display-controllers-as-primary-GPUs.patch new file mode 100644 index 0000000000..88a071f542 --- /dev/null +++ b/meta-oe/recipes-graphics/kmscon/kmscon/0001-uterm-treat-platform-display-controllers-as-primary-GPUs.patch @@ -0,0 +1,53 @@ +From 92b87c18f67ba9c01b23b50d014c5c5cfa72717e Mon Sep 17 00:00:00 2001 +From: Markus Volk +Date: Wed, 7 Oct 2026 13:09:58 +0200 +Subject: [PATCH] uterm: treat platform display controllers as primary GPUs + +A GPU only counted as primary when its PCI parent had boot_vga set. +SoC display controllers such as vc4 on the Raspberry Pi are platform +devices without a PCI parent, so with gpus=primary kmscon ignored the +only display in the system and never showed a terminal. + +Treat DRM devices on the platform bus as primary. USB displays are +excluded: on these systems the USB controller is a platform device too, +so they would otherwise be taken as primary. + +Tested on a Raspberry Pi 4 with --gpus=primary: before, card0 (vc4) +was ignored as "no primary GPU"; now the terminal comes up on HDMI-A +with the drm2d backend. The USB exclusion is not tested on hardware. + +Assisted-By: Claude Opus 5.5 +Signed-off-by: Markus Volk + +Upstream-Status: Backport [https://github.com/kmscon/kmscon/pull/551/changes/e8d5af950b1046f060604932440306dd16c9039e] +--- + src/uterm/monitor.c | 14 +++++++++++++- + 1 file changed, 13 insertions(+), 1 deletion(-) + +diff --git a/src/uterm/monitor.c b/src/uterm/monitor.c +index f2141969..ccb5e422 100644 +--- a/src/uterm/monitor.c ++++ b/src/uterm/monitor.c +@@ -244,9 +244,21 @@ static bool is_drm_primary(struct uterm_monitor *mon, struct udev_device *dev, c + log_debug("DRM device %s is primary PCI GPU", node); + return true; + } ++ return false; + } + +- return false; ++ /* ++ * SoC display controllers are platform devices without a boot_vga ++ * attribute. Treat them as primary. USB displays sit below a platform ++ * USB controller on such systems, but are never primary. ++ */ ++ if (udev_device_get_parent_with_subsystem_devtype(dev, "usb", NULL)) ++ return false; ++ if (!udev_device_get_parent_with_subsystem_devtype(dev, "platform", NULL)) ++ return false; ++ ++ log_debug("DRM device %s is primary platform GPU", node); ++ return true; + } + + /* diff --git a/meta-oe/recipes-graphics/kmscon/kmscon/0002-uterm_monitor-treat-platform-display-controllers-as-primary-GPUs.patch b/meta-oe/recipes-graphics/kmscon/kmscon/0002-uterm_monitor-treat-platform-display-controllers-as-primary-GPUs.patch deleted file mode 100644 index c85607783c..0000000000 --- a/meta-oe/recipes-graphics/kmscon/kmscon/0002-uterm_monitor-treat-platform-display-controllers-as-primary-GPUs.patch +++ /dev/null @@ -1,84 +0,0 @@ -From d321a1572a12d760ddade294f4e7eabe57d555d1 Mon Sep 17 00:00:00 2001 -From: Markus Volk -Date: Sat, 26 Sep 2026 10:00:57 +0200 -Subject: [PATCH] uterm_monitor: treat platform display controllers as primary - GPUs - -A GPU only counted as primary when its PCI parent had boot_vga set. -SoC display controllers such as vc4 on the Raspberry Pi are platform -devices without a PCI parent, so with gpus=primary kmscon ignored the -only display in the system and never showed a terminal. - -Treat DRM devices on the platform bus as primary, except for the -simpledrm, efidrm, vesadrm and ofdrm firmware framebuffers that only -stand in until the native driver has loaded. - -Upstream-Status: Pending - -AI-Generated: Uses Claude Code (Claude Opus 5.5) ---- - src/uterm_monitor.c | 29 ++++++++++++++++++++++++++--- - 1 file changed, 26 insertions(+), 3 deletions(-) - -diff --git a/src/uterm_monitor.c b/src/uterm_monitor.c -index d89bfa1..25ec91f 100644 ---- a/src/uterm_monitor.c -+++ b/src/uterm_monitor.c -@@ -234,10 +234,15 @@ out_close: - return flags; - } - --static bool is_drm_primary(struct uterm_monitor *mon, struct udev_device *dev, const char *node) -+static char *get_drm_name(int fd); -+ -+static bool is_drm_primary(struct uterm_monitor *mon, struct udev_device *dev, const char *node, -+ int fd) - { - struct udev_device *pci; - const char *id; -+ char *name; -+ bool res; - - pci = udev_device_get_parent_with_subsystem_devtype(dev, "pci", NULL); - if (pci) { -@@ -246,9 +251,27 @@ static bool is_drm_primary(struct uterm_monitor *mon, struct udev_device *dev, c - log_debug("DRM device %s is primary PCI GPU", node); - return true; - } -+ return false; - } - -- return false; -+ /* -+ * SoC display controllers are platform devices without a boot_vga -+ * attribute. Treat them as primary, except for the generic firmware -+ * framebuffer drivers that only stand in until the real driver loads. -+ */ -+ if (!udev_device_get_parent_with_subsystem_devtype(dev, "platform", NULL)) -+ return false; -+ -+ name = get_drm_name(fd); -+ if (!name) -+ return false; -+ -+ res = strcmp(name, "simpledrm") && strcmp(name, "efidrm") && strcmp(name, "vesadrm") && -+ strcmp(name, "ofdrm"); -+ if (res) -+ log_debug("DRM device %s is primary platform GPU (%s)", node, name); -+ free(name); -+ return res; - } - - /* -@@ -334,7 +357,7 @@ static unsigned int get_drm_flags(struct uterm_monitor *mon, struct udev_device - return flags; - } - -- if (is_drm_primary(mon, dev, node)) -+ if (is_drm_primary(mon, dev, node, fd)) - flags |= UTERM_MONITOR_PRIMARY; - if (is_drm_usb(mon, node, fd)) - flags |= UTERM_MONITOR_AUX; --- -2.55.0 - diff --git a/meta-oe/recipes-graphics/kmscon/kmscon/0002-vt_libseat-Fix-build-error-due-to-logging-changes.patch b/meta-oe/recipes-graphics/kmscon/kmscon/0002-vt_libseat-Fix-build-error-due-to-logging-changes.patch new file mode 100644 index 0000000000..63db2e5297 --- /dev/null +++ b/meta-oe/recipes-graphics/kmscon/kmscon/0002-vt_libseat-Fix-build-error-due-to-logging-changes.patch @@ -0,0 +1,32 @@ +From 153db63d679df719a99dd36505f9c2f55d9c59f6 Mon Sep 17 00:00:00 2001 +From: Jocelyn Falempe +Date: Mon, 28 Sep 2026 11:46:21 +0200 +Subject: [PATCH] vt_libseat: Fix build error due to logging changes + +Commit "efda2b5 log: Simplify logging, remove timestamp, and level for notice and info." +changed the log_submit() arguments, and this was not updated in +vt_libseat.c + +Upstream-Status: Backport [https://github.com/kmscon/kmscon/commit/153db63d679df719a99dd36505f9c2f55d9c59f6] + +Signed-off-by: Jocelyn Falempe +--- + src/uterm/vt_libseat.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/uterm/vt_libseat.c b/src/uterm/vt_libseat.c +index 4f65c84..2097628 100644 +--- a/src/uterm/vt_libseat.c ++++ b/src/uterm/vt_libseat.c +@@ -260,7 +260,7 @@ static enum log_severity log_level(enum libseat_log_level level) + + static void log_libseat(enum libseat_log_level level, const char *fmt, va_list args) + { +- log_submit(LOG_DEFAULT, log_level(level), fmt, args); ++ log_submit(log_level(level), "libseat", fmt, args); + } + + static void vt_libseat_input(struct input *input, struct input_key_event *ev, void *data) +-- +2.55.0 + diff --git a/meta-oe/recipes-graphics/kmscon/kmscon_10.0.1.bb b/meta-oe/recipes-graphics/kmscon/kmscon_10.0.4.bb similarity index 89% rename from meta-oe/recipes-graphics/kmscon/kmscon_10.0.1.bb rename to meta-oe/recipes-graphics/kmscon/kmscon_10.0.4.bb index 0336649551..400d9b5f59 100644 --- a/meta-oe/recipes-graphics/kmscon/kmscon_10.0.1.bb +++ b/meta-oe/recipes-graphics/kmscon/kmscon_10.0.4.bb @@ -11,7 +11,7 @@ CVE_PRODUCT = "kmscon" SECTION = "graphics" LICENSE = "MIT" -LIC_FILES_CHKSUM = "file://COPYING;md5=6d4602d249f8a3401040238e98367d9e" +LIC_FILES_CHKSUM = "file://COPYING;md5=e88b340bd6389ec41d4cf634a770a771" DEPENDS = "\ libtsm \ @@ -21,11 +21,11 @@ DEPENDS = "\ " SRC_URI = "git://github.com/kmscon/kmscon;protocol=https;branch=main;tag=v${PV}" -SRCREV = "c9d0e23336c6bb7645a1f5f48a4a82f1d5a589d9" +SRCREV = "68fc8e1b2601e816e3a4ef95e3d8e700677509b9" SRC_URI += " \ - file://0001-terminal-open-the-pty-only-once-a-display-is-attached.patch \ - file://0002-uterm_monitor-treat-platform-display-controllers-as-primary-GPUs.patch \ + file://0001-uterm-treat-platform-display-controllers-as-primary-GPUs.patch \ + file://0002-vt_libseat-Fix-build-error-due-to-logging-changes.patch \ " inherit meson pkgconfig systemd