summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--meta-agl-bsp/conf/include/agl_qemuarm.inc2
-rw-r--r--meta-agl-bsp/conf/include/agl_qemuarm64.inc2
-rw-r--r--meta-agl-bsp/conf/include/agl_rcar-nogfx.inc10
-rw-r--r--meta-agl-bsp/conf/include/agl_rk3588.inc12
-rw-r--r--meta-agl-bsp/conf/include/agl_visionfive2.inc1
-rw-r--r--meta-agl-bsp/conf/machine/include/virtio.inc3
-rw-r--r--meta-agl-bsp/meta-freescale-layer/recipes-graphics/wayland/weston_12.0.3.imx.bbappend (renamed from meta-agl-bsp/meta-freescale-layer/recipes-graphics/wayland/weston_11.0.3.imx.bbappend)0
-rw-r--r--meta-agl-bsp/meta-python/recipes-devtools/python/python3-grpcio/0001-PR-1644-unscaledcycleclock-remove-RISC-V-support.patch82
-rw-r--r--meta-agl-bsp/meta-python/recipes-devtools/python/python3-grpcio_1.62.%.bbappend3
l---------meta-agl-bsp/meta-rcar-gen3-adas/cogent-symlinks/recipes-bsp/ti-bt1
-rw-r--r--meta-agl-bsp/meta-rcar-gen3-adas/conf/include/rcar-gen3-adas.inc4
-rw-r--r--meta-agl-bsp/meta-rcar-gen3-adas/recipes-bsp/si-tools/si-tools.bbappend24
-rw-r--r--meta-agl-bsp/meta-rcar-gen3-adas/recipes-bsp/ti-bt-firmware/ti-bt-firmware_git.bbappend6
-rw-r--r--meta-agl-bsp/meta-rcar-gen3-adas/recipes-bsp/ti-bt/ti-bt/ti-uim.service10
-rw-r--r--meta-agl-bsp/meta-rcar-gen3-adas/recipes-bsp/ti-bt/ti-bt_%.bbappend18
-rw-r--r--meta-agl-bsp/meta-rockchip/recipes-bsp/alsa-state/alsa-state.bbappend3
-rw-r--r--meta-agl-bsp/meta-rockchip/recipes-bsp/alsa-state/alsa-state/asound.state659
-rw-r--r--meta-agl-bsp/meta-rockchip/recipes-graphics/wayland/agl-compositor-init.bbappend7
-rw-r--r--meta-agl-bsp/meta-rockchip/recipes-graphics/wayland/agl-compositor-init/agl-compositor-rockchip.conf2
-rw-r--r--meta-agl-bsp/meta-rockchip/recipes-graphics/wayland/weston-ini-conf.bbappend7
-rw-r--r--meta-agl-bsp/meta-rockchip/recipes-graphics/wayland/weston-ini-conf/nanopct6_output.cfg7
-rw-r--r--meta-agl-bsp/openembedded-layer/recipes-devtools/abseil-cpp/abseil-cpp/0001-PR-1644-unscaledcycleclock-remove-RISC-V-support.patch82
-rw-r--r--meta-agl-bsp/openembedded-layer/recipes-devtools/abseil-cpp/abseil-cpp_20240116.2.bbappend3
-rw-r--r--meta-agl-bsp/virtualization-layer/recipes-extended/xen/files/0001-XEN-on-RPi4-1GB-lmitation-workaround-XEN-tries-to-al.patch28
-rw-r--r--meta-agl-bsp/virtualization-layer/recipes-extended/xen/xen-mkimage-rpi4.bb29
-rw-r--r--meta-agl-bsp/virtualization-layer/recipes-extended/xen/xen-tools_git.bbappend11
-rw-r--r--meta-agl-bsp/virtualization-layer/recipes-extended/xen/xen_git.bbappend18
-rw-r--r--meta-agl-bsp/virtualization-layer/recipes-graphics/mesa/mesa/0001-virgl-virgl_driinfo.h.in-Disable-by-default-emulated.patch36
-rw-r--r--meta-agl-bsp/virtualization-layer/recipes-graphics/mesa/mesa_24.%.bbappend3
-rw-r--r--meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto-dev.bbappend10
-rw-r--r--meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-aarch64-standard.scc13
-rw-r--r--meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto_6.6.bbappend21
-rw-r--r--meta-agl-core/conf/distro/poky-agl.conf10
-rw-r--r--meta-agl-core/recipes-core/systemd/systemd_aglcore.inc5
-rw-r--r--meta-agl-core/recipes-graphics/wayland/agl-compositor_git.bb2
-rw-r--r--meta-agl-core/recipes-graphics/wayland/weston/0001-backend-drm-don-t-leak-gem_handle_refcnt-in-drm_dest.patch27
-rw-r--r--meta-agl-core/recipes-graphics/wayland/weston/0001-libweston-Add-paint-node-destruction-into-weston_lay.patch60
-rw-r--r--meta-agl-core/recipes-graphics/wayland/weston/0002-backend-drm-always-create-gem_handle_refcnt-hash-tab.patch56
-rw-r--r--meta-agl-core/recipes-graphics/wayland/weston_13.0_aglcore.inc3
-rw-r--r--meta-agl-core/recipes-kernel/linux/linux-agl-config-virtio.inc8
-rw-r--r--meta-agl-core/recipes-kernel/linux/linux-agl-config.inc4
-rw-r--r--meta-agl-core/recipes-kernel/linux/linux-agl.inc3
-rw-r--r--meta-agl-core/recipes-kernel/linux/linux/virtio-aarch64.cfg29
-rw-r--r--meta-agl-core/recipes-kernel/linux/linux/virtio-drm.cfg (renamed from meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-drm.cfg)0
-rw-r--r--meta-agl-core/recipes-kernel/linux/linux/virtio-pci.cfg (renamed from meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-pci.cfg)0
-rw-r--r--meta-agl-core/recipes-kernel/linux/linux/virtio-scmi.cfg25
-rw-r--r--meta-agl-core/recipes-multimedia/gstreamer1.0-plugins-bad/files/rcar-gen3/0001-Added-appid-and-title-support.patch166
-rw-r--r--meta-agl-flutter/conf/include/agl-flutter.inc2
-rw-r--r--meta-agl-flutter/dynamic-layers/flutter-apps-layer/recipes-graphics/flutter-apps/first-party/flutter-gallery/flutter-gallery.service13
-rw-r--r--meta-agl-flutter/dynamic-layers/flutter-apps-layer/recipes-graphics/flutter-apps/first-party/flutter-gallery_aglflutter.inc13
-rw-r--r--meta-agl-flutter/dynamic-layers/flutter-apps-layer/recipes-graphics/flutter-apps/first-party/flutter-samples-material-3-demo/flutter-samples-material-3-demo.service13
-rw-r--r--meta-agl-flutter/dynamic-layers/flutter-apps-layer/recipes-graphics/flutter-apps/first-party/flutter-samples-material-3-demo/flutter-samples-material-3-demo.toml5
-rw-r--r--meta-agl-flutter/dynamic-layers/flutter-apps-layer/recipes-graphics/flutter-apps/first-party/flutter-samples-material-3-demo_%.bbappend (renamed from meta-agl-flutter/dynamic-layers/flutter-apps-layer/recipes-graphics/flutter-apps/first-party/flutter-gallery_%.bbappend)2
-rw-r--r--meta-agl-flutter/dynamic-layers/flutter-apps-layer/recipes-graphics/flutter-apps/first-party/flutter-samples-material-3-demo_aglflutter.inc22
-rw-r--r--meta-agl-flutter/recipes-graphics/toyota/files/0001-backend-wayland_egl-Add-a-fallback-eglConfig.patch88
-rw-r--r--meta-agl-flutter/recipes-graphics/toyota/files/0001-flutter_desktop-Remove-asio-post-call.patch94
-rw-r--r--meta-agl-flutter/recipes-graphics/toyota/flutter-auto_aglflutter.inc9
-rw-r--r--meta-agl-flutter/recipes-platform/images/agl-image-flutter-debug.bb2
-rw-r--r--meta-agl-flutter/recipes-platform/images/agl-image-flutter.bb2
-rw-r--r--meta-agl-flutter/tools/configs/_globals.json4
-rw-r--r--meta-agl-flutter/tools/configs/_repos.json7
-rw-r--r--meta-agl-flutter/tools/configs/agl-qemu-master.json14
-rw-r--r--meta-agl-flutter/tools/configs/agl-qemu-octopus.json14
-rw-r--r--meta-agl-flutter/tools/configs/agl-qemu-ricefish-18.0.0.json112
-rw-r--r--meta-agl-flutter/tools/configs/agl-qemu-ricefish-18.0.1.json112
-rw-r--r--meta-agl-flutter/tools/configs/desktop-auto.json27
-rw-r--r--meta-netboot/recipes-core/initramfs-netboot/files/init.sh11
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/00-functions.lua27
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/20-AGL-log.conf5
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/20-AGL-profiles.conf29
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/30-AGL-alsa.conf111
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/30-AGL-bluetooth.conf41
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/50-AGL-pw-ic-ipc.conf15
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/bluetooth.conf74
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/bluetooth.lua.d/30-bluez-monitor.lua110
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/host.lua.d/30-alsa-monitor.lua151
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/host.lua.d/30-v4l2-monitor.lua48
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/host.lua.d/40-device-defaults.lua26
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/host.lua.d/90-enable-all.lua20
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/wireplumber.conf115
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl_git.bb35
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber-policy-config-agl/00-functions.lua27
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber-policy-config-agl/50-AGL-equalizer.conf75
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber-policy-config-agl/50-AGL-media-role-nodes.conf184
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber-policy-config-agl/policy.conf73
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber-policy-config-agl/policy.lua.d/10-default-policy.lua137
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber-policy-config-agl_git.bb16
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber_%.bbappend9
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber_0.5.6.bb138
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber_git.bb85
-rw-r--r--templates/feature/agl-flutter/50_bblayers.conf.inc3
-rw-r--r--templates/feature/agl-pipewire/50_bblayers.conf.inc10
-rw-r--r--templates/machine/nanopc-t6/50_bblayers.conf.inc4
-rw-r--r--templates/machine/nanopc-t6/50_local.conf.inc3
-rw-r--r--templates/machine/nanopc-t6/README_machine_nanopc-t6.md9
-rw-r--r--templates/machine/visionfive2/50_bblayers.conf.inc2
-rw-r--r--templates/machine/visionfive2/50_local.conf.inc4
97 files changed, 2193 insertions, 1474 deletions
diff --git a/meta-agl-bsp/conf/include/agl_qemuarm.inc b/meta-agl-bsp/conf/include/agl_qemuarm.inc
index 2449e1800..8a41757ef 100644
--- a/meta-agl-bsp/conf/include/agl_qemuarm.inc
+++ b/meta-agl-bsp/conf/include/agl_qemuarm.inc
@@ -16,5 +16,5 @@ QB_MEM:qemuarm = "-m 2048"
# Changes to make runqemu work out-of-the-box
QB_AUDIO_DRV:qemuarm := "alsa"
QB_MACHINE:qemuarm := "-machine virt-2.11 -smp 4"
-QB_OPT_APPEND:qemuarm := "-show-cursor -device VGA,vgamem_mb=64,edid=on -device qemu-xhci -device usb-tablet -device usb-kbd -object rng-random,filename=/dev/urandom,id=rng0 -device virtio-rng-pci,rng=rng0"
+QB_OPT_APPEND:qemuarm := "-device VGA,vgamem_mb=64,edid=on -device qemu-xhci -device usb-tablet -device usb-kbd"
QB_KERNEL_CMDLINE_APPEND:qemuarm := "console=ttyAMA0 verbose vmalloc=256M"
diff --git a/meta-agl-bsp/conf/include/agl_qemuarm64.inc b/meta-agl-bsp/conf/include/agl_qemuarm64.inc
index 46d3b4c39..8e292c50b 100644
--- a/meta-agl-bsp/conf/include/agl_qemuarm64.inc
+++ b/meta-agl-bsp/conf/include/agl_qemuarm64.inc
@@ -16,5 +16,5 @@ QB_MEM:qemuarm64 = "-m 2048"
# Changes to make runqemu work out-of-the-box
QB_AUDIO_DRV:qemuarm64 := "alsa"
QB_MACHINE:qemuarm64 := "-machine virt -smp 4"
-QB_OPT_APPEND:qemuarm64 := " -show-cursor -device VGA,vgamem_mb=64,edid=on -device qemu-xhci -device usb-tablet -device usb-kbd -object rng-random,filename=/dev/urandom,id=rng0 -device virtio-rng-pci,rng=rng0"
+QB_OPT_APPEND:qemuarm64 := " -device VGA,vgamem_mb=64,edid=on -device qemu-xhci -device usb-tablet -device usb-kbd"
QB_KERNEL_CMDLINE_APPEND:qemuarm64 := "console=ttyAMA0,115200n8 verbose" \ No newline at end of file
diff --git a/meta-agl-bsp/conf/include/agl_rcar-nogfx.inc b/meta-agl-bsp/conf/include/agl_rcar-nogfx.inc
index 64e13642e..fb67fd976 100644
--- a/meta-agl-bsp/conf/include/agl_rcar-nogfx.inc
+++ b/meta-agl-bsp/conf/include/agl_rcar-nogfx.inc
@@ -58,13 +58,3 @@ BBMASK += "meta-renesas/meta-rcar-gen3/recipes-graphics/cogl/cogl-1.0_1.%.bbappe
# packagegroup bbclass is inherited. This can be removed when upstream
# is fixed to add the required PACKAGE_ARCH = "${MACHINE_ARCH}".
PACKAGE_ARCH:pn-packagegroup-multimedia-libs = "${MACHINE_ARCH}"
-
-# Mask out BSP layer gstreamer* 1.22.x bbappends for now, as the BSP
-# effectively is building 1.20.x plugins and packaging them as 1.22,
-# which breaks building various things. The whole directory is not
-# commented out because we still want the vspfilter plugin.
-# The BBMASKs need to be here instead of agl_rcar.ing since without
-# them there are issues with the gstreamer1.0-plugins-bad patches in
-# meta-agl-core not applying.
-BBMASK += "meta-renesas/meta-rcar-gen3/recipes-multimedia/gstreamer/gstreamer1.0-omx"
-BBMASK += "meta-renesas/meta-rcar-gen3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-"
diff --git a/meta-agl-bsp/conf/include/agl_rk3588.inc b/meta-agl-bsp/conf/include/agl_rk3588.inc
new file mode 100644
index 000000000..4c3f6990f
--- /dev/null
+++ b/meta-agl-bsp/conf/include/agl_rk3588.inc
@@ -0,0 +1,12 @@
+# Add for gstreamer plugins ugly
+LICENSE_FLAGS_ACCEPTED:append = " commercial"
+MACHINE_FEATURES:append:rk3588 = " multimedia"
+
+BBMASK += " \
+ meta-rockchip/recipes-multimedia/gstreamer \
+ meta-rockchip/recipes-graphics/wayland/weston_%.bbappend \
+ "
+
+MACHINE_EXTRA_RRECOMMENDS:append = " \
+ alsa-state \
+"
diff --git a/meta-agl-bsp/conf/include/agl_visionfive2.inc b/meta-agl-bsp/conf/include/agl_visionfive2.inc
new file mode 100644
index 000000000..1b4cb5339
--- /dev/null
+++ b/meta-agl-bsp/conf/include/agl_visionfive2.inc
@@ -0,0 +1 @@
+PERF:forcevariable = ""
diff --git a/meta-agl-bsp/conf/machine/include/virtio.inc b/meta-agl-bsp/conf/machine/include/virtio.inc
index 6f8a638a0..1e4875b5d 100644
--- a/meta-agl-bsp/conf/machine/include/virtio.inc
+++ b/meta-agl-bsp/conf/machine/include/virtio.inc
@@ -15,9 +15,6 @@ RDEPENDS:${KERNEL_PACKAGE_NAME}-base = ""
# Use a common kernel recipe for all VirtIO machines
PREFERRED_PROVIDER_virtual/kernel ??= "linux-yocto"
-# Use newer kernel
-PREFERRED_VERSION_linux-yocto = "5.15.%"
-
EXTRA_IMAGEDEPENDS += "qemu-native qemu-helper-native"
IMAGE_CLASSES += "qemuboot"
diff --git a/meta-agl-bsp/meta-freescale-layer/recipes-graphics/wayland/weston_11.0.3.imx.bbappend b/meta-agl-bsp/meta-freescale-layer/recipes-graphics/wayland/weston_12.0.3.imx.bbappend
index ca162e28f..ca162e28f 100644
--- a/meta-agl-bsp/meta-freescale-layer/recipes-graphics/wayland/weston_11.0.3.imx.bbappend
+++ b/meta-agl-bsp/meta-freescale-layer/recipes-graphics/wayland/weston_12.0.3.imx.bbappend
diff --git a/meta-agl-bsp/meta-python/recipes-devtools/python/python3-grpcio/0001-PR-1644-unscaledcycleclock-remove-RISC-V-support.patch b/meta-agl-bsp/meta-python/recipes-devtools/python/python3-grpcio/0001-PR-1644-unscaledcycleclock-remove-RISC-V-support.patch
deleted file mode 100644
index 82f15f88c..000000000
--- a/meta-agl-bsp/meta-python/recipes-devtools/python/python3-grpcio/0001-PR-1644-unscaledcycleclock-remove-RISC-V-support.patch
+++ /dev/null
@@ -1,82 +0,0 @@
-From 7335a36d0b5c1c597566f9aa3f458a5b6817c3b4 Mon Sep 17 00:00:00 2001
-From: aurel32 <aurelien@aurel32.net>
-Date: Fri, 22 Mar 2024 14:21:13 -0700
-Subject: [PATCH] PR #1644: unscaledcycleclock: remove RISC-V support
-
-Imported from GitHub PR https://github.com/abseil/abseil-cpp/pull/1644
-
-Starting with Linux 6.6 [1], RDCYCLE is a privileged instruction on RISC-V and can't be used directly from userland. There is a sysctl option to change that as a transition period, but it will eventually disappear.
-
-The RDTIME instruction is another less accurate alternative, however its frequency varies from board to board, and there is currently now way to get its frequency from userland [2].
-
-Therefore this patch just removes the code for unscaledcycleclock on RISC-V. Without processor specific implementation, abseil relies on std::chrono::steady_clock::now().time_since_epoch() which is basically a wrapper around clock_gettime (CLOCK_MONOTONIC), which in turns use __vdso_clock_gettime(). On RISC-V this VDSO is just a wrapper around RDTIME correctly scaled to use nanoseconds units.
-
-This fixes the testsuite on riscv64, tested on a VisionFive 2 board.
-
-[1] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=cc4c07c89aada16229084eeb93895c95b7eabaa3
-[2] https://github.com/abseil/abseil-cpp/pull/1631
-Merge 43356a2548cfde76e164d446cb69004b488c6a71 into 76f8011beabdaee872b5fde7546e02407b220cb1
-
-Merging this change closes #1644
-
-COPYBARA_INTEGRATE_REVIEW=https://github.com/abseil/abseil-cpp/pull/1644 from aurel32:rv64-no-unscaledcycleclock 43356a2548cfde76e164d446cb69004b488c6a71
-PiperOrigin-RevId: 618286262
-Change-Id: Ie4120a727e7d0bb185df6e06ea145c780ebe6652
-
-Upstream-Status: Backport [https://github.com/abseil/abseil-cpp/commit/7335a36d]
-[Adapted to apply on top of meta-oe's patch stack]
-Signed-off-by: Scott Murray <scott.murray@konsulko.com>
----
- .../absl/base/internal/unscaledcycleclock.cc | 12 ------------
- .../absl/base/internal/unscaledcycleclock_config.h | 5 ++---
- 2 files changed, 2 insertions(+), 15 deletions(-)
-
-diff --git a/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc b/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc
-index f11fecb..103b4f6 100644
---- a/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc
-+++ b/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc
-@@ -121,18 +121,6 @@ double UnscaledCycleClock::Frequency() {
- return aarch64_timer_frequency;
- }
-
--#elif defined(__riscv)
--
--int64_t UnscaledCycleClock::Now() {
-- int64_t virtual_timer_value;
-- asm volatile("rdcycle %0" : "=r"(virtual_timer_value));
-- return virtual_timer_value;
--}
--
--double UnscaledCycleClock::Frequency() {
-- return base_internal::NominalCPUFrequency();
--}
--
- #elif defined(_M_IX86) || defined(_M_X64)
-
- #pragma intrinsic(__rdtsc)
-diff --git a/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock_config.h b/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock_config.h
-index 5e232c1..83552fc 100644
---- a/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock_config.h
-+++ b/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock_config.h
-@@ -22,7 +22,6 @@
- // The following platforms have an implementation of a hardware counter.
- #if defined(__i386__) || defined(__x86_64__) || defined(__aarch64__) || \
- ((defined(__powerpc__) || defined(__ppc__)) && defined(__GLIBC__)) || \
-- defined(__riscv) || \
- defined(_M_IX86) || (defined(_M_X64) && !defined(_M_ARM64EC))
- #define ABSL_HAVE_UNSCALED_CYCLECLOCK_IMPLEMENTATION 1
- #else
-@@ -54,8 +53,8 @@
- #if ABSL_USE_UNSCALED_CYCLECLOCK
- // This macro can be used to test if UnscaledCycleClock::Frequency()
- // is NominalCPUFrequency() on a particular platform.
--#if (defined(__i386__) || defined(__x86_64__) || defined(__riscv) || \
-- defined(_M_IX86) || defined(_M_X64))
-+#if (defined(__i386__) || defined(__x86_64__) || defined(_M_IX86) || \
-+ defined(_M_X64))
- #define ABSL_INTERNAL_UNSCALED_CYCLECLOCK_FREQUENCY_IS_CPU_FREQUENCY
- #endif
- #endif
---
-2.44.0
-
diff --git a/meta-agl-bsp/meta-python/recipes-devtools/python/python3-grpcio_1.62.%.bbappend b/meta-agl-bsp/meta-python/recipes-devtools/python/python3-grpcio_1.62.%.bbappend
deleted file mode 100644
index 2bf47126f..000000000
--- a/meta-agl-bsp/meta-python/recipes-devtools/python/python3-grpcio_1.62.%.bbappend
+++ /dev/null
@@ -1,3 +0,0 @@
-FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:"
-
-SRC_URI += "file://0001-PR-1644-unscaledcycleclock-remove-RISC-V-support.patch"
diff --git a/meta-agl-bsp/meta-rcar-gen3-adas/cogent-symlinks/recipes-bsp/ti-bt b/meta-agl-bsp/meta-rcar-gen3-adas/cogent-symlinks/recipes-bsp/ti-bt
deleted file mode 120000
index 13ea60b90..000000000
--- a/meta-agl-bsp/meta-rcar-gen3-adas/cogent-symlinks/recipes-bsp/ti-bt
+++ /dev/null
@@ -1 +0,0 @@
-../../../../../bsp/meta-rcar/meta-rcar-gen3-adas/recipes-bsp/ti-bt \ No newline at end of file
diff --git a/meta-agl-bsp/meta-rcar-gen3-adas/conf/include/rcar-gen3-adas.inc b/meta-agl-bsp/meta-rcar-gen3-adas/conf/include/rcar-gen3-adas.inc
index 0c344a471..40d0ef0cb 100644
--- a/meta-agl-bsp/meta-rcar-gen3-adas/conf/include/rcar-gen3-adas.inc
+++ b/meta-agl-bsp/meta-rcar-gen3-adas/conf/include/rcar-gen3-adas.inc
@@ -6,8 +6,7 @@
# recipes.
AGL_FEATURES:append:rcar-gen3 = " kingfisher"
-IMAGE_NAME:rcar-gen3 = "${IMAGE_BASENAME}-${MACHINE}-kf${IMAGE_VERSION_SUFFIX}"
-IMAGE_LINK_NAME:rcar-gen3 = "${IMAGE_BASENAME}-${MACHINE}-kf"
+IMAGE_MACHINE_SUFFIX = "-${MACHINE}-kf"
TOOLCHAIN_OUTPUTNAME:rcar-gen3 = "${SDK_NAME}-kf-toolchain-${SDK_VERSION}"
# Radio packages
@@ -15,6 +14,5 @@ IMAGE_INSTALL:append:rcar-gen3 = " \
si-tools \
si-init \
linux-firmware-wl18xx \
- ti-bt \
ti-bt-firmware \
"
diff --git a/meta-agl-bsp/meta-rcar-gen3-adas/recipes-bsp/si-tools/si-tools.bbappend b/meta-agl-bsp/meta-rcar-gen3-adas/recipes-bsp/si-tools/si-tools.bbappend
index 7121bd168..9a5347b68 100644
--- a/meta-agl-bsp/meta-rcar-gen3-adas/recipes-bsp/si-tools/si-tools.bbappend
+++ b/meta-agl-bsp/meta-rcar-gen3-adas/recipes-bsp/si-tools/si-tools.bbappend
@@ -6,23 +6,7 @@ SRC_URI += " \
EXTRA_OEMAKE:append = " 'LDFLAGS=${LDFLAGS}'"
-do_install() {
- install -d ${D}${bindir}
- install -d ${D}${nonarch_base_libdir}/firmware/radio/
-
- install -m 755 si_ctl ${D}${bindir}
- install -m 755 si_flash ${D}${bindir}
- for file in ${SCRIPTS}; do
- install -m 755 ${S}/scripts/$file ${D}${bindir}
- sed -e 's,^\(SI_ARGS\s*=\s*\).*,\1"/dev/i2c-12 0x65",' -i ${D}${bindir}/$file
- done
-
- for file in ${FIRMWARE}; do
- install -m 644 ${S}/firmware/$file ${D}${nonarch_base_libdir}/firmware/radio/
- done
-}
-
-FILES:${PN} = " \
- ${bindir} \
- ${nonarch_base_libdir}/firmware/radio \
-"
+# Setting LDFLAGS fixes the QA issue, disable INSANE_SKIP over-ride
+# done in the recipe
+INSANE_SKIP:${PN} = ""
+INSANE_SKIP:${PN}-dev = "" \ No newline at end of file
diff --git a/meta-agl-bsp/meta-rcar-gen3-adas/recipes-bsp/ti-bt-firmware/ti-bt-firmware_git.bbappend b/meta-agl-bsp/meta-rcar-gen3-adas/recipes-bsp/ti-bt-firmware/ti-bt-firmware_git.bbappend
deleted file mode 100644
index 52bee656d..000000000
--- a/meta-agl-bsp/meta-rcar-gen3-adas/recipes-bsp/ti-bt-firmware/ti-bt-firmware_git.bbappend
+++ /dev/null
@@ -1,6 +0,0 @@
-do_install() {
- install -d ${D}${nonarch_base_libdir}/firmware/ti-connectivity/
- cp *.bts ${D}${nonarch_base_libdir}/firmware/ti-connectivity/
-}
-
-FILES:${PN} = "${nonarch_base_libdir}/firmware/ti-connectivity/*"
diff --git a/meta-agl-bsp/meta-rcar-gen3-adas/recipes-bsp/ti-bt/ti-bt/ti-uim.service b/meta-agl-bsp/meta-rcar-gen3-adas/recipes-bsp/ti-bt/ti-bt/ti-uim.service
deleted file mode 100644
index 214e60707..000000000
--- a/meta-agl-bsp/meta-rcar-gen3-adas/recipes-bsp/ti-bt/ti-bt/ti-uim.service
+++ /dev/null
@@ -1,10 +0,0 @@
-[Unit]
-Description=User Mode Init Manager for TI shared transport
-Before=bluetooth.service
-
-[Service]
-ExecStartPre=-/sbin/modprobe -q btwilink
-ExecStart=/usr/bin/uim -f /sys/devices/platform/kim
-
-[Install]
-WantedBy=multi-user.target
diff --git a/meta-agl-bsp/meta-rcar-gen3-adas/recipes-bsp/ti-bt/ti-bt_%.bbappend b/meta-agl-bsp/meta-rcar-gen3-adas/recipes-bsp/ti-bt/ti-bt_%.bbappend
deleted file mode 100644
index 55d570fc7..000000000
--- a/meta-agl-bsp/meta-rcar-gen3-adas/recipes-bsp/ti-bt/ti-bt_%.bbappend
+++ /dev/null
@@ -1,18 +0,0 @@
-inherit systemd
-
-FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
-
-SRC_URI += "file://ti-uim.service"
-
-SYSTEMD_SERVICE:${PN} = "ti-uim.service"
-
-PR = "r0"
-PV = "0.1+git${SRCPV}"
-
-do_install:append() {
- # We do not want the blacklist
- rm -f ${D}/${sysconfdir}/modprobe.d/ti_bt.conf
-
- install -d ${D}${systemd_unitdir}/system/
- install -m 0644 ${WORKDIR}/ti-uim.service ${D}${systemd_unitdir}/system
-}
diff --git a/meta-agl-bsp/meta-rockchip/recipes-bsp/alsa-state/alsa-state.bbappend b/meta-agl-bsp/meta-rockchip/recipes-bsp/alsa-state/alsa-state.bbappend
new file mode 100644
index 000000000..784560131
--- /dev/null
+++ b/meta-agl-bsp/meta-rockchip/recipes-bsp/alsa-state/alsa-state.bbappend
@@ -0,0 +1,3 @@
+FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
diff --git a/meta-agl-bsp/meta-rockchip/recipes-bsp/alsa-state/alsa-state/asound.state b/meta-agl-bsp/meta-rockchip/recipes-bsp/alsa-state/alsa-state/asound.state
new file mode 100644
index 000000000..8f20169ba
--- /dev/null
+++ b/meta-agl-bsp/meta-rockchip/recipes-bsp/alsa-state/alsa-state/asound.state
@@ -0,0 +1,659 @@
+state.realtekrt5616co {
+ control.1 {
+ iface CARD
+ name 'Headphone Jack'
+ value true
+ comment {
+ access read
+ type BOOLEAN
+ count 1
+ }
+ }
+ control.2 {
+ iface MIXER
+ name 'Receive PATH3 Source Select'
+ value 'From SDI3'
+ comment {
+ access 'read write'
+ type ENUMERATED
+ count 1
+ item.0 'From SDI0'
+ item.1 'From SDI1'
+ item.2 'From SDI2'
+ item.3 'From SDI3'
+ }
+ }
+ control.3 {
+ iface MIXER
+ name 'Receive PATH2 Source Select'
+ value 'From SDI2'
+ comment {
+ access 'read write'
+ type ENUMERATED
+ count 1
+ item.0 'From SDI0'
+ item.1 'From SDI1'
+ item.2 'From SDI2'
+ item.3 'From SDI3'
+ }
+ }
+ control.4 {
+ iface MIXER
+ name 'Receive PATH1 Source Select'
+ value 'From SDI1'
+ comment {
+ access 'read write'
+ type ENUMERATED
+ count 1
+ item.0 'From SDI0'
+ item.1 'From SDI1'
+ item.2 'From SDI2'
+ item.3 'From SDI3'
+ }
+ }
+ control.5 {
+ iface MIXER
+ name 'Receive PATH0 Source Select'
+ value 'From SDI0'
+ comment {
+ access 'read write'
+ type ENUMERATED
+ count 1
+ item.0 'From SDI0'
+ item.1 'From SDI1'
+ item.2 'From SDI2'
+ item.3 'From SDI3'
+ }
+ }
+ control.6 {
+ iface MIXER
+ name 'Transmit SDO3 Source Select'
+ value 'From PATH3'
+ comment {
+ access 'read write'
+ type ENUMERATED
+ count 1
+ item.0 'From PATH0'
+ item.1 'From PATH1'
+ item.2 'From PATH2'
+ item.3 'From PATH3'
+ }
+ }
+ control.7 {
+ iface MIXER
+ name 'Transmit SDO2 Source Select'
+ value 'From PATH2'
+ comment {
+ access 'read write'
+ type ENUMERATED
+ count 1
+ item.0 'From PATH0'
+ item.1 'From PATH1'
+ item.2 'From PATH2'
+ item.3 'From PATH3'
+ }
+ }
+ control.8 {
+ iface MIXER
+ name 'Transmit SDO1 Source Select'
+ value 'From PATH1'
+ comment {
+ access 'read write'
+ type ENUMERATED
+ count 1
+ item.0 'From PATH0'
+ item.1 'From PATH1'
+ item.2 'From PATH2'
+ item.3 'From PATH3'
+ }
+ }
+ control.9 {
+ iface MIXER
+ name 'Transmit SDO0 Source Select'
+ value 'From PATH0'
+ comment {
+ access 'read write'
+ type ENUMERATED
+ count 1
+ item.0 'From PATH0'
+ item.1 'From PATH1'
+ item.2 'From PATH2'
+ item.3 'From PATH3'
+ }
+ }
+ control.10 {
+ iface MIXER
+ name 'I2STDM Digital Loopback Mode'
+ value Disabled
+ comment {
+ access 'read write'
+ type ENUMERATED
+ count 1
+ item.0 Disabled
+ item.1 Mode1
+ item.2 Mode2
+ item.3 'Mode2 Swap'
+ }
+ }
+ control.11 {
+ iface PCM
+ name 'PCM Read Wait Time MS'
+ value 0
+ comment {
+ access 'read write'
+ type INTEGER
+ count 1
+ range '0 - 10000 (step 1)'
+ }
+ }
+ control.12 {
+ iface PCM
+ name 'PCM Write Wait Time MS'
+ value 0
+ comment {
+ access 'read write'
+ type INTEGER
+ count 1
+ range '0 - 10000 (step 1)'
+ }
+ }
+ control.13 {
+ iface MIXER
+ name 'HP Playback Switch'
+ value.0 true
+ value.1 true
+ comment {
+ access 'read write'
+ type BOOLEAN
+ count 2
+ }
+ }
+ control.14 {
+ iface MIXER
+ name 'HPVOL Playback Switch'
+ value.0 false
+ value.1 false
+ comment {
+ access 'read write'
+ type BOOLEAN
+ count 2
+ }
+ }
+ control.15 {
+ iface MIXER
+ name 'HP Playback Volume'
+ value.0 31
+ value.1 31
+ comment {
+ access 'read write'
+ type INTEGER
+ count 2
+ range '0 - 39'
+ dbmin -4650
+ dbmax 1200
+ dbvalue.0 0
+ dbvalue.1 0
+ }
+ }
+ control.16 {
+ iface MIXER
+ name 'OUT Playback Switch'
+ value.0 false
+ value.1 false
+ comment {
+ access 'read write'
+ type BOOLEAN
+ count 2
+ }
+ }
+ control.17 {
+ iface MIXER
+ name 'OUT Channel Switch'
+ value.0 false
+ value.1 false
+ comment {
+ access 'read write'
+ type BOOLEAN
+ count 2
+ }
+ }
+ control.18 {
+ iface MIXER
+ name 'OUT Playback Volume'
+ value.0 31
+ value.1 31
+ comment {
+ access 'read write'
+ type INTEGER
+ count 2
+ range '0 - 39'
+ dbmin -4650
+ dbmax 1200
+ dbvalue.0 0
+ dbvalue.1 0
+ }
+ }
+ control.19 {
+ iface MIXER
+ name 'DAC1 Playback Volume'
+ value.0 175
+ value.1 175
+ comment {
+ access 'read write'
+ type INTEGER
+ count 2
+ range '0 - 175'
+ dbmin -65625
+ dbmax 0
+ dbvalue.0 0
+ dbvalue.1 0
+ }
+ }
+ control.20 {
+ iface MIXER
+ name 'IN1 Boost Volume'
+ value 0
+ comment {
+ access 'read write'
+ type INTEGER
+ count 1
+ range '0 - 8'
+ dbmin 0
+ dbmax 5200
+ dbvalue.0 0
+ }
+ }
+ control.21 {
+ iface MIXER
+ name 'IN2 Boost Volume'
+ value 0
+ comment {
+ access 'read write'
+ type INTEGER
+ count 1
+ range '0 - 8'
+ dbmin 0
+ dbmax 5200
+ dbvalue.0 0
+ }
+ }
+ control.22 {
+ iface MIXER
+ name 'IN Capture Volume'
+ value.0 23
+ value.1 23
+ comment {
+ access 'read write'
+ type INTEGER
+ count 2
+ range '0 - 31'
+ dbmin -3450
+ dbmax 1200
+ dbvalue.0 0
+ dbvalue.1 0
+ }
+ }
+ control.23 {
+ iface MIXER
+ name 'ADC Capture Switch'
+ value.0 true
+ value.1 true
+ comment {
+ access 'read write'
+ type BOOLEAN
+ count 2
+ }
+ }
+ control.24 {
+ iface MIXER
+ name 'ADC Capture Volume'
+ value.0 47
+ value.1 47
+ comment {
+ access 'read write'
+ type INTEGER
+ count 2
+ range '0 - 127'
+ dbmin -17625
+ dbmax 30000
+ dbvalue.0 0
+ dbvalue.1 0
+ }
+ }
+ control.25 {
+ iface MIXER
+ name 'ADC Boost Volume'
+ value.0 0
+ value.1 0
+ comment {
+ access 'read write'
+ type INTEGER
+ count 2
+ range '0 - 3'
+ dbmin 0
+ dbmax 3600
+ dbvalue.0 0
+ dbvalue.1 0
+ }
+ }
+ control.26 {
+ iface MIXER
+ name 'RECMIXL INL1 Switch'
+ value false
+ comment {
+ access 'read write'
+ type BOOLEAN
+ count 1
+ }
+ }
+ control.27 {
+ iface MIXER
+ name 'RECMIXL BST2 Switch'
+ value false
+ comment {
+ access 'read write'
+ type BOOLEAN
+ count 1
+ }
+ }
+ control.28 {
+ iface MIXER
+ name 'RECMIXL BST1 Switch'
+ value false
+ comment {
+ access 'read write'
+ type BOOLEAN
+ count 1
+ }
+ }
+ control.29 {
+ iface MIXER
+ name 'RECMIXR INR1 Switch'
+ value false
+ comment {
+ access 'read write'
+ type BOOLEAN
+ count 1
+ }
+ }
+ control.30 {
+ iface MIXER
+ name 'RECMIXR BST2 Switch'
+ value false
+ comment {
+ access 'read write'
+ type BOOLEAN
+ count 1
+ }
+ }
+ control.31 {
+ iface MIXER
+ name 'RECMIXR BST1 Switch'
+ value false
+ comment {
+ access 'read write'
+ type BOOLEAN
+ count 1
+ }
+ }
+ control.32 {
+ iface MIXER
+ name 'Stereo1 ADC MIXL ADC1 Switch'
+ value false
+ comment {
+ access 'read write'
+ type BOOLEAN
+ count 1
+ }
+ }
+ control.33 {
+ iface MIXER
+ name 'Stereo1 ADC MIXR ADC1 Switch'
+ value false
+ comment {
+ access 'read write'
+ type BOOLEAN
+ count 1
+ }
+ }
+ control.34 {
+ iface MIXER
+ name 'DAC MIXL Stereo ADC Switch'
+ value false
+ comment {
+ access 'read write'
+ type BOOLEAN
+ count 1
+ }
+ }
+ control.35 {
+ iface MIXER
+ name 'DAC MIXL INF1 Switch'
+ value true
+ comment {
+ access 'read write'
+ type BOOLEAN
+ count 1
+ }
+ }
+ control.36 {
+ iface MIXER
+ name 'DAC MIXR Stereo ADC Switch'
+ value false
+ comment {
+ access 'read write'
+ type BOOLEAN
+ count 1
+ }
+ }
+ control.37 {
+ iface MIXER
+ name 'DAC MIXR INF1 Switch'
+ value true
+ comment {
+ access 'read write'
+ type BOOLEAN
+ count 1
+ }
+ }
+ control.38 {
+ iface MIXER
+ name 'Stereo DAC MIXL DAC L1 Switch'
+ value true
+ comment {
+ access 'read write'
+ type BOOLEAN
+ count 1
+ }
+ }
+ control.39 {
+ iface MIXER
+ name 'Stereo DAC MIXL DAC R1 Switch'
+ value true
+ comment {
+ access 'read write'
+ type BOOLEAN
+ count 1
+ }
+ }
+ control.40 {
+ iface MIXER
+ name 'Stereo DAC MIXR DAC R1 Switch'
+ value true
+ comment {
+ access 'read write'
+ type BOOLEAN
+ count 1
+ }
+ }
+ control.41 {
+ iface MIXER
+ name 'Stereo DAC MIXR DAC L1 Switch'
+ value true
+ comment {
+ access 'read write'
+ type BOOLEAN
+ count 1
+ }
+ }
+ control.42 {
+ iface MIXER
+ name 'OUT MIXL BST1 Switch'
+ value false
+ comment {
+ access 'read write'
+ type BOOLEAN
+ count 1
+ }
+ }
+ control.43 {
+ iface MIXER
+ name 'OUT MIXL BST2 Switch'
+ value false
+ comment {
+ access 'read write'
+ type BOOLEAN
+ count 1
+ }
+ }
+ control.44 {
+ iface MIXER
+ name 'OUT MIXL INL1 Switch'
+ value false
+ comment {
+ access 'read write'
+ type BOOLEAN
+ count 1
+ }
+ }
+ control.45 {
+ iface MIXER
+ name 'OUT MIXL REC MIXL Switch'
+ value false
+ comment {
+ access 'read write'
+ type BOOLEAN
+ count 1
+ }
+ }
+ control.46 {
+ iface MIXER
+ name 'OUT MIXL DAC L1 Switch'
+ value false
+ comment {
+ access 'read write'
+ type BOOLEAN
+ count 1
+ }
+ }
+ control.47 {
+ iface MIXER
+ name 'OUT MIXR BST2 Switch'
+ value false
+ comment {
+ access 'read write'
+ type BOOLEAN
+ count 1
+ }
+ }
+ control.48 {
+ iface MIXER
+ name 'OUT MIXR BST1 Switch'
+ value false
+ comment {
+ access 'read write'
+ type BOOLEAN
+ count 1
+ }
+ }
+ control.49 {
+ iface MIXER
+ name 'OUT MIXR INR1 Switch'
+ value false
+ comment {
+ access 'read write'
+ type BOOLEAN
+ count 1
+ }
+ }
+ control.50 {
+ iface MIXER
+ name 'OUT MIXR REC MIXR Switch'
+ value false
+ comment {
+ access 'read write'
+ type BOOLEAN
+ count 1
+ }
+ }
+ control.51 {
+ iface MIXER
+ name 'OUT MIXR DAC R1 Switch'
+ value false
+ comment {
+ access 'read write'
+ type BOOLEAN
+ count 1
+ }
+ }
+ control.52 {
+ iface MIXER
+ name 'HPO MIX DAC1 Switch'
+ value true
+ comment {
+ access 'read write'
+ type BOOLEAN
+ count 1
+ }
+ }
+ control.53 {
+ iface MIXER
+ name 'HPO MIX HPVOL Switch'
+ value false
+ comment {
+ access 'read write'
+ type BOOLEAN
+ count 1
+ }
+ }
+ control.54 {
+ iface MIXER
+ name 'LOUT MIX DAC L1 Switch'
+ value false
+ comment {
+ access 'read write'
+ type BOOLEAN
+ count 1
+ }
+ }
+ control.55 {
+ iface MIXER
+ name 'LOUT MIX DAC R1 Switch'
+ value false
+ comment {
+ access 'read write'
+ type BOOLEAN
+ count 1
+ }
+ }
+ control.56 {
+ iface MIXER
+ name 'LOUT MIX OUTVOL L Switch'
+ value false
+ comment {
+ access 'read write'
+ type BOOLEAN
+ count 1
+ }
+ }
+ control.57 {
+ iface MIXER
+ name 'LOUT MIX OUTVOL R Switch'
+ value false
+ comment {
+ access 'read write'
+ type BOOLEAN
+ count 1
+ }
+ }
+}
diff --git a/meta-agl-bsp/meta-rockchip/recipes-graphics/wayland/agl-compositor-init.bbappend b/meta-agl-bsp/meta-rockchip/recipes-graphics/wayland/agl-compositor-init.bbappend
new file mode 100644
index 000000000..ab14bdbc2
--- /dev/null
+++ b/meta-agl-bsp/meta-rockchip/recipes-graphics/wayland/agl-compositor-init.bbappend
@@ -0,0 +1,7 @@
+FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
+
+SRC_URI:append = " file://agl-compositor-rockchip.conf "
+
+do_install:append() {
+ install -m644 ${WORKDIR}/agl-compositor-rockchip.conf ${D}/${systemd_system_unitdir}/agl-compositor.service.d/agl-compositor-rockchip.conf
+}
diff --git a/meta-agl-bsp/meta-rockchip/recipes-graphics/wayland/agl-compositor-init/agl-compositor-rockchip.conf b/meta-agl-bsp/meta-rockchip/recipes-graphics/wayland/agl-compositor-init/agl-compositor-rockchip.conf
new file mode 100644
index 000000000..e85d7fa91
--- /dev/null
+++ b/meta-agl-bsp/meta-rockchip/recipes-graphics/wayland/agl-compositor-init/agl-compositor-rockchip.conf
@@ -0,0 +1,2 @@
+[Service]
+Environment=LD_PRELOAD=/usr/lib/libmali.so.1
diff --git a/meta-agl-bsp/meta-rockchip/recipes-graphics/wayland/weston-ini-conf.bbappend b/meta-agl-bsp/meta-rockchip/recipes-graphics/wayland/weston-ini-conf.bbappend
new file mode 100644
index 000000000..a7bebe3fc
--- /dev/null
+++ b/meta-agl-bsp/meta-rockchip/recipes-graphics/wayland/weston-ini-conf.bbappend
@@ -0,0 +1,7 @@
+FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
+
+SRC_URI:append = " \
+ file://nanopct6_output.cfg \
+"
+
+WESTON_FRAGMENTS:append:nanopct6 = " nanopct6_output"
diff --git a/meta-agl-bsp/meta-rockchip/recipes-graphics/wayland/weston-ini-conf/nanopct6_output.cfg b/meta-agl-bsp/meta-rockchip/recipes-graphics/wayland/weston-ini-conf/nanopct6_output.cfg
new file mode 100644
index 000000000..fbee86693
--- /dev/null
+++ b/meta-agl-bsp/meta-rockchip/recipes-graphics/wayland/weston-ini-conf/nanopct6_output.cfg
@@ -0,0 +1,7 @@
+[output]
+name=HDMI-A-2
+mode=off
+
+[output]
+name=DP-1
+transform=rotate-90
diff --git a/meta-agl-bsp/openembedded-layer/recipes-devtools/abseil-cpp/abseil-cpp/0001-PR-1644-unscaledcycleclock-remove-RISC-V-support.patch b/meta-agl-bsp/openembedded-layer/recipes-devtools/abseil-cpp/abseil-cpp/0001-PR-1644-unscaledcycleclock-remove-RISC-V-support.patch
deleted file mode 100644
index 461df7a60..000000000
--- a/meta-agl-bsp/openembedded-layer/recipes-devtools/abseil-cpp/abseil-cpp/0001-PR-1644-unscaledcycleclock-remove-RISC-V-support.patch
+++ /dev/null
@@ -1,82 +0,0 @@
-From 7335a36d0b5c1c597566f9aa3f458a5b6817c3b4 Mon Sep 17 00:00:00 2001
-From: aurel32 <aurelien@aurel32.net>
-Date: Fri, 22 Mar 2024 14:21:13 -0700
-Subject: [PATCH] PR #1644: unscaledcycleclock: remove RISC-V support
-
-Imported from GitHub PR https://github.com/abseil/abseil-cpp/pull/1644
-
-Starting with Linux 6.6 [1], RDCYCLE is a privileged instruction on RISC-V and can't be used directly from userland. There is a sysctl option to change that as a transition period, but it will eventually disappear.
-
-The RDTIME instruction is another less accurate alternative, however its frequency varies from board to board, and there is currently now way to get its frequency from userland [2].
-
-Therefore this patch just removes the code for unscaledcycleclock on RISC-V. Without processor specific implementation, abseil relies on std::chrono::steady_clock::now().time_since_epoch() which is basically a wrapper around clock_gettime (CLOCK_MONOTONIC), which in turns use __vdso_clock_gettime(). On RISC-V this VDSO is just a wrapper around RDTIME correctly scaled to use nanoseconds units.
-
-This fixes the testsuite on riscv64, tested on a VisionFive 2 board.
-
-[1] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=cc4c07c89aada16229084eeb93895c95b7eabaa3
-[2] https://github.com/abseil/abseil-cpp/pull/1631
-Merge 43356a2548cfde76e164d446cb69004b488c6a71 into 76f8011beabdaee872b5fde7546e02407b220cb1
-
-Merging this change closes #1644
-
-COPYBARA_INTEGRATE_REVIEW=https://github.com/abseil/abseil-cpp/pull/1644 from aurel32:rv64-no-unscaledcycleclock 43356a2548cfde76e164d446cb69004b488c6a71
-PiperOrigin-RevId: 618286262
-Change-Id: Ie4120a727e7d0bb185df6e06ea145c780ebe6652
-
-Upstream-Status: Backport [https://github.com/abseil/abseil-cpp/commit/7335a36d]
-[Adapted to apply on top of meta-oe's patch stack]
-Signed-off-by: Scott Murray <scott.murray@konsulko.com>
----
- absl/base/internal/unscaledcycleclock.cc | 12 ------------
- absl/base/internal/unscaledcycleclock_config.h | 5 ++---
- 2 files changed, 2 insertions(+), 15 deletions(-)
-
-diff --git a/absl/base/internal/unscaledcycleclock.cc b/absl/base/internal/unscaledcycleclock.cc
-index f11fecb3..103b4f6a 100644
---- a/absl/base/internal/unscaledcycleclock.cc
-+++ b/absl/base/internal/unscaledcycleclock.cc
-@@ -121,18 +121,6 @@ double UnscaledCycleClock::Frequency() {
- return aarch64_timer_frequency;
- }
-
--#elif defined(__riscv)
--
--int64_t UnscaledCycleClock::Now() {
-- int64_t virtual_timer_value;
-- asm volatile("rdcycle %0" : "=r"(virtual_timer_value));
-- return virtual_timer_value;
--}
--
--double UnscaledCycleClock::Frequency() {
-- return base_internal::NominalCPUFrequency();
--}
--
- #elif defined(_M_IX86) || defined(_M_X64)
-
- #pragma intrinsic(__rdtsc)
-diff --git a/absl/base/internal/unscaledcycleclock_config.h b/absl/base/internal/unscaledcycleclock_config.h
-index 5e232c1a..83552fc5 100644
---- a/absl/base/internal/unscaledcycleclock_config.h
-+++ b/absl/base/internal/unscaledcycleclock_config.h
-@@ -22,7 +22,6 @@
- // The following platforms have an implementation of a hardware counter.
- #if defined(__i386__) || defined(__x86_64__) || defined(__aarch64__) || \
- ((defined(__powerpc__) || defined(__ppc__)) && defined(__GLIBC__)) || \
-- defined(__riscv) || \
- defined(_M_IX86) || (defined(_M_X64) && !defined(_M_ARM64EC))
- #define ABSL_HAVE_UNSCALED_CYCLECLOCK_IMPLEMENTATION 1
- #else
-@@ -54,8 +53,8 @@
- #if ABSL_USE_UNSCALED_CYCLECLOCK
- // This macro can be used to test if UnscaledCycleClock::Frequency()
- // is NominalCPUFrequency() on a particular platform.
--#if (defined(__i386__) || defined(__x86_64__) || defined(__riscv) || \
-- defined(_M_IX86) || defined(_M_X64))
-+#if (defined(__i386__) || defined(__x86_64__) || defined(_M_IX86) || \
-+ defined(_M_X64))
- #define ABSL_INTERNAL_UNSCALED_CYCLECLOCK_FREQUENCY_IS_CPU_FREQUENCY
- #endif
- #endif
---
-2.44.0
-
diff --git a/meta-agl-bsp/openembedded-layer/recipes-devtools/abseil-cpp/abseil-cpp_20240116.2.bbappend b/meta-agl-bsp/openembedded-layer/recipes-devtools/abseil-cpp/abseil-cpp_20240116.2.bbappend
deleted file mode 100644
index 2bf47126f..000000000
--- a/meta-agl-bsp/openembedded-layer/recipes-devtools/abseil-cpp/abseil-cpp_20240116.2.bbappend
+++ /dev/null
@@ -1,3 +0,0 @@
-FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:"
-
-SRC_URI += "file://0001-PR-1644-unscaledcycleclock-remove-RISC-V-support.patch"
diff --git a/meta-agl-bsp/virtualization-layer/recipes-extended/xen/files/0001-XEN-on-RPi4-1GB-lmitation-workaround-XEN-tries-to-al.patch b/meta-agl-bsp/virtualization-layer/recipes-extended/xen/files/0001-XEN-on-RPi4-1GB-lmitation-workaround-XEN-tries-to-al.patch
deleted file mode 100644
index d83c65257..000000000
--- a/meta-agl-bsp/virtualization-layer/recipes-extended/xen/files/0001-XEN-on-RPi4-1GB-lmitation-workaround-XEN-tries-to-al.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From 2701d65271686dff0cb39ab7da1e821f5dede61e Mon Sep 17 00:00:00 2001
-From: Leonid Lazarev <leonid.lazarev@mera.com>
-Date: Tue, 21 Apr 2020 17:28:16 +0300
-Subject: [PATCH] XEN on RPi4 1GB lmitation workaround: XEN tries to allocated
- the memopry for dom0 within first 4GB, but for some reason raspberry pi only
- allows to load kernel from 1st GB. Push XEN to allocate first bank for dom0
- from 1st GB
-
----
- xen/arch/arm/domain_build.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c
-index dd9c3b73ba..8501a8c8aa 100644
---- a/xen/arch/arm/domain_build.c
-+++ b/xen/arch/arm/domain_build.c
-@@ -281,7 +281,7 @@ static void __init allocate_memory_11(struct domain *d,
- */
- while ( order >= min_low_order )
- {
-- for ( bits = order ; bits <= (lowmem ? 32 : PADDR_BITS); bits++ )
-+ for ( bits = order ; bits <= (lowmem ? 30 : PADDR_BITS); bits++ )
- {
- pg = alloc_domheap_pages(d, order, MEMF_bits(bits));
- if ( pg != NULL )
---
-2.17.1
-
diff --git a/meta-agl-bsp/virtualization-layer/recipes-extended/xen/xen-mkimage-rpi4.bb b/meta-agl-bsp/virtualization-layer/recipes-extended/xen/xen-mkimage-rpi4.bb
deleted file mode 100644
index b857cb19f..000000000
--- a/meta-agl-bsp/virtualization-layer/recipes-extended/xen/xen-mkimage-rpi4.bb
+++ /dev/null
@@ -1,29 +0,0 @@
-DESCRIPTION = "Xen hypervisor u-boot image"
-LICENSE = "GPL-2.0-only"
-SECTION = "console/tools"
-
-LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/GPL-2.0;md5=801f80980d171dd6425610833a22dbe6"
-
-
-
-ALLOW_EMPTY:${PN} = "1"
-FILES:${PN} = ""
-S = "${WORKDIR}"
-
-DEPENDS = "u-boot-mkimage-native "
-
-# Only for aarch64
-COMPATIBLE_MACHINE = "(-)"
-COMPATIBLE_MACHINE:aarch64 = "(.*)"
-
-PACKAGE_ARCH = "${MACHINE_ARCH}"
-
-do_configure[noexec] = "1"
-do_deploy[noexec] = "1"
-
-do_compile[depends] += "xen:do_deploy"
-
-# Uboot compatible image
-do_compile () {
- uboot-mkimage -A arm64 -C none -T kernel -a 0x48080000 -e 0x48080000 -n "XEN" -d ${DEPLOY_DIR_IMAGE}/xen-${MACHINE} ${DEPLOY_DIR_IMAGE}/xen-${MACHINE}.uImage
-}
diff --git a/meta-agl-bsp/virtualization-layer/recipes-extended/xen/xen-tools_git.bbappend b/meta-agl-bsp/virtualization-layer/recipes-extended/xen/xen-tools_git.bbappend
deleted file mode 100644
index a67200618..000000000
--- a/meta-agl-bsp/virtualization-layer/recipes-extended/xen/xen-tools_git.bbappend
+++ /dev/null
@@ -1,11 +0,0 @@
-
-# make the package specific to the machine for now
-PACKAGE_ARCH = "${MACHINE_ARCH}"
-
-# rpi4
-LIC_FILES_CHKSUM:raspberrypi4 = "file://COPYING;md5=4295d895d4b5ce9d070263d52f030e49"
-XEN_REL:raspberrypi4 = "4.13"
-SRCREV:raspberrypi4 = "721f2c323ca55c77857c93e7275b4a93a0e15e1f"
-SRC_URI:raspberrypi4 = " \
- git://xenbits.xen.org/xen.git;branch=${XEN_BRANCH} \
- "
diff --git a/meta-agl-bsp/virtualization-layer/recipes-extended/xen/xen_git.bbappend b/meta-agl-bsp/virtualization-layer/recipes-extended/xen/xen_git.bbappend
deleted file mode 100644
index 2d63e1841..000000000
--- a/meta-agl-bsp/virtualization-layer/recipes-extended/xen/xen_git.bbappend
+++ /dev/null
@@ -1,18 +0,0 @@
-FILESEXTRAPATHS:prepend := "${THISDIR}/files:"
-
-# make the package machine-specific
-PACKAGE_ARCH = "${MACHINE_ARCH}"
-
-# rpi4 specifics
-LIC_FILES_CHKSUM:raspberrypi4 = "file://COPYING;md5=4295d895d4b5ce9d070263d52f030e49"
-XEN_REL:raspberrypi4 = "4.13"
-
-SRCREV:raspberrypi4 = "721f2c323ca55c77857c93e7275b4a93a0e15e1f"
-SRC_URI:append:raspberrypi4 = " file://0001-XEN-on-RPi4-1GB-lmitation-workaround-XEN-tries-to-al.patch"
-
-#due to incorrect xen binary preparation in external library, we add additional deploy
-do_deploy:append:raspberrypi4() {
- if [ -f ${B}/xen/xen ]; then
- install -m 0644 ${B}/xen/xen ${DEPLOYDIR}/xen-${MACHINE}
- fi
-}
diff --git a/meta-agl-bsp/virtualization-layer/recipes-graphics/mesa/mesa/0001-virgl-virgl_driinfo.h.in-Disable-by-default-emulated.patch b/meta-agl-bsp/virtualization-layer/recipes-graphics/mesa/mesa/0001-virgl-virgl_driinfo.h.in-Disable-by-default-emulated.patch
deleted file mode 100644
index d27696056..000000000
--- a/meta-agl-bsp/virtualization-layer/recipes-graphics/mesa/mesa/0001-virgl-virgl_driinfo.h.in-Disable-by-default-emulated.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-From 737ccb36c0faf275037e5e96a263c89a44886ddd Mon Sep 17 00:00:00 2001
-From: Marius Vlad <marius.vlad@collabora.com>
-Date: Mon, 19 Dec 2022 11:51:28 +0200
-Subject: [PATCH] virgl/virgl_driinfo.h.in: Disable by default emulated BGRA
-
- and swizzling
-
-Workaround in place for virtio aarch64 to avoid graphical artefacts when
-first time booting up on PVR host driver.
-
-Introduced with patch 'virgl: Always enable emulated BGRA and swizzling
-unless specifically told not to' in mesa-20.3.0.
-
-Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
----
- src/gallium/drivers/virgl/virgl_driinfo.h.in | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/src/gallium/drivers/virgl/virgl_driinfo.h.in b/src/gallium/drivers/virgl/virgl_driinfo.h.in
-index ec688f5..244021e 100644
---- a/src/gallium/drivers/virgl/virgl_driinfo.h.in
-+++ b/src/gallium/drivers/virgl/virgl_driinfo.h.in
-@@ -8,8 +8,8 @@
- // 5. Implement the tweak in virglrenderer
- DRI_CONF_SECTION_MISCELLANEOUS
- DRI_CONF_FORMAT_L8_SRGB_ENABLE_READBACK(false)
-- DRI_CONF_GLES_EMULATE_BGRA(true)
-- DRI_CONF_GLES_APPLY_BGRA_DEST_SWIZZLE(true)
-+ DRI_CONF_GLES_EMULATE_BGRA(false)
-+ DRI_CONF_GLES_APPLY_BGRA_DEST_SWIZZLE(false)
- DRI_CONF_GLES_SAMPLES_PASSED_VALUE(1024, 1, 400000000)
-
- /*
---
-2.30.2
-
diff --git a/meta-agl-bsp/virtualization-layer/recipes-graphics/mesa/mesa_24.%.bbappend b/meta-agl-bsp/virtualization-layer/recipes-graphics/mesa/mesa_24.%.bbappend
deleted file mode 100644
index 0a6606ebf..000000000
--- a/meta-agl-bsp/virtualization-layer/recipes-graphics/mesa/mesa_24.%.bbappend
+++ /dev/null
@@ -1,3 +0,0 @@
-FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
-
-SRC_URI += "file://0001-virgl-virgl_driinfo.h.in-Disable-by-default-emulated.patch"
diff --git a/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto-dev.bbappend b/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto-dev.bbappend
deleted file mode 100644
index 5970414eb..000000000
--- a/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto-dev.bbappend
+++ /dev/null
@@ -1,10 +0,0 @@
-FILESEXTRAPATHS:prepend := "${THISDIR}/linux-yocto:"
-
-SRC_URI:append:virtio-all = " \
- git://gerrit.automotivelinux.org/gerrit/src/agl-yocto-kernel-meta.git;protocol=https;type=kmeta;name=agl-meta;destsuffix=agl-kernel-meta;branch=master \
- file://virtio-aarch64-${LINUX_KERNEL_TYPE}.scc \
-"
-
-SRCREV_agl-meta = "c5008f4ba9e1b9f11c1014b53477079e605ceab7"
-
-COMPATIBLE_MACHINE:virtio-aarch64 = "virtio-aarch64"
diff --git a/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-aarch64-standard.scc b/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-aarch64-standard.scc
deleted file mode 100644
index 2d1570e9f..000000000
--- a/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-aarch64-standard.scc
+++ /dev/null
@@ -1,13 +0,0 @@
-# SPDX-License-Identifier: MIT
-define KMACHINE virtio-aarch64
-define KTYPE standard
-define KARCH arm64
-
-include ktypes/standard/standard.scc nopatch
-include arch/arm/aarch64.scc
-include cfg/8250.scc
-include cfg/virtio.scc
-include bsp/virtio/agl-virtio.scc
-
-# enable the ability to run 32 bit apps
-include arch/arm/32bit-compat.scc
diff --git a/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto_6.6.bbappend b/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto_6.6.bbappend
index 6952436a3..15cb9ea98 100644
--- a/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto_6.6.bbappend
+++ b/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto_6.6.bbappend
@@ -1,17 +1,6 @@
-FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
-
-# Cannot just append to SRC_URI, as the metadata interferes with the
-# AGL config fragment scheme
-AGL_KERNEL_SRC:prepend:virtio-all = " \
- git://gerrit.automotivelinux.org/gerrit/src/agl-yocto-kernel-meta.git;protocol=https;type=kmeta;name=agl-meta;destsuffix=agl-kernel-meta;branch=kernel-5.15 \
- file://virtio-aarch64-${LINUX_KERNEL_TYPE}.scc \
-"
-
-SRCREV_agl-meta = "4deb7357eab5962b0553a5ad1f11be5ac35f9da9"
-
-AGL_KCONFIG_FRAGMENTS:append:virtio-all = " \
- virtio-drm.cfg \
- virtio-pci.cfg \
-"
-
+# NOTE: Has to be in bbappend itself because BitBake does not fully
+# parse recipes when checking it
COMPATIBLE_MACHINE:virtio-aarch64 = "virtio-aarch64"
+
+# Reuse base qemuarm64 machine to avoid needing our own kernel metadata
+KMACHINE:virtio-aarch64 = "qemuarm64" \ No newline at end of file
diff --git a/meta-agl-core/conf/distro/poky-agl.conf b/meta-agl-core/conf/distro/poky-agl.conf
index cd18f4c39..0810fe076 100644
--- a/meta-agl-core/conf/distro/poky-agl.conf
+++ b/meta-agl-core/conf/distro/poky-agl.conf
@@ -9,9 +9,9 @@ DISTRO_NAME = "Automotive Grade Linux"
# Release flags
-DISTRO_CODENAME = "ricefish"
+DISTRO_CODENAME = "salmon"
AGL_BRANCH = "master"
-AGLVERSION = "17.92.0"
+AGLVERSION = "18.90.0"
# switch devel/release
#AGLRELEASETYPE ?= "agldevelopment"
@@ -29,8 +29,8 @@ DISTRO_BRANCH_VERSION_TAG = "${DISTRO_CODENAME}/${@'${DISTRO_VERSION}'.replace('
# reproducible builds:
# Set the desired timestamps
# E.g. update for (major) releases
-export SOURCE_DATE_EPOCH = "1718892136"
-REPRODUCIBLE_TIMESTAMP_ROOTFS = "1718892136"
+export SOURCE_DATE_EPOCH = "1721815278"
+REPRODUCIBLE_TIMESTAMP_ROOTFS = "1721815278"
# SDK
@@ -61,7 +61,7 @@ VIRTUAL-RUNTIME_initscripts = ""
VIRTUAL-RUNTIME_base-utils-syslog = ""
# network manager to use (possible values: systemd, connman)
-VIRTUAL-RUNTIME_net_manager = "connman"
+VIRTUAL-RUNTIME_net_manager ?= "connman"
QEMU_TARGETS ?= "arm aarch64 i386 x86_64 riscv64"
diff --git a/meta-agl-core/recipes-core/systemd/systemd_aglcore.inc b/meta-agl-core/recipes-core/systemd/systemd_aglcore.inc
index 9681329be..ec64cedca 100644
--- a/meta-agl-core/recipes-core/systemd/systemd_aglcore.inc
+++ b/meta-agl-core/recipes-core/systemd/systemd_aglcore.inc
@@ -12,8 +12,9 @@ PACKAGECONFIG:append = " \
iptc \
"
-# SPEC-737: connmand also has a NTP client which races with systemd-timesyncd
-PACKAGECONFIG:remove = "timesyncd"
+PACKAGECONFIG:remove = " \
+ ${@bb.utils.contains('VIRTUAL-RUNTIME_net_manager','systemd','','timesyncd',d)} \
+"
# Enable systemd-coredump when agl-devel is set on
PACKAGECONFIG:append:agl-devel = " coredump"
diff --git a/meta-agl-core/recipes-graphics/wayland/agl-compositor_git.bb b/meta-agl-core/recipes-graphics/wayland/agl-compositor_git.bb
index 41240309b..79b13df71 100644
--- a/meta-agl-core/recipes-graphics/wayland/agl-compositor_git.bb
+++ b/meta-agl-core/recipes-graphics/wayland/agl-compositor_git.bb
@@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=fac6abe0003c4d142ff8fa1f18316df0"
DEPENDS = "wayland wayland-protocols wayland-native weston"
SRC_URI = "git://gerrit.automotivelinux.org/gerrit/src/agl-compositor.git;protocol=https;branch=${AGL_BRANCH}"
-SRCREV = "18e93caca8ad397d504215d673765871b2c88f25"
+SRCREV = "c8ffca8f9c67114ca424b88df0740943fe7768e3"
AGL_BRANCH:aglnext = "next"
SRCREV:aglnext = "${AUTOREV}"
diff --git a/meta-agl-core/recipes-graphics/wayland/weston/0001-backend-drm-don-t-leak-gem_handle_refcnt-in-drm_dest.patch b/meta-agl-core/recipes-graphics/wayland/weston/0001-backend-drm-don-t-leak-gem_handle_refcnt-in-drm_dest.patch
new file mode 100644
index 000000000..0e3ab7613
--- /dev/null
+++ b/meta-agl-core/recipes-graphics/wayland/weston/0001-backend-drm-don-t-leak-gem_handle_refcnt-in-drm_dest.patch
@@ -0,0 +1,27 @@
+From fb60f9c16ce8865fbdcd181419f44b72af1aa3c2 Mon Sep 17 00:00:00 2001
+From: Ray Smith <rsmith@brightsign.biz>
+Date: Tue, 19 Dec 2023 11:43:55 +0000
+Subject: [PATCH 1/2] backend-drm: don't leak gem_handle_refcnt in drm_destroy
+
+Signed-off-by: Ray Smith <rsmith@brightsign.biz>
+---
+ libweston/backend-drm/drm.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/libweston/backend-drm/drm.c b/libweston/backend-drm/drm.c
+index 8092789..fcececb 100644
+--- a/libweston/backend-drm/drm.c
++++ b/libweston/backend-drm/drm.c
+@@ -3364,6 +3364,9 @@ drm_destroy(struct weston_backend *backend)
+ weston_launcher_close(ec->launcher, device->drm.fd);
+ weston_launcher_destroy(ec->launcher);
+
++ if (device->gem_handle_refcnt)
++ hash_table_destroy(device->gem_handle_refcnt);
++
+ free(device->drm.filename);
+ free(device);
+ free(b);
+--
+2.43.0
+
diff --git a/meta-agl-core/recipes-graphics/wayland/weston/0001-libweston-Add-paint-node-destruction-into-weston_lay.patch b/meta-agl-core/recipes-graphics/wayland/weston/0001-libweston-Add-paint-node-destruction-into-weston_lay.patch
deleted file mode 100644
index 19eadcf7f..000000000
--- a/meta-agl-core/recipes-graphics/wayland/weston/0001-libweston-Add-paint-node-destruction-into-weston_lay.patch
+++ /dev/null
@@ -1,60 +0,0 @@
-From cfde02d47a503cbfd0629bbfe0cb776686af8a91 Mon Sep 17 00:00:00 2001
-From: Marius Vlad <marius.vlad@collabora.com>
-Date: Tue, 9 Apr 2024 18:34:22 +0300
-Subject: [PATCH] libweston: Add paint node destruction into
- weston_layer_entry_remove()
-
-This prevents a potential crash where users of
-weston_layer_entry_insert/layer_entry_remove() would see when moving
-views into a NULL layer (effectively unmapping the surface/view).
-
-Users that have migrated to the weston_view_move_to_layer() are immune
-to this issue because that takes care paint node destruction.
-
-Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
----
- libweston/compositor.c | 17 ++++++++++-------
- 1 file changed, 10 insertions(+), 7 deletions(-)
-
-diff --git a/libweston/compositor.c b/libweston/compositor.c
-index bb29b83b5..ea257bb90 100644
---- a/libweston/compositor.c
-+++ b/libweston/compositor.c
-@@ -3980,17 +3980,10 @@ weston_view_move_to_layer(struct weston_view *view,
- struct weston_layer_entry *layer)
- {
- bool was_mapped = view->is_mapped;
-- struct weston_paint_node *pnode, *pntmp;
-
- if (layer == &view->layer_link)
- return;
-
-- /* Remove all paint nodes because we have no idea what a layer change
-- * does to view visibility on any output.
-- */
-- wl_list_for_each_safe(pnode, pntmp, &view->paint_node_list, view_link)
-- weston_paint_node_destroy(pnode);
--
- view->surface->compositor->view_list_needs_rebuild = true;
-
- /* Damage the view's old region, and remove it from the layer. */
-@@ -4020,6 +4013,16 @@ weston_view_move_to_layer(struct weston_view *view,
- WL_EXPORT void
- weston_layer_entry_remove(struct weston_layer_entry *entry)
- {
-+ struct weston_paint_node *pnode, *pntmp;
-+ struct weston_view *view;
-+
-+ /* Remove all paint nodes because we have no idea what a layer change
-+ * does to view visibility on any output.
-+ */
-+ view = container_of(entry, struct weston_view, layer_link);
-+ wl_list_for_each_safe(pnode, pntmp, &view->paint_node_list, view_link)
-+ weston_paint_node_destroy(pnode);
-+
- wl_list_remove(&entry->link);
- wl_list_init(&entry->link);
- entry->layer = NULL;
---
-2.43.0
-
diff --git a/meta-agl-core/recipes-graphics/wayland/weston/0002-backend-drm-always-create-gem_handle_refcnt-hash-tab.patch b/meta-agl-core/recipes-graphics/wayland/weston/0002-backend-drm-always-create-gem_handle_refcnt-hash-tab.patch
new file mode 100644
index 000000000..0ae82088a
--- /dev/null
+++ b/meta-agl-core/recipes-graphics/wayland/weston/0002-backend-drm-always-create-gem_handle_refcnt-hash-tab.patch
@@ -0,0 +1,56 @@
+From 10fcfd66069c774e28f67b18afd329e4bcf9f5b3 Mon Sep 17 00:00:00 2001
+From: Ray Smith <rsmith@brightsign.biz>
+Date: Tue, 19 Dec 2023 11:45:45 +0000
+Subject: [PATCH 2/2] backend-drm: always create gem_handle_refcnt hash table
+
+Devices created via drm_device_create have this hash table, but those
+created via drm_backend_create don't.
+
+Signed-off-by: Ray Smith <rsmith@brightsign.biz>
+---
+ libweston/backend-drm/drm.c | 12 +++++++++---
+ 1 file changed, 9 insertions(+), 3 deletions(-)
+
+diff --git a/libweston/backend-drm/drm.c b/libweston/backend-drm/drm.c
+index fcececb..9d6a9cf 100644
+--- a/libweston/backend-drm/drm.c
++++ b/libweston/backend-drm/drm.c
+@@ -3364,8 +3364,7 @@ drm_destroy(struct weston_backend *backend)
+ weston_launcher_close(ec->launcher, device->drm.fd);
+ weston_launcher_destroy(ec->launcher);
+
+- if (device->gem_handle_refcnt)
+- hash_table_destroy(device->gem_handle_refcnt);
++ hash_table_destroy(device->gem_handle_refcnt);
+
+ free(device->drm.filename);
+ free(device);
+@@ -3867,10 +3866,13 @@ drm_backend_create(struct weston_compositor *compositor,
+
+ device = zalloc(sizeof *device);
+ if (device == NULL)
+- return NULL;
++ goto err_backend;
+ device->state_invalid = true;
+ device->drm.fd = -1;
+ device->backend = b;
++ device->gem_handle_refcnt = hash_table_create();
++ if (!device->gem_handle_refcnt)
++ goto err_device;
+
+ b->drm = device;
+ wl_list_init(&b->kms_list);
+@@ -4108,6 +4110,10 @@ err_compositor:
+ if (b->gbm)
+ gbm_device_destroy(b->gbm);
+ #endif
++ hash_table_destroy(device->gem_handle_refcnt);
++err_device:
++ free(device);
++err_backend:
+ free(b);
+ return NULL;
+ }
+--
+2.43.0
+
diff --git a/meta-agl-core/recipes-graphics/wayland/weston_13.0_aglcore.inc b/meta-agl-core/recipes-graphics/wayland/weston_13.0_aglcore.inc
index 843a068b4..0b5dae715 100644
--- a/meta-agl-core/recipes-graphics/wayland/weston_13.0_aglcore.inc
+++ b/meta-agl-core/recipes-graphics/wayland/weston_13.0_aglcore.inc
@@ -4,7 +4,8 @@ PACKAGECONFIG:append = "${@bb.utils.contains('DISTRO_FEATURES', 'weston-remoting
SRC_URI:append = " \
file://0001-clients-Handle-missing-pointer_surface-is-there-s-no.patch \
- file://0001-libweston-Add-paint-node-destruction-into-weston_lay.patch \
+ file://0001-backend-drm-don-t-leak-gem_handle_refcnt-in-drm_dest.patch \
+ file://0002-backend-drm-always-create-gem_handle_refcnt-hash-tab.patch \
"
diff --git a/meta-agl-core/recipes-kernel/linux/linux-agl-config-virtio.inc b/meta-agl-core/recipes-kernel/linux/linux-agl-config-virtio.inc
new file mode 100644
index 000000000..e0d30b1f6
--- /dev/null
+++ b/meta-agl-core/recipes-kernel/linux/linux-agl-config-virtio.inc
@@ -0,0 +1,8 @@
+AGL_KCONFIG_FRAGMENTS += " \
+ virtio-${TUNE_ARCH} \
+ virtio-drm.cfg \
+ virtio-pci.cfg \
+ virtio-scmi.cfg \
+ sound-hda.cfg \
+ virtio-snd.cfg \
+"
diff --git a/meta-agl-core/recipes-kernel/linux/linux-agl-config.inc b/meta-agl-core/recipes-kernel/linux/linux-agl-config.inc
index 4799a6180..5cf008a77 100644
--- a/meta-agl-core/recipes-kernel/linux/linux-agl-config.inc
+++ b/meta-agl-core/recipes-kernel/linux/linux-agl-config.inc
@@ -71,10 +71,6 @@ AGL_KCONFIG_FRAGMENTS:append:qemuall = " \
qemu-drm.cfg \
"
-AGL_KCONFIG_FRAGMENTS:append:virtio-all = " \
- sound-hda.cfg \
-"
-
# Configuration for using the ARM virt machine (and not versatilepb)
AGL_KCONFIG_FRAGMENTS:append:qemuarm = " qemuarm.cfg"
diff --git a/meta-agl-core/recipes-kernel/linux/linux-agl.inc b/meta-agl-core/recipes-kernel/linux/linux-agl.inc
index c318716fe..f41e35bc2 100644
--- a/meta-agl-core/recipes-kernel/linux/linux-agl.inc
+++ b/meta-agl-core/recipes-kernel/linux/linux-agl.inc
@@ -3,7 +3,8 @@
DEPENDS += "kern-tools-native"
-include linux-agl-config.inc
+require linux-agl-config.inc
+include ${@bb.utils.contains('AGL_FEATURES', 'agl-virtio-guest', 'linux-agl-config-virtio.inc', '', d)}
# returns all the elements from the src uri that are .cfg files
def find_cfgs(d):
diff --git a/meta-agl-core/recipes-kernel/linux/linux/virtio-aarch64.cfg b/meta-agl-core/recipes-kernel/linux/linux/virtio-aarch64.cfg
new file mode 100644
index 000000000..25381e133
--- /dev/null
+++ b/meta-agl-core/recipes-kernel/linux/linux/virtio-aarch64.cfg
@@ -0,0 +1,29 @@
+# SPDX-License-Identifier: MIT
+#
+# ARM64
+#
+CONFIG_ARM64=y
+CONFIG_64BIT=y
+
+#
+# Bus support
+#
+CONFIG_ARM_AMBA=y
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_AMBA_PL011=y
+CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
+
+#
+# RTC
+#
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+
+#
+# on-CPU RTC drivers
+#
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_DRV_PL031=y
diff --git a/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-drm.cfg b/meta-agl-core/recipes-kernel/linux/linux/virtio-drm.cfg
index 2facc345e..2facc345e 100644
--- a/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-drm.cfg
+++ b/meta-agl-core/recipes-kernel/linux/linux/virtio-drm.cfg
diff --git a/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-pci.cfg b/meta-agl-core/recipes-kernel/linux/linux/virtio-pci.cfg
index bbcaca312..bbcaca312 100644
--- a/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-pci.cfg
+++ b/meta-agl-core/recipes-kernel/linux/linux/virtio-pci.cfg
diff --git a/meta-agl-core/recipes-kernel/linux/linux/virtio-scmi.cfg b/meta-agl-core/recipes-kernel/linux/linux/virtio-scmi.cfg
new file mode 100644
index 000000000..5ae01938e
--- /dev/null
+++ b/meta-agl-core/recipes-kernel/linux/linux/virtio-scmi.cfg
@@ -0,0 +1,25 @@
+# Enable ARM_SCMI_PROTOCOL ("ARM System Control and Management Interface (SCMI)
+# Message Protocol") config located in menu
+#
+# -> Device Drivers
+# -> Firmware Drivers
+# -> ARM System Control and Management Interface Protocol
+#
+# After that, in the same menu enabled:
+#
+# * ARM_SCMI_TRANSPORT_VIRTIO ("SCMI transport based on VirtIO")
+#
+# and disabled not used features:
+#
+# * ARM_SCMI_TRANSPORT_SMC ("SCMI transport based on SMC")
+# * ARM_SCMI_POWER_DOMAIN ("SCMI power domain driver")
+
+CONFIG_ARM_SCMI_PROTOCOL=y
+CONFIG_ARM_SCMI_HAVE_TRANSPORT=y
+CONFIG_ARM_SCMI_HAVE_MSG=y
+# CONFIG_ARM_SCMI_TRANSPORT_SMC is not set
+CONFIG_ARM_SCMI_TRANSPORT_VIRTIO=y
+# CONFIG_ARM_SCMI_POWER_DOMAIN is not set
+# CONFIG_SENSORS_ARM_SCMI is not set
+# CONFIG_COMMON_CLK_SCMI is not set
+CONFIG_IIO_SCMI=y
diff --git a/meta-agl-core/recipes-multimedia/gstreamer1.0-plugins-bad/files/rcar-gen3/0001-Added-appid-and-title-support.patch b/meta-agl-core/recipes-multimedia/gstreamer1.0-plugins-bad/files/rcar-gen3/0001-Added-appid-and-title-support.patch
new file mode 100644
index 000000000..72b924337
--- /dev/null
+++ b/meta-agl-core/recipes-multimedia/gstreamer1.0-plugins-bad/files/rcar-gen3/0001-Added-appid-and-title-support.patch
@@ -0,0 +1,166 @@
+From df64f7e34d01a03957d78317ef9a1cf6d6b95055 Mon Sep 17 00:00:00 2001
+From: Marius Vlad <marius.vlad@collabora.com>
+Date: Wed, 9 Aug 2023 14:34:19 +0300
+Subject: [PATCH] Added appid and title support
+
+Bug-AGL: SPEC-4870
+Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
+---
+ ext/wayland/gstwaylandsink.c | 43 ++++++++++++++++++++++++++++++++++--
+ ext/wayland/gstwaylandsink.h | 2 ++
+ ext/wayland/wlwindow.c | 10 ++++++++-
+ ext/wayland/wlwindow.h | 2 +-
+ 4 files changed, 53 insertions(+), 4 deletions(-)
+
+diff --git a/ext/wayland/gstwaylandsink.c b/ext/wayland/gstwaylandsink.c
+index 4918154..f743cf2 100644
+--- a/ext/wayland/gstwaylandsink.c
++++ b/ext/wayland/gstwaylandsink.c
+@@ -66,7 +66,9 @@ enum
+ PROP_DISPLAY,
+ PROP_FULLSCREEN,
+ PROP_USE_SUBSURFACE,
+- PROP_SUPPRESS_INTERLACE
++ PROP_SUPPRESS_INTERLACE,
++ PROP_APP_ID,
++ PROP_TITLE
+ };
+
+ #define DEFAULT_USE_SUBSURFACE TRUE
+@@ -229,6 +231,16 @@ gst_wayland_sink_class_init (GstWaylandSinkClass * klass)
+ DEFAULT_SUPPRESS_INTERLACE,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
++ g_object_class_install_property (gobject_class, PROP_APP_ID,
++ g_param_spec_string ("appid", "Top-level application id", "Wayland "
++ "appid, as xdg_shell::set_app_id",
++ NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
++
++ g_object_class_install_property (gobject_class, PROP_TITLE,
++ g_param_spec_string ("title", "Top-level title", "Wayland "
++ "title, xdg_shell::set_title",
++ NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
++
+ gst_type_mark_as_plugin_api (GST_TYPE_WAYLAND_VIDEO, 0);
+ }
+
+@@ -266,6 +278,16 @@ gst_wayland_sink_get_property (GObject * object,
+ g_value_set_string (value, sink->display_name);
+ GST_OBJECT_UNLOCK (sink);
+ break;
++ case PROP_APP_ID:
++ GST_OBJECT_LOCK (sink);
++ g_value_set_string (value, sink->app_id);
++ GST_OBJECT_UNLOCK (sink);
++ break;
++ case PROP_TITLE:
++ GST_OBJECT_LOCK (sink);
++ g_value_set_string (value, sink->title);
++ GST_OBJECT_UNLOCK (sink);
++ break;
+ case PROP_FULLSCREEN:
+ GST_OBJECT_LOCK (sink);
+ g_value_set_boolean (value, sink->fullscreen);
+@@ -298,6 +320,16 @@ gst_wayland_sink_set_property (GObject * object,
+ sink->display_name = g_value_dup_string (value);
+ GST_OBJECT_UNLOCK (sink);
+ break;
++ case PROP_APP_ID:
++ GST_OBJECT_LOCK (sink);
++ sink->app_id = g_value_dup_string (value);
++ GST_OBJECT_UNLOCK (sink);
++ break;
++ case PROP_TITLE:
++ GST_OBJECT_LOCK (sink);
++ sink->title = g_value_dup_string (value);
++ GST_OBJECT_UNLOCK (sink);
++ break;
+ case PROP_FULLSCREEN:
+ GST_OBJECT_LOCK (sink);
+ gst_wayland_sink_set_fullscreen (sink, g_value_get_boolean (value));
+@@ -331,12 +363,18 @@ gst_wayland_sink_finalize (GObject * object)
+ gst_buffer_unref (sink->last_buffer);
+ if (sink->display)
+ g_object_unref (sink->display);
++ if (sink->title)
++ g_object_unref (sink->title);
++ if (sink->app_id)
++ g_object_unref (sink->app_id);
+ if (sink->window)
+ g_object_unref (sink->window);
+ if (sink->pool)
+ gst_object_unref (sink->pool);
+
+ g_free (sink->display_name);
++ g_free (sink->title);
++ g_free (sink->app_id);
+
+ g_mutex_clear (&sink->display_lock);
+ g_mutex_clear (&sink->render_lock);
+@@ -768,7 +806,8 @@ gst_wayland_sink_show_frame (GstVideoSink * vsink, GstBuffer * buffer)
+ if (!sink->window) {
+ /* if we were not provided a window, create one ourselves */
+ sink->window = gst_wl_window_new_toplevel (sink->display,
+- &sink->video_info, sink->fullscreen, &sink->render_lock);
++ &sink->video_info, sink->fullscreen, sink->app_id, sink->title,
++ &sink->render_lock);
+ g_signal_connect_object (sink->window, "closed",
+ G_CALLBACK (on_window_closed), sink, 0);
+ }
+diff --git a/ext/wayland/gstwaylandsink.h b/ext/wayland/gstwaylandsink.h
+index 46ea538..e6c94ae 100644
+--- a/ext/wayland/gstwaylandsink.h
++++ b/ext/wayland/gstwaylandsink.h
+@@ -64,6 +64,8 @@ struct _GstWaylandSink
+ gboolean fullscreen;
+
+ gchar *display_name;
++ gchar *app_id;
++ gchar *title;
+
+ gboolean redraw_pending;
+ GMutex render_lock;
+diff --git a/ext/wayland/wlwindow.c b/ext/wayland/wlwindow.c
+index 3aace87..16faec8 100644
+--- a/ext/wayland/wlwindow.c
++++ b/ext/wayland/wlwindow.c
+@@ -255,7 +255,7 @@ gst_wl_window_ensure_fullscreen (GstWlWindow * window, gboolean fullscreen)
+
+ GstWlWindow *
+ gst_wl_window_new_toplevel (GstWlDisplay * display, const GstVideoInfo * info,
+- gboolean fullscreen, GMutex * render_lock)
++ gboolean fullscreen, gchar *app_id, gchar *title, GMutex * render_lock)
+ {
+ GstWlWindow *window;
+
+@@ -288,6 +288,14 @@ gst_wl_window_new_toplevel (GstWlDisplay * display, const GstVideoInfo * info,
+
+ /* Finally, commit the xdg_surface state as toplevel */
+ window->configured = FALSE;
++ if (app_id)
++ xdg_toplevel_set_app_id (window->xdg_toplevel, app_id);
++ else
++ xdg_toplevel_set_app_id (window->xdg_toplevel, "ext.wayland.waylandsink");
++ if (title)
++ xdg_toplevel_set_title (window->xdg_toplevel, title);
++ else
++ xdg_toplevel_set_title (window->xdg_toplevel, "ext.wayland.waylandsink");
+ wl_surface_commit (window->area_surface);
+ wl_display_flush (display->display);
+
+diff --git a/ext/wayland/wlwindow.h b/ext/wayland/wlwindow.h
+index 034a5a5..6b525c8 100644
+--- a/ext/wayland/wlwindow.h
++++ b/ext/wayland/wlwindow.h
+@@ -84,7 +84,7 @@ GType gst_wl_window_get_type (void);
+ void gst_wl_window_ensure_fullscreen (GstWlWindow * window,
+ gboolean fullscreen);
+ GstWlWindow *gst_wl_window_new_toplevel (GstWlDisplay * display,
+- const GstVideoInfo * info, gboolean fullscreen, GMutex * render_lock);
++ const GstVideoInfo * info, gboolean fullscreen, gchar * app_id, gchar *title, GMutex * render_lock);
+ GstWlWindow *gst_wl_window_new_in_surface (GstWlDisplay * display,
+ struct wl_surface * parent, GMutex * render_lock);
+
+--
+2.35.1
+
diff --git a/meta-agl-flutter/conf/include/agl-flutter.inc b/meta-agl-flutter/conf/include/agl-flutter.inc
index 38db25e86..6d60bc4a2 100644
--- a/meta-agl-flutter/conf/include/agl-flutter.inc
+++ b/meta-agl-flutter/conf/include/agl-flutter.inc
@@ -1,3 +1,3 @@
AGL_FEATURES += "agl-flutter"
-FLUTTER_SDK_TAG = "3.19.3"
+FLUTTER_SDK_TAG = "3.24.2"
diff --git a/meta-agl-flutter/dynamic-layers/flutter-apps-layer/recipes-graphics/flutter-apps/first-party/flutter-gallery/flutter-gallery.service b/meta-agl-flutter/dynamic-layers/flutter-apps-layer/recipes-graphics/flutter-apps/first-party/flutter-gallery/flutter-gallery.service
deleted file mode 100644
index 0b29c3f82..000000000
--- a/meta-agl-flutter/dynamic-layers/flutter-apps-layer/recipes-graphics/flutter-apps/first-party/flutter-gallery/flutter-gallery.service
+++ /dev/null
@@ -1,13 +0,0 @@
-[Unit]
-Requires=agl-compositor.service
-After=agl-compositor.service
-
-[Service]
-User=agl-driver
-EnvironmentFile=/etc/default/flutter
-EnvironmentFile=-/etc/default/flutter-gallery
-Environment=XDG_RUNTIME_DIR=/run/user/1001/
-ExecStart=/usr/bin/flutter-auto --b=/usr/share/flutter/flutter-gallery/${FLUTTER_VERSION}/${FLUTTER_RUNTIME} --f --window-type=BG --xdg-shell-app-id=flutter-gallery
-
-[Install]
-WantedBy=graphical.target
diff --git a/meta-agl-flutter/dynamic-layers/flutter-apps-layer/recipes-graphics/flutter-apps/first-party/flutter-gallery_aglflutter.inc b/meta-agl-flutter/dynamic-layers/flutter-apps-layer/recipes-graphics/flutter-apps/first-party/flutter-gallery_aglflutter.inc
deleted file mode 100644
index 68c07f188..000000000
--- a/meta-agl-flutter/dynamic-layers/flutter-apps-layer/recipes-graphics/flutter-apps/first-party/flutter-gallery_aglflutter.inc
+++ /dev/null
@@ -1,13 +0,0 @@
-FILESEXTRAPATHS:prepend := "${THISDIR}/flutter-gallery:"
-
-SRC_URI += "file://flutter-gallery.service"
-
-inherit systemd
-
-do_install:append() {
- install -D -m 0644 ${WORKDIR}/${BPN}.service ${D}${systemd_system_unitdir}/${BPN}.service
-}
-
-RDEPENDS:${PN} += "agl-flutter-env"
-
-SYSTEMD_SERVICE:${PN} = "flutter-gallery.service"
diff --git a/meta-agl-flutter/dynamic-layers/flutter-apps-layer/recipes-graphics/flutter-apps/first-party/flutter-samples-material-3-demo/flutter-samples-material-3-demo.service b/meta-agl-flutter/dynamic-layers/flutter-apps-layer/recipes-graphics/flutter-apps/first-party/flutter-samples-material-3-demo/flutter-samples-material-3-demo.service
new file mode 100644
index 000000000..f3f4a94b1
--- /dev/null
+++ b/meta-agl-flutter/dynamic-layers/flutter-apps-layer/recipes-graphics/flutter-apps/first-party/flutter-samples-material-3-demo/flutter-samples-material-3-demo.service
@@ -0,0 +1,13 @@
+[Unit]
+Requires=agl-compositor.service
+After=agl-compositor.service
+
+[Service]
+User=agl-driver
+EnvironmentFile=/etc/default/flutter
+EnvironmentFile=-/etc/default/flutter-samples-material-3-demo
+Environment=XDG_RUNTIME_DIR=/run/user/1001/
+ExecStart=/usr/bin/flutter-auto -b /usr/share/flutter/flutter-samples-material-3-demo/${FLUTTER_VERSION}/${FLUTTER_RUNTIME} -xdg-shell-app-id flutter-samples-material-3-demo
+
+[Install]
+WantedBy=graphical.target
diff --git a/meta-agl-flutter/dynamic-layers/flutter-apps-layer/recipes-graphics/flutter-apps/first-party/flutter-samples-material-3-demo/flutter-samples-material-3-demo.toml b/meta-agl-flutter/dynamic-layers/flutter-apps-layer/recipes-graphics/flutter-apps/first-party/flutter-samples-material-3-demo/flutter-samples-material-3-demo.toml
new file mode 100644
index 000000000..cb78ab0cd
--- /dev/null
+++ b/meta-agl-flutter/dynamic-layers/flutter-apps-layer/recipes-graphics/flutter-apps/first-party/flutter-samples-material-3-demo/flutter-samples-material-3-demo.toml
@@ -0,0 +1,5 @@
+[view]
+window_type = "BG"
+width = 1080
+height = 1920
+fullscreen = true
diff --git a/meta-agl-flutter/dynamic-layers/flutter-apps-layer/recipes-graphics/flutter-apps/first-party/flutter-gallery_%.bbappend b/meta-agl-flutter/dynamic-layers/flutter-apps-layer/recipes-graphics/flutter-apps/first-party/flutter-samples-material-3-demo_%.bbappend
index 835e86e66..0baa7a045 100644
--- a/meta-agl-flutter/dynamic-layers/flutter-apps-layer/recipes-graphics/flutter-apps/first-party/flutter-gallery_%.bbappend
+++ b/meta-agl-flutter/dynamic-layers/flutter-apps-layer/recipes-graphics/flutter-apps/first-party/flutter-samples-material-3-demo_%.bbappend
@@ -1 +1 @@
-require ${@bb.utils.contains('AGL_FEATURES', 'agl-flutter', 'flutter-gallery_aglflutter.inc', '', d)}
+require ${@bb.utils.contains('AGL_FEATURES', 'agl-flutter', 'flutter-samples-material-3-demo_aglflutter.inc', '', d)}
diff --git a/meta-agl-flutter/dynamic-layers/flutter-apps-layer/recipes-graphics/flutter-apps/first-party/flutter-samples-material-3-demo_aglflutter.inc b/meta-agl-flutter/dynamic-layers/flutter-apps-layer/recipes-graphics/flutter-apps/first-party/flutter-samples-material-3-demo_aglflutter.inc
new file mode 100644
index 000000000..971756ad7
--- /dev/null
+++ b/meta-agl-flutter/dynamic-layers/flutter-apps-layer/recipes-graphics/flutter-apps/first-party/flutter-samples-material-3-demo_aglflutter.inc
@@ -0,0 +1,22 @@
+FILESEXTRAPATHS:prepend := "${THISDIR}/flutter-samples-material-3-demo:"
+
+SRC_URI += "file://flutter-samples-material-3-demo.service"
+
+APP_CONFIG = "flutter-samples-material-3-demo.toml"
+
+inherit systemd
+
+do_install:append() {
+ install -D -m 0644 ${WORKDIR}/${BPN}.service ${D}${systemd_system_unitdir}/${BPN}.service
+
+ # determine build type based on what flutter-engine installed.
+ for runtime_mode in ${FLUTTER_RUNTIME_MODES}
+ do
+ install -D -m 0644 ${WORKDIR}/${APP_CONFIG} \
+ ${D}${datadir}/flutter/${PUBSPEC_APPNAME}/${FLUTTER_SDK_VERSION}/${runtime_mode}/config.toml
+ done
+}
+
+RDEPENDS:${PN} += "agl-flutter-env"
+
+SYSTEMD_SERVICE:${PN} = "flutter-samples-material-3-demo.service"
diff --git a/meta-agl-flutter/recipes-graphics/toyota/files/0001-backend-wayland_egl-Add-a-fallback-eglConfig.patch b/meta-agl-flutter/recipes-graphics/toyota/files/0001-backend-wayland_egl-Add-a-fallback-eglConfig.patch
new file mode 100644
index 000000000..f2195dddc
--- /dev/null
+++ b/meta-agl-flutter/recipes-graphics/toyota/files/0001-backend-wayland_egl-Add-a-fallback-eglConfig.patch
@@ -0,0 +1,88 @@
+From 372b9c4edd42b67827b75863b978091ba5cff5cd Mon Sep 17 00:00:00 2001
+From: Marius Vlad <marius.vlad@collabora.com>
+Date: Thu, 17 Oct 2024 17:25:41 +0300
+Subject: [PATCH 1/2] backend/wayland_egl: Add a fallback eglConfig
+
+This seems to aid flutter-auto at displaying an image on agl-rdp
+with software rendering, and on agl-kvm with virgl. Makes uses of a fallback
+eGLConfig (< 24 bit) and tries to use that one rather than the default one (24-bit).
+
+Bug-AGL: SPEC-5260
+Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
+---
+ cmake/config_common.h.in | 17 ++++++++++++++++-
+ shell/backend/wayland_egl/egl.cc | 23 ++++++++++++++++++++---
+ 2 files changed, 36 insertions(+), 4 deletions(-)
+
+diff --git a/cmake/config_common.h.in b/cmake/config_common.h.in
+index 07ce9b7..2c54c67 100644
+--- a/cmake/config_common.h.in
++++ b/cmake/config_common.h.in
+@@ -155,6 +155,21 @@ static constexpr std::array<EGLint, 27> kEglConfigAttribs = {{
+ // clang-format on
+ }};
+
++
++static constexpr std::array<EGLint, 27> kEglConfigAttribsFallBack = {{
++ // clang-format off
++ EGL_SURFACE_TYPE, EGL_WINDOW_BIT,
++ EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
++
++ EGL_RED_SIZE, 1,
++ EGL_GREEN_SIZE, 1,
++ EGL_BLUE_SIZE, 1,
++ EGL_ALPHA_SIZE, 2,
++ EGL_NONE // termination sentinel
++ // clang-format on
++}};
++
++
+ // All vkCreate* functions take an optional allocator. For now, we select the
+ // default allocator by passing in a null pointer, and we highlight the argument
+ // by using the VKALLOC constant.
+@@ -181,4 +196,4 @@ constexpr struct VkAllocationCallbacks* VKALLOC = nullptr;
+ #cmakedefine01 ENV32BIT
+ #cmakedefine01 ENV64BIT
+
+-#endif //CONFIG_COMMON_H_
+\ No newline at end of file
++#endif //CONFIG_COMMON_H_
+diff --git a/shell/backend/wayland_egl/egl.cc b/shell/backend/wayland_egl/egl.cc
+index 99555d6..70164ba 100644
+--- a/shell/backend/wayland_egl/egl.cc
++++ b/shell/backend/wayland_egl/egl.cc
+@@ -62,11 +62,28 @@ Egl::Egl(void* native_display, int buffer_size, bool debug)
+ break;
+ }
+ }
+- free(configs);
+ if (m_config == nullptr) {
+- spdlog::critical("did not find config with buffer size {}", m_buffer_size);
+- assert(false);
++ // try with the fallback one
++ spdlog::critical("Could not use default EGLConfig trying with fallback.");
++ ret = eglChooseConfig(m_dpy, kEglConfigAttribsFallBack.data(), configs,
++ count, &n);
++ assert(ret && n >= 1);
++
++ for (EGLint i = 0; i < n; i++) {
++ eglGetConfigAttrib(m_dpy, configs[i], EGL_BUFFER_SIZE, &size);
++ SPDLOG_DEBUG("Buffer size for config {} is {}", i, size);
++ if (m_buffer_size <= size) {
++ memcpy(&m_config, &configs[i], sizeof(EGLConfig));
++ break;
++ }
++ }
++ if (m_config == nullptr) {
++ spdlog::critical("did not find config with buffer size {}",
++ m_buffer_size);
++ assert(false);
++ }
+ }
++ free(configs);
+
+ m_context = eglCreateContext(m_dpy, m_config, EGL_NO_CONTEXT,
+ kEglContextAttribs.data());
+--
+2.43.0
+
diff --git a/meta-agl-flutter/recipes-graphics/toyota/files/0001-flutter_desktop-Remove-asio-post-call.patch b/meta-agl-flutter/recipes-graphics/toyota/files/0001-flutter_desktop-Remove-asio-post-call.patch
new file mode 100644
index 000000000..f9cfea44d
--- /dev/null
+++ b/meta-agl-flutter/recipes-graphics/toyota/files/0001-flutter_desktop-Remove-asio-post-call.patch
@@ -0,0 +1,94 @@
+From a69dfff93b41b30ae8e237817548baf50d0c1287 Mon Sep 17 00:00:00 2001
+From: Marius Vlad <marius.vlad@collabora.com>
+Date: Thu, 24 Oct 2024 14:45:35 +0300
+Subject: [PATCH] flutter_desktop: Remove asio::post call
+
+Do not dispatch/post the key event keycode using asio::post as that
+seems to cause crashes as the messenger pointer seems to be go out of
+scope or seems to be invalid.
+
+Bug-AGL: SPEC-5272
+Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
+---
+ shell/platform/homescreen/flutter_desktop.cc | 65 ++++++++++----------
+ 1 file changed, 31 insertions(+), 34 deletions(-)
+
+diff --git a/shell/platform/homescreen/flutter_desktop.cc b/shell/platform/homescreen/flutter_desktop.cc
+index bb5be4b..5d26dd9 100644
+--- a/shell/platform/homescreen/flutter_desktop.cc
++++ b/shell/platform/homescreen/flutter_desktop.cc
+@@ -161,40 +161,37 @@ std::future<bool> PostMessengerSendWithReply(
+ void* user_data) {
+ const auto promise(std::make_shared<std::promise<bool>>());
+ auto promise_future(promise->get_future());
+- asio::post(*messenger->GetEngine()->platform_task_runner->GetStrandContext(),
+- [&, promise, channel, message, message_size, reply, user_data]() {
+- FlutterPlatformMessageResponseHandle* response_handle = nullptr;
+- if (reply != nullptr && user_data != nullptr) {
+- const FlutterEngineResult result =
+- LibFlutterEngine->PlatformMessageCreateResponseHandle(
+- messenger->GetEngine()->flutter_engine, reply,
+- user_data, &response_handle);
+- if (result != kSuccess) {
+- spdlog::error("Failed to create response handle");
+- promise->set_value(false);
+- return;
+- }
+- }
+-
+- auto platform_message = std::make_unique<FlutterPlatformMessage>();
+- platform_message->struct_size = sizeof(FlutterPlatformMessage);
+- platform_message->channel = channel;
+- platform_message->message = message;
+- platform_message->message_size = message_size;
+- platform_message->response_handle = response_handle;
+-
+- const FlutterEngineResult message_result =
+- LibFlutterEngine->SendPlatformMessage(
+- messenger->GetEngine()->flutter_engine,
+- platform_message.release());
+-
+- if (response_handle != nullptr) {
+- LibFlutterEngine->PlatformMessageReleaseResponseHandle(
+- messenger->GetEngine()->flutter_engine, response_handle);
+- }
+-
+- promise->set_value(message_result == kSuccess);
+- });
++
++ FlutterPlatformMessageResponseHandle* response_handle = nullptr;
++ if (reply != nullptr && user_data != nullptr) {
++ const FlutterEngineResult result =
++ LibFlutterEngine->PlatformMessageCreateResponseHandle(
++ messenger->GetEngine()->flutter_engine, reply, user_data,
++ &response_handle);
++ if (result != kSuccess) {
++ spdlog::error("Failed to create response handle");
++ promise->set_value(false);
++ return promise_future;
++ }
++ }
++
++ auto platform_message = std::make_unique<FlutterPlatformMessage>();
++ platform_message->struct_size = sizeof(FlutterPlatformMessage);
++ platform_message->channel = channel;
++ platform_message->message = message;
++ platform_message->message_size = message_size;
++ platform_message->response_handle = response_handle;
++
++ const FlutterEngineResult message_result =
++ LibFlutterEngine->SendPlatformMessage(
++ messenger->GetEngine()->flutter_engine, platform_message.release());
++
++ if (response_handle != nullptr) {
++ LibFlutterEngine->PlatformMessageReleaseResponseHandle(
++ messenger->GetEngine()->flutter_engine, response_handle);
++ }
++
++ promise->set_value(message_result == kSuccess);
+ return promise_future;
+ }
+
+--
+2.43.0
+
diff --git a/meta-agl-flutter/recipes-graphics/toyota/flutter-auto_aglflutter.inc b/meta-agl-flutter/recipes-graphics/toyota/flutter-auto_aglflutter.inc
index 7ba85a34d..29c023fca 100644
--- a/meta-agl-flutter/recipes-graphics/toyota/flutter-auto_aglflutter.inc
+++ b/meta-agl-flutter/recipes-graphics/toyota/flutter-auto_aglflutter.inc
@@ -1,3 +1,12 @@
FILESEXTRAPATHS:prepend := "${THISDIR}/files:"
+EGLCONFIG_FALLBACK = "${@bb.utils.contains_any('AGL_FEATURES', 'agl-rdp agl-kvm-guest', '', 'file://0001-backend-wayland_egl-Add-a-fallback-eglConfig.patch', d)}"
SRC_URI:append:use-nxp-bsp = " file://0001-Disable-on_frame_base_surface-wl_surface_commit.patch"
+SRC_URI:append = " ${EGLCONFIG_FALLBACK}"
+
+# necessary to avoid crashing flutter-auto when a key keyboard event is emitted
+SRC_URI:append = " file://0001-flutter_desktop-Remove-asio-post-call.patch"
+
+# Disable WIP webview plugin on 32-bit ARM platforms for now, as build
+# failures have been seen on qemuarm and beaglebone.
+PACKAGECONFIG:remove:arm = "webview_flutter_view"
diff --git a/meta-agl-flutter/recipes-platform/images/agl-image-flutter-debug.bb b/meta-agl-flutter/recipes-platform/images/agl-image-flutter-debug.bb
index c9c1f2980..9b4b08398 100644
--- a/meta-agl-flutter/recipes-platform/images/agl-image-flutter-debug.bb
+++ b/meta-agl-flutter/recipes-platform/images/agl-image-flutter-debug.bb
@@ -25,5 +25,5 @@ IMAGE_INSTALL += "\
\
flutter-engine-sdk-dev \
\
- flutter-gallery \
+ flutter-samples-material-3-demo \
"
diff --git a/meta-agl-flutter/recipes-platform/images/agl-image-flutter.bb b/meta-agl-flutter/recipes-platform/images/agl-image-flutter.bb
index 0fdb7da08..700f540ed 100644
--- a/meta-agl-flutter/recipes-platform/images/agl-image-flutter.bb
+++ b/meta-agl-flutter/recipes-platform/images/agl-image-flutter.bb
@@ -12,5 +12,5 @@ IMAGE_INSTALL += "\
\
flutter-auto \
\
- flutter-gallery \
+ flutter-samples-material-3-demo \
"
diff --git a/meta-agl-flutter/tools/configs/_globals.json b/meta-agl-flutter/tools/configs/_globals.json
index 4caf9e8a0..1830c8d40 100644
--- a/meta-agl-flutter/tools/configs/_globals.json
+++ b/meta-agl-flutter/tools/configs/_globals.json
@@ -1,5 +1,5 @@
{
- "flutter-version": "3.19.3",
+ "flutter-version": "3.24.1",
"github_token": "",
"cookie_file": ""
-} \ No newline at end of file
+}
diff --git a/meta-agl-flutter/tools/configs/_repos.json b/meta-agl-flutter/tools/configs/_repos.json
index 5bc0562e2..5fb8aa047 100644
--- a/meta-agl-flutter/tools/configs/_repos.json
+++ b/meta-agl-flutter/tools/configs/_repos.json
@@ -1,7 +1,12 @@
[
{
"uri": "https://github.com/toyota-connected/ivi-homescreen.git",
- "rev": "ea89b1de0a40c0d447ded305645556c978cfa696",
+ "rev": "e87c1797f838e20f0a4c1af309541d63986058ca",
+ "branch": "v2.0"
+ },
+ {
+ "uri": "https://github.com/toyota-connected/ivi-homescreen-plugins.git",
+ "rev": "41d00635f89c064aa32f2cef3147c59b8f61694f",
"branch": "v2.0"
},
{
diff --git a/meta-agl-flutter/tools/configs/agl-qemu-master.json b/meta-agl-flutter/tools/configs/agl-qemu-master.json
index eba953f7d..dae014a58 100644
--- a/meta-agl-flutter/tools/configs/agl-qemu-master.json
+++ b/meta-agl-flutter/tools/configs/agl-qemu-master.json
@@ -21,11 +21,11 @@
"DEVICE_HOSTNAME": "localhost",
"FLUTTER_AUTO_EXE": "flutter-auto --j=/tmp/${appName}/default_config.json --b=/tmp/${appName}",
"PING_CMD": "(echo >/dev/tcp/localhost/${CONTAINER_SSH_PORT}) &>/dev/null && echo open || echo closed",
- "DELETE_USER_PWD": "ssh -p ${CONTAINER_SSH_PORT} -t -oBatchMode=yes root@${DEVICE_HOSTNAME} passwd -d agl-driver",
- "CREATE_BUNDLE_FOLDER": "ssh -p ${CONTAINER_SSH_PORT} -o BatchMode=yes agl-driver@${DEVICE_HOSTNAME} mkdir -p /tmp/${appName}/data",
- "COPY_PLATFORM_ID_TO_DEVICE": "scp -P ${CONTAINER_SSH_PORT} -r ${PLATFORM_ID_DIR}/default_config.json agl-driver@${DEVICE_HOSTNAME}:/tmp/${appName}/",
- "COPY_ASSETS_TO_DEVICE": "scp -P ${CONTAINER_SSH_PORT} -r ${localPath}/* agl-driver@${DEVICE_HOSTNAME}:/tmp/${appName}/data/flutter_assets",
- "DELETE_APP_FOLDER": "ssh -p ${CONTAINER_SSH_PORT} -o BatchMode=yes agl-driver@${DEVICE_HOSTNAME} rm -rf /tmp/${appName}"
+ "DELETE_USER_PWD": "ssh -oStrictHostKeyChecking=no -p ${CONTAINER_SSH_PORT} -t -oBatchMode=yes root@${DEVICE_HOSTNAME} passwd -d agl-driver",
+ "CREATE_BUNDLE_FOLDER": "ssh -oStrictHostKeyChecking=no -p ${CONTAINER_SSH_PORT} -o BatchMode=yes agl-driver@${DEVICE_HOSTNAME} mkdir -p /tmp/${appName}/data",
+ "COPY_PLATFORM_ID_TO_DEVICE": "scp -oStrictHostKeyChecking=no -P ${CONTAINER_SSH_PORT} -r ${PLATFORM_ID_DIR}/default_config.json agl-driver@${DEVICE_HOSTNAME}:/tmp/${appName}/",
+ "COPY_ASSETS_TO_DEVICE": "scp -oStrictHostKeyChecking=no -P ${CONTAINER_SSH_PORT} -r ${localPath}/* agl-driver@${DEVICE_HOSTNAME}:/tmp/${appName}/data/flutter_assets",
+ "DELETE_APP_FOLDER": "ssh -oStrictHostKeyChecking=no -p ${CONTAINER_SSH_PORT} -o BatchMode=yes agl-driver@${DEVICE_HOSTNAME} rm -rf /tmp/${appName}"
},
"runtime": {
"config": {
@@ -106,9 +106,9 @@
"postBuild": "bash -c \"${DELETE_USER_PWD}\"",
"install": "bash -c \"${CREATE_BUNDLE_FOLDER} && ${COPY_PLATFORM_ID_TO_DEVICE} && ${COPY_ASSETS_TO_DEVICE}\"",
"uninstall": "bash -c \"${DELETE_APP_FOLDER}\"",
- "runDebug": "bash -c \"ssh -t -t -o BatchMode=yes agl-driver@${DEVICE_HOSTNAME} ${FLUTTER_AUTO_EXE}\"",
+ "runDebug": "bash -c \"ssh -oStrictHostKeyChecking=no -t -t -o BatchMode=yes agl-driver@${DEVICE_HOSTNAME} ${FLUTTER_AUTO_EXE}\"",
"forwardPort": null,
"forwardPortSuccessRegex": null,
"screenshot": null
}
-} \ No newline at end of file
+}
diff --git a/meta-agl-flutter/tools/configs/agl-qemu-octopus.json b/meta-agl-flutter/tools/configs/agl-qemu-octopus.json
index dba5a8820..20e20e0c1 100644
--- a/meta-agl-flutter/tools/configs/agl-qemu-octopus.json
+++ b/meta-agl-flutter/tools/configs/agl-qemu-octopus.json
@@ -21,11 +21,11 @@
"DEVICE_HOSTNAME": "localhost",
"FLUTTER_AUTO_EXE": "flutter-auto --j=/tmp/${appName}/default_config.json --b=/tmp/${appName}",
"PING_CMD": "(echo >/dev/tcp/localhost/${CONTAINER_SSH_PORT}) &>/dev/null && echo open || echo closed",
- "DELETE_USER_PWD": "ssh -p ${CONTAINER_SSH_PORT} -t -oBatchMode=yes root@${DEVICE_HOSTNAME} passwd -d agl-driver",
- "CREATE_BUNDLE_FOLDER": "ssh -p ${CONTAINER_SSH_PORT} -o BatchMode=yes agl-driver@${DEVICE_HOSTNAME} mkdir -p /tmp/${appName}/data",
- "COPY_PLATFORM_ID_TO_DEVICE": "scp -P ${CONTAINER_SSH_PORT} -r ${PLATFORM_ID_DIR}/default_config.json agl-driver@${DEVICE_HOSTNAME}:/tmp/${appName}/",
- "COPY_ASSETS_TO_DEVICE": "scp -P ${CONTAINER_SSH_PORT} -r ${localPath}/* agl-driver@${DEVICE_HOSTNAME}:/tmp/${appName}/data/flutter_assets",
- "DELETE_APP_FOLDER": "ssh -p ${CONTAINER_SSH_PORT} -o BatchMode=yes agl-driver@${DEVICE_HOSTNAME} rm -rf /tmp/${appName}"
+ "DELETE_USER_PWD": "ssh -oStrictHostKeyChecking=no -p ${CONTAINER_SSH_PORT} -t -oBatchMode=yes root@${DEVICE_HOSTNAME} passwd -d agl-driver",
+ "CREATE_BUNDLE_FOLDER": "ssh -oStrictHostKeyChecking=no -p ${CONTAINER_SSH_PORT} -o BatchMode=yes agl-driver@${DEVICE_HOSTNAME} mkdir -p /tmp/${appName}/data",
+ "COPY_PLATFORM_ID_TO_DEVICE": "scp -oStrictHostKeyChecking=no -P ${CONTAINER_SSH_PORT} -r ${PLATFORM_ID_DIR}/default_config.json agl-driver@${DEVICE_HOSTNAME}:/tmp/${appName}/",
+ "COPY_ASSETS_TO_DEVICE": "scp -oStrictHostKeyChecking=no -P ${CONTAINER_SSH_PORT} -r ${localPath}/* agl-driver@${DEVICE_HOSTNAME}:/tmp/${appName}/data/flutter_assets",
+ "DELETE_APP_FOLDER": "ssh -oStrictHostKeyChecking=no -p ${CONTAINER_SSH_PORT} -o BatchMode=yes agl-driver@${DEVICE_HOSTNAME} rm -rf /tmp/${appName}"
},
"runtime": {
"config": {
@@ -106,9 +106,9 @@
"postBuild": "bash -c \"${DELETE_USER_PWD}\"",
"install": "bash -c \"${CREATE_BUNDLE_FOLDER} && ${COPY_PLATFORM_ID_TO_DEVICE} && ${COPY_ASSETS_TO_DEVICE}\"",
"uninstall": "bash -c \"${DELETE_APP_FOLDER}\"",
- "runDebug": "bash -c \"ssh -t -t -o BatchMode=yes agl-driver@${DEVICE_HOSTNAME} ${FLUTTER_AUTO_EXE}\"",
+ "runDebug": "bash -c \"ssh -oStrictHostKeyChecking=no -t -t -o BatchMode=yes agl-driver@${DEVICE_HOSTNAME} ${FLUTTER_AUTO_EXE}\"",
"forwardPort": null,
"forwardPortSuccessRegex": null,
"screenshot": null
}
-} \ No newline at end of file
+}
diff --git a/meta-agl-flutter/tools/configs/agl-qemu-ricefish-18.0.0.json b/meta-agl-flutter/tools/configs/agl-qemu-ricefish-18.0.0.json
new file mode 100644
index 000000000..c03e34707
--- /dev/null
+++ b/meta-agl-flutter/tools/configs/agl-qemu-ricefish-18.0.0.json
@@ -0,0 +1,112 @@
+{
+ "id": "agl-qemu-ricefish-18.0.0",
+ "load": true,
+ "supported_archs": [
+ "x86_64"
+ ],
+ "supported_host_types": [
+ "darwin",
+ "ubuntu",
+ "fedora"
+ ],
+ "flutter_runtime": "debug",
+ "type": "qemu",
+ "env": {
+ "RELEASE_NAME": "ricefish",
+ "RELEASE_VERSION": "18.0.0",
+ "FLUTTER_VERSION": "3.24.1",
+ "QEMU_IMAGE": "agl-ivi-demo-flutter-qemux86-64.wic.vmdk",
+ "FLUTTER_DEBUG_PORT": "1234",
+ "FLUTTER_OBSERVATORY_HOST": "0.0.0.0",
+ "CONTAINER_SSH_PORT": "2222",
+ "DEVICE_HOSTNAME": "localhost",
+ "SCP_PREFIX": "scp -oStrictHostKeyChecking=no -P ${CONTAINER_SSH_PORT}",
+ "SSH_PREFIX": "ssh -oStrictHostKeyChecking=no -oBatchMode=yes -p ${CONTAINER_SSH_PORT}",
+ "FLUTTER_AUTO_EXE": "LIBCAMERA_LOG_LEVELS=*:ERROR XDG_RUNTIME_DIR=/run/user/1001/ flutter-auto --j=/tmp/${appName}/default_config.json --b=/tmp/${appName}",
+ "PING_CMD": "(echo >/dev/tcp/localhost/${CONTAINER_SSH_PORT}) &>/dev/null && echo open || echo closed",
+ "DELETE_USER_PWD": "${SSH_PREFIX} -t root@${DEVICE_HOSTNAME} passwd -d agl-driver",
+ "STOP_SERVICE": "${SSH_PREFIX} -t root@${DEVICE_HOSTNAME} systemctl stop flutter-ics-homescreen",
+ "DEBUG_ARTIFACT_PATH": "/usr/share/flutter/${FLUTTER_VERSION}/debug",
+ "CREATE_ICUDTL_SYMLINK": "${SSH_PREFIX} agl-driver@${DEVICE_HOSTNAME} ln -sf ${DEBUG_ARTIFACT_PATH}/data/icudtl.dat /tmp/${appName}/data/icudtl.dat",
+ "CREATE_ENGINE_SYMLINK": "${SSH_PREFIX} agl-driver@${DEVICE_HOSTNAME} ln -sf ${DEBUG_ARTIFACT_PATH}/lib/libflutter_engine.so /tmp/${appName}/lib/libflutter_engine.so",
+ "CREATE_BUNDLE_FOLDER": "${SSH_PREFIX} agl-driver@${DEVICE_HOSTNAME} mkdir -p /tmp/${appName}{/data/flutter_assets,/lib}",
+ "COPY_PLATFORM_ID_TO_DEVICE": "${SCP_PREFIX} -r ${PLATFORM_ID_DIR}/default_config.json agl-driver@${DEVICE_HOSTNAME}:/tmp/${appName}/",
+ "COPY_ASSETS_TO_DEVICE": "${SCP_PREFIX} -r ${localPath}/* agl-driver@${DEVICE_HOSTNAME}:/tmp/${appName}/data/flutter_assets",
+ "DELETE_APP_FOLDER": "${SSH_PREFIX} agl-driver@${DEVICE_HOSTNAME} rm -rf /tmp/${appName}"
+ },
+ "runtime": {
+ "pre-requisites": {
+ "x86_64": {
+ "ubuntu": {
+ "cmds": [
+ "sudo apt install -y qemu-system-x86-64"
+ ]
+ },
+ "fedora": {
+ "cmds": [
+ "sudo dnf install -y qemu"
+ ]
+ }
+ }
+ },
+ "config": {
+ "view": [
+ {
+ "window_type": "BG",
+ "width": 1920,
+ "height": 1080
+ }
+ ]
+ },
+ "artifacts": {
+ "http": {
+ "url": "https://download.automotivelinux.org/AGL/release/${RELEASE_NAME}/${RELEASE_VERSION}",
+ "artifacts": {
+ "x86_64": [
+ {
+ "endpoint": "/qemux86-64/deploy/images/qemux86-64/${QEMU_IMAGE}.xz"
+ }
+ ]
+ }
+ }
+ },
+ "qemu": {
+ "cmd": "qemu-system-${FORMAL_MACHINE_ARCH}",
+ "x86_64": {
+ "image": "${QEMU_IMAGE}",
+ "args": "-m 2048 ${QEMU_EXTRA} -hda ${QEMU_IMAGE} -cpu kvm64 -cpu qemu64,+ssse3,+sse4.1,+sse4.2,+popcnt -vga virtio -device virtio-rng-pci -serial mon:stdio -serial null -device intel-hda -device hda-duplex -device virtio-net-pci,netdev=net0,mac=${RANDOM_MAC} -netdev user,id=net0,hostfwd=tcp::${CONTAINER_SSH_PORT}-:22,hostfwd=tcp::${FLUTTER_DEBUG_PORT}-:${FLUTTER_DEBUG_PORT}"
+ },
+ "extra": {
+ "darwin": "-smp cpus=8,sockets=1,cores=8,threads=1",
+ "ubuntu": "-bios OVMF.fd",
+ "fedora": "-bios /usr/share/edk2/ovmf/OVMF_CODE.fd"
+ }
+ },
+ "post_cmds": [
+ {
+ "cwd": "${PLATFORM_ID_DIR}",
+ "cmds": [
+ "bash -c \"rm ${QEMU_IMAGE}|true\"",
+ "unxz --keep ${QEMU_IMAGE}.xz"
+ ]
+ }
+ ]
+ },
+ "overwrite-existing": true,
+ "custom-device": {
+ "id": "agl-qemu-${RELEASE_NAME}",
+ "label": "AGL ${RELEASE_NAME}-${RELEASE_VERSION} QEMU Image",
+ "sdkNameAndVersion": "qemu-${RELEASE_NAME} ${RELEASE_VERSION}",
+ "platform": "linux-x64",
+ "enabled": true,
+ "ping": "bash -c \"${PING_CMD}\"",
+ "pingSuccessRegex": "open",
+ "postBuild": "bash -c \"${DELETE_USER_PWD}; ${STOP_SERVICE}\"; ",
+ "install": "bash -c \"${CREATE_BUNDLE_FOLDER} && ${COPY_PLATFORM_ID_TO_DEVICE} && ${COPY_ASSETS_TO_DEVICE} && ${CREATE_ICUDTL_SYMLINK} && ${CREATE_ENGINE_SYMLINK}\"",
+ "uninstall": "bash -c \"${DELETE_APP_FOLDER}\"",
+ "runDebug": "bash -c \"${SSH_PREFIX} agl-driver@${DEVICE_HOSTNAME} ${FLUTTER_AUTO_EXE}\"",
+ "forwardPort": null,
+ "forwardPortSuccessRegex": null,
+ "screenshot": null
+ }
+}
diff --git a/meta-agl-flutter/tools/configs/agl-qemu-ricefish-18.0.1.json b/meta-agl-flutter/tools/configs/agl-qemu-ricefish-18.0.1.json
new file mode 100644
index 000000000..fde1e13ac
--- /dev/null
+++ b/meta-agl-flutter/tools/configs/agl-qemu-ricefish-18.0.1.json
@@ -0,0 +1,112 @@
+{
+ "id": "agl-qemu-ricefish-18.0.1",
+ "load": true,
+ "supported_archs": [
+ "x86_64"
+ ],
+ "supported_host_types": [
+ "darwin",
+ "ubuntu",
+ "fedora"
+ ],
+ "flutter_runtime": "debug",
+ "type": "qemu",
+ "env": {
+ "RELEASE_NAME": "ricefish",
+ "RELEASE_VERSION": "18.0.1",
+ "FLUTTER_VERSION": "3.24.1",
+ "QEMU_IMAGE": "agl-ivi-demo-flutter-qemux86-64.wic.vmdk",
+ "FLUTTER_DEBUG_PORT": "1234",
+ "FLUTTER_OBSERVATORY_HOST": "0.0.0.0",
+ "CONTAINER_SSH_PORT": "2222",
+ "DEVICE_HOSTNAME": "localhost",
+ "SCP_PREFIX": "scp -oStrictHostKeyChecking=no -P ${CONTAINER_SSH_PORT}",
+ "SSH_PREFIX": "ssh -oStrictHostKeyChecking=no -oBatchMode=yes -p ${CONTAINER_SSH_PORT}",
+ "FLUTTER_AUTO_EXE": "LIBCAMERA_LOG_LEVELS=*:ERROR XDG_RUNTIME_DIR=/run/user/1001/ flutter-auto --j=/tmp/${appName}/default_config.json --b=/tmp/${appName}",
+ "PING_CMD": "(echo >/dev/tcp/localhost/${CONTAINER_SSH_PORT}) &>/dev/null && echo open || echo closed",
+ "DELETE_USER_PWD": "${SSH_PREFIX} -t root@${DEVICE_HOSTNAME} passwd -d agl-driver",
+ "STOP_SERVICE": "${SSH_PREFIX} -t root@${DEVICE_HOSTNAME} systemctl stop flutter-ics-homescreen",
+ "DEBUG_ARTIFACT_PATH": "/usr/share/flutter/${FLUTTER_VERSION}/debug",
+ "CREATE_ICUDTL_SYMLINK": "${SSH_PREFIX} agl-driver@${DEVICE_HOSTNAME} ln -sf ${DEBUG_ARTIFACT_PATH}/data/icudtl.dat /tmp/${appName}/data/icudtl.dat",
+ "CREATE_ENGINE_SYMLINK": "${SSH_PREFIX} agl-driver@${DEVICE_HOSTNAME} ln -sf ${DEBUG_ARTIFACT_PATH}/lib/libflutter_engine.so /tmp/${appName}/lib/libflutter_engine.so",
+ "CREATE_BUNDLE_FOLDER": "${SSH_PREFIX} agl-driver@${DEVICE_HOSTNAME} mkdir -p /tmp/${appName}{/data/flutter_assets,/lib}",
+ "COPY_PLATFORM_ID_TO_DEVICE": "${SCP_PREFIX} -r ${PLATFORM_ID_DIR}/default_config.json agl-driver@${DEVICE_HOSTNAME}:/tmp/${appName}/",
+ "COPY_ASSETS_TO_DEVICE": "${SCP_PREFIX} -r ${localPath}/* agl-driver@${DEVICE_HOSTNAME}:/tmp/${appName}/data/flutter_assets",
+ "DELETE_APP_FOLDER": "${SSH_PREFIX} agl-driver@${DEVICE_HOSTNAME} rm -rf /tmp/${appName}"
+ },
+ "runtime": {
+ "pre-requisites": {
+ "x86_64": {
+ "ubuntu": {
+ "cmds": [
+ "sudo apt install -y qemu-system-x86-64"
+ ]
+ },
+ "fedora": {
+ "cmds": [
+ "sudo dnf install -y qemu"
+ ]
+ }
+ }
+ },
+ "config": {
+ "view": [
+ {
+ "window_type": "BG",
+ "width": 1920,
+ "height": 1080
+ }
+ ]
+ },
+ "artifacts": {
+ "http": {
+ "url": "https://download.automotivelinux.org/AGL/release/${RELEASE_NAME}/${RELEASE_VERSION}",
+ "artifacts": {
+ "x86_64": [
+ {
+ "endpoint": "/qemux86-64/deploy/images/qemux86-64/${QEMU_IMAGE}.xz"
+ }
+ ]
+ }
+ }
+ },
+ "qemu": {
+ "cmd": "qemu-system-${FORMAL_MACHINE_ARCH}",
+ "x86_64": {
+ "image": "${QEMU_IMAGE}",
+ "args": "-m 2048 ${QEMU_EXTRA} -hda ${QEMU_IMAGE} -cpu kvm64 -cpu qemu64,+ssse3,+sse4.1,+sse4.2,+popcnt -vga virtio -device virtio-rng-pci -serial mon:stdio -serial null -device intel-hda -device hda-duplex -device virtio-net-pci,netdev=net0,mac=${RANDOM_MAC} -netdev user,id=net0,hostfwd=tcp::${CONTAINER_SSH_PORT}-:22,hostfwd=tcp::${FLUTTER_DEBUG_PORT}-:${FLUTTER_DEBUG_PORT}"
+ },
+ "extra": {
+ "darwin": "-smp cpus=8,sockets=1,cores=8,threads=1",
+ "ubuntu": "-bios OVMF.fd",
+ "fedora": "-bios /usr/share/edk2/ovmf/OVMF_CODE.fd"
+ }
+ },
+ "post_cmds": [
+ {
+ "cwd": "${PLATFORM_ID_DIR}",
+ "cmds": [
+ "bash -c \"rm ${QEMU_IMAGE}|true\"",
+ "unxz --keep ${QEMU_IMAGE}.xz"
+ ]
+ }
+ ]
+ },
+ "overwrite-existing": true,
+ "custom-device": {
+ "id": "agl-qemu-${RELEASE_NAME}",
+ "label": "AGL ${RELEASE_NAME}-${RELEASE_VERSION} QEMU Image",
+ "sdkNameAndVersion": "qemu-${RELEASE_NAME} ${RELEASE_VERSION}",
+ "platform": "linux-x64",
+ "enabled": true,
+ "ping": "bash -c \"${PING_CMD}\"",
+ "pingSuccessRegex": "open",
+ "postBuild": "bash -c \"${DELETE_USER_PWD}; ${STOP_SERVICE}\"; ",
+ "install": "bash -c \"${CREATE_BUNDLE_FOLDER} && ${COPY_PLATFORM_ID_TO_DEVICE} && ${COPY_ASSETS_TO_DEVICE} && ${CREATE_ICUDTL_SYMLINK} && ${CREATE_ENGINE_SYMLINK}\"",
+ "uninstall": "bash -c \"${DELETE_APP_FOLDER}\"",
+ "runDebug": "bash -c \"${SSH_PREFIX} agl-driver@${DEVICE_HOSTNAME} ${FLUTTER_AUTO_EXE}\"",
+ "forwardPort": null,
+ "forwardPortSuccessRegex": null,
+ "screenshot": null
+ }
+}
diff --git a/meta-agl-flutter/tools/configs/desktop-auto.json b/meta-agl-flutter/tools/configs/desktop-auto.json
index 943bca085..977a20679 100644
--- a/meta-agl-flutter/tools/configs/desktop-auto.json
+++ b/meta-agl-flutter/tools/configs/desktop-auto.json
@@ -13,38 +13,33 @@
"env": {
"HOMESCREEN_SRC_DIR": "${FLUTTER_WORKSPACE}/app/ivi-homescreen",
"HOMESCREEN_BUILD_DIR": "${FLUTTER_WORKSPACE}/app/ivi-homescreen/build",
- "HOMESCREEN_CMAKE_ARGS": "-DCMAKE_BUILD_TYPE=Debug -DEXE_OUTPUT_NAME=flutter-auto -DSANITIZE_ADDRESS=OFF -DENABLE_DLT=OFF -DBUILD_UNIT_TESTS=OFF -DBUILD_DOCS=OFF -DBUILD_CRASH_HANDLER=OFF -DLLVM_ROOT=/usr -DBUILD_PLUGIN_FILAMENT_VIEW=OFF -DENABLE_IVI_SHELL_CLIENT=OFF -DENABLE_XDG_CLIENT=ON -DENABLE_AGL_CLIENT=ON -DENABLE_LTO=ON -DDEBUG_PLATFORM_MESSAGES=OFF -DBUILD_BACKEND_WAYLAND_EGL=ON -DBUILD_BACKEND_WAYLAND_VULKAN=OFF -DBUILD_EGL_TRANSPARENCY=ON -DBUILD_EGL_ENABLE_3D=ON -DBUILD_EGL_ENABLE_MULTISAMPLE=ON -DBUILD_PLUGIN_PDF=OFF -DBUILD_PLUGIN_FILAMENT_VIEW=OFF -DBUILD_PLUGIN_NAV_RENDER_VIEW=ON -DBUILD_PLUGIN_LAYER_PLAYGROUND_VIEW=ON -DBUILD_PLUGIN_AUDIOPLAYERS_LINUX=ON -DBUILD_PLUGIN_URL_LAUNCHER=ON -DBUILD_PLUGIN_FILE_SELECTOR=ON -DBUILD_PLUGIN_CAMERA=OFF -DBUILD_PLUGIN_GO_ROUTER=ON -DBUILD_PLUGIN_SECURE_STORAGE=ON",
- "HOMESCREEN_EXE": "SPDLOG_LEVEL=debug ${HOMESCREEN_BUILD_DIR}/shell/flutter-auto --j=${PLATFORM_ID_DIR_RELATIVE}/default_config.json --b=${PLATFORM_ID_DIR_RELATIVE}",
+ "HOMESCREEN_CMAKE_ARGS": "-DCMAKE_BUILD_TYPE=Debug -DEXE_OUTPUT_NAME=flutter-auto -DSANITIZE_ADDRESS=OFF -DENABLE_DLT=OFF -DBUILD_UNIT_TESTS=OFF -DBUILD_DOCS=OFF -DBUILD_CRASH_HANDLER=OFF -DLLVM_ROOT=/usr -DPLUGINS_DIR=${FLUTTER_WORKSPACE}/app/ivi-homescreen-plugins -DENABLE_IVI_SHELL_CLIENT=OFF -DENABLE_XDG_CLIENT=ON -DENABLE_AGL_SHELL_CLIENT=ON -DENABLE_LTO=ON -DDEBUG_PLATFORM_MESSAGES=OFF -DBUILD_BACKEND_WAYLAND_EGL=ON -DBUILD_BACKEND_WAYLAND_VULKAN=OFF -DBUILD_EGL_TRANSPARENCY=ON -DBUILD_EGL_ENABLE_3D=ON -DBUILD_EGL_ENABLE_MULTISAMPLE=ON -DBUILD_PLUGIN_PDF=OFF -DBUILD_PLUGIN_FILAMENT_VIEW=OFF -DBUILD_PLUGIN_NAV_RENDER_VIEW=ON -DBUILD_PLUGIN_AUDIOPLAYERS_LINUX=ON -DBUILD_PLUGIN_URL_LAUNCHER=ON -DBUILD_PLUGIN_FILE_SELECTOR=ON -DBUILD_PLUGIN_CAMERA=OFF -DBUILD_PLUGIN_GO_ROUTER=ON -DBUILD_PLUGIN_SECURE_STORAGE=ON -DBUILD_PLUGIN_DESKTOP_WINDOW_LINUX=ON -DBUILD_WATCHDOG=OFF",
+ "HOMESCREEN_EXE": "SPDLOG_LEVEL=debug ${HOMESCREEN_BUILD_DIR}/shell/flutter-auto -b ${PLATFORM_ID_DIR_RELATIVE}",
"PING_CMD": "loginctl show-session $(awk '/tty/ {print $1}' <(loginctl)) -p Type",
"CREATE_BUNDLE_FOLDER": "mkdir -p ${PLATFORM_ID_DIR_RELATIVE}/data",
- "COPY_PLATFORM_ID_TO_BUNDLE_FOLDER": "cp -r ${PLATFORM_ID_DIR}/default_config.json ${PLATFORM_ID_DIR_RELATIVE}/",
+ "COPY_PLATFORM_ID_TO_BUNDLE_FOLDER": "cp -r ${PLATFORM_ID_DIR}/config.toml ${PLATFORM_ID_DIR_RELATIVE}/",
"COPY_BUNDLE_FOLDER_TO_PLATOFRM_ID": "cp -r ${BUNDLE_FOLDER}/* ${PLATFORM_ID_DIR_RELATIVE}/",
"CREATE_ASSET_SYMLINK": "ln -rsf build/flutter_assets ${PLATFORM_ID_DIR_RELATIVE}/data/flutter_assets",
"STAGE_BUNDLE_FOLDER": "${CREATE_BUNDLE_FOLDER} && ${COPY_PLATFORM_ID_TO_BUNDLE_FOLDER} && ${COPY_BUNDLE_FOLDER_TO_PLATOFRM_ID} && ${CREATE_ASSET_SYMLINK}"
- },
+ },
"runtime": {
"config": {
- "view": [
- {
- "width": 1920,
- "height": 1080,
- "cursor_theme": "DMZ-White",
- "fullscreen": false
- }
- ]
+ "global": {"cursor_theme": "DMZ-White"},
+ "view": {"width": 1024, "height": 768}
},
"pre-requisites": {
"x86_64": {
"ubuntu": {
"cmds": [
"sudo snap install cmake --classic",
+ "pip3 install clang",
"sudo add-apt-repository -y ppa:kisak/kisak-mesa",
"sudo apt update -y",
"sudo apt install lsb-release wget software-properties-common gnupg apt-file",
"sudo apt update",
"sudo apt install -y libwayland-dev wayland-protocols mesa-common-dev libegl1-mesa-dev libgles2-mesa-dev mesa-utils libxkbcommon-dev ninja-build",
"sudo apt install -y build-essential libvulkan-dev vulkan-tools vulkan-validationlayers vulkan-utils libtool libsecret-1-dev libsdl2-dev libjpeg-dev zenity",
- "sudo apt install -y libllvm-ocaml-dev llvm llvm-dev llvm-runtime clang clang-tools libclang-dev libclang1 clang-format python3-clang clangd clang-tidy lldb lld libc++-dev libc++abi-dev libunwind-dev libc++1 libc++abi1",
+ "sudo apt install -y libllvm-ocaml-dev llvm llvm-dev llvm-runtime clang clang-tools libclang-dev libclang1 clang-format clangd clang-tidy lldb lld libc++-dev libc++abi-dev libunwind-dev libc++1 libc++abi1",
"sudo apt autoremove -y",
"sudo apt clean -y",
"cmake --version",
@@ -73,7 +68,7 @@
"cwd": "${HOMESCREEN_BUILD_DIR}",
"cmds": [
"cmake -GNinja ${HOMESCREEN_SRC_DIR} ${HOMESCREEN_CMAKE_ARGS}",
- "ninja homescreen"
+ "ninja flutter-auto"
]
}
]
@@ -81,7 +76,7 @@
"overwrite-existing": true,
"custom-device": {
"id": "desktop-auto",
- "label": "Toyota AGL flutter-auto",
+ "label": "Toyota flutter-auto",
"sdkNameAndVersion": "flutter-auto x86_64",
"platform": "linux-x64",
"enabled": true,
@@ -95,4 +90,4 @@
"forwardPortSuccessRegex": null,
"screenshot": null
}
-} \ No newline at end of file
+}
diff --git a/meta-netboot/recipes-core/initramfs-netboot/files/init.sh b/meta-netboot/recipes-core/initramfs-netboot/files/init.sh
index 87a1acb80..4a4af3180 100644
--- a/meta-netboot/recipes-core/initramfs-netboot/files/init.sh
+++ b/meta-netboot/recipes-core/initramfs-netboot/files/init.sh
@@ -144,12 +144,21 @@ pivot_root . boot/initramfs || bail_out "pivot_root failed."
if [[ -f /lib/systemd/system/connman.service ]]; then
newopts="-r -n"
iface=$(find_active_interface)
- [[ -n "$iface" ]] && newopts="$newopts -I $iface"
+ # beside discovered iface, also ignore known renames
+ [[ -n "$iface" ]] && newopts="$newopts -I ${iface},enp2s0,enp3s0,end0,enp0s2,enp0s1 "
log_info "Adjusting Connman command line. Will be: 'connmand $newopts'"
sed -i "s|connmand -n\$|connmand $newopts|g" /lib/systemd/system/connman.service
fi
+# workaround for systemd-network-generator bringing the interface up/down/up
+if [[ -f /usr/lib/systemd/system/systemd-network-generator.service ]] ; then
+ mkdir /etc/systemd/system/systemd-network-generator.service.d/
+ echo "[Unit]" > /etc/systemd/system/systemd-network-generator.service.d/10_disable_nbd.conf
+ echo "ConditionKernelCommandLine=!nbd.server" >> /etc/systemd/system/systemd-network-generator.service.d/10_disable_nbd.conf
+fi
+
+
# also use /proc/net/pnp to generate /etc/resolv.conf
rm -f /etc/resolv.conf
grep -v bootserver /proc/net/pnp | sed 's/^domain/search/g' >/etc/resolv.conf
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/00-functions.lua b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/00-functions.lua
deleted file mode 100644
index 7e1794df0..000000000
--- a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/00-functions.lua
+++ /dev/null
@@ -1,27 +0,0 @@
-components = {}
-
-function load_module(m)
- if not components[m] then
- components[m] = { "libwireplumber-module-" .. m, type = "module" }
- end
-end
-
-function load_pw_module(m)
- if not components[m] then
- components[m] = { "libpipewire-module-" .. m, type = "pw_module" }
- end
-end
-
-function load_script(s, a)
- if not components[s] then
- components[s] = { s, type = "script/lua", args = a }
- end
-end
-
-function load_monitor(s, a)
- load_script("monitors/" .. s .. ".lua", a)
-end
-
-function load_access(s, a)
- load_script("access/access-" .. s .. ".lua", a)
-end
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/20-AGL-log.conf b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/20-AGL-log.conf
new file mode 100644
index 000000000..7dc8938fc
--- /dev/null
+++ b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/20-AGL-log.conf
@@ -0,0 +1,5 @@
+context.properties = {
+ # F=fatal, E=critical, W=warning, N=notice, I=info, D=debug, T=trace
+ # See https://pipewire.pages.freedesktop.org/wireplumber/daemon/logging.html
+ log.level = "N"
+}
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/20-AGL-profiles.conf b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/20-AGL-profiles.conf
new file mode 100644
index 000000000..d029887df
--- /dev/null
+++ b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/20-AGL-profiles.conf
@@ -0,0 +1,29 @@
+# This configuration fragment sets up the split-instance profiles to include
+# the standard "embedded" configuration of running systemwide without
+# maintaining user state across reboots.
+# In addition, runtime settings support is disabled on the device monitor
+# instances, as it depends on the "sm-settings" metadata, which lives on the
+# policy instance. In containerized setups (such as the IC demo), the policy
+# instance runs in a container and the device monitors should not wait for it
+# or depend on it in any other way.
+
+wireplumber.profiles = {
+ policy = {
+ inherits = [ mixin.systemwide-session, mixin.stateless ]
+ }
+
+ audio = {
+ inherits = [ mixin.systemwide-session, mixin.stateless ]
+ support.settings = disabled
+ }
+
+ bluetooth = {
+ inherits = [ mixin.systemwide-session, mixin.stateless ]
+ support.settings = disabled
+ }
+
+ video-capture = {
+ inherits = [ mixin.systemwide-session, mixin.stateless ]
+ support.settings = disabled
+ }
+}
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/30-AGL-alsa.conf b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/30-AGL-alsa.conf
new file mode 100644
index 000000000..9af95413b
--- /dev/null
+++ b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/30-AGL-alsa.conf
@@ -0,0 +1,111 @@
+# Default AGL WirePlumber ALSA monitor configuration
+
+monitor.alsa.rules = [
+ #
+ # Bump priority of well-known output devices
+ # Higher priority means it gets selected as the default if it's present
+ #
+
+ # USB output
+ {
+ matches = [
+ {
+ node.name = "~alsa_output.*"
+ api.alsa.card.driver = "USB-Audio"
+ }
+ ]
+ actions = {
+ update-props = {
+ priority.driver = 1300
+ priority.session = 1300
+ }
+ }
+ }
+
+ # USB input
+ {
+ matches = [
+ {
+ node.name = "~alsa_input.*"
+ api.alsa.card.driver = "USB-Audio"
+ }
+ ]
+ actions = {
+ update-props = {
+ priority.driver = 2300
+ priority.session = 2300
+ }
+ }
+ }
+
+ # well-known internal output devices
+ {
+ matches = [
+ # ak4613
+ {
+ node.name = "~alsa_output.*"
+ api.alsa.card.id = "ak4613"
+ api.alsa.pcm.device = "0"
+ }
+ # imx8mq
+ {
+ node.name = "~alsa_output.*"
+ api.alsa.card.id = "wm8524audio"
+ }
+ # rcarsound
+ {
+ node.name = "~alsa_output.*"
+ api.alsa.card.id = "rcarsound"
+ api.alsa.pcm.device = "0"
+ }
+ # rpi3
+ {
+ node.name = "~alsa_output.*"
+ api.alsa.pcm.name = "bcm2835 ALSA"
+ }
+ # nanopc-t6
+ {
+ node.name = "~alsa_output.*"
+ api.alsa.card.id = "realtekrt5616co"
+ }
+ ]
+ actions = {
+ update-props = {
+ priority.driver = 1100
+ priority.session = 1100
+ }
+ }
+ }
+
+ # well-known internal input devices
+ {
+ matches = [
+ # ak4613
+ {
+ node.name = "~alsa_input.*"
+ api.alsa.card.id = "ak4613"
+ }
+ # imx8mq
+ {
+ node.name = "~alsa_input.*"
+ api.alsa.card.id = "wm8524audio"
+ }
+ # rcarsound
+ {
+ node.name = "~alsa_input.*"
+ api.alsa.card.id = "rcarsound"
+ }
+ # nanopc-t6
+ {
+ node.name = "~alsa_input.*"
+ api.alsa.card.id = "realtekrt5616co"
+ }
+ ]
+ actions = {
+ update-props = {
+ priority.driver = 2100
+ priority.session = 2100
+ }
+ }
+ }
+]
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/30-AGL-bluetooth.conf b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/30-AGL-bluetooth.conf
new file mode 100644
index 000000000..db5b20dc2
--- /dev/null
+++ b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/30-AGL-bluetooth.conf
@@ -0,0 +1,41 @@
+# Default AGL WirePlumber Bluetooth monitor configuration
+
+monitor.bluez.properties = {
+ ## HFP/HSP backend (default: native).
+ ## Available values: any, none, hsphfpd, ofono, native
+ bluez5.hfphsp-backend = "ofono"
+}
+
+monitor.bluez.rules = [
+ {
+ matches = [
+ {
+ ## This matches all bluetooth devices.
+ device.name = "~bluez_card.*"
+ }
+ ]
+ actions = {
+ update-props = {
+ ## Auto-connect as headset/sink on start up or when only partial
+ ## profiles have connected.
+ bluez5.auto-connect = [ hfp_hf hsp_hs a2dp_sink ]
+ }
+ }
+ }
+
+ # Make output a2dp stream nodes go through the Multimedia sink
+ # We cannot match on "media.class" here because this property
+ # is not known before the node is created
+ {
+ matches = [
+ {
+ api.bluez5.profile = "a2dp-source"
+ }
+ ]
+ actions = {
+ update-props = {
+ media.role = "Multimedia"
+ }
+ }
+ }
+]
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/50-AGL-pw-ic-ipc.conf b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/50-AGL-pw-ic-ipc.conf
new file mode 100644
index 000000000..93687501c
--- /dev/null
+++ b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/50-AGL-pw-ic-ipc.conf
@@ -0,0 +1,15 @@
+wireplumber.profiles = {
+ # Run on the "audio" instance, which runs the ALSA monitor on the host
+ audio = {
+ agl.script.pipewire-ic-ipc.alsa-suspend = required
+ }
+}
+
+wireplumber.components = [
+ # Mutes ALSA sinks when requested by pipewire-ic-ipc
+ {
+ name = alsa-suspend.lua, type = script/lua
+ provides = agl.script.pipewire-ic-ipc.alsa-suspend
+ requires = [ api.mixer ]
+ }
+]
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/bluetooth.conf b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/bluetooth.conf
deleted file mode 100644
index 9077e3f45..000000000
--- a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/bluetooth.conf
+++ /dev/null
@@ -1,74 +0,0 @@
-# WirePlumber daemon context configuration #
-
-context.properties = {
- ## Properties to configure the PipeWire context and some modules
-
- application.name = "WirePlumber Bluetooth"
- log.level = 2
- wireplumber.script-engine = lua-scripting
- wireplumber.export-core = true
-
- #mem.mlock-all = false
- #support.dbus = true
-}
-
-context.spa-libs = {
- #<factory-name regex> = <library-name>
- #
- # Used to find spa factory names. It maps an spa factory name
- # regular expression to a library name that should contain
- # that factory.
- #
- api.bluez5.* = bluez5/libspa-bluez5
- audio.convert.* = audioconvert/libspa-audioconvert
- support.* = support/libspa-support
-}
-
-context.modules = [
- #{ name = <module-name>
- # [ args = { <key> = <value> ... } ]
- # [ flags = [ [ ifexists ] [ nofail ] ]
- #}
- #
- # PipeWire modules to load.
- # If ifexists is given, the module is ignored when it is not found.
- # If nofail is given, module initialization failures are ignored.
- #
-
- # The native communication protocol.
- { name = libpipewire-module-protocol-native }
-
- # Allows creating nodes that run in the context of the
- # client. Is used by all clients that want to provide
- # data to PipeWire.
- { name = libpipewire-module-client-node }
-
- # Allows creating devices that run in the context of the
- # client. Is used by the session manager.
- { name = libpipewire-module-client-device }
-
- # Makes a factory for wrapping nodes in an adapter with a
- # converter and resampler.
- { name = libpipewire-module-adapter }
-
- # Allows applications to create metadata objects. It creates
- # a factory for Metadata objects.
- { name = libpipewire-module-metadata }
-
- # Provides factories to make session manager objects.
- { name = libpipewire-module-session-manager }
-]
-
-wireplumber.components = [
- #{ name = <component-name>, type = <component-type> }
- #
- # WirePlumber components to load
- #
-
- # The lua scripting engine
- { name = libwireplumber-module-lua-scripting, type = module }
-
- # The lua configuration file
- # Other components are loaded from there
- { name = bluetooth.lua, type = config/lua }
-]
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/bluetooth.lua.d/30-bluez-monitor.lua b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/bluetooth.lua.d/30-bluez-monitor.lua
deleted file mode 100644
index 530f4cc62..000000000
--- a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/bluetooth.lua.d/30-bluez-monitor.lua
+++ /dev/null
@@ -1,110 +0,0 @@
--- Bluez monitor config file --
-
-bluez_monitor = {}
-
-bluez_monitor.properties = {
- -- These features do not work on all headsets, so they are enabled
- -- by default based on the hardware database. They can also be
- -- forced on/off for all devices by the following options:
-
- --["bluez5.enable-sbc-xq"] = true,
- --["bluez5.enable-msbc"] = true,
- --["bluez5.enable-hw-volume"] = true,
-
- -- See bluez-hardware.conf for the hardware database.
-
- -- Enabled headset roles (default: [ hsp_hs hfp_ag ]), this
- -- property only applies to native backend. Currently some headsets
- -- (Sony WH-1000XM3) are not working with both hsp_ag and hfp_ag
- -- enabled, disable either hsp_ag or hfp_ag to work around it.
- --
- -- Supported headset roles: hsp_hs (HSP Headset),
- -- hsp_ag (HSP Audio Gateway),
- -- hfp_hf (HFP Hands-Free),
- -- hfp_ag (HFP Audio Gateway)
- ["bluez5.headset-roles"] = "[ hsp_hs hsp_ag hfp_hf hfp_ag ]",
-
- -- Enabled A2DP codecs (default: all).
- --["bluez5.codecs"] = "[ sbc sbc_xq aac ldac aptx aptx_hd aptx_ll aptx_ll_duplex faststream faststream_duplex ]",
-
- -- HFP/HSP backend (default: native).
- -- Available values: any, none, hsphfpd, ofono, native
- ["bluez5.hfphsp-backend"] = "ofono",
-
- -- Properties for the A2DP codec configuration
- --["bluez5.default.rate"] = 48000,
- --["bluez5.default.channels"] = 2,
-}
-
-bluez_monitor.rules = {
- -- An array of matches/actions to evaluate.
- {
- -- Rules for matching a device or node. It is an array of
- -- properties that all need to match the regexp. If any of the
- -- matches work, the actions are executed for the object.
- matches = {
- {
- -- This matches all cards.
- { "device.name", "matches", "bluez_card.*" },
- },
- },
- -- Apply properties on the matched object.
- apply_properties = {
- -- Auto-connect device profiles on start up or when only partial
- -- profiles have connected. Disabled by default if the property
- -- is not specified.
- --["bluez5.auto-connect"] = "[ hfp_hf hsp_hs a2dp_sink hfp_ag hsp_ag a2dp_source ]",
- ["bluez5.auto-connect"] = "[ hfp_hf hsp_hs a2dp_sink ]",
-
- -- Hardware volume control (default: [ hfp_ag hsp_ag a2dp_source ])
- --["bluez5.hw-volume"] = "[ hfp_hf hsp_hs a2dp_sink hfp_ag hsp_ag a2dp_source ]",
-
- -- LDAC encoding quality
- -- Available values: auto (Adaptive Bitrate, default)
- -- hq (High Quality, 990/909kbps)
- -- sq (Standard Quality, 660/606kbps)
- -- mq (Mobile use Quality, 330/303kbps)
- --["bluez5.a2dp.ldac.quality"] = "auto",
-
- -- AAC variable bitrate mode
- -- Available values: 0 (cbr, default), 1-5 (quality level)
- --["bluez5.a2dp.aac.bitratemode"] = 0,
-
- -- Profile connected first
- -- Available values: a2dp-sink (default), headset-head-unit
- --["device.profile"] = "a2dp-sink",
- },
- },
- {
- -- Make output hsp/hfp stream nodes go through the Communication endpoint
- -- Unfortunately we cannot match on "media.class" because this property
- -- is not known before the node is created
- matches = {
- {
- { "api.bluez5.profile", "equals", "headset-audio-gateway" },
- { "factory.name", "matches", "*source*" },
- },
- },
- apply_properties = {
- ["media.role"] = "Communication",
- },
- },
- {
- -- Make output a2dp stream nodes go through the Multimedia endpoint
- -- Unfortunately we cannot match on "media.class" because this property
- -- is not known before the node is created
- matches = {
- {
- { "api.bluez5.profile", "equals", "a2dp-source" },
- },
- },
- apply_properties = {
- ["media.role"] = "Multimedia",
- },
- },
-}
-
-load_monitor("bluez", {
- properties = bluez_monitor.properties,
- rules = bluez_monitor.rules,
-})
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/host.lua.d/30-alsa-monitor.lua b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/host.lua.d/30-alsa-monitor.lua
deleted file mode 100644
index d07f7ab85..000000000
--- a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/host.lua.d/30-alsa-monitor.lua
+++ /dev/null
@@ -1,151 +0,0 @@
--- ALSA monitor config file --
-
-alsa_monitor = {}
-
-alsa_monitor.properties = {
- ["alsa.jack-device"] = false,
- ["alsa.reserve"] = false,
-}
-
-alsa_monitor.rules = {
- -- enable ACP (PulseAudio-like profiles)
- {
- matches = {
- {
- { "device.name", "matches", "alsa_card.*" },
- },
- },
- apply_properties = {
- ["api.alsa.use-acp"] = true,
- },
- },
-
- --
- -- Bump priority of well-known output devices
- -- Higher priority means it gets selected as the default if it's present
- --
-
- -- USB card
- {
- matches = {
- {
- { "node.name", "matches", "alsa_output.*" },
- { "api.alsa.card.driver", "=", "USB-Audio" },
- },
- },
- apply_properties = {
- ["priority.driver"] = 1300,
- ["priority.session"] = 1300,
- }
- },
-
- -- fiberdyne amp
- {
- matches = {
- {
- { "node.name", "matches", "alsa_output.*" },
- { "api.alsa.card.id", "=", "ep016ch" },
- },
- },
- apply_properties = {
- ["priority.driver"] = 1200,
- ["priority.session"] = 1200,
- }
- },
-
- -- well-known internal devices
- {
- matches = {
- {
- -- ak4613
- { "node.name", "matches", "alsa_output.*" },
- { "api.alsa.card.id", "=", "ak4613" },
- { "api.alsa.pcm.device", "=", "0" },
- },
- {
- -- imx8mq
- { "node.name", "matches", "alsa_output.*" },
- { "api.alsa.card.id", "=", "wm8524audio" },
- },
- {
- -- rcarsound
- { "node.name", "matches", "alsa_output.*" },
- { "api.alsa.card.id", "=", "rcarsound" },
- { "api.alsa.pcm.device", "=", "0" },
- },
- {
- -- rpi3
- { "node.name", "matches", "alsa_output.*" },
- { "api.alsa.pcm.name", "=", "bcm2835 ALSA" },
- },
- },
- apply_properties = {
- ["priority.driver"] = 1100,
- ["priority.session"] = 1100,
- }
- },
-
- --
- -- Same for input devices
- --
-
- -- USB card
- {
- matches = {
- {
- { "node.name", "matches", "alsa_input.*" },
- { "api.alsa.card.driver", "=", "USB-Audio" },
- },
- },
- apply_properties = {
- ["priority.driver"] = 2300,
- ["priority.session"] = 2300,
- }
- },
-
- -- microchip mic
- {
- matches = {
- {
- { "node.name", "matches", "alsa_input.*" },
- { "api.alsa.card.id", "=", "ep811ch" },
- },
- },
- apply_properties = {
- ["priority.driver"] = 2200,
- ["priority.session"] = 2200,
- }
- },
-
- -- well-known internal devices
- {
- matches = {
- {
- -- ak4613
- { "node.name", "matches", "alsa_input.*" },
- { "api.alsa.card.id", "=", "ak4613" },
- },
- {
- -- imx8mq
- { "node.name", "matches", "alsa_input.*" },
- { "api.alsa.card.id", "=", "wm8524audio" },
- },
- {
- -- rcarsound
- { "node.name", "matches", "alsa_input.*" },
- { "api.alsa.card.id", "=", "rcarsound" },
- },
- },
- apply_properties = {
- ["priority.driver"] = 2100,
- ["priority.session"] = 2100,
- }
- },
-}
-
-function alsa_monitor.enable()
- load_monitor("alsa", {
- properties = alsa_monitor.properties,
- rules = alsa_monitor.rules,
- })
-end
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/host.lua.d/30-v4l2-monitor.lua b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/host.lua.d/30-v4l2-monitor.lua
deleted file mode 100644
index a4eb58ac8..000000000
--- a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/host.lua.d/30-v4l2-monitor.lua
+++ /dev/null
@@ -1,48 +0,0 @@
--- V4L2 monitor config file --
-
-v4l2_monitor = {}
-v4l2_monitor.properties = {}
-
-v4l2_monitor.rules = {
- -- An array of matches/actions to evaluate.
- {
- -- Rules for matching a device or node. It is an array of
- -- properties that all need to match the regexp. If any of the
- -- matches work, the actions are executed for the object.
- matches = {
- {
- -- This matches all cards.
- { "device.name", "matches", "v4l2_device.*" },
- },
- },
- -- Apply properties on the matched object.
- apply_properties = {
- -- ["device.nick"] = "My Device",
- },
- },
- {
- matches = {
- {
- -- Matches all sources.
- { "node.name", "matches", "v4l2_input.*" },
- },
- {
- -- Matches all sinks.
- { "node.name", "matches", "v4l2_output.*" },
- },
- },
- apply_properties = {
- --["node.nick"] = "My Node",
- --["priority.driver"] = 100,
- --["priority.session"] = 100,
- --["node.pause-on-idle"] = false,
- },
- },
-}
-
-function v4l2_monitor.enable()
- load_monitor("v4l2", {
- properties = v4l2_monitor.properties,
- rules = v4l2_monitor.rules,
- })
-end
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/host.lua.d/40-device-defaults.lua b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/host.lua.d/40-device-defaults.lua
deleted file mode 100644
index e0d332422..000000000
--- a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/host.lua.d/40-device-defaults.lua
+++ /dev/null
@@ -1,26 +0,0 @@
-device_defaults = {}
-
-device_defaults.properties = {
- -- store preferences to the file system and restore them at startup;
- -- when set to false, default nodes and routes are selected based on
- -- their priorities and any runtime changes do not persist after restart
- ["use-persistent-storage"] = false,
-}
-
-function device_defaults.enable()
- -- Selects appropriate default nodes and enables saving and restoring them
- load_module("default-nodes", device_defaults.properties)
-
- -- Selects appropriate default routes ("ports" in pulseaudio terminology)
- -- and enables saving and restoring them together with
- -- their properties (per-route/port volume levels, channel maps, etc)
- load_script("policy-device-routes.lua", device_defaults.properties)
-
- if device_defaults.properties["use-persistent-storage"] then
- -- Enables functionality to save and restore default device profiles
- load_module("default-profile")
-
- -- Save and restore stream-specific properties
- load_script("restore-stream.lua")
- end
-end
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/host.lua.d/90-enable-all.lua b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/host.lua.d/90-enable-all.lua
deleted file mode 100644
index ecb7da476..000000000
--- a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/host.lua.d/90-enable-all.lua
+++ /dev/null
@@ -1,20 +0,0 @@
--- Provide the "default" pw_metadata, which stores
--- dynamic properties of pipewire objects in RAM
-load_module("metadata")
-
--- Load devices
-alsa_monitor.enable()
-v4l2_monitor.enable()
-
--- Track/store/restore user choices about devices
-device_defaults.enable()
-
--- Automatically suspends idle nodes after 3 seconds
-load_script("suspend-node.lua")
-
--- Automatically sets device profiles to 'On'
-load_script("policy-device-profile.lua")
-
--- Mute ALSA sinks when requested by pipewire-ic-ipc
-load_module("mixer-api")
-load_script("alsa-suspend.lua")
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/wireplumber.conf b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/wireplumber.conf
deleted file mode 100644
index 46ad11302..000000000
--- a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/wireplumber.conf
+++ /dev/null
@@ -1,115 +0,0 @@
-# WirePlumber daemon context configuration #
-
-context.properties = {
- ## Properties to configure the PipeWire context and some modules
-
- # 1=error/critical/warning, 2=message, 3=info, 4=debug, 5=trace
- log.level = 2
-
- wireplumber.script-engine = lua-scripting
-}
-
-context.spa-libs = {
- #<factory-name regex> = <library-name>
- #
- # Used to find spa factory names. It maps an spa factory name
- # regular expression to a library name that should contain
- # that factory.
- #
- api.alsa.* = alsa/libspa-alsa
- api.bluez5.* = bluez5/libspa-bluez5
- api.v4l2.* = v4l2/libspa-v4l2
- api.libcamera.* = libcamera/libspa-libcamera
- audio.convert.* = audioconvert/libspa-audioconvert
- support.* = support/libspa-support
-}
-
-context.modules = [
- #{ name = <module-name>
- # [ args = { <key> = <value> ... } ]
- # [ flags = [ [ ifexists ] [ nofail ] ]
- #}
- #
- # PipeWire modules to load.
- # If ifexists is given, the module is ignored when it is not found.
- # If nofail is given, module initialization failures are ignored.
- #
-
- # The native communication protocol.
- { name = libpipewire-module-protocol-native }
-
- # Allows creating nodes that run in the context of the
- # client. Is used by all clients that want to provide
- # data to PipeWire.
- { name = libpipewire-module-client-node }
-
- # Allows creating devices that run in the context of the
- # client. Is used by the session manager.
- { name = libpipewire-module-client-device }
-
- # Makes a factory for wrapping nodes in an adapter with a
- # converter and resampler.
- { name = libpipewire-module-adapter }
-
- # Allows applications to create metadata objects. It creates
- # a factory for Metadata objects.
- { name = libpipewire-module-metadata }
-
- # Provides factories to make session manager objects.
- { name = libpipewire-module-session-manager }
-
- { name = libpipewire-module-filter-chain
- args = {
- node.description = "Equalizer Sink"
- media.name = "Equalizer Sink"
- filter.graph = {
- nodes = [
- {
- type = builtin
- name = bass
- label = bq_lowshelf
- # the cut off freq of the bass filter can be adjusted here.
- control = { "Freq" = 250.0 "Q" = 1.0 "Gain" = 0.0 }
- }
- {
- type = builtin
- name = treble
- label = bq_peaking
- # the cut off freq of the treble filter can be adjusted here.
- control = { "Freq" = 6000.0 "Q" = 1.0 "Gain" = 0.0 }
- }
- ]
- links = [
- { output = "bass:Out" input = "treble:In" }
- ]
- }
- audio.channels = 2
- audio.position = [ FL FR ]
- capture.props = {
- node.name = "eq-sink"
- media.class = Audio/Sink
- # select the endpoint to which the node is attached
- target.endpoint = "endpoint.multimedia"
- node.passive = true
- }
- playback.props = {
- node.name = "eq-output-stream"
- node.passive = true
- }
- }
- }
-]
-
-wireplumber.components = [
- #{ name = <component-name>, type = <component-type> }
- #
- # WirePlumber components to load
- #
-
- # The lua scripting engine
- { name = libwireplumber-module-lua-scripting, type = module }
-
- # The lua configuration file(s)
- # Other components are loaded from there
- { name = host.lua, type = config/lua }
-]
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl_git.bb b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl_git.bb
index 22ffe5bf3..db2c67dcf 100644
--- a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl_git.bb
+++ b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl_git.bb
@@ -6,12 +6,12 @@ SECTION = "multimedia"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
SRC_URI = "\
- file://bluetooth.lua.d/ \
- file://host.lua.d/ \
- file://00-functions.lua \
+ file://20-AGL-log.conf \
+ file://20-AGL-profiles.conf \
+ file://30-AGL-alsa.conf \
+ file://30-AGL-bluetooth.conf \
+ file://50-AGL-pw-ic-ipc.conf \
file://alsa-suspend.lua \
- file://bluetooth.conf \
- file://wireplumber.conf \
file://wireplumber-bluetooth.conf \
"
PACKAGE_ARCH = "${MACHINE_ARCH}"
@@ -19,27 +19,20 @@ PACKAGE_ARCH = "${MACHINE_ARCH}"
do_configure[noexec] = "1"
do_compile[noexec] = "1"
do_install:append() {
- config_dir="${D}${sysconfdir}/wireplumber/"
+ config_dir="${D}${sysconfdir}/wireplumber/wireplumber.conf.d/"
scripts_dir="${D}${datadir}/wireplumber/scripts/"
dbus_config_dir="${D}${sysconfdir}/dbus-1/system.d/"
systemd_dir="${D}${sysconfdir}/systemd/system/pipewire.service.wants/"
+ # install the configuration fragments
install -d ${config_dir}
- install -m 0644 ${WORKDIR}/00-functions.lua ${config_dir}
+ install -m 0644 ${WORKDIR}/20-AGL-log.conf ${config_dir}
+ install -m 0644 ${WORKDIR}/20-AGL-profiles.conf ${config_dir}
+ install -m 0644 ${WORKDIR}/30-AGL-alsa.conf ${config_dir}
+ install -m 0644 ${WORKDIR}/30-AGL-bluetooth.conf ${config_dir}
+ install -m 0644 ${WORKDIR}/50-AGL-pw-ic-ipc.conf ${config_dir}
- # config of the main (host) instance
- install -d ${config_dir}/host.lua.d/
- ln -s ../00-functions.lua ${config_dir}/host.lua.d/00-functions.lua
- install -m 0644 ${WORKDIR}/host.lua.d/*.lua ${config_dir}/host.lua.d/
- install -m 0644 ${WORKDIR}/wireplumber.conf ${config_dir}
-
- # config of the bluetooth instance
- install -d ${config_dir}/bluetooth.lua.d/
- ln -s ../00-functions.lua ${config_dir}/bluetooth.lua.d/00-functions.lua
- install -m 0644 ${WORKDIR}/bluetooth.lua.d/*.lua ${config_dir}/bluetooth.lua.d/
- install -m 0644 ${WORKDIR}/bluetooth.conf ${config_dir}
-
- # install the alsa-suspend script, loaded by the main instance
+ # install the alsa-suspend script, loaded by the audio instance
install -d ${scripts_dir}
install -m 0644 ${WORKDIR}/alsa-suspend.lua ${scripts_dir}
@@ -49,6 +42,8 @@ do_install:append() {
# enable additional systemd services
install -d ${systemd_dir}
+ ln -s ${systemd_system_unitdir}/wireplumber@.service ${systemd_dir}/wireplumber@audio.service
+ ln -s ${systemd_system_unitdir}/wireplumber@.service ${systemd_dir}/wireplumber@video-capture.service
ln -s ${systemd_system_unitdir}/wireplumber@.service ${systemd_dir}/wireplumber@bluetooth.service
}
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-policy-config-agl/00-functions.lua b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-policy-config-agl/00-functions.lua
deleted file mode 100644
index 7e1794df0..000000000
--- a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-policy-config-agl/00-functions.lua
+++ /dev/null
@@ -1,27 +0,0 @@
-components = {}
-
-function load_module(m)
- if not components[m] then
- components[m] = { "libwireplumber-module-" .. m, type = "module" }
- end
-end
-
-function load_pw_module(m)
- if not components[m] then
- components[m] = { "libpipewire-module-" .. m, type = "pw_module" }
- end
-end
-
-function load_script(s, a)
- if not components[s] then
- components[s] = { s, type = "script/lua", args = a }
- end
-end
-
-function load_monitor(s, a)
- load_script("monitors/" .. s .. ".lua", a)
-end
-
-function load_access(s, a)
- load_script("access/access-" .. s .. ".lua", a)
-end
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-policy-config-agl/50-AGL-equalizer.conf b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-policy-config-agl/50-AGL-equalizer.conf
new file mode 100644
index 000000000..061eae96c
--- /dev/null
+++ b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-policy-config-agl/50-AGL-equalizer.conf
@@ -0,0 +1,75 @@
+wireplumber.profiles = {
+ policy = {
+ agl.filter.equalizer-sink = required
+ }
+}
+
+wireplumber.components = [
+ {
+ name = libpipewire-module-filter-chain, type = pw-module
+ arguments = {
+ node.description = "Equalizer Sink"
+ media.name = "Equalizer Sink"
+ filter.graph = {
+ nodes = [
+ {
+ type = builtin
+ name = bass
+ label = bq_lowshelf
+ # the cut off freq of the bass filter can be adjusted here.
+ control = { "Freq" = 250.0 "Q" = 1.0 "Gain" = 0.0 }
+ }
+ {
+ type = builtin
+ name = treble
+ label = bq_peaking
+ # the cut off freq of the treble filter can be adjusted here.
+ control = { "Freq" = 6000.0 "Q" = 1.0 "Gain" = 0.0 }
+ }
+ ]
+ links = [
+ { output = "bass:Out" input = "treble:In" }
+ ]
+ }
+ audio.channels = 2
+ audio.position = [ FL FR ]
+ capture.props = {
+ node.name = "eq-sink"
+
+ # this is a sink filter, so it will appear as a sink in wpctl/pactl/etc,
+ # it will target a sink and can be chained with other sink smart filters
+ media.class = Audio/Sink
+
+ # treat this as a smart filter
+ filter.smart = true
+
+ # the unique name of the filter
+ filter.smart.name = "agl.filter.equalizer-sink"
+
+ ## set this to always link the filter to a particular sink
+ ## or leave it unset in order to follow the default sink
+ #filter.smart.target = { node.name = "alsa_output.pci-0000_00_01.0.analog-stereo" }
+
+ ## here you can specify filter dependencies, using their names
+ ## (filter.smart.name) if you set up many of them to be linked in a chain
+ #filter.smart.before = []
+ #filter.smart.after = []
+ }
+ playback.props = {
+ node.name = "eq-output-stream"
+
+ # This must be set to ensure that the real audio sink is suspended
+ # when there is no active client stream linked
+ node.passive = true
+
+ # Set this to avoid linking the filter to role-based sinks when
+ # role-based sinks are defined and node.stream.default-media-role is
+ # configured in the settings
+ media.role = "DSP"
+ }
+ }
+ provides = agl.filter.equalizer-sink
+ requires = [ pw.node-factory.adapter ]
+ after = [ support.standard-event-source ]
+ }
+]
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-policy-config-agl/50-AGL-media-role-nodes.conf b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-policy-config-agl/50-AGL-media-role-nodes.conf
new file mode 100644
index 000000000..4e4f3323f
--- /dev/null
+++ b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-policy-config-agl/50-AGL-media-role-nodes.conf
@@ -0,0 +1,184 @@
+wireplumber.profiles = {
+ policy = {
+ agl.policy.linking.role-based.loopbacks = required
+ }
+}
+
+wireplumber.settings = {
+ # This sets a default media role to be applied to streams that don't have
+ # a role already set. This allows you to force all streams to go through
+ # the role loopbacks. If not set, then streams without a role will follow
+ # the standard desktop policy and will link to the default sink
+ node.stream.default-media-role = "Multimedia"
+
+ # The volume level that is applied when ducking
+ # Note that this is a raw linear volume, not cubic (0.2 is 58%)
+ linking.role-based.duck-level = 0.2
+
+ # Do not allow changing the targets of streams via `target.object` metadata
+ linking.allow-moving-streams = false
+}
+
+wireplumber.components.rules = [
+ # This encodes common arguments and dependencies of the role loopbacks so that
+ # we don't have to repeateadly write them on all instances below
+ {
+ matches = [
+ {
+ provides = "~loopback.sink.*"
+ }
+ ]
+ actions = {
+ merge = {
+ arguments = {
+ capture.props = {
+ # Explicitly mark all these sinks as valid role-based policy
+ # targets, meaning that any links between streams and these sinks
+ # will be managed by the role-based policy
+ policy.role-based.target = true
+
+ audio.position = [ FL, FR ]
+ media.class = Audio/Sink
+ }
+ playback.props = {
+ # This must be set to ensure that the real audio sink is suspended
+ # when there is no active client stream linked
+ node.passive = true
+ # Set this to an unused role to make sure that loopbacks don't
+ # accidentally chain-link on to one another, especially when
+ # node.stream.default-media-role is configured in the settings
+ media.role = "Loopback"
+ }
+ }
+ requires = [ pw.node-factory.adapter ]
+ after = [ support.standard-event-source ]
+ }
+ }
+ }
+]
+
+wireplumber.components = [
+ {
+ type = virtual, provides = agl.policy.linking.role-based.loopbacks
+ requires = [ loopback.sink.role.multimedia
+ loopback.sink.role.speech-low
+ loopback.sink.role.custom-low
+ loopback.sink.role.navigation
+ loopback.sink.role.speech-high
+ loopback.sink.role.custom-high
+ loopback.sink.role.communication
+ loopback.sink.role.emergency ]
+ }
+ {
+ name = libpipewire-module-loopback, type = pw-module
+ arguments = {
+ node.name = "loopback.sink.role.multimedia"
+ node.description = "Multimedia"
+ capture.props = {
+ device.intended-roles = [ "Music", "Movie", "Game", "Multimedia" ]
+ policy.role-based.priority = 25
+ policy.role-based.action.same-priority = "mix"
+ policy.role-based.action.lower-priority = "mix"
+ }
+ }
+ provides = loopback.sink.role.multimedia
+ }
+ {
+ name = libpipewire-module-loopback, type = pw-module
+ arguments = {
+ node.name = "loopback.sink.role.speech-low"
+ node.description = "Speech (Low Priority)"
+ capture.props = {
+ device.intended-roles = [ "Speech-Low" ]
+ policy.role-based.priority = 30
+ policy.role-based.action.same-priority = "mix"
+ policy.role-based.action.lower-priority = "cork"
+ }
+ }
+ provides = loopback.sink.role.speech-low
+ }
+ {
+ name = libpipewire-module-loopback, type = pw-module
+ arguments = {
+ node.name = "loopback.sink.role.custom-low"
+ node.description = "Custom role (Low Priority)"
+ capture.props = {
+ device.intended-roles = [ "Custom-Low" ]
+ policy.role-based.priority = 35
+ policy.role-based.action.same-priority = "mix"
+ policy.role-based.action.lower-priority = "cork"
+ }
+ }
+ provides = loopback.sink.role.custom-low
+ }
+ {
+ name = libpipewire-module-loopback, type = pw-module
+ arguments = {
+ node.name = "loopback.sink.role.navigation"
+ node.description = "Navigation"
+ capture.props = {
+ device.intended-roles = [ "Navigation" ]
+ policy.role-based.priority = 50
+ policy.role-based.action.same-priority = "mix"
+ policy.role-based.action.lower-priority = "duck"
+ }
+ }
+ provides = loopback.sink.role.navigation
+ }
+ {
+ name = libpipewire-module-loopback, type = pw-module
+ arguments = {
+ node.name = "loopback.sink.role.speech-high"
+ node.description = "Speech (High Priority)"
+ capture.props = {
+ device.intended-roles = [ "Speech-High" ]
+ policy.role-based.priority = 60
+ policy.role-based.action.same-priority = "mix"
+ policy.role-based.action.lower-priority = "cork"
+ }
+ }
+ provides = loopback.sink.role.speech-high
+ }
+ {
+ name = libpipewire-module-loopback, type = pw-module
+ arguments = {
+ node.name = "loopback.sink.role.custom-high"
+ node.description = "Custom role (High Priority)"
+ capture.props = {
+ device.intended-roles = [ "Custom-High" ]
+ policy.role-based.priority = 65
+ policy.role-based.action.same-priority = "mix"
+ policy.role-based.action.lower-priority = "cork"
+ }
+ }
+ provides = loopback.sink.role.custom-high
+ }
+ {
+ name = libpipewire-module-loopback, type = pw-module
+ arguments = {
+ node.name = "loopback.sink.role.communication"
+ node.description = "Communication"
+ capture.props = {
+ device.intended-roles = [ "Communication" ]
+ policy.role-based.priority = 75
+ policy.role-based.action.same-priority = "mix"
+ policy.role-based.action.lower-priority = "cork"
+ }
+ }
+ provides = loopback.sink.role.communication
+ }
+ {
+ name = libpipewire-module-loopback, type = pw-module
+ arguments = {
+ node.name = "loopback.sink.role.emergency"
+ node.description = "Emergency"
+ capture.props = {
+ device.intended-roles = [ "Emergency", "Alert" ]
+ policy.role-based.priority = 99
+ policy.role-based.action.same-priority = "mix"
+ policy.role-based.action.lower-priority = "cork"
+ }
+ }
+ provides = loopback.sink.role.emergency
+ }
+]
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-policy-config-agl/policy.conf b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-policy-config-agl/policy.conf
deleted file mode 100644
index 42f714849..000000000
--- a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-policy-config-agl/policy.conf
+++ /dev/null
@@ -1,73 +0,0 @@
-# WirePlumber daemon context configuration #
-
-context.properties = {
- ## Properties to configure the PipeWire context and some modules
-
- application.name = "WirePlumber Policy"
- log.level = 2
- wireplumber.script-engine = lua-scripting
- wireplumber.export-core = false
-
- #mem.mlock-all = false
- #support.dbus = true
-}
-
-context.spa-libs = {
- #<factory-name regex> = <library-name>
- #
- # Used to find spa factory names. It maps an spa factory name
- # regular expression to a library name that should contain
- # that factory.
- #
- audio.convert.* = audioconvert/libspa-audioconvert
- support.* = support/libspa-support
-}
-
-context.modules = [
- #{ name = <module-name>
- # [ args = { <key> = <value> ... } ]
- # [ flags = [ [ ifexists ] [ nofail ] ]
- #}
- #
- # PipeWire modules to load.
- # If ifexists is given, the module is ignored when it is not found.
- # If nofail is given, module initialization failures are ignored.
- #
-
- # The native communication protocol.
- { name = libpipewire-module-protocol-native }
-
- # Allows creating nodes that run in the context of the
- # client. Is used by all clients that want to provide
- # data to PipeWire.
- { name = libpipewire-module-client-node }
-
- # Allows creating devices that run in the context of the
- # client. Is used by the session manager.
- { name = libpipewire-module-client-device }
-
- # Makes a factory for wrapping nodes in an adapter with a
- # converter and resampler.
- { name = libpipewire-module-adapter }
-
- # Allows applications to create metadata objects. It creates
- # a factory for Metadata objects.
- { name = libpipewire-module-metadata }
-
- # Provides factories to make session manager objects.
- { name = libpipewire-module-session-manager }
-]
-
-wireplumber.components = [
- #{ name = <component-name>, type = <component-type> }
- #
- # WirePlumber components to load
- #
-
- # The lua scripting engine
- { name = libwireplumber-module-lua-scripting, type = module }
-
- # The lua configuration file
- # Other components are loaded from there
- { name = policy.lua, type = config/lua }
-]
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-policy-config-agl/policy.lua.d/10-default-policy.lua b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-policy-config-agl/policy.lua.d/10-default-policy.lua
deleted file mode 100644
index 6814fce4d..000000000
--- a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-policy-config-agl/policy.lua.d/10-default-policy.lua
+++ /dev/null
@@ -1,137 +0,0 @@
--- Policy config file --
-
-policy_config = {}
-
-policy_config.endpoints = {
- -- [endpoint name] = { endpoint properties }
- ["endpoint.capture"] = {
- ["media.class"] = "Audio/Source",
- ["role"] = "Capture",
- },
- ["endpoint.multimedia"] = {
- ["media.class"] = "Audio/Sink",
- ["role"] = "Multimedia",
- },
- ["endpoint.speech_low"] = {
- ["media.class"] = "Audio/Sink",
- ["role"] = "Speech-Low",
- },
- ["endpoint.custom_low"] = {
- ["media.class"] = "Audio/Sink",
- ["role"] = "Custom-Low",
- },
- ["endpoint.navigation"] = {
- ["media.class"] = "Audio/Sink",
- ["role"] = "Navigation",
- },
- ["endpoint.speech_high"] = {
- ["media.class"] = "Audio/Sink",
- ["role"] = "Speech-High",
- },
- ["endpoint.custom_high"] = {
- ["media.class"] = "Audio/Sink",
- ["role"] = "Custom-High",
- },
- ["endpoint.communication"] = {
- ["media.class"] = "Audio/Sink",
- ["role"] = "Communication",
- },
- ["endpoint.emergency"] = {
- ["media.class"] = "Audio/Sink",
- ["role"] = "Emergency",
- },
-}
-
-policy_config.policy = {
- ["move"] = false, -- moves session items when metadata target.node changes
- ["follow"] = true, -- moves session items to the default device when it has changed
-
- -- Set to 'true' to disable channel splitting & merging on nodes and enable
- -- passthrough of audio in the same format as the format of the device.
- -- Note that this breaks JACK support; it is generally not recommended
- ["audio.no-dsp"] = false,
-
- -- how much to lower the volume of lower priority streams when ducking
- -- note that this is a linear volume modifier (not cubic as in pulseaudio)
- ["duck.level"] = 0.2,
-
- ["roles"] = {
- ["Capture"] = {
- ["alias"] = { "Multimedia", "Music", "Voice", "Capture" },
- ["priority"] = 25,
- ["action.default"] = "cork",
- ["action.Capture"] = "mix",
- ["media.class"] = "Audio/Source",
- },
- ["Multimedia"] = {
- ["alias"] = { "Movie", "Music", "Game" },
- ["priority"] = 25,
- ["action.default"] = "mix",
- },
- ["Speech-Low"] = {
- ["priority"] = 30,
- ["action.default"] = "cork",
- ["action.Speech-Low"] = "mix",
- },
- ["Custom-Low"] = {
- ["priority"] = 35,
- ["action.default"] = "cork",
- ["action.Custom-Low"] = "mix",
- },
- ["Navigation"] = {
- ["priority"] = 50,
- ["action.default"] = "duck",
- ["action.Navigation"] = "mix",
- },
- ["Speech-High"] = {
- ["priority"] = 60,
- ["action.default"] = "cork",
- ["action.Speech-High"] = "mix",
- },
- ["Custom-High"] = {
- ["priority"] = 65,
- ["action.default"] = "cork",
- ["action.Custom-High"] = "mix",
- },
- ["Communication"] = {
- ["priority"] = 75,
- ["action.default"] = "cork",
- ["action.Communication"] = "mix",
- },
- ["Emergency"] = {
- ["alias"] = { "Alert" },
- ["priority"] = 99,
- ["action.default"] = "cork",
- ["action.Emergency"] = "mix",
- },
- },
-}
-
--- Session item factories, building blocks for the session management graph
--- Do not disable these unless you really know what you are doing
-load_module("si-node")
-load_module("si-audio-adapter")
-load_module("si-standard-link")
-load_module("si-audio-endpoint")
-
--- API to access default nodes from scripts
-load_module("default-nodes-api")
-
--- API to access mixer controls, needed for volume ducking
-load_module("mixer-api")
-
--- Create endpoints statically at startup
-load_script("static-endpoints.lua", policy_config.endpoints)
-
--- Create session items for nodes that appear in the graph
-load_script("create-item.lua", policy_config.policy)
-
--- Link nodes to each other to make media flow in the graph
-load_script("policy-node.lua", policy_config.policy)
-
--- Link client nodes with endpoints to make media flow in the graph
-load_script("policy-endpoint-client.lua", policy_config.policy)
-load_script("policy-endpoint-client-links.lua", policy_config.policy)
-
--- Link endpoints with device nodes to make media flow in the graph
-load_script("policy-endpoint-device.lua", policy_config.policy)
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-policy-config-agl_git.bb b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-policy-config-agl_git.bb
index 1a031160e..7973a0a33 100644
--- a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-policy-config-agl_git.bb
+++ b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-policy-config-agl_git.bb
@@ -6,26 +6,20 @@ SECTION = "multimedia"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
SRC_URI = "\
- file://policy.lua.d \
- file://00-functions.lua \
- file://policy.conf \
+ file://50-AGL-equalizer.conf \
+ file://50-AGL-media-role-nodes.conf \
"
PACKAGE_ARCH = "${MACHINE_ARCH}"
do_configure[noexec] = "1"
do_compile[noexec] = "1"
do_install:append() {
- config_dir="${D}${sysconfdir}/wireplumber/"
+ config_dir="${D}${sysconfdir}/wireplumber/wireplumber.conf.d/"
systemd_dir="${D}${sysconfdir}/systemd/system/pipewire.service.wants"
install -d ${config_dir}
- install -m 0644 ${WORKDIR}/00-functions.lua ${config_dir}
-
- # config of the policy instance
- install -d ${config_dir}/policy.lua.d/
- ln -s ../00-functions.lua ${config_dir}/policy.lua.d/00-functions.lua
- install -m 0644 ${WORKDIR}/policy.lua.d/*.lua ${config_dir}/policy.lua.d/
- install -m 0644 ${WORKDIR}/policy.conf ${config_dir}
+ install -m 0644 ${WORKDIR}/50-AGL-equalizer.conf ${config_dir}
+ install -m 0644 ${WORKDIR}/50-AGL-media-role-nodes.conf ${config_dir}
# enable additional systemd services
install -d ${systemd_dir}
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber_%.bbappend b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber_%.bbappend
new file mode 100644
index 000000000..16d3817cd
--- /dev/null
+++ b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber_%.bbappend
@@ -0,0 +1,9 @@
+do_install:append() {
+ systemd_dir="${D}${sysconfdir}/systemd/system/"
+
+ # mask the main service, to enable split-instance configuration
+ # accomodated by the services installed in wireplumber-config-agl
+ # and wireplumber-policy-config-agl
+ install -d ${systemd_dir}
+ ln -s /dev/null ${systemd_dir}/wireplumber.service
+}
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber_0.5.6.bb b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber_0.5.6.bb
new file mode 100644
index 000000000..d7fecd18b
--- /dev/null
+++ b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber_0.5.6.bb
@@ -0,0 +1,138 @@
+SUMMARY = "Session / policy manager implementation for PipeWire"
+HOMEPAGE = "https://gitlab.freedesktop.org/pipewire/wireplumber"
+BUGTRACKER = "https://gitlab.freedesktop.org/pipewire/wireplumber/issues"
+SECTION = "multimedia"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=17d1fe479cdec331eecbc65d26bc7e77"
+
+DEPENDS = "glib-2.0 glib-2.0-native lua pipewire \
+ ${@bb.utils.contains("DISTRO_FEATURES", "gobject-introspection-data", "python3-native python3-lxml-native doxygen-native", "", d)} \
+"
+
+SRCREV = "141b2d5d3f793e20f94421c554d8d9c51143ce0d"
+SRC_URI = " \
+ git://gitlab.freedesktop.org/pipewire/wireplumber.git;branch=master;protocol=https \
+"
+
+S = "${WORKDIR}/git"
+
+inherit meson pkgconfig gobject-introspection systemd
+
+GIR_MESON_ENABLE_FLAG = 'enabled'
+GIR_MESON_DISABLE_FLAG = 'disabled'
+
+# Enable system-lua to let wireplumber use OE's lua.
+# Documentation needs python-sphinx, which is not in oe-core or meta-python2 for now.
+# elogind is not (yet) available in OE, so disable support.
+EXTRA_OEMESON += " \
+ -Ddoc=disabled \
+ -Dsystem-lua=true \
+ -Delogind=disabled \
+ -Dsystemd-system-unit-dir=${systemd_system_unitdir} \
+ -Dsystemd-user-unit-dir=${systemd_user_unitdir} \
+ -Dtests=false \
+"
+
+PACKAGECONFIG ??= " dbus \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'systemd systemd-system-service systemd-user-service', '', d)} \
+"
+
+PACKAGECONFIG[systemd] = "-Dsystemd=enabled,-Dsystemd=disabled,systemd"
+PACKAGECONFIG[systemd-system-service] = "-Dsystemd-system-service=true,-Dsystemd-system-service=false,systemd"
+# "systemd-user-service" packageconfig will only install service
+# files to rootfs but not enable them as systemd.bbclass
+# currently lacks the feature of enabling user services.
+PACKAGECONFIG[systemd-user-service] = "-Dsystemd-user-service=true,-Dsystemd-user-service=false,systemd"
+PACKAGECONFIG[dbus] = ""
+
+PACKAGESPLITFUNCS:prepend = " split_dynamic_packages "
+PACKAGESPLITFUNCS:append = " set_dynamic_metapkg_rdepends "
+
+WP_MODULE_SUBDIR = "wireplumber-0.5"
+
+python split_dynamic_packages () {
+ # Create packages for each WirePlumber module.
+ wp_module_libdir = d.expand('${libdir}/${WP_MODULE_SUBDIR}')
+ do_split_packages(d, wp_module_libdir, r'^libwireplumber-module-(.*)\.so$', d.expand('${PN}-modules-%s'), 'WirePlumber %s module', extra_depends='', recursive=False)
+}
+
+python set_dynamic_metapkg_rdepends () {
+ import os
+ import oe.utils
+
+ # Go through all generated WirePlumber module packages
+ # (excluding the main package and the -meta package itself)
+ # and add them to the -meta package as RDEPENDS.
+
+ base_pn = d.getVar('PN')
+
+ wp_module_pn = base_pn + '-modules'
+ wp_module_metapkg = wp_module_pn + '-meta'
+
+ d.setVar('ALLOW_EMPTY:' + wp_module_metapkg, "1")
+ d.setVar('FILES:' + wp_module_metapkg, "")
+
+ blacklist = [ wp_module_pn, wp_module_metapkg ]
+ wp_module_metapkg_rdepends = []
+ pkgdest = d.getVar('PKGDEST')
+
+ for pkg in oe.utils.packages_filter_out_system(d):
+ if pkg in blacklist:
+ continue
+
+ is_wp_module_pkg = pkg.startswith(wp_module_pn)
+ if not is_wp_module_pkg:
+ continue
+
+ if pkg in wp_module_metapkg_rdepends:
+ continue
+
+ # See if the package is empty by looking at the contents of its
+ # PKGDEST subdirectory. If this subdirectory is empty, then then
+ # package is empty as well. Empty packages do not get added to
+ # the meta package's RDEPENDS.
+ pkgdir = os.path.join(pkgdest, pkg)
+ if os.path.exists(pkgdir):
+ dir_contents = os.listdir(pkgdir) or []
+ else:
+ dir_contents = []
+ is_empty = len(dir_contents) == 0
+ if not is_empty:
+ if is_wp_module_pkg:
+ wp_module_metapkg_rdepends.append(pkg)
+
+ d.setVar('RDEPENDS:' + wp_module_metapkg, ' '.join(wp_module_metapkg_rdepends))
+ d.setVar('DESCRIPTION:' + wp_module_metapkg, wp_module_pn + ' meta package')
+}
+
+PACKAGES =+ "\
+ libwireplumber \
+ ${PN}-default-config \
+ ${PN}-scripts \
+ ${PN}-modules \
+ ${PN}-modules-meta \
+"
+
+PACKAGES_DYNAMIC = "^${PN}-modules.*"
+
+CONFFILES:${PN} += " \
+ ${datadir}/wireplumber/wireplumber.conf \
+ ${datadir}/wireplumber/wireplumber.conf.d/*.conf \
+"
+# Add pipewire to RRECOMMENDS, since WirePlumber expects a PipeWire daemon to
+# be present. While in theory any application that uses libpipewire can configure
+# itself to become a daemon, in practice, the PipeWire daemon is used.
+RRECOMMENDS:${PN} += "pipewire ${PN}-scripts ${PN}-modules-meta"
+
+FILES:${PN} += "${systemd_user_unitdir} ${systemd_system_unitdir} ${datadir}/zsh"
+
+FILES:libwireplumber = " \
+ ${libdir}/libwireplumber-*.so.* \
+"
+
+FILES:${PN}-scripts += "${datadir}/wireplumber/scripts/*"
+
+# Dynamic packages (see set_dynamic_metapkg_rdepends).
+FILES:${PN}-modules = ""
+RRECOMMENDS:${PN}-modules += "${PN}-modules-meta"
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber_git.bb b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber_git.bb
deleted file mode 100644
index a04f115c3..000000000
--- a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber_git.bb
+++ /dev/null
@@ -1,85 +0,0 @@
-SUMMARY = "Session / Policy Manager for PipeWire"
-HOMEPAGE = "https://gitlab.freedesktop.org/pipewire/wireplumber"
-BUGTRACKER = "https://gitlab.freedesktop.org/pipewire/wireplumber/issues"
-AUTHOR = "George Kiagiadakis <george.kiagiadakis@collabora.com>"
-SECTION = "multimedia"
-
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://LICENSE;beginline=3;md5=e8ad01a5182f2c1b3a2640e9ea268264"
-
-inherit meson pkgconfig systemd
-
-DEPENDS = "glib-2.0 glib-2.0-native pipewire lua"
-
-SRC_URI = "\
- git://gitlab.freedesktop.org/pipewire/wireplumber.git;protocol=https;branch=master \
-"
-# v0.4.17
-SRCREV = "d3eb77b292655cef333a8f4cab4e861415bc37c2"
-
-# patches to be able to compile with lower version of meson that is available in AGL.
-SRC_URI += "\
-"
-
-PV = "0.4.17"
-S = "${WORKDIR}/git"
-
-WPAPI="0.4"
-
-# use shared lua from the system instead of the static bundled one
-EXTRA_OEMESON += "-Dsystem-lua=true"
-
-# introspection in practice is only used for generating API docs
-# API docs are available on the website and we don't need to build them
-# (plus they depend on hotdoc which is not available here)
-EXTRA_OEMESON += "-Dintrospection=disabled -Ddoc=disabled"
-
-PACKAGECONFIG = "\
- ${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)} \
-"
-
-PACKAGECONFIG[systemd] = "-Dsystemd=enabled -Dsystemd-system-service=true -Dsystemd-user-service=false,-Dsystemd=disabled -Dsystemd-system-service=false -Dsystemd-user-service=false,systemd"
-
-do_configure:prepend() {
- # relax meson version requirement
- # we only need 0.54 when building with -Dsystem-lua=false
- sed "s/meson_version : '>= 0.56.0'/meson_version : '>= 0.53.2'/" ${S}/meson.build > ${S}/tmp.build
- mv -f ${S}/tmp.build ${S}/meson.build
-}
-
-PACKAGES =+ "\
- lib${PN}-${WPAPI} \
- ${PN}-config \
-"
-
-SYSTEMD_SERVICE:${PN} = "wireplumber.service"
-FILES:${PN} = "\
- ${bindir}/wireplumber \
- ${bindir}/wpctl \
- ${bindir}/wpexec \
- ${libdir}/wireplumber-${WPAPI}/* \
- ${datadir}/wireplumber/scripts/* \
- ${datadir}/zsh/* \
- ${systemd_system_unitdir}/* \
-"
-
-FILES:lib${PN}-${WPAPI} = "\
- ${libdir}/libwireplumber-${WPAPI}.so.* \
-"
-
-FILES:${PN}-config += "\
- ${sysconfdir}/wireplumber/* \
- ${datadir}/wireplumber/*conf \
- ${datadir}/wireplumber/common/* \
- ${datadir}/wireplumber/main.lua.d/* \
- ${datadir}/wireplumber/bluetooth.lua.d/* \
- ${datadir}/wireplumber/policy.lua.d/* \
-"
-do_install:append() {
- rm -rf ${D}${sysconfdir}/wireplumber/
- rm -f ${D}${datadir}/wireplumber/*conf
- rm -rf ${D}${datadir}/wireplumber/common
- rm -rf ${D}${datadir}/wireplumber/main.lua.d
- rm -rf ${D}${datadir}/wireplumber/bluetooth.lua.d
- rm -rf ${D}${datadir}/wireplumber/policy.lua.d
-}
diff --git a/templates/feature/agl-flutter/50_bblayers.conf.inc b/templates/feature/agl-flutter/50_bblayers.conf.inc
index 807a46b1c..10647b7a5 100644
--- a/templates/feature/agl-flutter/50_bblayers.conf.inc
+++ b/templates/feature/agl-flutter/50_bblayers.conf.inc
@@ -1,4 +1,7 @@
AGL_META_CLANG = " ${METADIR}/external/meta-clang "
+# Required for libcamera
+AGL_META_MULTIMEDIA = "${METADIR}/external/meta-openembedded/meta-multimedia"
+AGL_META_PYTHON = "${METADIR}/external/meta-openembedded/meta-python"
BBLAYERS =+ " \
${METADIR}/meta-agl/meta-agl-flutter \
diff --git a/templates/feature/agl-pipewire/50_bblayers.conf.inc b/templates/feature/agl-pipewire/50_bblayers.conf.inc
index e05cd4090..613ed97b3 100644
--- a/templates/feature/agl-pipewire/50_bblayers.conf.inc
+++ b/templates/feature/agl-pipewire/50_bblayers.conf.inc
@@ -1,7 +1,7 @@
+# PipeWire recipe comes from meta-multimedia
+AGL_META_MULTIMEDIA = "${METADIR}/external/meta-openembedded/meta-multimedia"
+AGL_META_PYTHON = "${METADIR}/external/meta-openembedded/meta-python"
BBLAYERS =+ " \
- ${METADIR}/meta-agl/meta-pipewire \
- "
-
-# we ship our own pipewire
-BBMASK += "meta-openembedded/meta-oe/recipes-multimedia/pipewire/"
+ ${METADIR}/meta-agl/meta-pipewire \
+"
diff --git a/templates/machine/nanopc-t6/50_bblayers.conf.inc b/templates/machine/nanopc-t6/50_bblayers.conf.inc
new file mode 100644
index 000000000..721a5dca0
--- /dev/null
+++ b/templates/machine/nanopc-t6/50_bblayers.conf.inc
@@ -0,0 +1,4 @@
+BBLAYERS =+ "\
+ ${METADIR}/bsp/meta-rockchip \
+ ${METADIR}/bsp/meta-rockchip-extra \
+ "
diff --git a/templates/machine/nanopc-t6/50_local.conf.inc b/templates/machine/nanopc-t6/50_local.conf.inc
new file mode 100644
index 000000000..aa95de143
--- /dev/null
+++ b/templates/machine/nanopc-t6/50_local.conf.inc
@@ -0,0 +1,3 @@
+MACHINE = "rockchip-rk3588-nanopc-t6"
+
+require conf/include/agl_rk3588.inc
diff --git a/templates/machine/nanopc-t6/README_machine_nanopc-t6.md b/templates/machine/nanopc-t6/README_machine_nanopc-t6.md
new file mode 100644
index 000000000..04d4dc44d
--- /dev/null
+++ b/templates/machine/nanopc-t6/README_machine_nanopc-t6.md
@@ -0,0 +1,9 @@
+---
+description: Machine NanoPC-T6
+authors: Naoto Yamaguchi <naoto.yamaguchi@automotivelinux.org>
+---
+
+### Machine nanopc-t6
+
+Rockchip RK3588 SBC. Manufactured by FriendlyElec.
+
diff --git a/templates/machine/visionfive2/50_bblayers.conf.inc b/templates/machine/visionfive2/50_bblayers.conf.inc
new file mode 100644
index 000000000..02a564551
--- /dev/null
+++ b/templates/machine/visionfive2/50_bblayers.conf.inc
@@ -0,0 +1,2 @@
+# This is the original place, but we need to tweak layer.conf
+BBLAYERS =+ "${METADIR}/bsp/meta-riscv"
diff --git a/templates/machine/visionfive2/50_local.conf.inc b/templates/machine/visionfive2/50_local.conf.inc
new file mode 100644
index 000000000..9e7af0b81
--- /dev/null
+++ b/templates/machine/visionfive2/50_local.conf.inc
@@ -0,0 +1,4 @@
+MACHINE = "visionfive2"
+
+#see meta-agl/meta-agl-bsp/conf/include/agl_unmatched.inc
+require conf/include/agl_visionfive2.inc