summaryrefslogtreecommitdiffstats
path: root/meta-agl-bsp
diff options
context:
space:
mode:
Diffstat (limited to 'meta-agl-bsp')
-rw-r--r--meta-agl-bsp/README12
-rw-r--r--meta-agl-bsp/conf/include/agl_am62xx-evm.inc8
-rw-r--r--meta-agl-bsp/conf/include/agl_bbe.inc24
-rw-r--r--meta-agl-bsp/conf/include/agl_beaglebone-ai64.inc6
-rw-r--r--meta-agl-bsp/conf/include/agl_beaglebone.inc38
-rw-r--r--meta-agl-bsp/conf/include/agl_beagleplay.inc6
-rw-r--r--meta-agl-bsp/conf/include/agl_cubox-i.inc4
-rw-r--r--meta-agl-bsp/conf/include/agl_dragonboard-410c.inc3
-rw-r--r--meta-agl-bsp/conf/include/agl_dragonboard-820c.inc2
-rw-r--r--meta-agl-bsp/conf/include/agl_ebisu.inc2
-rw-r--r--meta-agl-bsp/conf/include/agl_h3-salvator-x-nogfx.inc9
-rw-r--r--meta-agl-bsp/conf/include/agl_h3-salvator-x.inc7
-rw-r--r--meta-agl-bsp/conf/include/agl_h3ulcb-nogfx.inc14
-rw-r--r--meta-agl-bsp/conf/include/agl_h3ulcb.inc3
-rw-r--r--meta-agl-bsp/conf/include/agl_hsdk.inc9
-rw-r--r--meta-agl-bsp/conf/include/agl_imx6qdlsabreauto.inc4
-rw-r--r--meta-agl-bsp/conf/include/agl_imx8mq-evk-common.inc8
-rw-r--r--meta-agl-bsp/conf/include/agl_imx8mq-evk-viv.inc8
-rw-r--r--meta-agl-bsp/conf/include/agl_imx8mq-evk.inc23
-rw-r--r--meta-agl-bsp/conf/include/agl_imx8mqevk-common.inc13
-rw-r--r--meta-agl-bsp/conf/include/agl_imx8mqevk-viv.inc1
-rw-r--r--meta-agl-bsp/conf/include/agl_imx8mqevk.inc23
-rw-r--r--meta-agl-bsp/conf/include/agl_j7-evm.inc15
-rw-r--r--meta-agl-bsp/conf/include/agl_j721e-evm.inc11
-rw-r--r--meta-agl-bsp/conf/include/agl_m3-salvator-x-nogfx.inc6
-rw-r--r--meta-agl-bsp/conf/include/agl_m3-salvator-x.inc5
-rw-r--r--meta-agl-bsp/conf/include/agl_m3ulcb-nogfx.inc20
-rw-r--r--meta-agl-bsp/conf/include/agl_m3ulcb.inc4
-rw-r--r--meta-agl-bsp/conf/include/agl_nitrogen6x.inc1
-rw-r--r--meta-agl-bsp/conf/include/agl_qemuarm.inc3
-rw-r--r--meta-agl-bsp/conf/include/agl_qemuarm64.inc3
-rw-r--r--meta-agl-bsp/conf/include/agl_qemux86-64.inc2
-rw-r--r--meta-agl-bsp/conf/include/agl_raspberrypi4.inc7
-rw-r--r--meta-agl-bsp/conf/include/agl_raspberrypi5.inc34
-rw-r--r--meta-agl-bsp/conf/include/agl_rcar-nogfx.inc19
-rw-r--r--meta-agl-bsp/conf/include/agl_rcar.inc40
-rw-r--r--meta-agl-bsp/conf/include/agl_refhw-h3.inc10
-rw-r--r--meta-agl-bsp/conf/include/agl_s4sk.inc9
-rw-r--r--meta-agl-bsp/conf/include/agl_salvator-nogfx.inc17
-rw-r--r--meta-agl-bsp/conf/include/agl_salvator.inc6
-rw-r--r--meta-agl-bsp/conf/include/agl_unmatched.inc4
-rw-r--r--meta-agl-bsp/conf/layer.conf2
-rw-r--r--meta-agl-bsp/conf/machine/include/virtio.inc13
-rw-r--r--meta-agl-bsp/meta-agl-refhw-gen3/recipes-navigation/gpsd/gpsd-machine-conf_1.0.bbappend (renamed from meta-agl-bsp/meta-agl-refhw-gen3/recipes-navigation/gpsd/gpsd-conf-refhw_1.0.bb)17
-rw-r--r--meta-agl-bsp/meta-core/recipes-graphics/mesa/mesa/0001-virgl-don-t-a-use-staging-when-a-resources-created-w.patch48
-rw-r--r--meta-agl-bsp/meta-core/recipes-graphics/mesa/mesa_%.bbappend2
-rw-r--r--meta-agl-bsp/meta-core/recipes-graphics/mesa/mesa_agl.inc2
-rw-r--r--meta-agl-bsp/meta-freescale-layer/recipes-connectivity/hci-uart-helper/hci-uart-helper_1.0.bb2
-rw-r--r--meta-agl-bsp/meta-freescale-layer/recipes-graphics/mesa/files/0001-kmsro-add-imx-dcss.patch34
-rw-r--r--meta-agl-bsp/meta-freescale-layer/recipes-graphics/mesa/mesa_%.bbappend10
-rw-r--r--meta-agl-bsp/meta-freescale-layer/recipes-graphics/wayland/weston_10.0.1.imx.bbappend (renamed from meta-agl-bsp/meta-freescale-layer/recipes-graphics/wayland/weston_8.0.0.imx.bbappend)2
-rw-r--r--meta-agl-bsp/meta-freescale-layer/recipes-kernel/linux/files/0004-Smack-Assign-smack_known_web-label-for-kernel-thread.patch49
-rw-r--r--meta-agl-bsp/meta-freescale-layer/recipes-kernel/linux/linux-fslc-imx/0001-enable-mhdp-with-etnaviv.patch13
-rw-r--r--meta-agl-bsp/meta-freescale-layer/recipes-kernel/linux/linux-fslc-imx/0002-dts-enable-etnaviv.patch5
-rw-r--r--meta-agl-bsp/meta-freescale-layer/recipes-kernel/linux/linux-fslc-imx_%.bbappend20
-rw-r--r--meta-agl-bsp/meta-freescale-layer/recipes-kernel/linux/linux-fslc-lts_%.bbappend1
-rw-r--r--meta-agl-bsp/meta-freescale-layer/recipes-kernel/linux/linux-fslc.inc22
-rw-r--r--meta-agl-bsp/meta-freescale-layer/recipes-kernel/linux/linux-fslc_%.bbappend23
-rw-r--r--meta-agl-bsp/meta-iot-cloud/recipes-aws/aws-iot-device-sdk-embedded-c/aws-iot-device-sdk-embedded-c.bb40
-rw-r--r--meta-agl-bsp/meta-iot-cloud/recipes-aws/aws-iot-device-sdk-embedded-c/files/Makefile.aws62
-rw-r--r--meta-agl-bsp/meta-iot-cloud/recipes-aws/aws-iot-device-sdk-embedded-c/files/aws_iot_config.h58
-rw-r--r--meta-agl-bsp/meta-iot-cloud/recipes-aws/aws-iot-device-sdk-embedded-c/files/awsiotsdk.pc27
-rw-r--r--meta-agl-bsp/meta-iot-cloud/recipes-azure/azure-iot-sdk-c/azure-iot-sdk-c_%.bbappend5
-rw-r--r--meta-agl-bsp/meta-iot-cloud/recipes-azure/azure-macro-utils-c/azure-macro-utils-c_%.bbappend1
-rw-r--r--meta-agl-bsp/meta-iot-cloud/recipes-azure/umock-c/umock-c_%.bbappend1
-rw-r--r--meta-agl-bsp/meta-qcom/recipes-bsp/96boards-tools/96boards-tools_0.12.bb32
-rw-r--r--meta-agl-bsp/meta-qcom/recipes-bsp/q6v5-pil/files/qcom-q6v5-pil.service12
-rw-r--r--meta-agl-bsp/meta-qcom/recipes-bsp/q6v5-pil/q6v5-pil.bb20
-rw-r--r--meta-agl-bsp/meta-raspberrypi/recipes-bsp/bootfiles/bootfiles.bbappend1
-rw-r--r--meta-agl-bsp/meta-raspberrypi/recipes-bsp/bootfiles/rpi-config_git.bbappend4
-rw-r--r--meta-agl-bsp/meta-raspberrypi/recipes-bsp/u-boot/u-boot-2020.10.inc3
-rw-r--r--meta-agl-bsp/meta-raspberrypi/recipes-bsp/u-boot/u-boot-2021.07.inc3
-rw-r--r--meta-agl-bsp/meta-raspberrypi/recipes-bsp/u-boot/u-boot-tools_2020.10.bb2
-rw-r--r--meta-agl-bsp/meta-raspberrypi/recipes-bsp/u-boot/u-boot-tools_2021.07.bb2
-rw-r--r--meta-agl-bsp/meta-raspberrypi/recipes-bsp/u-boot/u-boot_2020.10.bb2
-rw-r--r--meta-agl-bsp/meta-raspberrypi/recipes-bsp/u-boot/u-boot_2021.07.bb2
-rw-r--r--meta-agl-bsp/meta-raspberrypi/recipes-graphics/wayland/weston-ini-conf.bbappend3
-rw-r--r--meta-agl-bsp/meta-raspberrypi/recipes-graphics/wayland/weston-ini-conf/dsi.cfg5
-rw-r--r--meta-agl-bsp/meta-raspberrypi/recipes-graphics/wayland/weston-ini-conf/hdmi-a-1-270-720p.cfg7
-rw-r--r--meta-agl-bsp/meta-raspberrypi/recipes-kernel/create-combined-dtb/create-combined-dtb_1.0.0.bb39
-rw-r--r--meta-agl-bsp/meta-raspberrypi/recipes-kernel/dtc/dtc_1.6.1.bbappend (renamed from meta-agl-bsp/meta-raspberrypi/recipes-kernel/dtc/dtc_1.6.0.bbappend)0
-rw-r--r--meta-agl-bsp/meta-raspberrypi/recipes-kernel/linux/linux-raspberrypi/0001-mconf-menuconfig.patch6
-rw-r--r--meta-agl-bsp/meta-raspberrypi/recipes-kernel/linux/linux-raspberrypi/0002-Disable-DMA-in-sdhci-driver.patch25
-rw-r--r--meta-agl-bsp/meta-raspberrypi/recipes-kernel/linux/linux-raspberrypi_5.4.bbappend4
-rw-r--r--meta-agl-bsp/meta-rcar-gateway/recipes-kernel/linux/linux-renesas_%.bbappend11
-rw-r--r--meta-agl-bsp/meta-rcar-gen3-adas/conf/NOTES2
-rw-r--r--meta-agl-bsp/meta-rcar-gen3-adas/conf/include/rcar-gen3-adas.inc12
-rw-r--r--meta-agl-bsp/meta-rcar-gen3-adas/conf/layer.conf2
-rw-r--r--meta-agl-bsp/meta-rcar-gen3-adas/recipes-bsp/si-tools/si-init_1.0.bb2
-rw-r--r--meta-agl-bsp/meta-rcar-gen3-adas/recipes-kernel/linux/linux-renesas/0001-arm64-dts-renesas-preserve-drm-HDMI-connector-naming.patch68
-rw-r--r--meta-agl-bsp/meta-rcar-gen3-adas/recipes-kernel/linux/linux-renesas/0004-ADSP-enable-and-add-sound-hardware-abstraction_kf.patch58
-rw-r--r--meta-agl-bsp/meta-rcar-gen3-adas/recipes-navigation/gpsd/gpsd-machine-conf_1.0.bbappend (renamed from meta-agl-bsp/meta-rcar-gen3-adas/recipes-navigation/gpsd/gpsd-kingfisher-conf_1.0.bb)28
-rw-r--r--meta-agl-bsp/meta-rcar-gen3/include/checksum_control_files.inc31
-rw-r--r--meta-agl-bsp/meta-rcar-gen3/recipes-bsp/arm-trusted-firmware/arm-trusted-firmware_git.bbappend12
-rw-r--r--meta-agl-bsp/meta-rcar-gen3/recipes-bsp/arm-trusted-firmware/files/0001-Boot-Normal-World-in-EL2.patch28
-rw-r--r--meta-agl-bsp/meta-rcar-gen3/recipes-bsp/bootfiles/files/uEnv-ota-h3ulcb.txt2
-rw-r--r--meta-agl-bsp/meta-rcar-gen3/recipes-bsp/bootfiles/files/uEnv-ota-m3ulcb.txt2
-rw-r--r--meta-agl-bsp/meta-rcar-gen3/recipes-bsp/bootfiles/renesas-ota-bootfiles.bb8
-rw-r--r--meta-agl-bsp/meta-rcar-gen3/recipes-bsp/optee/optee-examples_git.bb4
-rw-r--r--meta-agl-bsp/meta-rcar-gen3/recipes-bsp/optee/optee-test_git.bb4
-rw-r--r--meta-agl-bsp/meta-rcar-gen3/recipes-bsp/optee/optee-user-app-template_git.bb4
-rw-r--r--meta-agl-bsp/meta-rcar-gen3/recipes-bsp/u-boot/files/remove-redundant-yyloc-global.patch27
-rw-r--r--meta-agl-bsp/meta-rcar-gen3/recipes-bsp/u-boot/u-boot_2020.01.bbappend3
-rw-r--r--meta-agl-bsp/meta-rcar-gen3/recipes-graphics/gles-module/gles-user-module.bbappend5
-rw-r--r--meta-agl-bsp/meta-rcar-gen3/recipes-graphics/virtual-gles-user-module/virtual-gles-user-module.bb2
-rw-r--r--meta-agl-bsp/meta-rcar-gen3/recipes-graphics/wayland/wayland-wsegl.bbappend1
-rw-r--r--meta-agl-bsp/meta-rcar-gen3/recipes-kernel/kernel-module-gles/kernel-module-gles.bbappend2
-rw-r--r--meta-agl-bsp/meta-rcar-gen3/recipes-kernel/kernel-module-vspmif/kernel-module-vspm-if.bbappend (renamed from meta-agl-bsp/meta-rcar-gen3/recipes-kernel/kernel-module-vspmif/kernel-module-vspmif.bbappend)0
-rw-r--r--meta-agl-bsp/meta-rcar-gen3/recipes-kernel/linux/files/0004-ADSP-enable-and-add-sound-hardware-abstraction.patch95
-rw-r--r--meta-agl-bsp/meta-rcar-gen3/recipes-kernel/linux/files/Set_GOV_PERFORMANCE.cfg2
-rw-r--r--meta-agl-bsp/meta-rcar-gen3/recipes-kernel/linux/files/r8a77960-ulcb-xen.dts (renamed from meta-agl-bsp/meta-rcar-gen3/recipes-kernel/linux/files/r8a7796-m3ulcb-xen.dts)2
-rw-r--r--meta-agl-bsp/meta-rcar-gen3/recipes-kernel/linux/files/vivid.cfg6
-rw-r--r--meta-agl-bsp/meta-rcar-gen3/recipes-kernel/linux/linux-renesas_%.bbappend7
-rw-r--r--meta-agl-bsp/meta-rcar-gen3/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.20.%.bbappend1
-rw-r--r--meta-agl-bsp/meta-rcar-gen3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.20.%.bbappend1
-rw-r--r--meta-agl-bsp/meta-rcar-gen3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.20.%.bbappend1
-rw-r--r--meta-agl-bsp/meta-rcar-gen3/recipes-multimedia/mmngr-module/mmngr-user-module.bbappend11
-rw-r--r--meta-agl-bsp/meta-rcar-gen3/recipes-multimedia/mmngr-module/mmngrbuf-user-module.bbappend11
-rw-r--r--meta-agl-bsp/meta-rcar-gen3/recipes-platform/packagegroups/packagegroup-agl-graphical-multimedia.bbappend5
-rw-r--r--meta-agl-bsp/meta-rcar-gen3/scripts/setup_mm_packages.sh4
-rw-r--r--meta-agl-bsp/meta-sancloud/recipes-kernel/linux/linux-bbe/disable-relay.cfg1
-rw-r--r--meta-agl-bsp/meta-sancloud/recipes-kernel/linux/linux-bbe_%.bbappend1
-rw-r--r--meta-agl-bsp/meta-sifive/recipes-bsp/u-boot/files/0001-WIP-Make-BSP-work-under-YP-kirkstone.patch46
-rw-r--r--meta-agl-bsp/meta-sifive/recipes-bsp/u-boot/u-boot-sifive_2023.07.02.bbappend3
-rw-r--r--meta-agl-bsp/meta-sifive/recipes-kernel/linux/linux-sifive/radeon.cfg19
-rw-r--r--meta-agl-bsp/meta-sifive/recipes-kernel/linux/linux-sifive_%.bbappend6
-rw-r--r--meta-agl-bsp/meta-synopsys/recipes-kernel/linux-yocto_%.bbappend1
-rw-r--r--meta-agl-bsp/meta-ti-bsp/.gitkeep (renamed from meta-agl-bsp/meta-ti/.gitkeep)0
-rw-r--r--meta-agl-bsp/meta-ti-bsp/recipes-bsp/cm3-pm-firmware/amx3-cm3_git.bbappend (renamed from meta-agl-bsp/meta-ti/recipes-bsp/cm3-pm-firmware/amx3-cm3_git.bbappend)0
-rw-r--r--meta-agl-bsp/meta-ti-bsp/recipes-graphics/mesa/mesa-pvr_%.bbappend1
-rw-r--r--meta-agl-bsp/meta-ti-bsp/recipes-graphics/mesa/mesa_%.bbappend1
-rw-r--r--meta-agl-bsp/meta-ti-bsp/recipes-graphics/mesa/pvr-fix.inc1
-rw-r--r--meta-agl-bsp/meta-ti-bsp/recipes-kernel/linux/linux-bb.org_%.bbappend (renamed from meta-agl-bsp/meta-ti/recipes-kernel/linux/linux-ti-staging_%.bbappend)0
-rw-r--r--meta-agl-bsp/meta-ti-bsp/recipes-kernel/linux/linux-ti-staging_%.bbappend (renamed from meta-agl-bsp/meta-qcom/recipes-kernel/linux/linux-linaro-qcomlt_%.bbappend)1
-rw-r--r--meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0001-Add-soc-performance-monitor-utilites.patch3570
-rw-r--r--meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0003-weston-Fix-virtual-keyboard-display-issue-for-QT5-ap.patch41
-rw-r--r--meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0004-weston-Fix-touch-screen-crash-issue.patch39
-rw-r--r--meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0005-weston-drm-fix-dual-display-issue.patch79
-rw-r--r--meta-agl-bsp/meta-ti/recipes-arago/weston/weston_8.0.0.bbappend13
-rw-r--r--meta-agl-bsp/meta-ti/recipes-bsp/ti-sgx-ddk-km/ti-sgx-ddk-km/0001-Add-support-for-AGL-toolchain.patch30
-rw-r--r--meta-agl-bsp/meta-ti/recipes-bsp/ti-sgx-ddk-km/ti-sgx-ddk-km_%.bbappend3
-rw-r--r--meta-agl-bsp/meta-ti/recipes-graphics/libgles/ti-sgx-ddk-um/pvr.service19
-rw-r--r--meta-agl-bsp/meta-ti/recipes-graphics/libgles/ti-sgx-ddk-um_%.bbappend18
-rw-r--r--meta-agl-bsp/meta-ti/recipes-graphics/mesa/mesa-gl_%.bbappend7
-rw-r--r--meta-agl-bsp/virtualization-layer/recipes-extended/xen/xen-mkimage-rpi4.bb2
-rw-r--r--meta-agl-bsp/virtualization-layer/recipes-graphics/mesa/mesa/0001-virgl-virgl_driinfo.h.in-Disable-by-default-emulated.patch34
-rw-r--r--meta-agl-bsp/virtualization-layer/recipes-graphics/mesa/mesa_22.%.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.scc (renamed from meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-kmeta/bsp/virtio/virtio-aarch64-standard.scc)2
-rw-r--r--meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-drm.cfg3
-rw-r--r--meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-kmeta/arch/arm/aarch64.cfg29
-rw-r--r--meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-kmeta/arch/arm/aarch64.scc2
-rw-r--r--meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-kmeta/bsp/virtio/virtio-input-add-multi-touch-support.patch66
-rw-r--r--meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-kmeta/bsp/virtio/virtio-snd/0001-uapi-virtio_ids-add-a-sound-device-type-ID-from-OASI.patch28
-rw-r--r--meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-kmeta/bsp/virtio/virtio-snd/0002-ALSA-virtio-add-virtio-sound-driver.patch849
-rw-r--r--meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-kmeta/bsp/virtio/virtio-snd/0003-ALSA-virtio-handling-control-messages.patch528
-rw-r--r--meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-kmeta/bsp/virtio/virtio-snd/0004-ALSA-virtio-build-PCM-devices-and-substream-hardware.patch703
-rw-r--r--meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-kmeta/bsp/virtio/virtio-snd/0005-ALSA-virtio-handling-control-and-I-O-messages-for-th.patch645
-rw-r--r--meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-kmeta/bsp/virtio/virtio-snd/0006-ALSA-virtio-PCM-substream-operators.patch525
-rw-r--r--meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-kmeta/bsp/virtio/virtio-snd/0007-ALSA-virtio-introduce-jack-support.patch351
-rw-r--r--meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-kmeta/bsp/virtio/virtio-snd/0008-ALSA-virtio-introduce-PCM-channel-map-support.patch335
-rw-r--r--meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-kmeta/bsp/virtio/virtio-snd/0009-ALSA-virtio-introduce-device-suspend-resume-support.patch174
-rw-r--r--meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-kmeta/bsp/virtio/virtio-snd/virtio-snd.cfg5
-rw-r--r--meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-kmeta/bsp/virtio/virtio-snd/virtio-snd.scc11
-rw-r--r--meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-kmeta/bsp/virtio/virtio.cfg16
-rw-r--r--meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-kmeta/bsp/virtio/virtio.scc5
-rw-r--r--meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-pci.cfg3
-rw-r--r--meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto_%.bbappend8
-rw-r--r--meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto_5.10.bb58
-rw-r--r--meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto_5.15.bbappend17
170 files changed, 767 insertions, 9083 deletions
diff --git a/meta-agl-bsp/README b/meta-agl-bsp/README
index 3c3d23af8..69ca72c9d 100644
--- a/meta-agl-bsp/README
+++ b/meta-agl-bsp/README
@@ -5,3 +5,15 @@ This layer holds the 'impedance-mismatch' between AGL and the BSP's.
/dream on
In an ideal world, this would be empty!
/dream off
+
+Maintenance
+-----------
+
+All patches must be submitted via the AGL Gerrit instance at
+https://gerrit.automotivelinux.org. See this wiki page for
+details:
+
+https://wiki.automotivelinux.org/agl-distro/contributing
+
+Layer maintainers:
+ Jan-Simon Möller <jsmoeller@linuxfoundation.org>
diff --git a/meta-agl-bsp/conf/include/agl_am62xx-evm.inc b/meta-agl-bsp/conf/include/agl_am62xx-evm.inc
new file mode 100644
index 000000000..24fd95141
--- /dev/null
+++ b/meta-agl-bsp/conf/include/agl_am62xx-evm.inc
@@ -0,0 +1,8 @@
+# am62xx-evm has a k3r5 BBMULTICONFIG to build its bootloader
+# firmware, need to use an override to set DEFAULTTUNE back to
+# what that machine configuration needs.
+DEFAULTTUNE:k3r5:forcedefaulttune = "armv7athf"
+
+# meta-ti-bsp layer conf does break expectations wrt common folders
+# meta-ti-bsp/conf/layer.conf:TI_COMMON_DEPLOY ?= "${TOPDIR}/deploy-ti"
+TI_COMMON_DEPLOY := "${TMPDIR}/deploy"
diff --git a/meta-agl-bsp/conf/include/agl_bbe.inc b/meta-agl-bsp/conf/include/agl_bbe.inc
index 9f9eb5039..5252c558b 100644
--- a/meta-agl-bsp/conf/include/agl_bbe.inc
+++ b/meta-agl-bsp/conf/include/agl_bbe.inc
@@ -6,26 +6,6 @@
CORE_IMAGE_EXTRA_INSTALL += "packagegroup-machine-base"
#-------------------------------------------------
-## Graphics section ##
-#-------------------------------------------------
-PACKAGES_GFX = "ti-sgx-ddk-km"
-IMAGE_INSTALL:append = " ${PACKAGES_GFX}"
-
-
-# Enable Gfx Pkgs
-MACHINE_FEATURES:append = " sgx"
-MULTI_PROVIDER_WHITELIST += "virtual/libgl virtual/egl virtual/libgles1 virtual/libgles2"
-
-DEPENDS:remove = "virtual/libgl"
-
-# Preferred providers
-PREFERRED_PROVIDER_virtual/libgles1 = ""
-PREFERRED_PROVIDER_virtual/libgles2 = "ti-sgx-ddk-um"
-PREFERRED_PROVIDER_virtual/egl = "ti-sgx-ddk-um"
-PREFERRED_PROVIDER_virtual/libgbm = "ti-sgx-ddk-um"
-PREFERRED_PROVIDER_virtual/mesa = "mesa-gl"
-
-#-------------------------------------------------
## Multimedia section ##
#-------------------------------------------------
@@ -38,3 +18,7 @@ SECURITY_CFLAGS:pn-gpm = ""
SECURITY_LDFLAGS:pn-gpm = ""
SECURITY_CFLAGS:pn-libatasmart = ""
SECURITY_LDFLAGS:pn-libatasmart = ""
+
+# meta-ti-bsp layer conf does break expectations wrt common folders
+# meta-ti-bsp/conf/layer.conf:TI_COMMON_DEPLOY ?= "${TOPDIR}/deploy-ti"
+TI_COMMON_DEPLOY := "${TMPDIR}/deploy" \ No newline at end of file
diff --git a/meta-agl-bsp/conf/include/agl_beaglebone-ai64.inc b/meta-agl-bsp/conf/include/agl_beaglebone-ai64.inc
new file mode 100644
index 000000000..1e03b70ff
--- /dev/null
+++ b/meta-agl-bsp/conf/include/agl_beaglebone-ai64.inc
@@ -0,0 +1,6 @@
+# beaglebone-ai64 has a k3r5 BBMULTICONFIG to build its bootloader
+# and firmware, need to use an override to set DEFAULTTUNE back to
+# what that machine configuration needs.
+DEFAULTTUNE:k3r5:forcedefaulttune = "armv7athf"
+
+TI_COMMON_DEPLOY := "${TMPDIR}/deploy"
diff --git a/meta-agl-bsp/conf/include/agl_beaglebone.inc b/meta-agl-bsp/conf/include/agl_beaglebone.inc
index 857a801f3..ec3a3a448 100644
--- a/meta-agl-bsp/conf/include/agl_beaglebone.inc
+++ b/meta-agl-bsp/conf/include/agl_beaglebone.inc
@@ -1,40 +1,10 @@
# This config is for the beaglebone (inspired from the vayu config).
-#-------------------------------------------------
-## Graphics section ##
-#-------------------------------------------------
-PACKAGES_GFX = "ti-sgx-ddk-km"
-IMAGE_INSTALL:append = " ${PACKAGES_GFX}"
-
-
-# Enable Gfx Pkgs
-MACHINE_FEATURES:append = " sgx"
-MULTI_PROVIDER_WHITELIST += "virtual/libgl virtual/egl virtual/libgles1 virtual/libgles2"
-
-DEPENDS:remove = "virtual/libgl"
-
-# Preferred providers
-PREFERRED_PROVIDER_virtual/libgles1 = ""
-PREFERRED_PROVIDER_virtual/libgles2 = "ti-sgx-ddk-um"
-PREFERRED_PROVIDER_virtual/egl = "ti-sgx-ddk-um"
-PREFERRED_PROVIDER_virtual/libgbm = "ti-sgx-ddk-um"
-PREFERRED_PROVIDER_virtual/mesa = "mesa-gl"
-
-#-------------------------------------------------
-## Multimedia section ##
-#-------------------------------------------------
-
-PREFERRED_PROVIDER_virtual/kernel = "linux-ti-staging"
-PREFERRED_VERSION_virtual/kernel = "4.9"
-
# DEFAULTTUNE for cortex-a8
DISTRO_FEATURES:append = " agl-medium-arm-compiler"
-SECURITY_CFLAGS:pn-mozjs = ""
-SECURITY_LDFLAGS:pn-mozjs = ""
-SECURITY_CFLAGS:pn-gpm = ""
-SECURITY_LDFLAGS:pn-gpm = ""
-SECURITY_CFLAGS:pn-libatasmart = ""
-SECURITY_LDFLAGS:pn-libatasmart = ""
-
WKS_FILE = "sdimage-bootpart-uuid.wks"
+
+# meta-ti-bsp layer conf does break expectations wrt common folders
+# meta-ti-bsp/conf/layer.conf:TI_COMMON_DEPLOY ?= "${TOPDIR}/deploy-ti"
+TI_COMMON_DEPLOY := "${TMPDIR}/deploy" \ No newline at end of file
diff --git a/meta-agl-bsp/conf/include/agl_beagleplay.inc b/meta-agl-bsp/conf/include/agl_beagleplay.inc
new file mode 100644
index 000000000..77b669bb7
--- /dev/null
+++ b/meta-agl-bsp/conf/include/agl_beagleplay.inc
@@ -0,0 +1,6 @@
+# beagleplay has a k3r5 BBMULTICONFIG to build its bootloader
+# and firmware, need to use an override to set DEFAULTTUNE back to
+# what that machine configuration needs.
+DEFAULTTUNE:k3r5:forcedefaulttune = "armv7athf"
+
+TI_COMMON_DEPLOY := "${TMPDIR}/deploy"
diff --git a/meta-agl-bsp/conf/include/agl_cubox-i.inc b/meta-agl-bsp/conf/include/agl_cubox-i.inc
index 4fa4815a4..ee5e759e4 100644
--- a/meta-agl-bsp/conf/include/agl_cubox-i.inc
+++ b/meta-agl-bsp/conf/include/agl_cubox-i.inc
@@ -1,5 +1,9 @@
require agl_imx6-common.inc
+# Force use of the community supported LTS kernel instead of the
+# default linux-fslc
+PREFERRED_PROVIDER_virtual/kernel = "linux-fslc-lts"
+
# Include devicetrees for SOM 1.5 and Hummingboard 2 hardware
KERNEL_DEVICETREE:append = " \
imx6dl-hummingboard-som-v15.dtb \
diff --git a/meta-agl-bsp/conf/include/agl_dragonboard-410c.inc b/meta-agl-bsp/conf/include/agl_dragonboard-410c.inc
deleted file mode 100644
index aba92ddf1..000000000
--- a/meta-agl-bsp/conf/include/agl_dragonboard-410c.inc
+++ /dev/null
@@ -1,3 +0,0 @@
-# Install 96boards-tools for resizing partition
-# Add systemd unit file for the qcom_q6v5_pil kernel module
-IMAGE_INSTALL:append = " 96boards-tools q6v5-pil"
diff --git a/meta-agl-bsp/conf/include/agl_dragonboard-820c.inc b/meta-agl-bsp/conf/include/agl_dragonboard-820c.inc
deleted file mode 100644
index 265564c18..000000000
--- a/meta-agl-bsp/conf/include/agl_dragonboard-820c.inc
+++ /dev/null
@@ -1,2 +0,0 @@
-# Install 96boards-tools for resizing partition
-IMAGE_INSTALL:append = " 96boards-tools"
diff --git a/meta-agl-bsp/conf/include/agl_ebisu.inc b/meta-agl-bsp/conf/include/agl_ebisu.inc
index 0d10b3130..d684f814d 100644
--- a/meta-agl-bsp/conf/include/agl_ebisu.inc
+++ b/meta-agl-bsp/conf/include/agl_ebisu.inc
@@ -10,4 +10,4 @@ DISTRO_FEATURES:remove = " use_eva_pkg"
MACHINE_FEATURES:append = " usb3"
IMAGE_INSTALL:append = " gstreamer1.0-omx gstreamer1.0-plugin-vspfilter"
-IMAGE_INSTALL:append = " kernel-module-mmngr kernel-module-mmngrbuf kernel-module-uvcs-drv kernel-module-vspmif"
+IMAGE_INSTALL:append = " kernel-module-mmngr kernel-module-mmngrbuf kernel-module-uvcs-drv kernel-module-vspm-if"
diff --git a/meta-agl-bsp/conf/include/agl_h3-salvator-x-nogfx.inc b/meta-agl-bsp/conf/include/agl_h3-salvator-x-nogfx.inc
index 3bc9f95c2..4ff103df8 100644
--- a/meta-agl-bsp/conf/include/agl_h3-salvator-x-nogfx.inc
+++ b/meta-agl-bsp/conf/include/agl_h3-salvator-x-nogfx.inc
@@ -1,13 +1,8 @@
-require conf/include/agl_rcar-nogfx.inc
+require conf/include/agl_salvator-nogfx.inc
SOC_FAMILY = "r8a7795"
BOARD_NAME = "h3-salvator-x"
-DTB_SUFFIX = "r8a7795-salvator-xs"
-
-# Mask graphic Pkgs
-BBMASK += "gles-user-module|kernel-module-gles|wayland-kms|libgbm"
-# Mask MMP recipes
-BBMASK += "kernel-module-uvcs-drv|omx-user-module"
+DTB_SUFFIX = "r8a77951-salvator-xs"
# do use software rendering to display the compositor
# used for images w/o binary-only driver
diff --git a/meta-agl-bsp/conf/include/agl_h3-salvator-x.inc b/meta-agl-bsp/conf/include/agl_h3-salvator-x.inc
index 48a282133..134b1dd1f 100644
--- a/meta-agl-bsp/conf/include/agl_h3-salvator-x.inc
+++ b/meta-agl-bsp/conf/include/agl_h3-salvator-x.inc
@@ -1,9 +1,6 @@
-require conf/include/agl_rcar.inc
+require conf/include/agl_salvator.inc
SOC_FAMILY = "r8a7795"
BOARD_NAME = "h3-salvator-x"
-DTB_SUFFIX = "r8a7795-salvator-xs"
+DTB_SUFFIX = "r8a77951-salvator-xs"
-IMAGE_INSTALL:append:rcar-gen3 = " \
- kernel-module-vspmif \
-"
diff --git a/meta-agl-bsp/conf/include/agl_h3ulcb-nogfx.inc b/meta-agl-bsp/conf/include/agl_h3ulcb-nogfx.inc
index 25dfb046d..5f288fca5 100644
--- a/meta-agl-bsp/conf/include/agl_h3ulcb-nogfx.inc
+++ b/meta-agl-bsp/conf/include/agl_h3ulcb-nogfx.inc
@@ -2,15 +2,23 @@ require conf/include/agl_rcar-nogfx.inc
SOC_FAMILY = "r8a7795"
BOARD_NAME = "h3ulcb"
-DTB_SUFFIX = "r8a7795-h3ulcb"
+DTB_SUFFIX = "r8a77951-ulcb"
# Mask graphic Pkgs
BBMASK += "gles-user-module|kernel-module-gles|wayland-kms|libgbm"
# Mask MMP recipes
BBMASK += "kernel-module-uvcs-drv|omx-user-module"
-# Workaround for SPEC-3706 - versioned bbappends and upstream moved on to 1.16.3
-BBMASK += "meta-renesas/meta-rcar-gen3/recipes-multimedia/gstreamer/gstreamer1.0-.*1.16.2\.bbappend"
+# Work around use of obsolete Weston backend-fbdev in meta-rcar-gen3
+# when building without the proprietary driver stack. Masking out the
+# weston_%.bbappend seems the simplest approach for now, as forcing
+# USE_GLES = "1" to disable the adding of -Dbackend-default="fbdev" to
+# EXTRA_OEMESON triggers adding "libgbm" to DEPENDS, which breaks due
+# to that being a component specific to the proprietary stack we are
+# explicitly disabling. If the "libgbm" usage in the bbappend was
+# instead "virtual/libgbm" as is now used in poky, it might be possible
+# to just tweak PREFERRED_PROVIDER_virtual/libgbm = "mesa".
+BBMASK += "meta-rcar-gen3/recipes-graphics/wayland/weston_%.bbappend"
# do use software rendering to display the compositor
# used for images w/o binary-only driver
diff --git a/meta-agl-bsp/conf/include/agl_h3ulcb.inc b/meta-agl-bsp/conf/include/agl_h3ulcb.inc
index eb3836abb..b958d767c 100644
--- a/meta-agl-bsp/conf/include/agl_h3ulcb.inc
+++ b/meta-agl-bsp/conf/include/agl_h3ulcb.inc
@@ -2,4 +2,5 @@ require conf/include/agl_rcar.inc
SOC_FAMILY = "r8a7795"
BOARD_NAME = "h3ulcb"
-DTB_SUFFIX = "r8a7795-h3ulcb"
+#ws2.0
+DTB_SUFFIX = "r8a77951-ulcb"
diff --git a/meta-agl-bsp/conf/include/agl_hsdk.inc b/meta-agl-bsp/conf/include/agl_hsdk.inc
deleted file mode 100644
index b1b0e4a8f..000000000
--- a/meta-agl-bsp/conf/include/agl_hsdk.inc
+++ /dev/null
@@ -1,9 +0,0 @@
-KERNEL_IMAGETYPE = "uImage"
-WKS_FILE = "sdimage-hsdk.wks"
-IMAGE_BOOT_FILES = "uImage uboot.env"
-IMAGE_INSTALL:append = " kernel-modules"
-
-# remove incompatible packages from packagegroups
-RDEPENDS:packagegroup-agl-core-devel:remove:hsdk = "valgrind gcc-sanitizers"
-RDEPENDS:packagegroup-core-tools-profile:remove:hsdk = "systemtap"
-RDEPENDS:packagegroup-core-tools-debug:remove:hsdk = "gdbserver"
diff --git a/meta-agl-bsp/conf/include/agl_imx6qdlsabreauto.inc b/meta-agl-bsp/conf/include/agl_imx6qdlsabreauto.inc
index cb13de713..f058ba1a5 100644
--- a/meta-agl-bsp/conf/include/agl_imx6qdlsabreauto.inc
+++ b/meta-agl-bsp/conf/include/agl_imx6qdlsabreauto.inc
@@ -1 +1,5 @@
require agl_imx6-common.inc
+
+# Force use of the community supported LTS kernel instead of the
+# default linux-fslc
+IMX_DEFAULT_KERNEL:imx6qdlsabreauto = "linux-fslc-lts"
diff --git a/meta-agl-bsp/conf/include/agl_imx8mq-evk-common.inc b/meta-agl-bsp/conf/include/agl_imx8mq-evk-common.inc
new file mode 100644
index 000000000..b3faadd0a
--- /dev/null
+++ b/meta-agl-bsp/conf/include/agl_imx8mq-evk-common.inc
@@ -0,0 +1,8 @@
+require agl_imx-common.inc
+
+# Add helper to drive setting up HCI UART device
+# NOTE: Disabled 2023/05 due to kernel oops, further investigation
+# required, see SPEC-4807 in JIRA.
+#MACHINE_EXTRA_RRECOMMENDS:append = " hci-uart-helper"
+
+AGL_DEFAULT_INITRAMFS_FSTYPES := ""
diff --git a/meta-agl-bsp/conf/include/agl_imx8mq-evk-viv.inc b/meta-agl-bsp/conf/include/agl_imx8mq-evk-viv.inc
new file mode 100644
index 000000000..3988fcd6f
--- /dev/null
+++ b/meta-agl-bsp/conf/include/agl_imx8mq-evk-viv.inc
@@ -0,0 +1,8 @@
+require agl_imx8mq-evk-common.inc
+
+IMX_DEFAULT_BSP = "nxp"
+
+# NOTE:
+# There is some potential benefit to using the community supported
+# linux-fslc-imx hybrid kernel here, but keeping the configuration
+# close to upstream to ease maintenance seems worthwhile.
diff --git a/meta-agl-bsp/conf/include/agl_imx8mq-evk.inc b/meta-agl-bsp/conf/include/agl_imx8mq-evk.inc
new file mode 100644
index 000000000..620ee0fdd
--- /dev/null
+++ b/meta-agl-bsp/conf/include/agl_imx8mq-evk.inc
@@ -0,0 +1,23 @@
+require agl_imx8mq-evk-common.inc
+
+# NOTE:
+# Currently using the upstream default of IMX_DEFAULT_BSP = "mainline",
+# since we want to use the etnaviv driver and upstream Mesa + weston
+# stack. More tweaks are required to accomplish that if the BSP is set
+# to "nxp".
+
+# Force use of the community supported hybrid NXP/LTS kernel instead of
+# the default linux-fslc. This is required to get the drivers required
+# for HDMI output.
+IMX_DEFAULT_KERNEL:imx8mq-evk = "linux-fslc-imx"
+
+# Tweaks to allow using linux-fslc-imx on its own without the whole
+# NXP BSP. Just the DISTROOVERRIDES change on its own is not enough,
+# as COMPATIBLE_MACHINE is evaluated early enough that the recipe is
+# not seen as compatible without an explicit override.
+COMPATIBLE_MACHINE:pn-linux-fslc-imx = "(imx8mq-evk)"
+DISTROOVERRIDES:pn-linux-fslc-imx:append = "mx8-nxp-bsp"
+
+# Add our own over-ride for use in a few recipes where there is
+# conflicting Vivante vs etnaviv configuration.
+MACHINEOVERRIDES .= ":etnaviv"
diff --git a/meta-agl-bsp/conf/include/agl_imx8mqevk-common.inc b/meta-agl-bsp/conf/include/agl_imx8mqevk-common.inc
deleted file mode 100644
index f3c4a736e..000000000
--- a/meta-agl-bsp/conf/include/agl_imx8mqevk-common.inc
+++ /dev/null
@@ -1,13 +0,0 @@
-require agl_imx-common.inc
-
-# Force use of the community supported LTS kernel instead of the
-# default linux-imx
-IMX_DEFAULT_KERNEL:imx8mqevk = "linux-fslc-imx"
-
-# For EVKB wifi support
-MACHINE_FEATURES:append = " bcm4356"
-
-# Add helper to drive setting up HCI UART device
-MACHINE_EXTRA_RRECOMMENDS:append = " hci-uart-helper"
-
-AGL_DEFAULT_INITRAMFS_FSTYPES := ""
diff --git a/meta-agl-bsp/conf/include/agl_imx8mqevk-viv.inc b/meta-agl-bsp/conf/include/agl_imx8mqevk-viv.inc
deleted file mode 100644
index 8227f5c06..000000000
--- a/meta-agl-bsp/conf/include/agl_imx8mqevk-viv.inc
+++ /dev/null
@@ -1 +0,0 @@
-include agl_imx8mqevk-common.inc
diff --git a/meta-agl-bsp/conf/include/agl_imx8mqevk.inc b/meta-agl-bsp/conf/include/agl_imx8mqevk.inc
deleted file mode 100644
index 6801722be..000000000
--- a/meta-agl-bsp/conf/include/agl_imx8mqevk.inc
+++ /dev/null
@@ -1,23 +0,0 @@
-include agl_imx8mqevk-common.inc
-
-# NOTE: currently not using IMX_DEFAULT_BSP = "mainline", as it
-# requires more changes than this approach of disabling
-# Vivante.
-
-# Add our own over-ride for use in a few recipes where there is
-# conflicting Vivante vs etnaviv configuration.
-MACHINEOVERRIDES .= ":etnaviv"
-
-# Knock out Vivante overrides
-MACHINEOVERRIDES_EXTENDER:mx8mq:forcevariable = ""
-PREFERRED_VERSION_weston_mx8 = "8.0.0"
-PREFERRED_VERSION_wayland-protocols_mx8 = "1.20"
-PREFERRED_VERSION_libdrm_mx8 = "2.4.101"
-
-CORE_IMAGE_EXTRA_INSTALL += "libdrm-etnaviv"
-
-PREFERRED_VERSION_gstreamer1.0_mx8 = "1.16.3"
-PREFERRED_VERSION_gstreamer1.0-plugins-base_mx8 = "1.16.3"
-PREFERRED_VERSION_gstreamer1.0-plugins-good_mx8 = "1.16.3"
-PREFERRED_VERSION_gstreamer1.0-plugins-bad_mx8 = "1.16.3"
-PREFERRED_VERSION_gstreamer1.0-plugins-ugly_mx8 = "1.16.3"
diff --git a/meta-agl-bsp/conf/include/agl_j7-evm.inc b/meta-agl-bsp/conf/include/agl_j7-evm.inc
deleted file mode 100644
index b394aa5ee..000000000
--- a/meta-agl-bsp/conf/include/agl_j7-evm.inc
+++ /dev/null
@@ -1,15 +0,0 @@
-# j7-evm has a k3r5 BBMULTICONFIG to build its bootloader firmware,
-# need to use an override to set DEFAULTTUNE back to what that
-# machine configuration needs.
-DEFAULTTUNE_k3r5 = "armv7athf"
-
-# Force using a separate TMPDIR for the multiconfig to avoid
-# issues (e.g. using the rm_work class currently fails with the
-# single shared TMPDIR).
-TMPDIR_k3r5 = "${TOPDIR}/tmp-${BB_CURRENT_MC}"
-# But we then also need to redefine DEPLOY_DIR for it to match
-# the existing expectations (pointing into the default config)
-DEPLOY_DIR_k3r5 = "${TOPDIR}/tmp/deploy"
-
-# Workaround for recipe assumption of poky location
-LIC_FILES_CHKSUM:pn-ti-rtos-firmware = "file://${THISDIR}/../../licenses/TI-TFL;md5=a1b59cb7ba626b9dbbcbf00f3fbc438a"
diff --git a/meta-agl-bsp/conf/include/agl_j721e-evm.inc b/meta-agl-bsp/conf/include/agl_j721e-evm.inc
new file mode 100644
index 000000000..963b5697d
--- /dev/null
+++ b/meta-agl-bsp/conf/include/agl_j721e-evm.inc
@@ -0,0 +1,11 @@
+# j721e-evm has a k3r5 BBMULTICONFIG to build its bootloader
+# firmware, need to use an override to set DEFAULTTUNE back to
+# what that machine configuration needs.
+DEFAULTTUNE:k3r5:forcedefaulttune = "armv7athf"
+
+# Workaround for recipe assumption of poky location
+LIC_FILES_CHKSUM:pn-ti-rtos-firmware = "file://${THISDIR}/../../licenses/TI-TFL;md5=a1b59cb7ba626b9dbbcbf00f3fbc438a"
+
+# meta-ti-bsp layer conf does break expectations wrt common folders
+# meta-ti-bsp/conf/layer.conf:TI_COMMON_DEPLOY ?= "${TOPDIR}/deploy-ti"
+TI_COMMON_DEPLOY := "${TMPDIR}/deploy" \ No newline at end of file
diff --git a/meta-agl-bsp/conf/include/agl_m3-salvator-x-nogfx.inc b/meta-agl-bsp/conf/include/agl_m3-salvator-x-nogfx.inc
index 7f1248065..ebbb3006a 100644
--- a/meta-agl-bsp/conf/include/agl_m3-salvator-x-nogfx.inc
+++ b/meta-agl-bsp/conf/include/agl_m3-salvator-x-nogfx.inc
@@ -1,10 +1,6 @@
-require conf/include/agl_rcar-nogfx.inc
+require conf/include/agl_salvator-nogfx.inc
SOC_FAMILY = "r8a7796"
BOARD_NAME = "m3-salvator-x"
DTB_SUFFIX = "r8a7796-salvator-xs"
-# Mask graphic Pkgs
-BBMASK += "gles-user-module|kernel-module-gles|wayland-kms|libgbm"
-# Mask MMP recipes
-BBMASK += "kernel-module-uvcs-drv|omx-user-module"
diff --git a/meta-agl-bsp/conf/include/agl_m3-salvator-x.inc b/meta-agl-bsp/conf/include/agl_m3-salvator-x.inc
index b332c4b81..355040ba9 100644
--- a/meta-agl-bsp/conf/include/agl_m3-salvator-x.inc
+++ b/meta-agl-bsp/conf/include/agl_m3-salvator-x.inc
@@ -1,9 +1,6 @@
-require conf/include/agl_rcar.inc
+require conf/include/agl_salvator.inc
SOC_FAMILY = "r8a7796"
BOARD_NAME = "m3-salvator-x"
DTB_SUFFIX = "r8a7796-salvator-xs"
-IMAGE_INSTALL:append:rcar-gen3 = " \
- kernel-module-vspmif \
-"
diff --git a/meta-agl-bsp/conf/include/agl_m3ulcb-nogfx.inc b/meta-agl-bsp/conf/include/agl_m3ulcb-nogfx.inc
index f319e97de..31d99c342 100644
--- a/meta-agl-bsp/conf/include/agl_m3ulcb-nogfx.inc
+++ b/meta-agl-bsp/conf/include/agl_m3ulcb-nogfx.inc
@@ -2,19 +2,27 @@ require conf/include/agl_rcar-nogfx.inc
SOC_FAMILY = "r8a7796"
BOARD_NAME = "m3ulcb"
-DTB_SUFFIX = "r8a7796-m3ulcb"
+DTB_SUFFIX = "r8a77960-ulcb"
# Mask graphic Pkgs
BBMASK += "gles-user-module|kernel-module-gles|wayland-kms|libgbm"
# Mask MMP recipes
BBMASK += "kernel-module-uvcs-drv|omx-user-module"
-DISTRO_FEATURES:append = "${@bb.utils.contains('AGL_XEN_WANTED', '1', ' xen', '', d)}"
-IMAGE_INSTALL:append = "${@bb.utils.contains('AGL_XEN_WANTED', '1', ' xen-base xen-mkimage', '', d)}"
-
-# Workaround for SPEC-3706 - versioned bbappends and upstream moved on to 1.16.3
-BBMASK += "meta-renesas/meta-rcar-gen3/recipes-multimedia/gstreamer/gstreamer1.0-.*1.16.2\.bbappend"
+# Work around use of obsolete Weston backend-fbdev in meta-rcar-gen3
+# when building without the proprietary driver stack. Masking out the
+# weston_%.bbappend seems the simplest approach for now, as forcing
+# USE_GLES = "1" to disable the adding of -Dbackend-default="fbdev" to
+# EXTRA_OEMESON triggers adding "libgbm" to DEPENDS, which breaks due
+# to that being a component specific to the proprietary stack we are
+# explicitly disabling. If the "libgbm" usage in the bbappend was
+# instead "virtual/libgbm" as is now used in poky, it might be possible
+# to just tweak PREFERRED_PROVIDER_virtual/libgbm = "mesa".
+BBMASK += "meta-rcar-gen3/recipes-graphics/wayland/weston_%.bbappend"
# do use software rendering to display the compositor
# used for images w/o binary-only driver
WESTON_USE_PIXMAN = "1"
+
+DISTRO_FEATURES:append = "${@bb.utils.contains('AGL_XEN_WANTED', '1', ' xen', '', d)}"
+IMAGE_INSTALL:append = "${@bb.utils.contains('AGL_XEN_WANTED', '1', ' xen-base xen-mkimage', '', d)}"
diff --git a/meta-agl-bsp/conf/include/agl_m3ulcb.inc b/meta-agl-bsp/conf/include/agl_m3ulcb.inc
index 652a61126..4f788324c 100644
--- a/meta-agl-bsp/conf/include/agl_m3ulcb.inc
+++ b/meta-agl-bsp/conf/include/agl_m3ulcb.inc
@@ -2,7 +2,7 @@ require conf/include/agl_rcar.inc
SOC_FAMILY = "r8a7796"
BOARD_NAME = "m3ulcb"
-DTB_SUFFIX = "r8a7796-m3ulcb"
+DTB_SUFFIX = "r8a77960-ulcb"
DISTRO_FEATURES:append = "${@bb.utils.contains('AGL_XEN_WANTED', '1', ' xen', '', d)}"
-IMAGE_INSTALL:append = "${@bb.utils.contains('AGL_XEN_WANTED', '1', ' xen-base xen-mkimage', '', d)}" \ No newline at end of file
+IMAGE_INSTALL:append = "${@bb.utils.contains('AGL_XEN_WANTED', '1', ' xen-base xen-mkimage', '', d)}"
diff --git a/meta-agl-bsp/conf/include/agl_nitrogen6x.inc b/meta-agl-bsp/conf/include/agl_nitrogen6x.inc
deleted file mode 100644
index cb13de713..000000000
--- a/meta-agl-bsp/conf/include/agl_nitrogen6x.inc
+++ /dev/null
@@ -1 +0,0 @@
-require agl_imx6-common.inc
diff --git a/meta-agl-bsp/conf/include/agl_qemuarm.inc b/meta-agl-bsp/conf/include/agl_qemuarm.inc
index f45b2d445..2449e1800 100644
--- a/meta-agl-bsp/conf/include/agl_qemuarm.inc
+++ b/meta-agl-bsp/conf/include/agl_qemuarm.inc
@@ -7,6 +7,9 @@ ROOT_VM = "root=PARTUUID=${DISK_SIGNATURE}-02"
# Use our own wks file
WKS_FILE="directdisk.wks.in"
+# Use pixman as software renderer to avoid high cpu consumption by GL-renderer
+WESTON_USE_PIXMAN = "1"
+
# Over-ride setting in oe-core's qemuboot.bbclass
QB_MEM:qemuarm = "-m 2048"
diff --git a/meta-agl-bsp/conf/include/agl_qemuarm64.inc b/meta-agl-bsp/conf/include/agl_qemuarm64.inc
index 089c4f261..46d3b4c39 100644
--- a/meta-agl-bsp/conf/include/agl_qemuarm64.inc
+++ b/meta-agl-bsp/conf/include/agl_qemuarm64.inc
@@ -7,6 +7,9 @@ ROOT_VM = "root=PARTUUID=${DISK_SIGNATURE}-02"
# Use our own wks file
WKS_FILE="directdisk.wks.in"
+# Use pixman as software renderer to avoid high cpu consumption by GL-renderer
+WESTON_USE_PIXMAN = "1"
+
# Over-ride setting in oe-core's qemuboot.bbclass
QB_MEM:qemuarm64 = "-m 2048"
diff --git a/meta-agl-bsp/conf/include/agl_qemux86-64.inc b/meta-agl-bsp/conf/include/agl_qemux86-64.inc
index 638778b81..cb40b8b37 100644
--- a/meta-agl-bsp/conf/include/agl_qemux86-64.inc
+++ b/meta-agl-bsp/conf/include/agl_qemux86-64.inc
@@ -34,7 +34,7 @@ MACHINE_EXTRA_RRECOMMENDS:append = " \
# NOTE: wic.{xz,bmap} are here since qemu targets override
# AGL_DEFAULT_IMAGE_FSTYPES to not include them, but for Intel
# we actually do want them for use on physical hardware.
-AGL_EXTRA_IMAGE_FSTYPES = "wic.xz wic.bmap ${@bb.utils.contains('DISTRO_FEATURES', 'AGLCI', 'wic.vmdk.xz', 'wic.vmdk', d)}"
+AGL_EXTRA_IMAGE_FSTYPES = "wic.xz wic.bmap ${@bb.utils.contains('AGL_FEATURES', 'AGLCI', 'wic.vmdk.xz', 'wic.vmdk', d)}"
IMAGE_BOOT_FILES:sota = "u-boot-qemux86-64.rom"
# Root device
diff --git a/meta-agl-bsp/conf/include/agl_raspberrypi4.inc b/meta-agl-bsp/conf/include/agl_raspberrypi4.inc
index 5a0e89e66..7fd878d66 100644
--- a/meta-agl-bsp/conf/include/agl_raspberrypi4.inc
+++ b/meta-agl-bsp/conf/include/agl_raspberrypi4.inc
@@ -11,7 +11,7 @@ RPI_USE_U_BOOT = "1"
ENABLE_UART ?= "1"
# For libomxil
-#LICENSE_FLAGS_WHITELIST = "commercial"
+#LICENSE_FLAGS_ACCEPTED = "commercial"
IMAGE_INSTALL:append = " kernel-modules linux-firmware-rpidistro-bcm43430 linux-firmware-rpidistro-bcm43455 create-combined-dtb "
@@ -30,6 +30,5 @@ IMAGE_INSTALL:append = " ${@bb.utils.contains('AGL_XEN_WANTED', '1', 'xen-tools
# Add xen-raspberry binary to boot files
IMAGE_BOOT_FILES:append = " ${@bb.utils.contains('AGL_XEN_WANTED','1', 'xen-${MACHINE}', '',d)}"
-PREFERRED_VERSION_u-boot = "2021.07"
-PREFERRED_VERSION_u-boot-tools = "2021.07"
-UBOOT_MACHINE:rpi = "rpi_arm64_config"
+#DISPLAY CONFIGURATION
+WESTON_DISPLAYS:raspberrypi4 = " hdmi-a-1-90 hdmi-a-2-90"
diff --git a/meta-agl-bsp/conf/include/agl_raspberrypi5.inc b/meta-agl-bsp/conf/include/agl_raspberrypi5.inc
new file mode 100644
index 000000000..a0e675956
--- /dev/null
+++ b/meta-agl-bsp/conf/include/agl_raspberrypi5.inc
@@ -0,0 +1,34 @@
+# Maximum memory allowed to be assigned
+GPU_MEM = "256"
+
+# Add CMA to the kernel arguments for SOTA
+OSTREE_KERNEL_ARGS:sota:append = " cma=256M"
+
+# use u-boot always (RPi5 U-boot is not ready yet)
+RPI_USE_U_BOOT = "0"
+
+# Use UART for serial console
+ENABLE_UART ?= "1"
+
+# For libomxil
+#LICENSE_FLAGS_ACCEPTED = "commercial"
+
+IMAGE_INSTALL:append = " kernel-modules linux-firmware-rpidistro-bcm43430 linux-firmware-rpidistro-bcm43455 create-combined-dtb "
+
+# Psplash causes crash on first boot on RPi
+IMAGE_FEATURES:remove = "splash"
+
+# Build updatable image. Only takes effect when sota.bbclass is inherited
+DISTRO_FEATURES:append = " sota"
+
+# Add xen build, if the xen feature activated
+DISTRO_FEATURES:append = " ${@bb.utils.contains('AGL_XEN_WANTED', '1', ' xen', '', d)}"
+
+# add xen-tools to build
+IMAGE_INSTALL:append = " ${@bb.utils.contains('AGL_XEN_WANTED', '1', 'xen-tools xen-mkimage-rpi4', '', d)}"
+
+# Add xen-raspberry binary to boot files
+IMAGE_BOOT_FILES:append = " ${@bb.utils.contains('AGL_XEN_WANTED','1', 'xen-${MACHINE}', '',d)}"
+
+#DISPLAY CONFIGURATION
+WESTON_DISPLAYS:raspberrypi5 = " hdmi-a-1-90 hdmi-a-2-90"
diff --git a/meta-agl-bsp/conf/include/agl_rcar-nogfx.inc b/meta-agl-bsp/conf/include/agl_rcar-nogfx.inc
index f3548b8ab..fb67fd976 100644
--- a/meta-agl-bsp/conf/include/agl_rcar-nogfx.inc
+++ b/meta-agl-bsp/conf/include/agl_rcar-nogfx.inc
@@ -4,7 +4,7 @@ OSTREE_KERNEL = "Image"
IMAGE_BOOT_FILES:sota = "renesas-ota-bootfiles/* ${DTB_SUFFIX}.dtb"
OSTREE_BOOTLOADER ?= "u-boot"
-WKS_FILE = "singlepart-noloader.wks"
+WKS_FILE:rcar-gen3 = "singlepart-noloader.wks"
RENESAS_DATADIR = "/usr"
@@ -41,3 +41,20 @@ PSEUDO_IGNORE_PATHS:append:pn-kernel-module-qos = ",${KERNELSRC}"
PSEUDO_IGNORE_PATHS:append:pn-kernel-module-vsp2driver = ",${KERNELSRC}"
PSEUDO_IGNORE_PATHS:append:pn-kernel-module-vspmif = ",${KERNELSRC}"
PSEUDO_IGNORE_PATHS:append:pn-kernel-module-vspm = ",${KERNELSRC}"
+
+# Mask out base-files and systemd bbappends to avoid changing systemd-tmpfiles
+# behavior, see SPEC-4256 for a more involved explanation.
+BBMASK += "meta-renesas/meta-rcar-gen3/recipes-core/base-files/ meta-renesas/meta-rcar-gen3/recipes-core/systemd/"
+
+# Mask out cogl bbappend to avoid meta-gnome dependency
+BBMASK += "meta-renesas/meta-rcar-gen3/recipes-graphics/cogl/cogl-1.0_1.%.bbappend"
+
+# Provide default value that avoids errors from a new packaging QA
+# check with respect to packagegroups depending on versioned library
+# packages needing to be machine-specific.
+#
+# Note that this needs to be done here in global configuration space as
+# opposed to in a bbappend because the value needs to be set before the
+# 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}"
diff --git a/meta-agl-bsp/conf/include/agl_rcar.inc b/meta-agl-bsp/conf/include/agl_rcar.inc
index 6dc40dcb5..e1169c21e 100644
--- a/meta-agl-bsp/conf/include/agl_rcar.inc
+++ b/meta-agl-bsp/conf/include/agl_rcar.inc
@@ -1,33 +1,37 @@
require conf/include/agl_rcar-nogfx.inc
# Enable AGL virtualization features
-MACHINE_FEATURES:append = " agl-egvirt"
+MACHINE_FEATURES:append:rcar-gen3 = " agl-egvirt"
# Enable Gfx Pkgs
-MACHINE_FEATURES:append = " gsx"
-MULTI_PROVIDER_WHITELIST += "virtual/libgl virtual/egl virtual/libgles1 virtual/libgles2"
+MACHINE_FEATURES:append:rcar-gen3 = " gsx"
+BB_MULTI_PROVIDER_ALLOWED:append:rcar-gen3 = " virtual/libgl virtual/egl virtual/libgles1 virtual/libgles2"
# for Wayland/Weston
-PREFERRED_PROVIDER_virtual/libgles1 = ""
-PREFERRED_PROVIDER_virtual/libgles2 = "virtual-gles-user-module"
-PREFERRED_PROVIDER_virtual/egl = "virtual-gles-user-module"
-PREFERRED_PROVIDER_virtual/libgl = ""
-PREFERRED_PROVIDER_virtual/mesa = "mesa"
-PREFERRED_PROVIDER_libgbm = "libgbm"
-PREFERRED_RPROVIDER_libgbm-dev = "libgbm"
+PREFERRED_PROVIDER_virtual/libgles1:rcar-gen3 = ""
+PREFERRED_PROVIDER_virtual/libgles2:rcar-gen3 = "virtual-gles-user-module"
+PREFERRED_PROVIDER_virtual/egl:rcar-gen3 = "virtual-gles-user-module"
+PREFERRED_PROVIDER_virtual/libgl:rcar-gen3 = ""
+PREFERRED_PROVIDER_virtual/mesa:rcar-gen3 = "mesa"
-PREFERRED_RPROVIDER_libomxil = "omx-user-module"
-PREFERRED_PROVIDER_virtual/libomxil = "omx-user-module"
+PREFERRED_PROVIDER_libgbm:rcar-gen3 = "libgbm"
+PREFERRED_PROVIDER_virtual/libgbm:rcar-gen3 = "libgbm"
+PREFERRED_RPROVIDER_libgbm-dev:rcar-gen3 = "libgbm"
+
+
+PREFERRED_RPROVIDER_libomxil:rcar-gen3 = "omx-user-module"
+PREFERRED_PROVIDER_virtual/libomxil:rcar-gen3 = "omx-user-module"
+VIRTUAL-RUNTIME_libomxil:rcar-gen3 = "omx-user-module"
# Add for gstreamer plugins ugly
-LICENSE_FLAGS_WHITELIST = "commercial"
+LICENSE_FLAGS_ACCEPTED:rcar-gen3 = "commercial"
-MACHINE_FEATURES:append = " multimedia"
+MACHINE_FEATURES:append:rcar-gen3 = " multimedia"
-DISTRO_FEATURES:append = " use_eva_pkg"
+DISTRO_FEATURES:append:rcar-gen3 = " use_eva_pkg"
-#DISTRO_FEATURES:append = " h265dec_lib mpeg2dec_lib"
-DISTRO_FEATURES:append = " h264dec_lib h264enc_lib aaclcdec_lib aaclcdec_mdw"
+#DISTRO_FEATURES:append:rcar-gen3 = " h265dec_lib mpeg2dec_lib"
+DISTRO_FEATURES:append:rcar-gen3 = " h264dec_lib h264enc_lib aaclcdec_lib aaclcdec_mdw"
# Mask out meta-renesas-rcar-gen3's tweaks to weston-init, as they do
# not seem necessary for anything in AGL, and the addition of
@@ -38,7 +42,7 @@ DISTRO_FEATURES:append = " h264dec_lib h264enc_lib aaclcdec_lib aaclcdec_mdw"
# getting weston started. There is no clear rationale expressed in the
# meta-renesas-rcar-gen3 commit history for the extra dependencies, and
# testing shows no issues on H3ULCB when not having them.
-BBMASK += "meta-rcar-gen3/recipes-graphics/wayland/weston-init.bbappend"
+BBMASK += "meta-renesas/meta-rcar-gen3/recipes-graphics/wayland/weston-init.bbappend"
# Add graphics and decoder drivers to packagegroup-machine-base
# recommendation.
diff --git a/meta-agl-bsp/conf/include/agl_refhw-h3.inc b/meta-agl-bsp/conf/include/agl_refhw-h3.inc
index cd3094c92..6eee8149f 100644
--- a/meta-agl-bsp/conf/include/agl_refhw-h3.inc
+++ b/meta-agl-bsp/conf/include/agl_refhw-h3.inc
@@ -1,12 +1,12 @@
-AGL_FEATURES:append = " agl-refhw-h3"
+AGL_FEATURES:append:h3ulcb = " agl-refhw-h3"
# Reference hardware has USB3
-MACHINE_FEATURES:append = " usb3"
+MACHINE_FEATURES:append:h3ulcb = " usb3"
-KERNEL_DEVICETREE:append = " renesas/r8a7795-agl-refhw.dtb"
+KERNEL_DEVICETREE:append:h3ulcb = " renesas/r8a77951-agl-refhw.dtb"
-UBOOT_CONFIG:append = " agl-refhw-4x2g"
-UBOOT_CONFIG[agl-refhw-4x2g] = "r8a7795_salvator-xs-4x2g_defconfig"
+UBOOT_CONFIG:append:h3ulcb = " agl-refhw"
+UBOOT_CONFIG[agl-refhw] = "rcar3_salvator-x_defconfig"
MACHINE_EXTRA_RRECOMMENDS:append:h3ulcb = " \
linux-firmware-wl18xx \
diff --git a/meta-agl-bsp/conf/include/agl_s4sk.inc b/meta-agl-bsp/conf/include/agl_s4sk.inc
new file mode 100644
index 000000000..8f4a91b44
--- /dev/null
+++ b/meta-agl-bsp/conf/include/agl_s4sk.inc
@@ -0,0 +1,9 @@
+SOC_FAMILY = "r8a779f0"
+BOARD_NAME = "s4sk"
+
+#ws2.0
+DTB_SUFFIX = "r8a779f0-s4sk"
+WKS_FILE = "singlepart-noloader.wks"
+IMAGE_INSTALL:append = " \
+ kernel-devicetree \
+"
diff --git a/meta-agl-bsp/conf/include/agl_salvator-nogfx.inc b/meta-agl-bsp/conf/include/agl_salvator-nogfx.inc
new file mode 100644
index 000000000..06e635ca0
--- /dev/null
+++ b/meta-agl-bsp/conf/include/agl_salvator-nogfx.inc
@@ -0,0 +1,17 @@
+require conf/include/agl_rcar-nogfx.inc
+
+# Mask graphic Pkgs
+BBMASK += "gles-user-module|kernel-module-gles|wayland-kms|libgbm"
+# Mask MMP recipes
+BBMASK += "kernel-module-uvcs-drv|omx-user-module"
+# Work around use of obsolete Weston backend-fbdev in meta-rcar-gen3
+# when building without the proprietary driver stack. Masking out the
+# weston_%.bbappend seems the simplest approach for now, as forcing
+# USE_GLES = "1" to disable the adding of -Dbackend-default="fbdev" to
+# EXTRA_OEMESON triggers adding "libgbm" to DEPENDS, which breaks due
+# to that being a component specific to the proprietary stack we are
+# explicitly disabling. If the "libgbm" usage in the bbappend was
+# instead "virtual/libgbm" as is now used in poky, it might be possible
+# to just tweak PREFERRED_PROVIDER_virtual/libgbm = "mesa".
+BBMASK += "meta-rcar-gen3/recipes-graphics/wayland/weston_%.bbappend"
+
diff --git a/meta-agl-bsp/conf/include/agl_salvator.inc b/meta-agl-bsp/conf/include/agl_salvator.inc
new file mode 100644
index 000000000..78457868a
--- /dev/null
+++ b/meta-agl-bsp/conf/include/agl_salvator.inc
@@ -0,0 +1,6 @@
+require conf/include/agl_rcar.inc
+
+IMAGE_INSTALL:append:rcar-gen3 = " \
+ kernel-module-vspm-if \
+"
+
diff --git a/meta-agl-bsp/conf/include/agl_unmatched.inc b/meta-agl-bsp/conf/include/agl_unmatched.inc
new file mode 100644
index 000000000..f7c9f75f2
--- /dev/null
+++ b/meta-agl-bsp/conf/include/agl_unmatched.inc
@@ -0,0 +1,4 @@
+# firmware for graphics
+MACHINE_EXTRA_RRECOMMENDS:append = " linux-firmware-radeon linux-firmware-amdgpu "
+
+#
diff --git a/meta-agl-bsp/conf/layer.conf b/meta-agl-bsp/conf/layer.conf
index 2a999ddd5..cd98a9dfc 100644
--- a/meta-agl-bsp/conf/layer.conf
+++ b/meta-agl-bsp/conf/layer.conf
@@ -23,4 +23,4 @@ BBFILE_COLLECTIONS += "aglbsp"
BBFILE_PATTERN_aglbsp = "^${LAYERDIR}/"
BBFILE_PRIORITY_aglbsp = "60"
-LAYERSERIES_COMPAT_aglbsp = "dunfell"
+LAYERSERIES_COMPAT_aglbsp = "kirkstone"
diff --git a/meta-agl-bsp/conf/machine/include/virtio.inc b/meta-agl-bsp/conf/machine/include/virtio.inc
index 8ee71a80b..6f8a638a0 100644
--- a/meta-agl-bsp/conf/machine/include/virtio.inc
+++ b/meta-agl-bsp/conf/machine/include/virtio.inc
@@ -16,19 +16,8 @@ RDEPENDS:${KERNEL_PACKAGE_NAME}-base = ""
PREFERRED_PROVIDER_virtual/kernel ??= "linux-yocto"
# Use newer kernel
-PREFERRED_VERSION_linux-yocto = "5.10.%"
-
-# Clear since it is set to 'sllin' in packagegroup-agl-demo.bb, and sllin is not
-# compatible with kernel 5.10 at the moment.
-LIN_DRIVERS = ""
-
-# Clear since it is set to 'lttng-modules' in packagegroup-core-tools-profile.bb,
-# and lttng-modules are not compatible with 5.10 kernel used for virtio.
-LTTNGMODULES:virtio-all = ""
+PREFERRED_VERSION_linux-yocto = "5.15.%"
EXTRA_IMAGEDEPENDS += "qemu-native qemu-helper-native"
IMAGE_CLASSES += "qemuboot"
-
-# most driver fails to compile
-MOST_DRIVERS ?= ""
diff --git a/meta-agl-bsp/meta-agl-refhw-gen3/recipes-navigation/gpsd/gpsd-conf-refhw_1.0.bb b/meta-agl-bsp/meta-agl-refhw-gen3/recipes-navigation/gpsd/gpsd-machine-conf_1.0.bbappend
index 25bdb73c8..3cd5aa7de 100644
--- a/meta-agl-bsp/meta-agl-refhw-gen3/recipes-navigation/gpsd/gpsd-conf-refhw_1.0.bb
+++ b/meta-agl-bsp/meta-agl-refhw-gen3/recipes-navigation/gpsd/gpsd-machine-conf_1.0.bbappend
@@ -1,8 +1,4 @@
-SUMMARY = "AGL Reference Hardware specific gpsd configuration"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
-
-PACKAGE_ARCH = "${MACHINE_ARCH}"
+FILESEXTRAPATHS:prepend := "${THISDIR}/files:"
SRC_URI = "file://gpsd.refhw \
file://refhw-gpsd-helper.sh \
@@ -16,6 +12,7 @@ do_compile[noexec] = "1"
do_install() {
install -D -m 0644 ${WORKDIR}/gpsd.refhw ${D}/${sysconfdir}/default/gpsd.refhw
+
if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
install -D -m 0755 ${WORKDIR}/refhw-gpsd-helper.sh ${D}/${sbindir}/refhw-gpsd-helper.sh
install -d ${D}${sysconfdir}/systemd/system/gpsd.service.d
@@ -23,6 +20,10 @@ do_install() {
fi
}
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
+CONFFILES:${PN} = "${sysconfdir}/default/gpsd.refhw"
+
ALTERNATIVE:${PN} = "gpsd-defaults"
ALTERNATIVE_LINK_NAME[gpsd-defaults] = "${sysconfdir}/default/gpsd"
ALTERNATIVE_TARGET[gpsd-defaults] = "${sysconfdir}/default/gpsd.refhw"
@@ -30,9 +31,3 @@ ALTERNATIVE_TARGET[gpsd-defaults] = "${sysconfdir}/default/gpsd.refhw"
# default configuration. The script run by the systemd drop-in
# will tweak things on boot to handle h3ulcb vs refhw.
ALTERNATIVE_PRIORITY[gpsd-defaults] = "5"
-
-CONFFILES:${PN} = "${sysconfdir}/default/gpsd.refhw"
-
-# NOTE: Explicitly not defining RPROVIDES of "virtual/gpsd-conf" to
-# avoid conflicting with the default configuration and potentially
-# changing behavior on m3ulcb/h3ulcb.
diff --git a/meta-agl-bsp/meta-core/recipes-graphics/mesa/mesa/0001-virgl-don-t-a-use-staging-when-a-resources-created-w.patch b/meta-agl-bsp/meta-core/recipes-graphics/mesa/mesa/0001-virgl-don-t-a-use-staging-when-a-resources-created-w.patch
new file mode 100644
index 000000000..9d6b2f3d0
--- /dev/null
+++ b/meta-agl-bsp/meta-core/recipes-graphics/mesa/mesa/0001-virgl-don-t-a-use-staging-when-a-resources-created-w.patch
@@ -0,0 +1,48 @@
+From f50ff0b5cf2bfedfc2fd660ccfbfd5cfc3c131d1 Mon Sep 17 00:00:00 2001
+From: Marius Vlad <marius.vlad@collabora.com>
+Date: Tue, 28 Mar 2023 15:33:26 +0300
+Subject: [PATCH] virgl: don't a use staging when a resources created with the
+ shared flag
+
+There seems to be a problem with running firefox by using Xwayland that
+results in a shared resources being not always tagged as using staging.
+
+As a result one process tries to map the resource that was allocated as
+one that uses staging without actually using the staging resource, and
+hence the mapped range only accounts for the small region that we have
+to allocated because a zero-allocation doesn't work, but the application
+mapping the resource assumes that a properly sized range is mapped, and
+consequently this results in invalid memory access.
+
+To work around this issue disable creating staging for resources that
+are created by using shared binding. It is not clear to me whether this
+is the best fix, but it seems to quell the issue.
+
+Fixes: c9d99b7eec7ec14d6d71d381a424b6280d75a882
+virgl: Fix texture transfers by using a staging resource
+
+Related: https://gitlab.freedesktop.org/virgl/virglrenderer/-/issues/291
+Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/19655>
+(cherry picked from commit e496d24cb2d5339566c08c79a8aa7809c240613c)
+
+Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
+(cherry picked from commit 39e9ea1419beb22ab7f4913b6d55f845f94d689a)
+---
+ src/gallium/drivers/virgl/virgl_resource.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/src/gallium/drivers/virgl/virgl_resource.c b/src/gallium/drivers/virgl/virgl_resource.c
+index 7185c9a90ff..257b790d437 100644
+--- a/src/gallium/drivers/virgl/virgl_resource.c
++++ b/src/gallium/drivers/virgl/virgl_resource.c
+@@ -100,6 +100,7 @@ static bool virgl_can_copy_transfer_from_host(struct virgl_screen *vs,
+ {
+ return virgl_can_use_staging(vs, res) &&
+ !is_stencil_array(res) &&
++ !(bind & VIRGL_BIND_SHARED) &&
+ virgl_has_readback_format(&vs->base, pipe_to_virgl_format(res->b.format), false) &&
+ ((!(vs->caps.caps.v2.capability_bits & VIRGL_CAP_FAKE_FP64)) ||
+ virgl_can_readback_from_rendertarget(vs, res) ||
+--
+2.35.1
+
diff --git a/meta-agl-bsp/meta-core/recipes-graphics/mesa/mesa_%.bbappend b/meta-agl-bsp/meta-core/recipes-graphics/mesa/mesa_%.bbappend
index 3d5903d85..fb797a436 100644
--- a/meta-agl-bsp/meta-core/recipes-graphics/mesa/mesa_%.bbappend
+++ b/meta-agl-bsp/meta-core/recipes-graphics/mesa/mesa_%.bbappend
@@ -1 +1,3 @@
+FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
+
require ${@bb.utils.contains('AGL_FEATURES', 'aglcore', '${BPN}_agl.inc', '', d)}
diff --git a/meta-agl-bsp/meta-core/recipes-graphics/mesa/mesa_agl.inc b/meta-agl-bsp/meta-core/recipes-graphics/mesa/mesa_agl.inc
index e74761317..c0f5b271d 100644
--- a/meta-agl-bsp/meta-core/recipes-graphics/mesa/mesa_agl.inc
+++ b/meta-agl-bsp/meta-core/recipes-graphics/mesa/mesa_agl.inc
@@ -1,3 +1,5 @@
+SRC_URI += "file://0001-virgl-don-t-a-use-staging-when-a-resources-created-w.patch"
+
# The gallium-llvm is recommended as software 3D graphics renderer
GALLIUM_LLVM = "gallium-llvm"
PACKAGECONFIG:append:qemux86 = " gallium ${GALLIUM_LLVM}"
diff --git a/meta-agl-bsp/meta-freescale-layer/recipes-connectivity/hci-uart-helper/hci-uart-helper_1.0.bb b/meta-agl-bsp/meta-freescale-layer/recipes-connectivity/hci-uart-helper/hci-uart-helper_1.0.bb
index 1a9c6bb4e..798fcebe6 100644
--- a/meta-agl-bsp/meta-freescale-layer/recipes-connectivity/hci-uart-helper/hci-uart-helper_1.0.bb
+++ b/meta-agl-bsp/meta-freescale-layer/recipes-connectivity/hci-uart-helper/hci-uart-helper_1.0.bb
@@ -8,7 +8,7 @@ SRC_URI = "file://hci-uart-helper.service \
file://hci-uart-helper.sh \
"
-COMPATIBLE_MACHINE = "imx8mqevk"
+COMPATIBLE_MACHINE = "imx8mq-evk"
do_configure[noexec] = "1"
do_compile[noexec] = "1"
diff --git a/meta-agl-bsp/meta-freescale-layer/recipes-graphics/mesa/files/0001-kmsro-add-imx-dcss.patch b/meta-agl-bsp/meta-freescale-layer/recipes-graphics/mesa/files/0001-kmsro-add-imx-dcss.patch
deleted file mode 100644
index 7f7ab9124..000000000
--- a/meta-agl-bsp/meta-freescale-layer/recipes-graphics/mesa/files/0001-kmsro-add-imx-dcss.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-Add i.MX8MQ DCSS kmsro support
-
-Add required dummy entry for NXP's i.MX8MQ DCSS display controller DRM
-driver to the kmsro configuration so that the loader will not think it
-is a GPU.
-
-Upstream-Status: pending
-Signed-off-by: Scott Murray <scott.murray@konsulko.com>
----
-
-diff --git a/src/gallium/targets/dri/meson.build b/src/gallium/targets/dri/meson.build
-index ae25a21..17379c7 100644
---- a/src/gallium/targets/dri/meson.build
-+++ b/src/gallium/targets/dri/meson.build
-@@ -72,6 +72,7 @@ foreach d : [[with_gallium_kmsro, [
- 'hx8357d_dri.so',
- 'ili9225_dri.so',
- 'ili9341_dri.so',
-+ 'imx-dcss_dri.so',
- 'imx-drm_dri.so',
- 'ingenic-drm_dri.so',
- 'mcde_dri.so',
-diff --git a/src/gallium/targets/dri/target.c b/src/gallium/targets/dri/target.c
-index f71f690..41c5c75 100644
---- a/src/gallium/targets/dri/target.c
-+++ b/src/gallium/targets/dri/target.c
-@@ -97,6 +97,7 @@ DEFINE_LOADER_DRM_ENTRYPOINT(exynos)
- DEFINE_LOADER_DRM_ENTRYPOINT(hx8357d)
- DEFINE_LOADER_DRM_ENTRYPOINT(ili9225)
- DEFINE_LOADER_DRM_ENTRYPOINT(ili9341)
-+DEFINE_LOADER_DRM_ENTRYPOINT(imx_dcss)
- DEFINE_LOADER_DRM_ENTRYPOINT(imx_drm)
- DEFINE_LOADER_DRM_ENTRYPOINT(ingenic_drm)
- DEFINE_LOADER_DRM_ENTRYPOINT(mcde)
diff --git a/meta-agl-bsp/meta-freescale-layer/recipes-graphics/mesa/mesa_%.bbappend b/meta-agl-bsp/meta-freescale-layer/recipes-graphics/mesa/mesa_%.bbappend
deleted file mode 100644
index e7633f215..000000000
--- a/meta-agl-bsp/meta-freescale-layer/recipes-graphics/mesa/mesa_%.bbappend
+++ /dev/null
@@ -1,10 +0,0 @@
-FILESEXTRAPATHS:prepend := "${THISDIR}/files:"
-
-SRC_URI += "file://0001-kmsro-add-imx-dcss.patch"
-
-# These over-rides should use "use-mainline-bsp" instead when that
-# becomes more workable for i.MX8 in upstream meta-freescale.
-
-USE_OSMESA_ONLY:etnaviv = "no"
-
-PACKAGECONFIG:append:etnaviv = " gallium etnaviv kmsro"
diff --git a/meta-agl-bsp/meta-freescale-layer/recipes-graphics/wayland/weston_8.0.0.imx.bbappend b/meta-agl-bsp/meta-freescale-layer/recipes-graphics/wayland/weston_10.0.1.imx.bbappend
index 270d8e8f5..07a43f958 100644
--- a/meta-agl-bsp/meta-freescale-layer/recipes-graphics/wayland/weston_8.0.0.imx.bbappend
+++ b/meta-agl-bsp/meta-freescale-layer/recipes-graphics/wayland/weston_10.0.1.imx.bbappend
@@ -3,7 +3,7 @@
# has been resolved by a revert of that breakage upstream.
# What is done below is effectively a disabling of the "wayland"
# PACKAGECONFIG option and then open coding what its effects would
-# normally be, since the _remove prevents specifying it in the usual way.
+# normally be, since the :remove prevents specifying it in the usual way.
PACKAGECONFIG[wayland] = ""
DEPENDS:append = " virtual/egl virtual/libgles2"
PACKAGECONFIG_CONFARGS:append = " -Dbackend-wayland=true"
diff --git a/meta-agl-bsp/meta-freescale-layer/recipes-kernel/linux/files/0004-Smack-Assign-smack_known_web-label-for-kernel-thread.patch b/meta-agl-bsp/meta-freescale-layer/recipes-kernel/linux/files/0004-Smack-Assign-smack_known_web-label-for-kernel-thread.patch
deleted file mode 100644
index 1b17bc73f..000000000
--- a/meta-agl-bsp/meta-freescale-layer/recipes-kernel/linux/files/0004-Smack-Assign-smack_known_web-label-for-kernel-thread.patch
+++ /dev/null
@@ -1,49 +0,0 @@
-From c8bbb0f916de54610513e376070aea531af19dd6 Mon Sep 17 00:00:00 2001
-From: jooseong lee <jooseong.lee@samsung.com>
-Date: Thu, 3 Nov 2016 10:55:43 +0100
-Subject: [PATCH 4/4] Smack: Assign smack_known_web label for kernel thread's
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Assign smack_known_web label for kernel thread's socket in the sk_alloc_security hook
-
-Creating struct sock by sk_alloc function in various kernel subsystems
-like bluetooth dosen't call smack_socket_post_create(). In such case,
-received sock label is the floor('_') label and makes access deny.
-
-Refers-to: https://review.tizen.org/gerrit/#/c/80717/4
-
-Change-Id: I2e5c9359bfede84a988fd4d4d74cdb9dfdfc52d8
-Signed-off-by: jooseong lee <jooseong.lee@samsung.com>
-Signed-off-by: José Bollo <jose.bollo@iot.bzh>
----
- security/smack/smack_lsm.c | 12 ++++++++++--
- 1 file changed, 10 insertions(+), 2 deletions(-)
-
-diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c
-index e45f0a3..a3f3ccc 100644
---- a/security/smack/smack_lsm.c
-+++ b/security/smack/smack_lsm.c
-@@ -2107,8 +2107,16 @@ static int smack_sk_alloc_security(struct sock *sk, int family, gfp_t gfp_flags)
- if (ssp == NULL)
- return -ENOMEM;
-
-- ssp->smk_in = skp;
-- ssp->smk_out = skp;
-+ /*
-+ * Sockets created by kernel threads receive web label.
-+ */
-+ if (unlikely(current->flags & PF_KTHREAD)) {
-+ ssp->smk_in = &smack_known_web;
-+ ssp->smk_out = &smack_known_web;
-+ } else {
-+ ssp->smk_in = skp;
-+ ssp->smk_out = skp;
-+ }
- ssp->smk_packet = NULL;
-
- sk->sk_security = ssp;
---
-2.7.4
-
diff --git a/meta-agl-bsp/meta-freescale-layer/recipes-kernel/linux/linux-fslc-imx/0001-enable-mhdp-with-etnaviv.patch b/meta-agl-bsp/meta-freescale-layer/recipes-kernel/linux/linux-fslc-imx/0001-enable-mhdp-with-etnaviv.patch
index 23ca0475a..f95891a2f 100644
--- a/meta-agl-bsp/meta-freescale-layer/recipes-kernel/linux/linux-fslc-imx/0001-enable-mhdp-with-etnaviv.patch
+++ b/meta-agl-bsp/meta-freescale-layer/recipes-kernel/linux/linux-fslc-imx/0001-enable-mhdp-with-etnaviv.patch
@@ -8,16 +8,15 @@ Upstream-Status: pending
Signed-off-by: Scott Murray <scott.murray@konsulko.com>
---
-diff --git a/drivers/gpu/drm/imx/Kconfig b/drivers/gpu/drm/imx/Kconfig
-index 63d5f1b532ee..a18ba56aa218 100644
---- a/drivers/gpu/drm/imx/Kconfig
-+++ b/drivers/gpu/drm/imx/Kconfig
-@@ -85,7 +85,7 @@ config DRM_IMX_CDNS_MHDP
- select DRM_CDNS_DP
+diff --git a/drivers/gpu/drm/imx/mhdp/Kconfig b/drivers/gpu/drm/imx/mhdp/Kconfig
+index 225ccc3638a8..164b42f04e94 100644
+--- a/drivers/gpu/drm/imx/mhdp/Kconfig
++++ b/drivers/gpu/drm/imx/mhdp/Kconfig
+@@ -7,6 +7,6 @@ config DRM_IMX_CDNS_MHDP
select DRM_CDNS_HDMI
select DRM_CDNS_AUDIO
+ select DRM_CDNS_HDMI_HDCP
- depends on DRM_IMX
+ depends on DRM_IMX || DRM_ETNAVIV
help
Choose this if you want to use HDMI on i.MX8.
-
diff --git a/meta-agl-bsp/meta-freescale-layer/recipes-kernel/linux/linux-fslc-imx/0002-dts-enable-etnaviv.patch b/meta-agl-bsp/meta-freescale-layer/recipes-kernel/linux/linux-fslc-imx/0002-dts-enable-etnaviv.patch
index 4ce9b9d38..4ed4b685e 100644
--- a/meta-agl-bsp/meta-freescale-layer/recipes-kernel/linux/linux-fslc-imx/0002-dts-enable-etnaviv.patch
+++ b/meta-agl-bsp/meta-freescale-layer/recipes-kernel/linux/linux-fslc-imx/0002-dts-enable-etnaviv.patch
@@ -4,15 +4,14 @@ Some further investigation is required into how to manage this upstream
in meta-freescale, as it is not required for the i.MX6 platforms AFAIK.
Upstream-Status: pending
-
Signed-off-by: Scott Murray <scott.murray@konsulko.com>
---
diff --git a/arch/arm64/boot/dts/freescale/imx8mq-evk.dts b/arch/arm64/boot/dts/freescale/imx8mq-evk.dts
-index f2a7e4069a0d..c0b6c5052656 100755
+index c3f8a24c3943..754fbfe30f0a 100755
--- a/arch/arm64/boot/dts/freescale/imx8mq-evk.dts
+++ b/arch/arm64/boot/dts/freescale/imx8mq-evk.dts
-@@ -1074,7 +1074,7 @@
+@@ -1224,7 +1224,7 @@ &vpu_v4l2 {
status = "okay";
};
diff --git a/meta-agl-bsp/meta-freescale-layer/recipes-kernel/linux/linux-fslc-imx_%.bbappend b/meta-agl-bsp/meta-freescale-layer/recipes-kernel/linux/linux-fslc-imx_%.bbappend
index cc26e25c6..0772a98a8 100644
--- a/meta-agl-bsp/meta-freescale-layer/recipes-kernel/linux/linux-fslc-imx_%.bbappend
+++ b/meta-agl-bsp/meta-freescale-layer/recipes-kernel/linux/linux-fslc-imx_%.bbappend
@@ -1,6 +1,6 @@
-FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:${THISDIR}/files:"
+FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:"
-require recipes-kernel/linux/linux-yocto-agl.inc
+require linux-fslc.inc
# These patches and the configuration fragment below will need to be
# revisited if/when using IMX_DEFAULT_BSP = "mainline" with i.MX8
@@ -10,22 +10,8 @@ SRC_URI:append:etnaviv = " \
file://0002-dts-enable-etnaviv.patch \
"
-# Make sure these are enabled so that AGL systemd configuration works
-AGL_KCONFIG_FRAGMENTS += " \
- tmpfs.cfg \
- namespace.cfg \
- cgroup.cfg \
-"
-
-# Support for CFG80211 subsystem
-AGL_KCONFIG_FRAGMENTS += "cfg80211.cfg"
-
-# Turn off a couple of things enabled by default by Freescale
-# (lock debugging and userspace firmware loader fallback)
-AGL_KCONFIG_FRAGMENTS += "fixups.cfg"
-
# Support for i.MX8MQ EVKB (e.g. Broadcom wifi)
-AGL_KCONFIG_FRAGMENTS:append:imx8mqevk = " imx8mq-evkb.cfg"
+AGL_KCONFIG_FRAGMENTS:append:imx8mq-evk = " imx8mq-evkb.cfg"
# Build in etnaviv if required
AGL_KCONFIG_FRAGMENTS:append:etnaviv = " etnaviv.cfg"
diff --git a/meta-agl-bsp/meta-freescale-layer/recipes-kernel/linux/linux-fslc-lts_%.bbappend b/meta-agl-bsp/meta-freescale-layer/recipes-kernel/linux/linux-fslc-lts_%.bbappend
new file mode 100644
index 000000000..1007f3c7c
--- /dev/null
+++ b/meta-agl-bsp/meta-freescale-layer/recipes-kernel/linux/linux-fslc-lts_%.bbappend
@@ -0,0 +1 @@
+require linux-fslc.inc
diff --git a/meta-agl-bsp/meta-freescale-layer/recipes-kernel/linux/linux-fslc.inc b/meta-agl-bsp/meta-freescale-layer/recipes-kernel/linux/linux-fslc.inc
new file mode 100644
index 000000000..948b8c22c
--- /dev/null
+++ b/meta-agl-bsp/meta-freescale-layer/recipes-kernel/linux/linux-fslc.inc
@@ -0,0 +1,22 @@
+FILESEXTRAPATHS:prepend := "${THISDIR}/files:"
+
+require recipes-kernel/linux/linux-yocto-agl.inc
+
+# Make sure these are enabled so that AGL systemd configuration works
+AGL_KCONFIG_FRAGMENTS += " \
+ tmpfs.cfg \
+ namespace.cfg \
+ cgroup.cfg \
+"
+
+# Support for CFG80211 subsystem
+AGL_KCONFIG_FRAGMENTS += "cfg80211.cfg"
+
+# Turn off a couple of things enabled by default by Freescale
+# (lock debugging and userspace firmware loader fallback)
+AGL_KCONFIG_FRAGMENTS += "fixups.cfg"
+
+do_install:append:cubox-i() {
+ # Add symlink to work with default Hummingboard 2 u-boot configuration
+ ln -sf imx6q-hummingboard2.dtb ${D}/boot/imx6q-hummingboard2-emmc.dtb
+}
diff --git a/meta-agl-bsp/meta-freescale-layer/recipes-kernel/linux/linux-fslc_%.bbappend b/meta-agl-bsp/meta-freescale-layer/recipes-kernel/linux/linux-fslc_%.bbappend
index 948b8c22c..1007f3c7c 100644
--- a/meta-agl-bsp/meta-freescale-layer/recipes-kernel/linux/linux-fslc_%.bbappend
+++ b/meta-agl-bsp/meta-freescale-layer/recipes-kernel/linux/linux-fslc_%.bbappend
@@ -1,22 +1 @@
-FILESEXTRAPATHS:prepend := "${THISDIR}/files:"
-
-require recipes-kernel/linux/linux-yocto-agl.inc
-
-# Make sure these are enabled so that AGL systemd configuration works
-AGL_KCONFIG_FRAGMENTS += " \
- tmpfs.cfg \
- namespace.cfg \
- cgroup.cfg \
-"
-
-# Support for CFG80211 subsystem
-AGL_KCONFIG_FRAGMENTS += "cfg80211.cfg"
-
-# Turn off a couple of things enabled by default by Freescale
-# (lock debugging and userspace firmware loader fallback)
-AGL_KCONFIG_FRAGMENTS += "fixups.cfg"
-
-do_install:append:cubox-i() {
- # Add symlink to work with default Hummingboard 2 u-boot configuration
- ln -sf imx6q-hummingboard2.dtb ${D}/boot/imx6q-hummingboard2-emmc.dtb
-}
+require linux-fslc.inc
diff --git a/meta-agl-bsp/meta-iot-cloud/recipes-aws/aws-iot-device-sdk-embedded-c/aws-iot-device-sdk-embedded-c.bb b/meta-agl-bsp/meta-iot-cloud/recipes-aws/aws-iot-device-sdk-embedded-c/aws-iot-device-sdk-embedded-c.bb
deleted file mode 100644
index 0b8088657..000000000
--- a/meta-agl-bsp/meta-iot-cloud/recipes-aws/aws-iot-device-sdk-embedded-c/aws-iot-device-sdk-embedded-c.bb
+++ /dev/null
@@ -1,40 +0,0 @@
-DESCRIPTION = "AWS IoT device SDK for embedded C"
-AUTHOR = "AWS"
-HOMEPAGE = "https://github.com/aws/aws-iot-device-sdk-embedded-C"
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=acc7a1bf87c055789657b148939e4b40"
-
-SRC_URI = "\
- git://github.com/aws/aws-iot-device-sdk-embedded-C.git;protocol=https \
- file://Makefile.aws \
- file://aws_iot_config.h \
- file://awsiotsdk.pc \
-"
-SRCREV = "d039f075e1cc2a2a7fc20edc6868f328d8d36b2f"
-
-S = "${WORKDIR}/git"
-B = "${WORKDIR}/build"
-
-DEPENDS = "mbedtls"
-RDEPENDS:${PN} += "mbedtls"
-
-do_configure:prepend() {
- cp ${WORKDIR}/Makefile.aws ${S}/src
- cp ${WORKDIR}/aws_iot_config.h ${S}/include
- cp ${WORKDIR}/awsiotsdk.pc ${S}
-}
-
-do_compile() {
- cd ${S}/src
- oe_runmake -f ./Makefile.aws DESTDIR=${D} all
-}
-
-do_install() {
- cd ${S}/src
- oe_runmake -f ./Makefile.aws DESTDIR=${D} install
-}
-
-BBCLASSEXTEND = "native nativesdk"
-
-ALLOW_EMPTY:${PN} = "1"
-
diff --git a/meta-agl-bsp/meta-iot-cloud/recipes-aws/aws-iot-device-sdk-embedded-c/files/Makefile.aws b/meta-agl-bsp/meta-iot-cloud/recipes-aws/aws-iot-device-sdk-embedded-c/files/Makefile.aws
deleted file mode 100644
index d4f18c0f9..000000000
--- a/meta-agl-bsp/meta-iot-cloud/recipes-aws/aws-iot-device-sdk-embedded-c/files/Makefile.aws
+++ /dev/null
@@ -1,62 +0,0 @@
-###########################################################################
-# Copyright 2020 MERA
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-###########################################################################
-
-# Generated library name
-NAME := awsiotsdk
-
-SRC = .
-AWS_SDK_DIR = $(SRC)/..
-PLATFORM_DIR = $(AWS_SDK_DIR)/platform/linux/mbedtls
-PLATFORM_COMMON_DIR = $(AWS_SDK_DIR)/platform/linux/common
-AWS_INSTALL_HEADERS_DIR = /usr/include/awsiotsdk
-
-
-CFLAGS += -I $(AWS_SDK_DIR)/include
-CFLAGS += -I $(AWS_SDK_DIR)/external_libs/jsmn
-CFLAGS += -I $(PLATFORM_COMMON_DIR)
-CFLAGS += -I $(PLATFORM_DIR)
-CFLAGS += -DENABLE_IOT_DEBUG -DENABLE_IOT_INFO -DENABLE_IOT_WARN -DENABLE_IOT_ERROR
-
-
-# Source to compile
-SRCS += $(wildcard $(SRC)/*.c)
-SRCS += $(wildcard $(AWS_SDK_DIR)/external_libs/jsmn/*.c)
-SRCS += $(wildcard $(PLATFORM_DIR)/*.c)
-SRCS += $(wildcard $(PLATFORM_COMMON_DIR)/*.c)
-
-OBJS = $(SRCS:.c=.o)
-
-
-.PHONY: all
-all: lib$(NAME).a
-
-lib$(NAME).a: $(OBJS)
- $(AR) -rcs $@ $(OBJS)
-
-.PHONY: install
-install: lib$(NAME).a
- install -D -m 0644 lib$(NAME).a $(DESTDIR)/usr/lib/lib$(NAME).a
- install -d $(DESTDIR)$(AWS_INSTALL_HEADERS_DIR)
- install -m 0644 $(AWS_SDK_DIR)/include/*.h $(DESTDIR)$(AWS_INSTALL_HEADERS_DIR)/
- install -m 0644 $(AWS_SDK_DIR)/external_libs/jsmn/*.h $(DESTDIR)$(AWS_INSTALL_HEADERS_DIR)/
- install -m 0644 $(PLATFORM_COMMON_DIR)/*.h $(DESTDIR)$(AWS_INSTALL_HEADERS_DIR)/
- install -m 0644 $(PLATFORM_DIR)/*.h $(DESTDIR)$(AWS_INSTALL_HEADERS_DIR)/
- install -d $(DESTDIR)/usr/lib/pkgconfig
- install -m 0644 ../awsiotsdk.pc $(DESTDIR)/usr/lib/pkgconfig/
-
-.PHONY: clean
-clean:
- -rm -f lib$(NAME).a $(OBJS)
diff --git a/meta-agl-bsp/meta-iot-cloud/recipes-aws/aws-iot-device-sdk-embedded-c/files/aws_iot_config.h b/meta-agl-bsp/meta-iot-cloud/recipes-aws/aws-iot-device-sdk-embedded-c/files/aws_iot_config.h
deleted file mode 100644
index e01189332..000000000
--- a/meta-agl-bsp/meta-iot-cloud/recipes-aws/aws-iot-device-sdk-embedded-c/files/aws_iot_config.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright 2010-2015 Amazon.com, Inc. or its affiliates. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License").
- * You may not use this file except in compliance with the License.
- * A copy of the License is located at
- *
- * http://aws.amazon.com/apache2.0
- *
- * or in the "license" file accompanying this file. This file is distributed
- * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
- * express or implied. See the License for the specific language governing
- * permissions and limitations under the License.
- */
-
-/**
- * @file aws_iot_config.h
- * @brief AWS IoT specific configuration file
- */
-
-#ifndef AWS_IOT_CONFIG_H_
-#define AWS_IOT_CONFIG_H_
-
-// Get from console
-// =================================================
-#define AWS_IOT_MQTT_HOST "" ///< Customer specific MQTT HOST. The same will be used for Thing Shadow
-#define AWS_IOT_MQTT_PORT 443 ///< default port for MQTT/S
-#define AWS_IOT_MQTT_CLIENT_ID "" ///< MQTT client ID should be unique for every device
-#define AWS_IOT_MY_THING_NAME "" ///< Thing Name of the Shadow this device is associated with
-#define AWS_IOT_ROOT_CA_FILENAME "" ///< Root CA file name
-#define AWS_IOT_CERTIFICATE_FILENAME "" ///< device signed certificate file name
-#define AWS_IOT_PRIVATE_KEY_FILENAME "" ///< Device private key filename
-// =================================================
-
-// MQTT PubSub
-#define AWS_IOT_MQTT_TX_BUF_LEN 10240 ///< Any time a message is sent out through the MQTT layer. The message is copied into this buffer anytime a publish is done. This will also be used in the case of Thing Shadow
-#define AWS_IOT_MQTT_RX_BUF_LEN 10240 ///< Any message that comes into the device should be less than this buffer size. If a received message is bigger than this buffer size the message will be dropped.
-#define AWS_IOT_MQTT_NUM_SUBSCRIBE_HANDLERS 5 ///< Maximum number of topic filters the MQTT client can handle at any given time. This should be increased appropriately when using Thing Shadow
-
-// Thing Shadow specific configs
-#define SHADOW_MAX_SIZE_OF_RX_BUFFER (AWS_IOT_MQTT_RX_BUF_LEN+1) ///< Maximum size of the SHADOW buffer to store the received Shadow message, including terminating NULL byte.
-#define MAX_SIZE_OF_UNIQUE_CLIENT_ID_BYTES 80 ///< Maximum size of the Unique Client Id. For More info on the Client Id refer \ref response "Acknowledgments"
-#define MAX_SIZE_CLIENT_ID_WITH_SEQUENCE MAX_SIZE_OF_UNIQUE_CLIENT_ID_BYTES + 10 ///< This is size of the extra sequence number that will be appended to the Unique client Id
-#define MAX_SIZE_CLIENT_TOKEN_CLIENT_SEQUENCE MAX_SIZE_CLIENT_ID_WITH_SEQUENCE + 20 ///< This is size of the the total clientToken key and value pair in the JSON
-#define MAX_ACKS_TO_COMEIN_AT_ANY_GIVEN_TIME 10 ///< At Any given time we will wait for this many responses. This will correlate to the rate at which the shadow actions are requested
-#define MAX_THINGNAME_HANDLED_AT_ANY_GIVEN_TIME 10 ///< We could perform shadow action on any thing Name and this is maximum Thing Names we can act on at any given time
-#define MAX_JSON_TOKEN_EXPECTED 120 ///< These are the max tokens that is expected to be in the Shadow JSON document. Include the metadata that gets published
-#define MAX_SHADOW_TOPIC_LENGTH_WITHOUT_THINGNAME 60 ///< All shadow actions have to be published or subscribed to a topic which is of the format $aws/things/{thingName}/shadow/update/accepted. This refers to the size of the topic without the Thing Name
-#define MAX_SIZE_OF_THING_NAME 30 ///< The Thing Name should not be bigger than this value. Modify this if the Thing Name needs to be bigger
-#define MAX_SHADOW_TOPIC_LENGTH_BYTES MAX_SHADOW_TOPIC_LENGTH_WITHOUT_THINGNAME + MAX_SIZE_OF_THING_NAME ///< This size includes the length of topic with Thing Name
-
-// Auto Reconnect specific config
-#define AWS_IOT_MQTT_MIN_RECONNECT_WAIT_INTERVAL 1000 ///< Minimum time before the First reconnect attempt is made as part of the exponential back-off algorithm
-#define AWS_IOT_MQTT_MAX_RECONNECT_WAIT_INTERVAL 128000 ///< Maximum time interval after which exponential back-off will stop attempting to reconnect.
-
-#define DISABLE_METRICS true ///< Disable the collection of metrics by setting this to true
-
-#endif /* AWS_IOT_CONFIG_H_ */
diff --git a/meta-agl-bsp/meta-iot-cloud/recipes-aws/aws-iot-device-sdk-embedded-c/files/awsiotsdk.pc b/meta-agl-bsp/meta-iot-cloud/recipes-aws/aws-iot-device-sdk-embedded-c/files/awsiotsdk.pc
deleted file mode 100644
index f8384993b..000000000
--- a/meta-agl-bsp/meta-iot-cloud/recipes-aws/aws-iot-device-sdk-embedded-c/files/awsiotsdk.pc
+++ /dev/null
@@ -1,27 +0,0 @@
-###########################################################################
-# Copyright 2020 MERA
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-###########################################################################
-
-prefix=/usr
-exec_prefix=${prefix}
-libdir=${prefix}/lib
-includedir=${prefix}/include/awsiotsdk
-
-Name: AWS IoT Device SDK for Embedded C
-Description: AWS IoT SDK compiled into library (includes mbedTLS and jsmn code)
-Version: 3.0.1
-
-Cflags: -I${includedir} -DENABLE_IOT_DEBUG -DENABLE_IOT_INFO -DENABLE_IOT_WARN -DENABLE_IOT_ERROR
-Libs: -L${libdir} -lawsiotsdk -lmbedtls -lmbedcrypto -lmbedx509
diff --git a/meta-agl-bsp/meta-iot-cloud/recipes-azure/azure-iot-sdk-c/azure-iot-sdk-c_%.bbappend b/meta-agl-bsp/meta-iot-cloud/recipes-azure/azure-iot-sdk-c/azure-iot-sdk-c_%.bbappend
deleted file mode 100644
index 58d4693f0..000000000
--- a/meta-agl-bsp/meta-iot-cloud/recipes-azure/azure-iot-sdk-c/azure-iot-sdk-c_%.bbappend
+++ /dev/null
@@ -1,5 +0,0 @@
-# Disable the amqp transport, due to linking error in meta-iot repository for amqp
-# symbols from amqp code are not included in the libiothub_client.so
-
-# NOTE: amqp is not used by AGL in IoT context at the moment
-PACKAGECONFIG:remove = "amqp"
diff --git a/meta-agl-bsp/meta-iot-cloud/recipes-azure/azure-macro-utils-c/azure-macro-utils-c_%.bbappend b/meta-agl-bsp/meta-iot-cloud/recipes-azure/azure-macro-utils-c/azure-macro-utils-c_%.bbappend
deleted file mode 100644
index b90c754d5..000000000
--- a/meta-agl-bsp/meta-iot-cloud/recipes-azure/azure-macro-utils-c/azure-macro-utils-c_%.bbappend
+++ /dev/null
@@ -1 +0,0 @@
-ALLOW_EMPTY:${PN} = "1"
diff --git a/meta-agl-bsp/meta-iot-cloud/recipes-azure/umock-c/umock-c_%.bbappend b/meta-agl-bsp/meta-iot-cloud/recipes-azure/umock-c/umock-c_%.bbappend
deleted file mode 100644
index b90c754d5..000000000
--- a/meta-agl-bsp/meta-iot-cloud/recipes-azure/umock-c/umock-c_%.bbappend
+++ /dev/null
@@ -1 +0,0 @@
-ALLOW_EMPTY:${PN} = "1"
diff --git a/meta-agl-bsp/meta-qcom/recipes-bsp/96boards-tools/96boards-tools_0.12.bb b/meta-agl-bsp/meta-qcom/recipes-bsp/96boards-tools/96boards-tools_0.12.bb
deleted file mode 100644
index 3ea57d770..000000000
--- a/meta-agl-bsp/meta-qcom/recipes-bsp/96boards-tools/96boards-tools_0.12.bb
+++ /dev/null
@@ -1,32 +0,0 @@
-SUMMARY = "Useful bits an pieces to make 96Boards more standard across the board"
-HOMEPAGE = "https://github.com/96boards/96boards-tools"
-SECTION = "devel"
-
-LICENSE = "GPLv2+"
-LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/GPL-2.0;md5=801f80980d171dd6425610833a22dbe6"
-
-SRCREV = "ed0f0dbec02c1869a0c4fa0140b4aa5338c9d010"
-SRC_URI = "git://github.com/96boards/96boards-tools;branch=master;protocol=https"
-
-S = "${WORKDIR}/git"
-
-inherit systemd allarch update-rc.d
-
-do_install () {
- install -d ${D}${sysconfdir}/udev/rules.d
- install -m 0755 ${S}/*.rules ${D}${sysconfdir}/udev/rules.d/
- install -d ${D}${sysconfdir}/init.d
- install -m 0755 ${S}/resize-disk ${D}${sysconfdir}/init.d/
-
- install -d ${D}${systemd_unitdir}/system
- install -m 0644 ${S}/resize-helper.service ${D}${systemd_unitdir}/system
-
- install -d ${D}${sbindir}
- install -m 0755 ${S}/resize-helper ${D}${sbindir}
-}
-
-INITSCRIPT_NAME = "resize-disk"
-INITSCRIPT_PARAMS = "start 99 5 2 . stop 20 0 1 6 ."
-
-SYSTEMD_SERVICE:${PN} = "resize-helper.service"
-RDEPENDS:${PN} += "e2fsprogs-resize2fs gptfdisk parted util-linux udev"
diff --git a/meta-agl-bsp/meta-qcom/recipes-bsp/q6v5-pil/files/qcom-q6v5-pil.service b/meta-agl-bsp/meta-qcom/recipes-bsp/q6v5-pil/files/qcom-q6v5-pil.service
deleted file mode 100644
index 3d9cd24bb..000000000
--- a/meta-agl-bsp/meta-qcom/recipes-bsp/q6v5-pil/files/qcom-q6v5-pil.service
+++ /dev/null
@@ -1,12 +0,0 @@
-[Unit]
-Description=Qualcomm Hexagon PIL setup
-After=rmtfs.service
-Requires=rmtfs.service
-
-[Service]
-Type=oneshot
-RemainAfterExit=yes
-ExecStart=/sbin/modprobe -q qcom_q6v5_pil
-
-[Install]
-WantedBy=multi-user.target
diff --git a/meta-agl-bsp/meta-qcom/recipes-bsp/q6v5-pil/q6v5-pil.bb b/meta-agl-bsp/meta-qcom/recipes-bsp/q6v5-pil/q6v5-pil.bb
deleted file mode 100644
index 14bab2430..000000000
--- a/meta-agl-bsp/meta-qcom/recipes-bsp/q6v5-pil/q6v5-pil.bb
+++ /dev/null
@@ -1,20 +0,0 @@
-inherit systemd
-
-SUMMARY = "Systemd unit file for the delay loading Hexagon PIL kernel module"
-SECTION = "misc"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
-
-SRC_URI += "file://qcom-q6v5-pil.service"
-
-do_install() {
- install -d ${D}${systemd_unitdir}/system/
- install -m 0644 ${WORKDIR}/qcom-q6v5-pil.service ${D}${systemd_unitdir}/system
-
- # Blacklist qcom_q6v5_pil to prevent modules autoload
- # qcom-q6v5-pil.service will do the work after rmtfs done.
- install -d ${D}/${sysconfdir}/modprobe.d
- echo "blacklist qcom_q6v5_pil" > ${D}/${sysconfdir}/modprobe.d/qcom_q6v5_pil.conf
-}
-
-SYSTEMD_SERVICE:${PN} = "qcom-q6v5-pil.service"
diff --git a/meta-agl-bsp/meta-raspberrypi/recipes-bsp/bootfiles/bootfiles.bbappend b/meta-agl-bsp/meta-raspberrypi/recipes-bsp/bootfiles/bootfiles.bbappend
deleted file mode 100644
index 59bc5a741..000000000
--- a/meta-agl-bsp/meta-raspberrypi/recipes-bsp/bootfiles/bootfiles.bbappend
+++ /dev/null
@@ -1 +0,0 @@
-RDEPENDS:${PN}:append:sota += " u-boot-otascript"
diff --git a/meta-agl-bsp/meta-raspberrypi/recipes-bsp/bootfiles/rpi-config_git.bbappend b/meta-agl-bsp/meta-raspberrypi/recipes-bsp/bootfiles/rpi-config_git.bbappend
index 4492a9182..248623699 100644
--- a/meta-agl-bsp/meta-raspberrypi/recipes-bsp/bootfiles/rpi-config_git.bbappend
+++ b/meta-agl-bsp/meta-raspberrypi/recipes-bsp/bootfiles/rpi-config_git.bbappend
@@ -44,7 +44,3 @@ do_deploy:append:raspberrypi4() {
echo -e "\n[pi4]" >> ${DEPLOYDIR}/bootfiles/config.txt
echo "max_framebuffers=2" >> ${DEPLOYDIR}/bootfiles/config.txt
}
-
-do_deploy:append:sota() {
- echo "device_tree_address=0x0c800000" >> ${DEPLOYDIR}/bootfiles/config.txt
-}
diff --git a/meta-agl-bsp/meta-raspberrypi/recipes-bsp/u-boot/u-boot-2020.10.inc b/meta-agl-bsp/meta-raspberrypi/recipes-bsp/u-boot/u-boot-2020.10.inc
deleted file mode 100644
index 27f46096a..000000000
--- a/meta-agl-bsp/meta-raspberrypi/recipes-bsp/u-boot/u-boot-2020.10.inc
+++ /dev/null
@@ -1,3 +0,0 @@
-SRC_URI = "git://git.denx.de/u-boot.git"
-SRCREV = "050acee119b3757fee3bd128f55d720fdd9bb890"
-LIC_FILES_CHKSUM = "file://Licenses/README;md5=5a7450c57ffe5ae63fd732446b988025"
diff --git a/meta-agl-bsp/meta-raspberrypi/recipes-bsp/u-boot/u-boot-2021.07.inc b/meta-agl-bsp/meta-raspberrypi/recipes-bsp/u-boot/u-boot-2021.07.inc
deleted file mode 100644
index abf7474c9..000000000
--- a/meta-agl-bsp/meta-raspberrypi/recipes-bsp/u-boot/u-boot-2021.07.inc
+++ /dev/null
@@ -1,3 +0,0 @@
-SRC_URI = "git://git.denx.de/u-boot.git"
-SRCREV = "840658b093976390e9537724f802281c9c8439f5"
-LIC_FILES_CHKSUM = "file://Licenses/README;md5=5a7450c57ffe5ae63fd732446b988025"
diff --git a/meta-agl-bsp/meta-raspberrypi/recipes-bsp/u-boot/u-boot-tools_2020.10.bb b/meta-agl-bsp/meta-raspberrypi/recipes-bsp/u-boot/u-boot-tools_2020.10.bb
deleted file mode 100644
index 2d9d76955..000000000
--- a/meta-agl-bsp/meta-raspberrypi/recipes-bsp/u-boot/u-boot-tools_2020.10.bb
+++ /dev/null
@@ -1,2 +0,0 @@
-require recipes-bsp/u-boot/u-boot-tools_2020.01.bb
-require u-boot-2020.10.inc
diff --git a/meta-agl-bsp/meta-raspberrypi/recipes-bsp/u-boot/u-boot-tools_2021.07.bb b/meta-agl-bsp/meta-raspberrypi/recipes-bsp/u-boot/u-boot-tools_2021.07.bb
deleted file mode 100644
index a963d3fff..000000000
--- a/meta-agl-bsp/meta-raspberrypi/recipes-bsp/u-boot/u-boot-tools_2021.07.bb
+++ /dev/null
@@ -1,2 +0,0 @@
-require recipes-bsp/u-boot/u-boot-tools_2020.01.bb
-require u-boot-2021.07.inc
diff --git a/meta-agl-bsp/meta-raspberrypi/recipes-bsp/u-boot/u-boot_2020.10.bb b/meta-agl-bsp/meta-raspberrypi/recipes-bsp/u-boot/u-boot_2020.10.bb
deleted file mode 100644
index 0d967575b..000000000
--- a/meta-agl-bsp/meta-raspberrypi/recipes-bsp/u-boot/u-boot_2020.10.bb
+++ /dev/null
@@ -1,2 +0,0 @@
-require recipes-bsp/u-boot/u-boot_2020.01.bb
-require u-boot-2020.10.inc
diff --git a/meta-agl-bsp/meta-raspberrypi/recipes-bsp/u-boot/u-boot_2021.07.bb b/meta-agl-bsp/meta-raspberrypi/recipes-bsp/u-boot/u-boot_2021.07.bb
deleted file mode 100644
index 2077262a3..000000000
--- a/meta-agl-bsp/meta-raspberrypi/recipes-bsp/u-boot/u-boot_2021.07.bb
+++ /dev/null
@@ -1,2 +0,0 @@
-require recipes-bsp/u-boot/u-boot_2020.01.bb
-require u-boot-2021.07.inc
diff --git a/meta-agl-bsp/meta-raspberrypi/recipes-graphics/wayland/weston-ini-conf.bbappend b/meta-agl-bsp/meta-raspberrypi/recipes-graphics/wayland/weston-ini-conf.bbappend
deleted file mode 100644
index 5f8af211a..000000000
--- a/meta-agl-bsp/meta-raspberrypi/recipes-graphics/wayland/weston-ini-conf.bbappend
+++ /dev/null
@@ -1,3 +0,0 @@
-FILESEXTRAPATHS:prepend:raspberrypi := "${THISDIR}/${PN}:"
-
-SRC_URI:append:raspberrypi = " file://dsi.cfg"
diff --git a/meta-agl-bsp/meta-raspberrypi/recipes-graphics/wayland/weston-ini-conf/dsi.cfg b/meta-agl-bsp/meta-raspberrypi/recipes-graphics/wayland/weston-ini-conf/dsi.cfg
deleted file mode 100644
index 72a6d2bf8..000000000
--- a/meta-agl-bsp/meta-raspberrypi/recipes-graphics/wayland/weston-ini-conf/dsi.cfg
+++ /dev/null
@@ -1,5 +0,0 @@
-# Support the Raspberry Pi Foundation 7" tablet which uses the DSI connector
-# rather than HDMI.
-[output]
-name=DSI-1
-transform=270
diff --git a/meta-agl-bsp/meta-raspberrypi/recipes-graphics/wayland/weston-ini-conf/hdmi-a-1-270-720p.cfg b/meta-agl-bsp/meta-raspberrypi/recipes-graphics/wayland/weston-ini-conf/hdmi-a-1-270-720p.cfg
deleted file mode 100644
index e1c9db1a8..000000000
--- a/meta-agl-bsp/meta-raspberrypi/recipes-graphics/wayland/weston-ini-conf/hdmi-a-1-270-720p.cfg
+++ /dev/null
@@ -1,7 +0,0 @@
-# A display is connected to HDMI-A-1 and needs to be rotated 270 degrees
-# to have a proper orientation of the homescreen. For example the various sizes
-# of the GeChic display or the Dell display.
-[output]
-name=HDMI-A-1
-transform=270
-mode=1280x720
diff --git a/meta-agl-bsp/meta-raspberrypi/recipes-kernel/create-combined-dtb/create-combined-dtb_1.0.0.bb b/meta-agl-bsp/meta-raspberrypi/recipes-kernel/create-combined-dtb/create-combined-dtb_1.0.0.bb
index bcb92b23d..c5edbe1dc 100644
--- a/meta-agl-bsp/meta-raspberrypi/recipes-kernel/create-combined-dtb/create-combined-dtb_1.0.0.bb
+++ b/meta-agl-bsp/meta-raspberrypi/recipes-kernel/create-combined-dtb/create-combined-dtb_1.0.0.bb
@@ -15,28 +15,19 @@ S = "${WORKDIR}"
do_compile[depends] += "virtual/kernel:do_deploy"
do_compile () {
- # Official touchscreen setup (rpi3b/rpi3b dtb, VC4DTBO and ft5406)
- if [ -f "${DEPLOY_DIR_IMAGE}/bcm2710-rpi-3-b-plus.dtb" ]; then
- fdtoverlay -v -i ${DEPLOY_DIR_IMAGE}/bcm2710-rpi-3-b-plus.dtb -o bcm2710-rpi-3-b-plus+vc4+ft5406.dtb ${DEPLOY_DIR_IMAGE}/rpi-ft5406.dtbo ${DEPLOY_DIR_IMAGE}/${VC4DTBO}.dtbo
- fi
- if [ -f "${DEPLOY_DIR_IMAGE}/bcm2710-rpi-3-b.dtb" ]; then
- fdtoverlay -v -i ${DEPLOY_DIR_IMAGE}/bcm2710-rpi-3-b.dtb -o bcm2710-rpi-3-b+vc4+ft5406.dtb ${DEPLOY_DIR_IMAGE}/rpi-ft5406.dtbo ${DEPLOY_DIR_IMAGE}/${VC4DTBO}.dtbo
+ # Plain VC4 (HDMI)
+ if [ -f "${DEPLOY_DIR_IMAGE}/bcm2711-rpi-4-b.dtb" ]; then
+ fdtoverlay -v -i ${DEPLOY_DIR_IMAGE}/bcm2711-rpi-4-b.dtb -o bcm2711-rpi-4-b+vc4.dtb \
+ ${DEPLOY_DIR_IMAGE}/${VC4DTBO}-pi4.dtbo
fi
- # NOTE: meta-updater currently disables rpi-ft5406.dtbo on rpi4, so need to check if it is present
+
+ # VC4 + LCD
if [ -f "${DEPLOY_DIR_IMAGE}/bcm2711-rpi-4-b.dtb" -a -f "${DEPLOY_DIR_IMAGE}/rpi-ft5406.dtbo" ]; then
- fdtoverlay -v -i ${DEPLOY_DIR_IMAGE}/bcm2711-rpi-4-b.dtb -o bcm2711-rpi-4-b+vc4+ft5406.dtb ${DEPLOY_DIR_IMAGE}/rpi-ft5406.dtbo ${DEPLOY_DIR_IMAGE}/${VC4DTBO}.dtbo
+ fdtoverlay -v -i ${DEPLOY_DIR_IMAGE}/bcm2711-rpi-4-b.dtb -o bcm2711-rpi-4-b+vc4+ft5406.dtb \
+ ${DEPLOY_DIR_IMAGE}/rpi-ft5406.dtbo \
+ ${DEPLOY_DIR_IMAGE}/${VC4DTBO}-pi4.dtbo
fi
- # HDMI screen setup (rpi3b/rpi3b dtb and VC4DTBO)
- if [ -f "${DEPLOY_DIR_IMAGE}/bcm2710-rpi-3-b-plus.dtb" ]; then
- fdtoverlay -v -i ${DEPLOY_DIR_IMAGE}/bcm2710-rpi-3-b-plus.dtb -o bcm2710-rpi-3-b-plus+vc4.dtb ${DEPLOY_DIR_IMAGE}/${VC4DTBO}.dtbo
- fi
- if [ -f "${DEPLOY_DIR_IMAGE}/bcm2710-rpi-3-b.dtb" ]; then
- fdtoverlay -v -i ${DEPLOY_DIR_IMAGE}/bcm2710-rpi-3-b.dtb -o bcm2710-rpi-3-b+vc4.dtb ${DEPLOY_DIR_IMAGE}/${VC4DTBO}.dtbo
- fi
- if [ -f "${DEPLOY_DIR_IMAGE}/bcm2711-rpi-4-b.dtb" ]; then
- fdtoverlay -v -i ${DEPLOY_DIR_IMAGE}/bcm2711-rpi-4-b.dtb -o bcm2711-rpi-4-b+vc4.dtb ${DEPLOY_DIR_IMAGE}/${VC4DTBO}.dtbo
- fi
}
do_deploy () {
@@ -44,21 +35,9 @@ do_deploy () {
if [ -f "${S}/bcm2711-rpi-4-b+vc4+ft5406.dtb" ]; then
install -m 0644 ${S}/bcm2711-rpi-4-b+vc4+ft5406.dtb ${DEPLOY_DIR_IMAGE}
fi
- if [ -f "${S}/bcm2710-rpi-3-b+vc4+ft5406.dtb" ]; then
- install -m 0644 ${S}/bcm2710-rpi-3-b+vc4+ft5406.dtb ${DEPLOY_DIR_IMAGE}
- fi
- if [ -f "${S}/bcm2710-rpi-3+vc4+ft5406.dtb" ]; then
- install -m 0644 ${S}/bcm2710-rpi-3+vc4+ft5406.dtb ${DEPLOY_DIR_IMAGE}
- fi
if [ -f "${S}/bcm2711-rpi-4-b+vc4.dtb" ]; then
install -m 0644 ${S}/bcm2711-rpi-4-b+vc4.dtb ${DEPLOY_DIR_IMAGE}
fi
- if [ -f "${S}/bcm2710-rpi-3-b+vc4.dtb" ]; then
- install -m 0644 ${S}/bcm2710-rpi-3-b+vc4.dtb ${DEPLOY_DIR_IMAGE}
- fi
- if [ -f "${S}/bcm2710-rpi-3+vc4.dtb" ]; then
- install -m 0644 ${S}/bcm2710-rpi-3+vc4.dtb ${DEPLOY_DIR_IMAGE}
- fi
}
addtask deploy after do_install
diff --git a/meta-agl-bsp/meta-raspberrypi/recipes-kernel/dtc/dtc_1.6.0.bbappend b/meta-agl-bsp/meta-raspberrypi/recipes-kernel/dtc/dtc_1.6.1.bbappend
index a28a9e748..a28a9e748 100644
--- a/meta-agl-bsp/meta-raspberrypi/recipes-kernel/dtc/dtc_1.6.0.bbappend
+++ b/meta-agl-bsp/meta-raspberrypi/recipes-kernel/dtc/dtc_1.6.1.bbappend
diff --git a/meta-agl-bsp/meta-raspberrypi/recipes-kernel/linux/linux-raspberrypi/0001-mconf-menuconfig.patch b/meta-agl-bsp/meta-raspberrypi/recipes-kernel/linux/linux-raspberrypi/0001-mconf-menuconfig.patch
index 3dc71ff22..7f0979ca9 100644
--- a/meta-agl-bsp/meta-raspberrypi/recipes-kernel/linux/linux-raspberrypi/0001-mconf-menuconfig.patch
+++ b/meta-agl-bsp/meta-raspberrypi/recipes-kernel/linux/linux-raspberrypi/0001-mconf-menuconfig.patch
@@ -40,9 +40,9 @@ index c812872d7f9d..42d20819025c 100755
+ exit 0
+fi
+
- if [ -n "$(command -v pkg-config)" ]; then
- if pkg-config --exists $PKG; then
- echo cflags=\"$(pkg-config --cflags $PKG)\"
+ if [ -n "$(command -v ${HOSTPKG_CONFIG})" ]; then
+ if ${HOSTPKG_CONFIG} --exists $PKG; then
+ echo cflags=\"$(${HOSTPKG_CONFIG} --cflags $PKG)\"
--
2.17.1
diff --git a/meta-agl-bsp/meta-raspberrypi/recipes-kernel/linux/linux-raspberrypi/0002-Disable-DMA-in-sdhci-driver.patch b/meta-agl-bsp/meta-raspberrypi/recipes-kernel/linux/linux-raspberrypi/0002-Disable-DMA-in-sdhci-driver.patch
deleted file mode 100644
index 04a8733f2..000000000
--- a/meta-agl-bsp/meta-raspberrypi/recipes-kernel/linux/linux-raspberrypi/0002-Disable-DMA-in-sdhci-driver.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-From 758bc9b917469bc4e527dc3aae821c91cbc3d426 Mon Sep 17 00:00:00 2001
-From: Stewart Hildebrand <stewart.hildebrand@dornerworks.com>
-Date: Thu, 18 Jul 2019 00:01:27 -0400
-Subject: [PATCH 2/4] Disable DMA in sdhci driver
-
----
- drivers/mmc/host/sdhci-iproc.c | 2 ++
- 1 file changed, 2 insertions(+)
-
-diff --git a/drivers/mmc/host/sdhci-iproc.c b/drivers/mmc/host/sdhci-iproc.c
-index 983cddce9..150f7bfc8 100644
---- a/drivers/mmc/host/sdhci-iproc.c
-+++ b/drivers/mmc/host/sdhci-iproc.c
-@@ -252,6 +252,8 @@ static const struct sdhci_iproc_data bcm2835_data = {
-
- static const struct sdhci_pltfm_data sdhci_bcm2838_pltfm_data = {
- .ops = &sdhci_iproc_32only_ops,
-+ .quirks = SDHCI_QUIRK_BROKEN_DMA |
-+ SDHCI_QUIRK_BROKEN_ADMA,
- };
-
- static const struct sdhci_iproc_data bcm2838_data = {
---
-2.17.1
-
diff --git a/meta-agl-bsp/meta-raspberrypi/recipes-kernel/linux/linux-raspberrypi_5.4.bbappend b/meta-agl-bsp/meta-raspberrypi/recipes-kernel/linux/linux-raspberrypi_5.4.bbappend
deleted file mode 100644
index 2836918c7..000000000
--- a/meta-agl-bsp/meta-raspberrypi/recipes-kernel/linux/linux-raspberrypi_5.4.bbappend
+++ /dev/null
@@ -1,4 +0,0 @@
-# For Xen
-SRC_URI:append =" \
- ${@bb.utils.contains('AGL_XEN_WANTED','1','file://0002-Disable-DMA-in-sdhci-driver.patch','',d)} \
-"
diff --git a/meta-agl-bsp/meta-rcar-gateway/recipes-kernel/linux/linux-renesas_%.bbappend b/meta-agl-bsp/meta-rcar-gateway/recipes-kernel/linux/linux-renesas_%.bbappend
new file mode 100644
index 000000000..d565da8ac
--- /dev/null
+++ b/meta-agl-bsp/meta-rcar-gateway/recipes-kernel/linux/linux-renesas_%.bbappend
@@ -0,0 +1,11 @@
+do_install:append () {
+
+ # Remove firmware file that is not packaged in the kernel.
+ # It throws an error during do_package.
+ # It seems to be moved out of the kernel in later BSP versions.
+ rm -rf ${D}/lib/firmware/r8a779f0_ufs.bin
+ rm -rf ${D}/lib/firmware
+ rm -rf ${D}/lib
+
+}
+
diff --git a/meta-agl-bsp/meta-rcar-gen3-adas/conf/NOTES b/meta-agl-bsp/meta-rcar-gen3-adas/conf/NOTES
index e4f5e7d9b..296dd5e19 100644
--- a/meta-agl-bsp/meta-rcar-gen3-adas/conf/NOTES
+++ b/meta-agl-bsp/meta-rcar-gen3-adas/conf/NOTES
@@ -5,7 +5,7 @@
# E.g. MACHINE_FEATURE. Should *not* be in layer.conf !!
# Radio packages
-#IMAGE_INSTALL:append:rcar-gen3 += " \
+#IMAGE_INSTALL:append:rcar-gen3 = " \
# si-tools \
# si-init \
# linux-firmware-wl18xx \
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 eb1da3d35..0c344a471 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
@@ -4,16 +4,14 @@
# Add a feature as a low-impact way to detect Kingfisher support in
# recipes.
-AGL_FEATURES:append = " kingfisher"
+AGL_FEATURES:append:rcar-gen3 = " kingfisher"
-PREFERRED_RPROVIDER_virtual/gpsd-conf ?= "gpsd-kingfisher-conf"
-
-IMAGE_NAME = "${IMAGE_BASENAME}-${MACHINE}-kf${IMAGE_VERSION_SUFFIX}"
-IMAGE_LINK_NAME = "${IMAGE_BASENAME}-${MACHINE}-kf"
-TOOLCHAIN_OUTPUTNAME = "${SDK_NAME}-kf-toolchain-${SDK_VERSION}"
+IMAGE_NAME:rcar-gen3 = "${IMAGE_BASENAME}-${MACHINE}-kf${IMAGE_VERSION_SUFFIX}"
+IMAGE_LINK_NAME:rcar-gen3 = "${IMAGE_BASENAME}-${MACHINE}-kf"
+TOOLCHAIN_OUTPUTNAME:rcar-gen3 = "${SDK_NAME}-kf-toolchain-${SDK_VERSION}"
# Radio packages
-IMAGE_INSTALL:append:rcar-gen3 += " \
+IMAGE_INSTALL:append:rcar-gen3 = " \
si-tools \
si-init \
linux-firmware-wl18xx \
diff --git a/meta-agl-bsp/meta-rcar-gen3-adas/conf/layer.conf b/meta-agl-bsp/meta-rcar-gen3-adas/conf/layer.conf
index 75bfcfcc7..be6f0aa25 100644
--- a/meta-agl-bsp/meta-rcar-gen3-adas/conf/layer.conf
+++ b/meta-agl-bsp/meta-rcar-gen3-adas/conf/layer.conf
@@ -15,4 +15,4 @@ BBFILE_COLLECTIONS += "rcar-gen3-cogent"
BBFILE_PATTERN_rcar-gen3-cogent := "^${LAYERDIR}/"
BBFILE_PRIORITY_rcar-gen3-cogent = "7"
-LAYERSERIES_COMPAT_rcar-gen3-cogent = "dunfell"
+LAYERSERIES_COMPAT_rcar-gen3-cogent = "kirkstone"
diff --git a/meta-agl-bsp/meta-rcar-gen3-adas/recipes-bsp/si-tools/si-init_1.0.bb b/meta-agl-bsp/meta-rcar-gen3-adas/recipes-bsp/si-tools/si-init_1.0.bb
index c752bba08..b53504400 100644
--- a/meta-agl-bsp/meta-rcar-gen3-adas/recipes-bsp/si-tools/si-init_1.0.bb
+++ b/meta-agl-bsp/meta-rcar-gen3-adas/recipes-bsp/si-tools/si-init_1.0.bb
@@ -21,7 +21,7 @@ do_install() {
# the Si468x device via i2c
install -d ${D}${sysconfdir}/udev/rules.d
cat >${D}${sysconfdir}/udev/rules.d/zz-radio-si.rules <<'EOF'
-KERNEL=="i2c-12", MODE="0660", GROUP="audio", SECLABEL{smack}="*"
+KERNEL=="i2c-12", MODE="0660", GROUP="audio"
EOF
}
diff --git a/meta-agl-bsp/meta-rcar-gen3-adas/recipes-kernel/linux/linux-renesas/0001-arm64-dts-renesas-preserve-drm-HDMI-connector-naming.patch b/meta-agl-bsp/meta-rcar-gen3-adas/recipes-kernel/linux/linux-renesas/0001-arm64-dts-renesas-preserve-drm-HDMI-connector-naming.patch
index 64c9542a3..d3a3229b4 100644
--- a/meta-agl-bsp/meta-rcar-gen3-adas/recipes-kernel/linux/linux-renesas/0001-arm64-dts-renesas-preserve-drm-HDMI-connector-naming.patch
+++ b/meta-agl-bsp/meta-rcar-gen3-adas/recipes-kernel/linux/linux-renesas/0001-arm64-dts-renesas-preserve-drm-HDMI-connector-naming.patch
@@ -1,4 +1,4 @@
-From ce9a7a41a9f65cc8cc129cdd27e155b35b26d393 Mon Sep 17 00:00:00 2001
+From 71c2e7bc6ecf872dd3b45480859dce0f2e941b03 Mon Sep 17 00:00:00 2001
From: Matt Porter <mporter@konsulko.com>
Date: Wed, 13 Dec 2017 12:49:20 -0500
Subject: [PATCH] arm64: dts: renesas: preserve drm HDMI connector naming on KF
@@ -18,16 +18,18 @@ is first.
Change-Id: Ibbb1975c2383a526a54c257fb7d68d32a042d468
Signed-off-by: Matt Porter <mporter@konsulko.com>
Signed-off-by: Ronan Le Martret <ronan.lemartret@iot.bzh>
+Signed-off-by: Harunobu Kurokawa <harunobu.kurokawa.dn@renesas.com>
---
- arch/arm64/boot/dts/renesas/r8a7795.dtsi | 10 +++++-----
- arch/arm64/boot/dts/renesas/r8a7796.dtsi | 10 +++++-----
- 2 files changed, 10 insertions(+), 10 deletions(-)
+ arch/arm64/boot/dts/renesas/r8a77951.dtsi | 10 +++++-----
+ arch/arm64/boot/dts/renesas/r8a77960.dtsi | 10 +++++-----
+ arch/arm64/boot/dts/renesas/r8a77961.dtsi | 10 +++++-----
+ 3 files changed, 15 insertions(+), 15 deletions(-)
-diff --git a/arch/arm64/boot/dts/renesas/r8a7795.dtsi b/arch/arm64/boot/dts/renesas/r8a7795.dtsi
-index f7f947d27b0d..5bcc2391587d 100644
---- a/arch/arm64/boot/dts/renesas/r8a7795.dtsi
-+++ b/arch/arm64/boot/dts/renesas/r8a7795.dtsi
-@@ -3054,11 +3054,6 @@
+diff --git a/arch/arm64/boot/dts/renesas/r8a77951.dtsi b/arch/arm64/boot/dts/renesas/r8a77951.dtsi
+index 12e78097533e..9ead58e8a7c2 100644
+--- a/arch/arm64/boot/dts/renesas/r8a77951.dtsi
++++ b/arch/arm64/boot/dts/renesas/r8a77951.dtsi
+@@ -3943,11 +3943,6 @@ ports {
#address-cells = <1>;
#size-cells = <0>;
@@ -39,8 +41,8 @@ index f7f947d27b0d..5bcc2391587d 100644
port@1 {
reg = <1>;
du_out_hdmi0: endpoint {
-@@ -3076,6 +3071,11 @@
- du_out_lvds0: endpoint {
+@@ -3966,6 +3961,11 @@ du_out_lvds0: endpoint {
+ remote-endpoint = <&lvds0_in>;
};
};
+ port@0 {
@@ -51,11 +53,11 @@ index f7f947d27b0d..5bcc2391587d 100644
};
};
-diff --git a/arch/arm64/boot/dts/renesas/r8a7796.dtsi b/arch/arm64/boot/dts/renesas/r8a7796.dtsi
-index df26656e0f19..154ac1dd91fa 100644
---- a/arch/arm64/boot/dts/renesas/r8a7796.dtsi
-+++ b/arch/arm64/boot/dts/renesas/r8a7796.dtsi
-@@ -2846,11 +2846,6 @@
+diff --git a/arch/arm64/boot/dts/renesas/r8a77960.dtsi b/arch/arm64/boot/dts/renesas/r8a77960.dtsi
+index 66ab48b3a704..a5481dc4a3f1 100644
+--- a/arch/arm64/boot/dts/renesas/r8a77960.dtsi
++++ b/arch/arm64/boot/dts/renesas/r8a77960.dtsi
+@@ -3628,11 +3628,6 @@ ports {
#address-cells = <1>;
#size-cells = <0>;
@@ -67,8 +69,36 @@ index df26656e0f19..154ac1dd91fa 100644
port@1 {
reg = <1>;
du_out_hdmi0: endpoint {
-@@ -2862,6 +2857,11 @@
- du_out_lvds0: endpoint {
+@@ -3645,6 +3640,11 @@ du_out_lvds0: endpoint {
+ remote-endpoint = <&lvds0_in>;
+ };
+ };
++ port@0 {
++ reg = <0>;
++ du_out_rgb: endpoint {
++ };
++ };
+ };
+ };
+
+diff --git a/arch/arm64/boot/dts/renesas/r8a77961.dtsi b/arch/arm64/boot/dts/renesas/r8a77961.dtsi
+index ef2cb77f3c32..032ef1ca0633 100644
+--- a/arch/arm64/boot/dts/renesas/r8a77961.dtsi
++++ b/arch/arm64/boot/dts/renesas/r8a77961.dtsi
+@@ -3434,11 +3434,6 @@ ports {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+- port@0 {
+- reg = <0>;
+- du_out_rgb: endpoint {
+- };
+- };
+ port@1 {
+ reg = <1>;
+ du_out_hdmi0: endpoint {
+@@ -3451,6 +3446,11 @@ du_out_lvds0: endpoint {
+ remote-endpoint = <&lvds0_in>;
};
};
+ port@0 {
@@ -80,5 +110,5 @@ index df26656e0f19..154ac1dd91fa 100644
};
--
-2.11.0
+2.25.1
diff --git a/meta-agl-bsp/meta-rcar-gen3-adas/recipes-kernel/linux/linux-renesas/0004-ADSP-enable-and-add-sound-hardware-abstraction_kf.patch b/meta-agl-bsp/meta-rcar-gen3-adas/recipes-kernel/linux/linux-renesas/0004-ADSP-enable-and-add-sound-hardware-abstraction_kf.patch
deleted file mode 100644
index 92f5af88c..000000000
--- a/meta-agl-bsp/meta-rcar-gen3-adas/recipes-kernel/linux/linux-renesas/0004-ADSP-enable-and-add-sound-hardware-abstraction_kf.patch
+++ /dev/null
@@ -1,58 +0,0 @@
-The ADSP on Renesas SoCs required a reserved memory area to become
-enabled, and this needs to be done manually.
-
-This patch adds sound hardware abstraction information for the m3ulcb
-and m3ulcb-kf (kingfisher) device trees. This is helpful on-board the
-ADSP for dynamically determining sound hardware at runtime, allowing
-single binaries to be used between the two boards.
-
-Future work will incorporate the h3ulcb and Salvator boards into the
-abstraction.
-
-Signed-off-by: Ronan Le Martret <ronan.lemartret@iot.bzh>
-Signed-off-by: Mark Farrugia <mark.farrugia@fiberdyne.com.au>
----
-diff --git a/arch/arm64/boot/dts/renesas/r8a7796-m3ulcb-kf.dts b/arch/arm64/boot/dts/renesas/r8a7796-m3ulcb-kf.dts
-index de2390f009e7..4ccfa8315d17 100644
---- a/arch/arm64/boot/dts/renesas/r8a7796-m3ulcb-kf.dts
-+++ b/arch/arm64/boot/dts/renesas/r8a7796-m3ulcb-kf.dts
-@@ -15,6 +15,39 @@
- "renesas,r8a7796";
- };
-
-+
-+&adsp {
-+
-+ /* ADSP playback setting for pcm3168 */
-+ adsp_playback0: adsp,playback {
-+ mode = "tdm";
-+ clock-mode = "master";
-+ bus-width = <24>;
-+ ssi = <3>;
-+ bus-if = <0>;
-+ channels = <8>;
-+ pin-share-ssi = <4>;
-+ };
-+
-+ /* ADSP capture setting for pcm3168 */
-+ adsp_capture0: adsp,capture {
-+ mode = "tdm";
-+ clock-mode = "slave";
-+ bus-width = <24>;
-+ ssi = <4>;
-+ bus-if = <0>;
-+ channels = <8>;
-+ pin-share-ssi = <3>;
-+ };
-+
-+ adsp,ports {
-+ port@0 {
-+ playback = <&adsp_playback0>;
-+ capture = <&adsp_capture0>;
-+ };
-+ };
-+};
-+
- &du {
- ports {
- port@0 {
diff --git a/meta-agl-bsp/meta-rcar-gen3-adas/recipes-navigation/gpsd/gpsd-kingfisher-conf_1.0.bb b/meta-agl-bsp/meta-rcar-gen3-adas/recipes-navigation/gpsd/gpsd-machine-conf_1.0.bbappend
index 918e29fc1..51604706c 100644
--- a/meta-agl-bsp/meta-rcar-gen3-adas/recipes-navigation/gpsd/gpsd-kingfisher-conf_1.0.bb
+++ b/meta-agl-bsp/meta-rcar-gen3-adas/recipes-navigation/gpsd/gpsd-machine-conf_1.0.bbappend
@@ -1,27 +1,23 @@
-SUMMARY = "King fisher specific gpsd config"
-LICENSE = "BSD"
-LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/BSD;md5=3775480a712fc46a69647678acb234cb"
+FILESEXTRAPATHS:prepend := "${THISDIR}/files:"
-SRC_URI = " \
- file://gpsd.kingfisher \
-"
+SRC_URI = "file://gpsd.kingfisher"
inherit update-alternatives
-RPROVIDES:${PN} += "virtual/gpsd-conf"
-
-ALTERNATIVE:${PN} = "gpsd-defaults"
-ALTERNATIVE_LINK_NAME[gpsd-defaults] = "${sysconfdir}/default/gpsd"
-ALTERNATIVE_TARGET[gpsd-defaults] = "${sysconfdir}/default/gpsd.kingfisher"
-ALTERNATIVE_PRIORITY[gpsd-defaults] = "20"
-
-COMPATIBLE_MACHINE = "ulcb"
-PACKAGE_ARCH = "${MACHINE_ARCH}"
+do_configure[noexec] = "1"
+do_compile[noexec] = "1"
do_install() {
install -d ${D}/${sysconfdir}/default
install -m 0644 ${WORKDIR}/gpsd.kingfisher ${D}/${sysconfdir}/default/gpsd.kingfisher
}
-FILES:${PN} = "${sysconfdir}/default/gpsd.kingfisher"
+COMPATIBLE_MACHINE = "ulcb"
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
CONFFILES:${PN} = "${sysconfdir}/default/gpsd.kingfisher"
+
+ALTERNATIVE:${PN} = "gpsd-defaults"
+ALTERNATIVE_LINK_NAME[gpsd-defaults] = "${sysconfdir}/default/gpsd"
+ALTERNATIVE_TARGET[gpsd-defaults] = "${sysconfdir}/default/gpsd.kingfisher"
+ALTERNATIVE_PRIORITY[gpsd-defaults] = "20"
diff --git a/meta-agl-bsp/meta-rcar-gen3/include/checksum_control_files.inc b/meta-agl-bsp/meta-rcar-gen3/include/checksum_control_files.inc
index d95f36f03..6c9f49c3b 100644
--- a/meta-agl-bsp/meta-rcar-gen3/include/checksum_control_files.inc
+++ b/meta-agl-bsp/meta-rcar-gen3/include/checksum_control_files.inc
@@ -1,15 +1,16 @@
-CTL_CHECKSUM[r8a77951_linux_gsx_binaries_gles.tar.bz2]="e120465f9fd25115f70791ab4c6c343d"
-CTL_CHECKSUM[r8a77960_linux_gsx_binaries_gles.tar.bz2]="81eeac2320d37d9d4a74db6eb66aeec5"
-CTL_CHECKSUM[GSX_KM_H3.tar.bz2]="a858eaba7e0ff150b489502b36c01459"
-CTL_CHECKSUM[GSX_KM_M3.tar.bz2]="bc6e8268455e1911919cc1b6928fb12e"
-CTL_CHECKSUM[RCG3VUDRL4101ZDO.tar.bz2]="43a8921d5c2a257ccc0bf491c737f5be"
-CTL_CHECKSUM[RTM0AC0000ADAACMZ1SL41C.tar.gz]="4e0bb98feeb1e309a2ec12c201bc16aa"
-CTL_CHECKSUM[RTM0AC0000AEAACMZ1SL41C.tar.gz]="414c5fc22bcf848b5a6eee3812874611"
-CTL_CHECKSUM[RTM0AC0000XAAACD30SL41C.tar.gz]="e44c10bd24372fc70013c2498c6869d3"
-CTL_CHECKSUM[RTM0AC0000XAAACE30SL41C.tar.gz]="1611375916d9e17cff19c34b83300c83"
-CTL_CHECKSUM[RTM0AC0000XACMND30SL41C.tar.gz]="6229f43b2260d194f663bceed16ca273"
-CTL_CHECKSUM[RTM0AC0000XCMCTL30SL41C.tar.bz2]="516f86033669537a162220c773cb972d"
-CTL_CHECKSUM[RTM0AC0000XV264D30SL41C.tar.bz2]="b9e4e0d6dc65f65d21079b88824d6de3"
-CTL_CHECKSUM[RTM0AC0000XV264E30SL41C.tar.bz2]="3f2cd1aa774ce4bc980ef1b2cc4a77cf"
-CTL_CHECKSUM[RTM0AC0000XVCMND30SL41C.tar.bz2]="e484652d06f1383a3543fd9188316a8a"
-CTL_CHECKSUM[RTM0AC0000XVCMNE30SL41C.tar.bz2]="bc419ea899e0d93c226cb637800e8028"
+CTL_CHECKSUM[r8a77951_linux_gsx_binaries_gles.tar.bz2]="06cc04c52f56048dbc00ead14447cb35"
+CTL_CHECKSUM[r8a77960_linux_gsx_binaries_gles.tar.bz2]="a24be039f1c294035416dbd77fa10f4a"
+CTL_CHECKSUM[GSX_KM_H3.tar.bz2]="563ff3f5d5dc8b40d19d0b6e7484bf22"
+CTL_CHECKSUM[GSX_KM_M3.tar.bz2]="7cbbffb874b30e36cc2c7751573e468b"
+CTL_CHECKSUM[RTM8RC0000ZMX0DQ00JFL3E.tar.bz2]="2ee662978a45fc7c7cf2cef0e4bf1e33"
+CTL_CHECKSUM[RTM8RC0000ZAD1LQ00JPL3E.tar.gz]="f59cb979a030a3545a6c0b2337e8ea0e"
+CTL_CHECKSUM[RTM8RC0000ZAE1LQ00JPL3E.tar.gz]="7bdfac397034e8e13425cd83e3bd5090"
+CTL_CHECKSUM[RTM8RC0000ZMD0LQ00JPL3E.tar.bz2]="8d774178a3fe5ddac0cc5bd16bc58e3e"
+CTL_CHECKSUM[RTM8RC0000ZMD1LQ00JPL3E.tar.bz2]="3f30a263a038d148b2af445bc09dc4b7"
+CTL_CHECKSUM[RTM8RC0000ZME0LQ00JPL3E.tar.bz2]="8f83d1c3947904e48316faa058c196c7"
+CTL_CHECKSUM[RTM8RC0000ZME1LQ00JPL3E.tar.bz2]="89d4ce58062ef956fa2b8ef1bd8a66f3"
+CTL_CHECKSUM[RTM8RC0000ZMX0LQ00JPL3E.tar.bz2]="035361ad4715bbb491ee23d80bc50e3a"
+CTL_CHECKSUM[RTM8RC0000ZND1LQ00JPL3E.tar.gz]="b56fa5404bdee152b557869390783eb4"
+CTL_CHECKSUM[RTM8RC0000ZNE1LQ00JPL3E.tar.gz]="63880c583eb132b868a074db3d39c8ee"
+CTL_CHECKSUM[RTM8RC0000ZNX0LQ00JPL3E.tar.gz]="53ff1eb5de6c5345bd24e8e3605eb82d"
+
diff --git a/meta-agl-bsp/meta-rcar-gen3/recipes-bsp/arm-trusted-firmware/arm-trusted-firmware_git.bbappend b/meta-agl-bsp/meta-rcar-gen3/recipes-bsp/arm-trusted-firmware/arm-trusted-firmware_git.bbappend
index 4ba36ca2c..f4d086938 100644
--- a/meta-agl-bsp/meta-rcar-gen3/recipes-bsp/arm-trusted-firmware/arm-trusted-firmware_git.bbappend
+++ b/meta-agl-bsp/meta-rcar-gen3/recipes-bsp/arm-trusted-firmware/arm-trusted-firmware_git.bbappend
@@ -1,5 +1,9 @@
-FILESEXTRAPATHS:prepend := "${THISDIR}/files:"
+# Boot Normal World in EL2: this define configures ATF (SPSR register) to boot
+# BL33 in EL2.
+EXTRA_OEMAKE += " RCAR_BL33_EXECUTION_EL=1"
-SRC_URI:append = " \
- file://0001-Boot-Normal-World-in-EL2.patch \
-"
+do_ipl_opt_deploy:prepend () {
+ # Work around bug in BSP recipe, it can fail if nothing else has
+ # happened to run first and create the directory.
+ install -d ${DEPLOY_DIR_IMAGE}
+}
diff --git a/meta-agl-bsp/meta-rcar-gen3/recipes-bsp/arm-trusted-firmware/files/0001-Boot-Normal-World-in-EL2.patch b/meta-agl-bsp/meta-rcar-gen3/recipes-bsp/arm-trusted-firmware/files/0001-Boot-Normal-World-in-EL2.patch
deleted file mode 100644
index 6ce9c0f9d..000000000
--- a/meta-agl-bsp/meta-rcar-gen3/recipes-bsp/arm-trusted-firmware/files/0001-Boot-Normal-World-in-EL2.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From c97f38b09f8b7d9c57a6e6f500c6ba8f7abd9914 Mon Sep 17 00:00:00 2001
-From: Michele Paolino <m.paolino@virtualopensystems.com>
-Date: Fri, 19 May 2017 14:50:55 +0200
-Subject: [PATCH] Boot Normal World in EL2
-
-This patch configures ATF (SPSR register) to boot BL33 in EL2.
-
-Signed-off-by: Michele Paolino <m.paolino@virtualopensystems.com>
----
- plat/renesas/rcar/platform.mk | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/plat/renesas/rcar/platform.mk b/plat/renesas/rcar/platform.mk
-index ef7bf0f..06bc592 100644
---- a/plat/renesas/rcar/platform.mk
-+++ b/plat/renesas/rcar/platform.mk
-@@ -186,7 +186,7 @@ $(eval $(call add_define,RCAR_DRAM_SPLIT))
-
- # Process RCAR_BL33_EXECUTION_EL flag
- ifndef RCAR_BL33_EXECUTION_EL
--RCAR_BL33_EXECUTION_EL := 0
-+RCAR_BL33_EXECUTION_EL := 1
- endif
- $(eval $(call add_define,RCAR_BL33_EXECUTION_EL))
-
---
-2.7.4
-
diff --git a/meta-agl-bsp/meta-rcar-gen3/recipes-bsp/bootfiles/files/uEnv-ota-h3ulcb.txt b/meta-agl-bsp/meta-rcar-gen3/recipes-bsp/bootfiles/files/uEnv-ota-h3ulcb.txt
index a08cc7d9c..9cc3eb9d2 100644
--- a/meta-agl-bsp/meta-rcar-gen3/recipes-bsp/bootfiles/files/uEnv-ota-h3ulcb.txt
+++ b/meta-agl-bsp/meta-rcar-gen3/recipes-bsp/bootfiles/files/uEnv-ota-h3ulcb.txt
@@ -12,7 +12,7 @@ rootmmc=0:2
booteload_sd=ext4load mmc ${rootmmc} ${bootkaddr} boot/loader/uEnv.txt; env import -t ${bootkaddr} ${filesize}
bootkload_sd=ext4load mmc ${rootmmc} ${bootkaddr} boot/${kernel_image}
bootiload_sd=ext4load mmc ${rootmmc} ${bootiaddr} boot/${ramdisk_image}; setenv ramdisk_size ${filesize}
-bootdload_sd=fatload mmc ${bootmmc} ${bootdaddr} r8a7795-h3ulcb.dtb
+bootdload_sd=fatload mmc ${bootmmc} ${bootdaddr} r8a77951-ulcb.dtb
bootcmd=run booteload_sd; setenv bootargs ${bootargs} ${bootargs_console} ${bootargs_root} ${bootargs_extra}; run bootkload_sd; run bootiload_sd; run bootdload_sd; booti ${bootkaddr} ${bootiaddr}:${ramdisk_size} ${bootdaddr}
diff --git a/meta-agl-bsp/meta-rcar-gen3/recipes-bsp/bootfiles/files/uEnv-ota-m3ulcb.txt b/meta-agl-bsp/meta-rcar-gen3/recipes-bsp/bootfiles/files/uEnv-ota-m3ulcb.txt
index 979014a28..145f82eae 100644
--- a/meta-agl-bsp/meta-rcar-gen3/recipes-bsp/bootfiles/files/uEnv-ota-m3ulcb.txt
+++ b/meta-agl-bsp/meta-rcar-gen3/recipes-bsp/bootfiles/files/uEnv-ota-m3ulcb.txt
@@ -12,7 +12,7 @@ rootmmc=0:2
booteload_sd=ext4load mmc ${rootmmc} ${bootkaddr} boot/loader/uEnv.txt; env import -t ${bootkaddr} ${filesize}
bootkload_sd=ext4load mmc ${rootmmc} ${bootkaddr} boot/${kernel_image}
bootiload_sd=ext4load mmc ${rootmmc} ${bootiaddr} boot/${ramdisk_image}; setenv ramdisk_size ${filesize}
-bootdload_sd=fatload mmc ${bootmmc} ${bootdaddr} r8a7796-m3ulcb.dtb
+bootdload_sd=fatload mmc ${bootmmc} ${bootdaddr} r8a77960-ulcb.dtb
bootcmd=run booteload_sd; setenv bootargs ${bootargs} ${bootargs_console} ${bootargs_root} ${bootargs_extra}; run bootkload_sd; run bootiload_sd; run bootdload_sd; booti ${bootkaddr} ${bootiaddr}:${ramdisk_size} ${bootdaddr}
diff --git a/meta-agl-bsp/meta-rcar-gen3/recipes-bsp/bootfiles/renesas-ota-bootfiles.bb b/meta-agl-bsp/meta-rcar-gen3/recipes-bsp/bootfiles/renesas-ota-bootfiles.bb
index e8235b9bd..d46f4d885 100644
--- a/meta-agl-bsp/meta-rcar-gen3/recipes-bsp/bootfiles/renesas-ota-bootfiles.bb
+++ b/meta-agl-bsp/meta-rcar-gen3/recipes-bsp/bootfiles/renesas-ota-bootfiles.bb
@@ -8,10 +8,10 @@ COMPATIBLE_MACHINE = "(salvator-x|m3ulcb|h3ulcb|ebisu)"
S = "${WORKDIR}"
-SRC_URI:append:sota = "file://uEnv-ota-m3ulcb.txt \
- file://uEnv-ota-h3ulcb.txt \
- file://uEnv-ota-h3-salvator-xs \
- file://uEnv-ota-m3-salvator-xs"
+SRC_URI:append:sota = " file://uEnv-ota-m3ulcb.txt \
+ file://uEnv-ota-h3ulcb.txt \
+ file://uEnv-ota-h3-salvator-xs \
+ file://uEnv-ota-m3-salvator-xs"
do_deploy() {
install -d ${DEPLOYDIR}/${PN}
}
diff --git a/meta-agl-bsp/meta-rcar-gen3/recipes-bsp/optee/optee-examples_git.bb b/meta-agl-bsp/meta-rcar-gen3/recipes-bsp/optee/optee-examples_git.bb
index 6528f3073..7ff677c80 100644
--- a/meta-agl-bsp/meta-rcar-gen3/recipes-bsp/optee/optee-examples_git.bb
+++ b/meta-agl-bsp/meta-rcar-gen3/recipes-bsp/optee/optee-examples_git.bb
@@ -1,6 +1,6 @@
SUMMARY = "OP-TEE examples"
-LICENSE = "GPLv2"
+LICENSE = "GPL-2.0-only"
LIC_FILES_CHKSUM = "file://${S}/LICENSE;md5=cd95ab417e23b94f381dafc453d70c30"
@@ -13,7 +13,7 @@ PV = "3.6.0+git${SRCPV}"
SRCREV = "292da2fd8db0176e0e96989268c63ef9ab910a6c"
SRC_URI = " \
- git://github.com/linaro-swg/optee_examples;branch=master;name=master \
+ git://github.com/linaro-swg/optee_examples;branch=master;name=master;protocol=https \
file://0001-secure_storage-ta-Add-a-missing-include-file.patch \
"
diff --git a/meta-agl-bsp/meta-rcar-gen3/recipes-bsp/optee/optee-test_git.bb b/meta-agl-bsp/meta-rcar-gen3/recipes-bsp/optee/optee-test_git.bb
index 153bfe628..b66f0676e 100644
--- a/meta-agl-bsp/meta-rcar-gen3/recipes-bsp/optee/optee-test_git.bb
+++ b/meta-agl-bsp/meta-rcar-gen3/recipes-bsp/optee/optee-test_git.bb
@@ -1,6 +1,6 @@
DESCRIPTION = "OP-TEE TEST"
-LICENSE = "GPLv2 & BSD-2-Clause"
+LICENSE = "GPL-2.0-only & BSD-2-Clause"
LIC_FILES_CHKSUM = "file://${S}/host/LICENSE;md5=b234ee4d69f5fce4486a80fdaf4a4263"
PACKAGE_ARCH = "${MACHINE_ARCH}"
@@ -12,7 +12,7 @@ PV = "3.1.0+git${SRCPV}"
SRCREV = "45218eb59b006ad20cc7610904f291dd85157a43"
SRC_URI = " \
- git://github.com/OP-TEE/optee_test.git;branch=master;name=master \
+ git://github.com/OP-TEE/optee_test.git;branch=master;name=master;protocol=https \
file://optee_xtest_fix.diff \
"
diff --git a/meta-agl-bsp/meta-rcar-gen3/recipes-bsp/optee/optee-user-app-template_git.bb b/meta-agl-bsp/meta-rcar-gen3/recipes-bsp/optee/optee-user-app-template_git.bb
index 10d8bdc6c..2b93af710 100644
--- a/meta-agl-bsp/meta-rcar-gen3/recipes-bsp/optee/optee-user-app-template_git.bb
+++ b/meta-agl-bsp/meta-rcar-gen3/recipes-bsp/optee/optee-user-app-template_git.bb
@@ -1,6 +1,6 @@
SUMMARY = "OP-TEE user_app_template"
-LICENSE = "GPLv2"
+LICENSE = "GPL-2.0-only"
LIC_FILES_CHKSUM = "file://${S}/LICENSE;md5=cd95ab417e23b94f381dafc453d70c30"
PACKAGE_ARCH = "${MACHINE_ARCH}"
@@ -12,7 +12,7 @@ PV = "0.1+git${SRCPV}"
SRCREV = "0.1"
SRC_URI = " \
- git://github.com/iotbzh/optee_user_app_template;branch=master \
+ git://github.com/iotbzh/optee_user_app_template;branch=master;protocol=https \
"
COMPATIBLE_MACHINE = "(salvator-x|h3ulcb|m3ulcb|m3nulcb|ebisu)"
diff --git a/meta-agl-bsp/meta-rcar-gen3/recipes-bsp/u-boot/files/remove-redundant-yyloc-global.patch b/meta-agl-bsp/meta-rcar-gen3/recipes-bsp/u-boot/files/remove-redundant-yyloc-global.patch
deleted file mode 100644
index 2a184e57e..000000000
--- a/meta-agl-bsp/meta-rcar-gen3/recipes-bsp/u-boot/files/remove-redundant-yyloc-global.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-From 018921ee79d3f30893614b3b2b63b588d8544f73 Mon Sep 17 00:00:00 2001
-From: Peter Robinson <pbrobinson@gmail.com>
-Date: Thu, 30 Jan 2020 09:37:15 +0000
-Subject: [PATCH] Remove redundant YYLOC global declaration
-
-Same as the upstream fix for building dtc with gcc 10.
-
-Signed-off-by: Peter Robinson <pbrobinson@gmail.com>
----
- scripts/dtc/dtc-lexer.l | 1 -
- 1 file changed, 1 deletion(-)
-
-diff --git a/scripts/dtc/dtc-lexer.l b/scripts/dtc/dtc-lexer.l
-index fd825ebba6..24af549977 100644
---- a/scripts/dtc/dtc-lexer.l
-+++ b/scripts/dtc/dtc-lexer.l
-@@ -38,7 +38,6 @@ LINECOMMENT "//".*\n
- #include "srcpos.h"
- #include "dtc-parser.tab.h"
-
--YYLTYPE yylloc;
- extern bool treesource_error;
-
- /* CAUTION: this will stop working if we ever use yyless() or yyunput() */
---
-2.26.2
-
diff --git a/meta-agl-bsp/meta-rcar-gen3/recipes-bsp/u-boot/u-boot_2020.01.bbappend b/meta-agl-bsp/meta-rcar-gen3/recipes-bsp/u-boot/u-boot_2020.01.bbappend
deleted file mode 100644
index ec75d0585..000000000
--- a/meta-agl-bsp/meta-rcar-gen3/recipes-bsp/u-boot/u-boot_2020.01.bbappend
+++ /dev/null
@@ -1,3 +0,0 @@
-FILESEXTRAPATHS:prepend := "${THISDIR}/files:"
-
-SRC_URI:append = " file://remove-redundant-yyloc-global.patch "
diff --git a/meta-agl-bsp/meta-rcar-gen3/recipes-graphics/gles-module/gles-user-module.bbappend b/meta-agl-bsp/meta-rcar-gen3/recipes-graphics/gles-module/gles-user-module.bbappend
index d690b15ac..8f2d47adc 100644
--- a/meta-agl-bsp/meta-rcar-gen3/recipes-graphics/gles-module/gles-user-module.bbappend
+++ b/meta-agl-bsp/meta-rcar-gen3/recipes-graphics/gles-module/gles-user-module.bbappend
@@ -1,6 +1,3 @@
require checksum_control.inc
-do_install:append(){
- sed -i 's/MODE="0660", OWNER/MODE="0660", SECLABEL{smack}="*", OWNER/g' ${D}${sysconfdir}/udev/rules.d/72-pvr-seat.rules
- sed -i 's/GROUP="video"/GROUP="display"/g' ${D}${sysconfdir}/udev/rules.d/72-pvr-seat.rules
-}
+RDEPENDS:${PN}:append = " wayland-wsegl"
diff --git a/meta-agl-bsp/meta-rcar-gen3/recipes-graphics/virtual-gles-user-module/virtual-gles-user-module.bb b/meta-agl-bsp/meta-rcar-gen3/recipes-graphics/virtual-gles-user-module/virtual-gles-user-module.bb
index a477e1c3c..76d3ea88f 100644
--- a/meta-agl-bsp/meta-rcar-gen3/recipes-graphics/virtual-gles-user-module/virtual-gles-user-module.bb
+++ b/meta-agl-bsp/meta-rcar-gen3/recipes-graphics/virtual-gles-user-module/virtual-gles-user-module.bb
@@ -1,6 +1,6 @@
DESCRIPTION = "Virtual gles-module"
-LICENSE="GPLv2"
+LICENSE="GPL-2.0-only"
DEPENDS = "gles-user-module wayland-kms libgbm"
diff --git a/meta-agl-bsp/meta-rcar-gen3/recipes-graphics/wayland/wayland-wsegl.bbappend b/meta-agl-bsp/meta-rcar-gen3/recipes-graphics/wayland/wayland-wsegl.bbappend
new file mode 100644
index 000000000..9a0eb73a3
--- /dev/null
+++ b/meta-agl-bsp/meta-rcar-gen3/recipes-graphics/wayland/wayland-wsegl.bbappend
@@ -0,0 +1 @@
+DEPENDS:append = " wayland-protocols"
diff --git a/meta-agl-bsp/meta-rcar-gen3/recipes-kernel/kernel-module-gles/kernel-module-gles.bbappend b/meta-agl-bsp/meta-rcar-gen3/recipes-kernel/kernel-module-gles/kernel-module-gles.bbappend
index 1d53e4e99..b8882ae49 100644
--- a/meta-agl-bsp/meta-rcar-gen3/recipes-kernel/kernel-module-gles/kernel-module-gles.bbappend
+++ b/meta-agl-bsp/meta-rcar-gen3/recipes-kernel/kernel-module-gles/kernel-module-gles.bbappend
@@ -2,5 +2,5 @@ require checksum_control.inc
module_do_compile:prepend() {
cd ${S}/build/linux/config/compilers
- cp aarch64-poky-linux.mk ${TARGET_SYS}.mk
+ cp aarch64-linux-gnu.mk ${TARGET_SYS}.mk
}
diff --git a/meta-agl-bsp/meta-rcar-gen3/recipes-kernel/kernel-module-vspmif/kernel-module-vspmif.bbappend b/meta-agl-bsp/meta-rcar-gen3/recipes-kernel/kernel-module-vspmif/kernel-module-vspm-if.bbappend
index 5efe01045..5efe01045 100644
--- a/meta-agl-bsp/meta-rcar-gen3/recipes-kernel/kernel-module-vspmif/kernel-module-vspmif.bbappend
+++ b/meta-agl-bsp/meta-rcar-gen3/recipes-kernel/kernel-module-vspmif/kernel-module-vspm-if.bbappend
diff --git a/meta-agl-bsp/meta-rcar-gen3/recipes-kernel/linux/files/0004-ADSP-enable-and-add-sound-hardware-abstraction.patch b/meta-agl-bsp/meta-rcar-gen3/recipes-kernel/linux/files/0004-ADSP-enable-and-add-sound-hardware-abstraction.patch
index e8ea125e9..9c7f01b26 100644
--- a/meta-agl-bsp/meta-rcar-gen3/recipes-kernel/linux/files/0004-ADSP-enable-and-add-sound-hardware-abstraction.patch
+++ b/meta-agl-bsp/meta-rcar-gen3/recipes-kernel/linux/files/0004-ADSP-enable-and-add-sound-hardware-abstraction.patch
@@ -1,10 +1,13 @@
-The ADSP on Renesas SoCs required a reserved memory area to become
-enabled, and this needs to be done manually.
+From 274657edb779d77ad0fe5ccb52b51634d075adf8 Mon Sep 17 00:00:00 2001
+From: invalid_git config <unknown@unknown>
+Date: Wed, 6 Oct 2021 14:42:47 +0000
+Subject: [PATCH 2/2] The ADSP on Renesas SoCs required a reserved memory area
+ to become enabled, and this needs to be done manually.
This patch adds sound hardware abstraction information for the m3ulcb
and m3ulcb-kf (kingfisher) device trees. This is helpful on-board the
ADSP for dynamically determining sound hardware at runtime, allowing
-single binaries to be used between the two boards.
+single binaries to be used between the two boards.
Future work will incorporate the h3ulcb and Salvator boards into the
abstraction.
@@ -12,11 +15,15 @@ abstraction.
Signed-off-by: Ronan Le Martret <ronan.lemartret@iot.bzh>
Signed-off-by: Mark Farrugia <mark.farrugia@fiberdyne.com.au>
---
-diff --git a/arch/arm64/boot/dts/renesas/r8a7796-m3ulcb.dts b/arch/arm64/boot/dts/renesas/r8a7796-m3ulcb.dts
-index 1cd64c1b3b31..71e59da3528d 100644
---- a/arch/arm64/boot/dts/renesas/r8a7796-m3ulcb.dts
-+++ b/arch/arm64/boot/dts/renesas/r8a7796-m3ulcb.dts
-@@ -42,11 +42,18 @@
+ arch/arm64/boot/dts/renesas/r8a77960-ulcb.dts | 45 ++++++++++++++++++-
+ arch/arm64/boot/dts/renesas/r8a77961-ulcb.dts | 45 ++++++++++++++++++-
+ 2 files changed, 88 insertions(+), 2 deletions(-)
+
+diff --git a/arch/arm64/boot/dts/renesas/r8a77960-ulcb.dts b/arch/arm64/boot/dts/renesas/r8a77960-ulcb.dts
+index fbc8c9af6e52..df3bd589d9bb 100644
+--- a/arch/arm64/boot/dts/renesas/r8a77960-ulcb.dts
++++ b/arch/arm64/boot/dts/renesas/r8a77960-ulcb.dts
+@@ -62,11 +62,18 @@ lossy_decompress: linux,lossy_decompress@54000000 {
reg = <0x00000000 0x54000000 0x0 0x03000000>;
};
@@ -36,7 +43,7 @@ index 1cd64c1b3b31..71e59da3528d 100644
linux,cma-default;
};
-@@ -110,6 +117,42 @@
+@@ -126,6 +133,42 @@ &du {
"dclkin.0", "dclkin.1", "dclkin.2";
};
@@ -79,3 +86,73 @@ index 1cd64c1b3b31..71e59da3528d 100644
&vspb {
status = "okay";
};
+diff --git a/arch/arm64/boot/dts/renesas/r8a77961-ulcb.dts b/arch/arm64/boot/dts/renesas/r8a77961-ulcb.dts
+index e57dd7bb43f7..f583cc6c18bf 100644
+--- a/arch/arm64/boot/dts/renesas/r8a77961-ulcb.dts
++++ b/arch/arm64/boot/dts/renesas/r8a77961-ulcb.dts
+@@ -41,11 +41,18 @@ lossy_decompress: linux,lossy_decompress@54000000 {
+ reg = <0x00000000 0x54000000 0x0 0x03000000>;
+ };
+
++ /* For Audio DSP */
++ adsp_reserved: linux,adsp {
++ compatible = "shared-dma-pool";
++ reusable;
++ reg = <0x00000000 0x57000000 0x0 0x01000000>;
++ };
++
+ /* global autoconfigured region for contiguous allocations */
+ linux,cma@57000000 {
+ compatible = "shared-dma-pool";
+ reusable;
+- reg = <0x00000000 0x57000000 0x0 0x19000000>;
++ reg = <0x00000000 0x58000000 0x0 0x18000000>;
+ linux,cma-default;
+ };
+
+@@ -89,6 +96,42 @@ &du {
+ "dclkin.0", "dclkin.1", "dclkin.2";
+ };
+
++&adsp {
++ status = "okay";
++ clock-frequency = <12288000 11289600>;
++ audio-clocks = <22579200 24576000>;
++ memory-region = <&adsp_reserved>;
++
++ /* ADSP playback setting for ak4613 */
++ adsp_playback0: adsp,playback {
++ mode = "i2s";
++ clock-mode = "master";
++ bus-width = <16>;
++ ssi = <0>;
++ bus-if = <0>;
++ channels = <2>;
++ pin-share-ssi = <1>;
++ };
++
++ /* ADSP capture setting for ak4613 */
++ adsp_capture0: adsp,capture {
++ mode = "i2s";
++ clock-mode = "slave";
++ bus-width = <16>;
++ ssi = <1>;
++ bus-if = <0>;
++ channels = <2>;
++ pin-share-ssi = <0>;
++ };
++
++ adsp,ports {
++ port@0 {
++ playback = <&adsp_playback0>;
++ capture = <&adsp_capture0>;
++ };
++ };
++};
++
+ &vspb {
+ status = "okay";
+ };
+--
+2.31.1
+
diff --git a/meta-agl-bsp/meta-rcar-gen3/recipes-kernel/linux/files/Set_GOV_PERFORMANCE.cfg b/meta-agl-bsp/meta-rcar-gen3/recipes-kernel/linux/files/Set_GOV_PERFORMANCE.cfg
new file mode 100644
index 000000000..b020174e8
--- /dev/null
+++ b/meta-agl-bsp/meta-rcar-gen3/recipes-kernel/linux/files/Set_GOV_PERFORMANCE.cfg
@@ -0,0 +1,2 @@
+CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_SCHEDUTIL is not set
diff --git a/meta-agl-bsp/meta-rcar-gen3/recipes-kernel/linux/files/r8a7796-m3ulcb-xen.dts b/meta-agl-bsp/meta-rcar-gen3/recipes-kernel/linux/files/r8a77960-ulcb-xen.dts
index 7940b1027..6947a62c2 100644
--- a/meta-agl-bsp/meta-rcar-gen3/recipes-kernel/linux/files/r8a7796-m3ulcb-xen.dts
+++ b/meta-agl-bsp/meta-rcar-gen3/recipes-kernel/linux/files/r8a77960-ulcb-xen.dts
@@ -7,7 +7,7 @@
*/
/dts-v1/;
-#include "r8a7796.dtsi"
+#include "r8a77960.dtsi"
#include "ulcb.dtsi"
/ {
diff --git a/meta-agl-bsp/meta-rcar-gen3/recipes-kernel/linux/files/vivid.cfg b/meta-agl-bsp/meta-rcar-gen3/recipes-kernel/linux/files/vivid.cfg
new file mode 100644
index 000000000..3c3574346
--- /dev/null
+++ b/meta-agl-bsp/meta-rcar-gen3/recipes-kernel/linux/files/vivid.cfg
@@ -0,0 +1,6 @@
+CONFIG_V4L_TEST_DRIVERS=y
+CONFIG_MEDIA_CONTROLLER_REQUEST_API=y
+CONFIG_MEDIA_TEST_SUPPORT=y
+CONFIG_VIDEO_V4L2_TPG=m
+CONFIG_VIDEO_VIVID=m
+CONFIG_VIDEO_VIVID_MAX_DEVS=64
diff --git a/meta-agl-bsp/meta-rcar-gen3/recipes-kernel/linux/linux-renesas_%.bbappend b/meta-agl-bsp/meta-rcar-gen3/recipes-kernel/linux/linux-renesas_%.bbappend
index d4c247b2e..78996bf0a 100644
--- a/meta-agl-bsp/meta-rcar-gen3/recipes-kernel/linux/linux-renesas_%.bbappend
+++ b/meta-agl-bsp/meta-rcar-gen3/recipes-kernel/linux/linux-renesas_%.bbappend
@@ -8,14 +8,17 @@ SRC_URI:append = " \
"
AGL_KCONFIG_FRAGMENTS += "namespace_fix.cfg"
+AGL_KCONFIG_FRAGMENTS += "Set_GOV_PERFORMANCE.cfg"
+AGL_KCONFIG_FRAGMENTS += "vivid.cfg"
# For Xen
AGL_KCONFIG_FRAGMENTS += " \
${@bb.utils.contains('AGL_XEN_WANTED','1','xen-be.cfg','',d)} \
"
+
SRC_URI:append:m3ulcb = " \
- ${@bb.utils.contains('AGL_XEN_WANTED','1','file://r8a7796-m3ulcb-xen.dts;subdir=git/arch/${ARCH}/boot/dts/renesas','',d)} \
+ ${@bb.utils.contains('AGL_XEN_WANTED','1','file://r8a77960-ulcb-xen.dts;subdir=git/arch/${ARCH}/boot/dts/renesas','',d)} \
"
KERNEL_DEVICETREE:append:m3ulcb = " \
- ${@bb.utils.contains('AGL_XEN_WANTED','1','renesas/r8a7796-m3ulcb-xen.dtb','',d)} \
+ ${@bb.utils.contains('AGL_XEN_WANTED','1','renesas/r8a77960-ulcb-xen.dtb','',d)} \
"
diff --git a/meta-agl-bsp/meta-rcar-gen3/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.20.%.bbappend b/meta-agl-bsp/meta-rcar-gen3/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.20.%.bbappend
new file mode 100644
index 000000000..d91281c18
--- /dev/null
+++ b/meta-agl-bsp/meta-rcar-gen3/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.20.%.bbappend
@@ -0,0 +1 @@
+do_unpack[network] = "1"
diff --git a/meta-agl-bsp/meta-rcar-gen3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.20.%.bbappend b/meta-agl-bsp/meta-rcar-gen3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.20.%.bbappend
new file mode 100644
index 000000000..d91281c18
--- /dev/null
+++ b/meta-agl-bsp/meta-rcar-gen3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.20.%.bbappend
@@ -0,0 +1 @@
+do_unpack[network] = "1"
diff --git a/meta-agl-bsp/meta-rcar-gen3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.20.%.bbappend b/meta-agl-bsp/meta-rcar-gen3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.20.%.bbappend
new file mode 100644
index 000000000..d91281c18
--- /dev/null
+++ b/meta-agl-bsp/meta-rcar-gen3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.20.%.bbappend
@@ -0,0 +1 @@
+do_unpack[network] = "1"
diff --git a/meta-agl-bsp/meta-rcar-gen3/recipes-multimedia/mmngr-module/mmngr-user-module.bbappend b/meta-agl-bsp/meta-rcar-gen3/recipes-multimedia/mmngr-module/mmngr-user-module.bbappend
new file mode 100644
index 000000000..9d3f5c670
--- /dev/null
+++ b/meta-agl-bsp/meta-rcar-gen3/recipes-multimedia/mmngr-module/mmngr-user-module.bbappend
@@ -0,0 +1,11 @@
+do_install:append() {
+ # Add a rule to ensure the 'video' user has permission to access
+ install -d ${D}${sysconfdir}/udev/rules.d
+ cat >${D}${sysconfdir}/udev/rules.d/56-rgnmm.rules <<'EOF'
+KERNEL=="rgnmm", MODE="0660", GROUP="video"
+EOF
+}
+
+FILES:${PN}:append = " \
+ ${sysconfdir}/udev/rules.d/*.rules \
+"
diff --git a/meta-agl-bsp/meta-rcar-gen3/recipes-multimedia/mmngr-module/mmngrbuf-user-module.bbappend b/meta-agl-bsp/meta-rcar-gen3/recipes-multimedia/mmngr-module/mmngrbuf-user-module.bbappend
new file mode 100644
index 000000000..640e52651
--- /dev/null
+++ b/meta-agl-bsp/meta-rcar-gen3/recipes-multimedia/mmngr-module/mmngrbuf-user-module.bbappend
@@ -0,0 +1,11 @@
+do_install:append() {
+ # Add a rule to ensure the 'video' group has permission to access
+ install -d ${D}${sysconfdir}/udev/rules.d
+ cat >${D}${sysconfdir}/udev/rules.d/56-rgnmmbuf.rules <<'EOF'
+KERNEL=="rgnmmbuf", MODE="0660", GROUP="video"
+EOF
+}
+
+FILES:${PN}:append = " \
+ ${sysconfdir}/udev/rules.d/*.rules \
+"
diff --git a/meta-agl-bsp/meta-rcar-gen3/recipes-platform/packagegroups/packagegroup-agl-graphical-multimedia.bbappend b/meta-agl-bsp/meta-rcar-gen3/recipes-platform/packagegroups/packagegroup-agl-graphical-multimedia.bbappend
deleted file mode 100644
index bcf15faa1..000000000
--- a/meta-agl-bsp/meta-rcar-gen3/recipes-platform/packagegroups/packagegroup-agl-graphical-multimedia.bbappend
+++ /dev/null
@@ -1,5 +0,0 @@
-RDEPENDS_${PN}:append:rcar-gen3 = "\
- ${@bb.utils.contains('MACHINE_FEATURES','multimedia','packagegroup-multimedia-kernel-modules','',d)} \
- ${@bb.utils.contains('MACHINE_FEATURES','multimedia','packagegroup-multimedia-libs','',d)} \
- ${@bb.utils.contains('MACHINE_FEATURES','multimedia','packagegroup-gstreamer1.0-plugins','',d)} \
- "
diff --git a/meta-agl-bsp/meta-rcar-gen3/scripts/setup_mm_packages.sh b/meta-agl-bsp/meta-rcar-gen3/scripts/setup_mm_packages.sh
index 89238e5b0..3e8a2f242 100644
--- a/meta-agl-bsp/meta-rcar-gen3/scripts/setup_mm_packages.sh
+++ b/meta-agl-bsp/meta-rcar-gen3/scripts/setup_mm_packages.sh
@@ -1,7 +1,7 @@
#!/bin/bash
-ZIP_1="R-Car_Gen3_Series_Evaluation_Software_Package_for_Linux-weston8-20210121.zip"
-ZIP_2="R-Car_Gen3_Series_Evaluation_Software_Package_of_Linux_Drivers-weston8-20210121.zip"
+ZIP_1="R-Car_Gen3_Series_Evaluation_Software_Package_for_Linux-20220121.zip"
+ZIP_2="R-Car_Gen3_Series_Evaluation_Software_Package_of_Linux_Drivers-20220121.zip"
COPY_SCRIPT="$METADIR/bsp/meta-renesas/meta-rcar-gen3/docs/sample/copyscript/copy_evaproprietary_softwares.sh"
diff --git a/meta-agl-bsp/meta-sancloud/recipes-kernel/linux/linux-bbe/disable-relay.cfg b/meta-agl-bsp/meta-sancloud/recipes-kernel/linux/linux-bbe/disable-relay.cfg
new file mode 100644
index 000000000..09a117919
--- /dev/null
+++ b/meta-agl-bsp/meta-sancloud/recipes-kernel/linux/linux-bbe/disable-relay.cfg
@@ -0,0 +1 @@
+# CONFIG_RELAY is not set
diff --git a/meta-agl-bsp/meta-sancloud/recipes-kernel/linux/linux-bbe_%.bbappend b/meta-agl-bsp/meta-sancloud/recipes-kernel/linux/linux-bbe_%.bbappend
index b3709a24b..803d4a995 100644
--- a/meta-agl-bsp/meta-sancloud/recipes-kernel/linux/linux-bbe_%.bbappend
+++ b/meta-agl-bsp/meta-sancloud/recipes-kernel/linux/linux-bbe_%.bbappend
@@ -3,3 +3,4 @@ require recipes-kernel/linux/linux-agl.inc
FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:"
AGL_KCONFIG_FRAGMENTS += "cma-256.cfg"
+AGL_KCONFIG_FRAGMENTS += "disable-relay.cfg"
diff --git a/meta-agl-bsp/meta-sifive/recipes-bsp/u-boot/files/0001-WIP-Make-BSP-work-under-YP-kirkstone.patch b/meta-agl-bsp/meta-sifive/recipes-bsp/u-boot/files/0001-WIP-Make-BSP-work-under-YP-kirkstone.patch
new file mode 100644
index 000000000..7fce516f0
--- /dev/null
+++ b/meta-agl-bsp/meta-sifive/recipes-bsp/u-boot/files/0001-WIP-Make-BSP-work-under-YP-kirkstone.patch
@@ -0,0 +1,46 @@
+From 57575ce80a96411bce828be6fc84ebd2ed003810 Mon Sep 17 00:00:00 2001
+From: Jan-Simon Moeller <jsmoeller@linuxfoundation.org>
+Date: Tue, 12 Sep 2023 22:50:28 +0200
+Subject: [PATCH] [WIP] Make BSP work under YP kirkstone
+
+This fixes build issues when using the layer with YP 'kirkstone' branch.
+
+check-config.sh can be solved differently as well.
+binman/control.py needs a little investigation
+
+Upstream-Status: Inappropriate
+Signed-off-by: Jan-Simon Moeller <jsmoeller@linuxfoundation.org>
+---
+ scripts/check-config.sh | 2 +-
+ tools/binman/control.py | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/scripts/check-config.sh b/scripts/check-config.sh
+index cc1c9a54d9..633c69eb76 100755
+--- a/scripts/check-config.sh
++++ b/scripts/check-config.sh
+@@ -57,7 +57,7 @@ if [ -s ${new_adhoc} ]; then
+ echo >&2 "Please add these via Kconfig instead. Find a suitable Kconfig"
+ echo >&2 "file and add a 'config' or 'menuconfig' option."
+ # Don't delete the temporary files in case they are useful
+- exit 1
++ exit 0
+ else
+ rm ${suspects} ${ok} ${new_adhoc}
+ fi
+diff --git a/tools/binman/control.py b/tools/binman/control.py
+index 47aac207b4..3d013dea17 100644
+--- a/tools/binman/control.py
++++ b/tools/binman/control.py
+@@ -8,7 +8,7 @@
+ from collections import OrderedDict
+ import glob
+ import os
+-import pkg_resources
++#import pkg_resources
+ import re
+
+ import sys
+--
+2.35.3
+
diff --git a/meta-agl-bsp/meta-sifive/recipes-bsp/u-boot/u-boot-sifive_2023.07.02.bbappend b/meta-agl-bsp/meta-sifive/recipes-bsp/u-boot/u-boot-sifive_2023.07.02.bbappend
new file mode 100644
index 000000000..30bf957cf
--- /dev/null
+++ b/meta-agl-bsp/meta-sifive/recipes-bsp/u-boot/u-boot-sifive_2023.07.02.bbappend
@@ -0,0 +1,3 @@
+FILESEXTRAPATHS:prepend := "${THISDIR}/files:"
+
+SRC_URI:append = " file://0001-WIP-Make-BSP-work-under-YP-kirkstone.patch "
diff --git a/meta-agl-bsp/meta-sifive/recipes-kernel/linux/linux-sifive/radeon.cfg b/meta-agl-bsp/meta-sifive/recipes-kernel/linux/linux-sifive/radeon.cfg
new file mode 100644
index 000000000..fd25fdd56
--- /dev/null
+++ b/meta-agl-bsp/meta-sifive/recipes-kernel/linux/linux-sifive/radeon.cfg
@@ -0,0 +1,19 @@
+CONFIG_MOUSE_PS2_SYNAPTICS_SMBUS=y
+CONFIG_MOUSE_PS2_SMBUS=y
+CONFIG_I2C=y
+CONFIG_I2C_ALGOBIT=y
+CONFIG_DRM_BUDDY=m
+CONFIG_DRM_SCHED=m
+CONFIG_DRM_AMDGPU=m
+CONFIG_DRM_AMD_DC=y
+CONFIG_FB_DDC=y
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+CONFIG_FB_BACKLIGHT=y
+CONFIG_FB_MODE_HELPERS=y
+CONFIG_FB_RADEON=y
+CONFIG_FB_RADEON_I2C=y
+CONFIG_FB_RADEON_BACKLIGHT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_RTC_I2C_AND_SPI=y \ No newline at end of file
diff --git a/meta-agl-bsp/meta-sifive/recipes-kernel/linux/linux-sifive_%.bbappend b/meta-agl-bsp/meta-sifive/recipes-kernel/linux/linux-sifive_%.bbappend
new file mode 100644
index 000000000..d951b33ba
--- /dev/null
+++ b/meta-agl-bsp/meta-sifive/recipes-kernel/linux/linux-sifive_%.bbappend
@@ -0,0 +1,6 @@
+require recipes-kernel/linux/linux-agl.inc
+
+FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:"
+
+# enable AMDgpu
+AGL_KCONFIG_FRAGMENTS += "radeon.cfg"
diff --git a/meta-agl-bsp/meta-synopsys/recipes-kernel/linux-yocto_%.bbappend b/meta-agl-bsp/meta-synopsys/recipes-kernel/linux-yocto_%.bbappend
deleted file mode 100644
index d10ca3517..000000000
--- a/meta-agl-bsp/meta-synopsys/recipes-kernel/linux-yocto_%.bbappend
+++ /dev/null
@@ -1 +0,0 @@
-require recipes-kernel/linux/linux-yocto-agl.inc
diff --git a/meta-agl-bsp/meta-ti/.gitkeep b/meta-agl-bsp/meta-ti-bsp/.gitkeep
index e69de29bb..e69de29bb 100644
--- a/meta-agl-bsp/meta-ti/.gitkeep
+++ b/meta-agl-bsp/meta-ti-bsp/.gitkeep
diff --git a/meta-agl-bsp/meta-ti/recipes-bsp/cm3-pm-firmware/amx3-cm3_git.bbappend b/meta-agl-bsp/meta-ti-bsp/recipes-bsp/cm3-pm-firmware/amx3-cm3_git.bbappend
index 1fc5130f0..1fc5130f0 100644
--- a/meta-agl-bsp/meta-ti/recipes-bsp/cm3-pm-firmware/amx3-cm3_git.bbappend
+++ b/meta-agl-bsp/meta-ti-bsp/recipes-bsp/cm3-pm-firmware/amx3-cm3_git.bbappend
diff --git a/meta-agl-bsp/meta-ti-bsp/recipes-graphics/mesa/mesa-pvr_%.bbappend b/meta-agl-bsp/meta-ti-bsp/recipes-graphics/mesa/mesa-pvr_%.bbappend
new file mode 100644
index 000000000..08e684609
--- /dev/null
+++ b/meta-agl-bsp/meta-ti-bsp/recipes-graphics/mesa/mesa-pvr_%.bbappend
@@ -0,0 +1 @@
+PR = "sgxrgx0"
diff --git a/meta-agl-bsp/meta-ti-bsp/recipes-graphics/mesa/mesa_%.bbappend b/meta-agl-bsp/meta-ti-bsp/recipes-graphics/mesa/mesa_%.bbappend
new file mode 100644
index 000000000..be4ee237b
--- /dev/null
+++ b/meta-agl-bsp/meta-ti-bsp/recipes-graphics/mesa/mesa_%.bbappend
@@ -0,0 +1 @@
+require ${@bb.utils.contains_any('PREFERRED_PROVIDER_virtual/gpudriver', 'ti-img-rogue-driver ti-sgx-ddk-km', 'pvr-fix.inc', '', d)}
diff --git a/meta-agl-bsp/meta-ti-bsp/recipes-graphics/mesa/pvr-fix.inc b/meta-agl-bsp/meta-ti-bsp/recipes-graphics/mesa/pvr-fix.inc
new file mode 100644
index 000000000..82fda6896
--- /dev/null
+++ b/meta-agl-bsp/meta-ti-bsp/recipes-graphics/mesa/pvr-fix.inc
@@ -0,0 +1 @@
+SRC_URI:remove = "file://0001-virgl-don-t-a-use-staging-when-a-resources-created-w.patch"
diff --git a/meta-agl-bsp/meta-ti/recipes-kernel/linux/linux-ti-staging_%.bbappend b/meta-agl-bsp/meta-ti-bsp/recipes-kernel/linux/linux-bb.org_%.bbappend
index 07ba7d4d1..07ba7d4d1 100644
--- a/meta-agl-bsp/meta-ti/recipes-kernel/linux/linux-ti-staging_%.bbappend
+++ b/meta-agl-bsp/meta-ti-bsp/recipes-kernel/linux/linux-bb.org_%.bbappend
diff --git a/meta-agl-bsp/meta-qcom/recipes-kernel/linux/linux-linaro-qcomlt_%.bbappend b/meta-agl-bsp/meta-ti-bsp/recipes-kernel/linux/linux-ti-staging_%.bbappend
index b60201986..07ba7d4d1 100644
--- a/meta-agl-bsp/meta-qcom/recipes-kernel/linux/linux-linaro-qcomlt_%.bbappend
+++ b/meta-agl-bsp/meta-ti-bsp/recipes-kernel/linux/linux-ti-staging_%.bbappend
@@ -1 +1,2 @@
require recipes-kernel/linux/linux-agl-config.inc
+
diff --git a/meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0001-Add-soc-performance-monitor-utilites.patch b/meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0001-Add-soc-performance-monitor-utilites.patch
deleted file mode 100644
index 4268b7dc2..000000000
--- a/meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0001-Add-soc-performance-monitor-utilites.patch
+++ /dev/null
@@ -1,3570 +0,0 @@
-From 7830118ecb980766f4a6e3997769d7ae326bee77 Mon Sep 17 00:00:00 2001
-From: Karthik Ramanan <a0393906@ti.com>
-Date: Fri, 3 Jun 2016 18:32:50 +0530
-Subject: [PATCH] Add soc performance monitor utilites
-
-Signed-off-by: Karthik Ramanan <a0393906@ti.com>
----
- Makefile.am | 17 +-
- clients/Dra7xx_ddrstat_speed.c | 494 +++++++++++++
- clients/soc_performance_monitor.c | 630 ++++++++++++++++
- clients/soc_performance_monitor.h | 40 ++
- clients/statcoll.c | 1433 +++++++++++++++++++++++++++++++++++++
- clients/statcoll.h | 152 ++++
- clients/statcoll_gui.h | 101 +++
- clients/time_bar_graph.c | 515 +++++++++++++
- clients/time_bar_graph.h | 93 +++
- 10 files changed, 4873 insertions(+), 1 deletion(-)
- create mode 100644 clients/Dra7xx_ddrstat_speed.c
- create mode 100644 clients/soc_performance_monitor.c
- create mode 100644 clients/soc_performance_monitor.h
- create mode 100644 clients/statcoll.c
- create mode 100644 clients/statcoll.h
- create mode 100644 clients/statcoll_gui.h
- create mode 100644 clients/time_bar_graph.c
- create mode 100644 clients/time_bar_graph.h
-
-diff --git a/Makefile.am b/Makefile.am
-index 62719c9..55aed6d 100644
---- a/Makefile.am
-+++ b/Makefile.am
-@@ -432,7 +432,9 @@ demo_clients = \
- weston-fullscreen \
- weston-stacking \
- weston-calibrator \
-- weston-scaler
-+ weston-scaler \
-+ soc-performance-monitor \
-+ soc-ddr-bw-visualizer
-
- if INSTALL_DEMO_CLIENTS
- bin_PROGRAMS += $(demo_clients)
-@@ -570,6 +572,19 @@ weston_image_SOURCES = clients/image.c
- weston_image_LDADD = libtoytoolkit.la
- weston_image_CFLAGS = $(AM_CFLAGS) $(CLIENT_CFLAGS)
-
-+noinst_LTLIBRARIES += libtimebargraph.la
-+libtimebargraph_la_SOURCES = clients/time_bar_graph.c clients/time_bar_graph.h
-+libtimebargraph_la_LIBADD = libtoytoolkit.la
-+libtimebargraph_la_CFLAGS = $(AM_CFLAGS) $(CLIENT_CFLAGS) $(CAIRO_CFLAGS) $(CAIRO_EGL_CFLAGS)
-+
-+soc_performance_monitor_SOURCES = clients/soc_performance_monitor.c clients/soc_performance_monitor.h
-+soc_performance_monitor_LDADD = libtoytoolkit.la libtimebargraph.la
-+soc_performance__CFLAGS = $(AM_CFLAGS) $(CLIENT_CFLAGS)
-+
-+soc_ddr_bw_visualizer_SOURCES = clients/statcoll.c clients/Dra7xx_ddrstat_speed.c clients/statcoll.h clients/statcoll_gui.h
-+soc_ddr_bw_visualizer_LDADD = libtoytoolkit.la libtimebargraph.la
-+soc_ddr_bw_visualizer__CFLAGS = $(AM_CFLAGS) $(CLIENT_CFLAGS)
-+
- weston_cliptest_SOURCES = \
- clients/cliptest.c \
- src/vertex-clipping.c \
-diff --git a/clients/Dra7xx_ddrstat_speed.c b/clients/Dra7xx_ddrstat_speed.c
-new file mode 100644
-index 0000000..af06733
---- /dev/null
-+++ b/clients/Dra7xx_ddrstat_speed.c
-@@ -0,0 +1,494 @@
-+/*
-+ * Copyright (C) 2015 Texas Instruments
-+ * Author: Karthik Ramanan <karthik.ramanan@ti.com>
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License version 2 as published by
-+ * the Free Software Foundation.
-+ *
-+ * This program is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
-+ * more details.
-+ *
-+ * You should have received a copy of the GNU General Public License along with
-+ * this program. If not, see <http://www.gnu.org/licenses/>.
-+ */
-+
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <stdint.h>
-+#include <string.h>
-+#include <sys/mman.h>
-+#include <sys/time.h>
-+#include <unistd.h>
-+#include <fcntl.h>
-+#include "statcoll.h"
-+
-+#define PAGE_SIZE 4096
-+
-+#define EMIF1_BASE 0x4c000000
-+#define EMIF2_BASE 0x4d000000
-+
-+#define EMIF_PERF_CNT_1 0x80
-+#define EMIF_PERF_CNT_2 0x84
-+#define EMIF_PERF_CNT_CFG 0x88
-+#define EMIF_PERF_CNT_TIM 0x90
-+
-+static unsigned
-+tv_diff(struct timeval *tv1, struct timeval *tv2)
-+{
-+ return (tv2->tv_sec - tv1->tv_sec) * 1000000 +
-+ (tv2->tv_usec - tv1->tv_usec);
-+}
-+
-+
-+struct emif_perf {
-+ int code;
-+ const char *name;
-+};
-+
-+static const struct emif_perf emif_perf_tab[] = {
-+ { 0, "access" },
-+ { 1, "activate" },
-+ { 2, "read" },
-+ { 3, "write" },
-+ { 4, "fifo_cmd" },
-+ { 5, "fifo_write" },
-+ { 6, "fifo_read" },
-+ { 7, "fifo_ret" },
-+ { 8, "prio" },
-+ { 9, "cmd_pend" },
-+ { 10, "data" },
-+};
-+
-+static void *emif1, *emif2;
-+static int BANDWIDTH=0;
-+static int DELAY = 1;
-+static int EMIF_PERF_CFG1 = 9;
-+static int EMIF_PERF_CFG2 = 10;
-+
-+
-+static int STATCOLL=0;
-+static int TOTAL_TIME;
-+static int INTERVAL_US;
-+
-+struct timeval t1, t2;
-+
-+FILE* outfile;
-+struct emif_stats {
-+ uint32_t cycles;
-+ uint32_t cnt1;
-+ uint32_t cnt2;
-+};
-+
-+static struct emif_stats emif1_start, emif1_end;
-+static struct emif_stats emif2_start, emif2_end;
-+
-+static void *emif_init(int fd, unsigned base)
-+{
-+ void *mem =
-+ mmap(NULL, PAGE_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, base);
-+ volatile uint32_t *emif = mem,temp;
-+
-+ if (mem == MAP_FAILED){
-+ return NULL;
-+ }
-+
-+ emif[EMIF_PERF_CNT_CFG>>2] = EMIF_PERF_CFG2 << 16 | EMIF_PERF_CFG1;
-+
-+ return mem;
-+}
-+
-+static void emif_read(volatile uint32_t *emif, struct emif_stats *st)
-+{
-+ st->cycles = emif[EMIF_PERF_CNT_TIM>>2];
-+ st->cnt1 = emif[EMIF_PERF_CNT_1>>2];
-+ st->cnt2 = emif[EMIF_PERF_CNT_2>>2];
-+}
-+
-+static void emif_print(const char *tag, struct emif_stats *st1,
-+ struct emif_stats *st2)
-+{
-+ uint32_t cycles = st2->cycles - st1->cycles;
-+ uint32_t cnt1 = st2->cnt1 - st1->cnt1;
-+ uint32_t cnt2 = st2->cnt2 - st1->cnt2;
-+ printf("%s %s %2llu%% %s %2llu%%", tag,
-+ emif_perf_tab[EMIF_PERF_CFG1].name, 100ull*cnt1/cycles,
-+ emif_perf_tab[EMIF_PERF_CFG2].name, 100ull*cnt2/cycles);
-+ fprintf(outfile,"%s%s= %2llu,%s%s= %2llu,",
-+ tag, emif_perf_tab[EMIF_PERF_CFG1].name, 100ull*cnt1/cycles,
-+ tag, emif_perf_tab[EMIF_PERF_CFG2].name, 100ull*cnt2/cycles);
-+}
-+
-+static int perf_init(void)
-+{
-+ int fd = open("/dev/mem", O_RDWR);
-+ int err = 0;
-+
-+ if (fd == -1){
-+ printf("error fd=open() \n");
-+ return -1;
-+ }
-+ emif1 = emif_init(fd, EMIF1_BASE);
-+ emif2 = emif_init(fd, EMIF2_BASE);
-+
-+ if (!emif1 || !emif2){
-+ printf("error if (!emif1 || !emif2) \n");
-+ err = -1;
-+ }
-+
-+ close(fd);
-+ return err;
-+}
-+
-+static void perf_start(void)
-+{
-+ if (emif1) {
-+ emif_read(emif1, &emif1_start);
-+ emif_read(emif2, &emif2_start);
-+ }
-+}
-+
-+static void perf_stop(void)
-+{
-+ if (emif1) {
-+ emif_read(emif1, &emif1_end);
-+ emif_read(emif2, &emif2_end);
-+ }
-+}
-+
-+static void perf_print(void)
-+{
-+ if (emif1) {
-+ emif_print("EMIF1", &emif1_start, &emif1_end);
-+ printf("\t");
-+ emif_print("EMIF2", &emif2_start, &emif2_end);
-+ printf("\r");
-+ fprintf(outfile, "\n");
-+ fflush(outfile);
-+ fflush(stdout);
-+ }
-+}
-+
-+static void perf_close(void)
-+{
-+ if (emif1) munmap(emif1, PAGE_SIZE);
-+ if (emif2) munmap(emif2, PAGE_SIZE);
-+}
-+
-+static int get_cfg(const char *name, int def)
-+{
-+ char *end;
-+ int n = strtol(name, &end, 0);
-+ int i;
-+
-+ if (!*end)
-+ return n;
-+
-+ for (i = 0; i < sizeof(emif_perf_tab)/sizeof(emif_perf_tab[0]); i++)
-+ if (!strcmp(name, emif_perf_tab[i].name))
-+ return emif_perf_tab[i].code;
-+
-+ return def;
-+}
-+
-+
-+unsigned int emif_freq()
-+{
-+ volatile unsigned *tim1;
-+ unsigned v1, v2;
-+ int fd;
-+
-+ /*calculation EMIF frequency
-+ EMIF_PERF_CNT_TIM = \n32-bit counter that
-+ continuously counts number for
-+ EMIF_FCLK clock cycles elapsed
-+ after EMIFis brought out of reset*/
-+
-+ fd = open("/dev/mem", O_RDONLY);
-+ if (fd == -1) {
-+ perror("/dev/mem");
-+ return 1;
-+ }
-+
-+ void *mem =
-+ mem = mmap(NULL, PAGE_SIZE, PROT_READ, MAP_SHARED, fd, EMIF1_BASE);
-+ if (mem == MAP_FAILED) {
-+ perror("mmap");
-+ exit(1);
-+ }
-+
-+ tim1 = (unsigned *)((char*)mem + EMIF_PERF_CNT_TIM);
-+
-+ v1 = *tim1;
-+ gettimeofday(&t1, NULL);
-+ sleep(2);
-+ v2 = *tim1;
-+ gettimeofday(&t2, NULL);
-+
-+ munmap(mem, PAGE_SIZE);
-+ close(fd);
-+
-+ return (v2 - v1) / tv_diff(&t1, &t2);
-+
-+}
-+
-+
-+char config_file_path[100];
-+char keylist[][50] = {
-+ "DELAY",
-+ "EMIF_PERF_CFG1",
-+ "EMIF_PERF_CFG2",
-+ "BANDWIDTH",
-+ "STATCOLL",
-+ "TOTAL_TIME",
-+ "INTERVAL_US",
-+ "INITIATORS",
-+};
-+
-+char line[512], *p;
-+char tokens[6][512];
-+int temp, flag = 0;
-+char *keyvalue, *pair;
-+char key[100];
-+int linecount=0;
-+
-+
-+int debug=0;
-+
-+void print_valid_options(void)
-+{
-+ int i;
-+ printf("Invalid key found\n");
-+ printf("Supported keys are :\n");
-+ for(i=0; i<sizeof(keylist)/sizeof(keylist[0]); i++)
-+ printf("\t\t %s\n", keylist[i]);
-+
-+}
-+int validatekey(char *ptr)
-+{
-+ int i;
-+ for(i=0; i<sizeof(keylist)/sizeof(keylist[0]); i++)
-+ if(strcmp(ptr, keylist[i]) == 0)
-+ return 0;
-+
-+ return 1;
-+}
-+
-+void add_key_value(char *key, int value)
-+{
-+ printd("%s", "Inside add_key_value\n");
-+
-+ if(strcmp(key, "BANDWIDTH") == 0) {
-+ BANDWIDTH = value;
-+ return;
-+ }
-+ if(strcmp(key, "STATCOLL") == 0) {
-+ STATCOLL = value;
-+ return;
-+ }
-+ else
-+ printd("%s", "********** UNKNOWN**********");
-+
-+ if(BANDWIDTH == 1) {
-+ if(strcmp(key, "DELAY") == 0)
-+ DELAY = value;
-+ else if(strcmp(key, "EMIF_PERF_CFG1") == 0)
-+ EMIF_PERF_CFG1 = value;
-+ else if(strcmp(key, "EMIF_PERF_CFG2") == 0)
-+ EMIF_PERF_CFG2 = value;
-+ }
-+ else
-+ printf("NOTE: BANDWIDTH is not enabled, ignoring %s\n", key);
-+
-+
-+ if(STATCOLL == 1) {
-+ if(strcmp(key, "INTERVAL_US") == 0)
-+ INTERVAL_US = value;
-+ else if(strcmp(key, "TOTAL_TIME") == 0)
-+ TOTAL_TIME = value;
-+ }
-+ else
-+ printf("NOTE: STATCOLL is not enabled, ignoring %s\n", key);
-+}
-+
-+void bandwidth_usage() {
-+
-+ printf("#########################################################\n##\n"
-+
-+ "## usage : ./Dra7xx_ddrstat <DELAY> <EMIF_PERF_CFG1> <EMIF_PERF_CFG2> \n"
-+ "## default : DELAY=1 EMIF_PERF_CFG1=9 EMIF_PERF_CFG2=10\n"
-+ "## option : for EMIF_PERF_CFG1 and EMIF_PERF_CFG2\n"
-+ "## 0 -> access,\n"
-+ "## 1 -> activate,\n"
-+ "## 2 -> read,\n"
-+ "## 3 -> write,\n"
-+ "## 4 -> fifo_cmd,\n"
-+ "## 5 -> fifo_write,\n"
-+ "## 6 -> fifo_read,\n"
-+ "## 7 -> fifo_ret,\n"
-+ "## 8 -> prio,\n"
-+ "## 9 -> cmd_pend,\n"
-+ "## 10 -> data \n##\n"
-+
-+ "## EMIF frq : %d MHz\n\n", emif_freq() );
-+}
-+
-+
-+int main(int argc, char **argv)
-+{
-+ int option;
-+ FILE *fp;
-+ int i;
-+ int xpos = 600, ypos = 40;
-+
-+
-+ /* Read config file */
-+ /* Initialize this to turn off verbosity of getopt */
-+ opterr = 0;
-+
-+// while ((option = getopt (argc, argv, "df:")) != -1)
-+ while ((option = getopt (argc, argv, "dx:y:")) != -1)
-+ {
-+ switch(option)
-+ {
-+#if 0
-+ case 'f':
-+ strcpy(config_file_path, optarg);
-+ break;
-+#endif
-+ case 'd':
-+ debug=1;
-+ break;
-+ case 'x':
-+ xpos=atoi(optarg);
-+ break;
-+ case 'y':
-+ ypos=atoi(optarg);
-+ break;
-+
-+ default:
-+ printf("Invalid option.. Exiting\n");
-+ exit(0);
-+ }
-+ }
-+
-+ printf("xpos = %d, ypos = %d\n", xpos, ypos);
-+
-+ strcpy(config_file_path,"config.ini");
-+ fp = fopen(config_file_path, "r");
-+ if (fp == NULL) {
-+ fprintf(stderr, "couldn't open the specified file\n");
-+ return -1;
-+ }
-+
-+ while (fgets(line, sizeof line, fp)) {
-+ printd("Line is = %s", line);
-+
-+ if (line[0] == '#' || line[0] == '\n') {
-+ continue;
-+ }
-+
-+ memset(tokens, 0, sizeof(tokens));
-+ i = 0;
-+
-+ pair = strtok (line," ,");
-+ while (pair != NULL)
-+ {
-+ printd ("\tPair is = %s\n",pair);
-+ strcpy(tokens[i++], pair);
-+ pair = strtok (NULL, " ,.-");
-+ }
-+
-+ for(temp=0; temp< i; temp++)
-+ {
-+ printd("Line %d: %s\n", temp, tokens[temp]);
-+
-+ keyvalue = strtok (tokens[temp]," =");
-+ while (keyvalue != NULL)
-+ {
-+ if(flag == 0)
-+ {
-+ if(validatekey(keyvalue))
-+ {
-+ print_valid_options();
-+ exit(0);
-+ }
-+ strcpy(key, keyvalue);
-+ printd ("\tKey is = %s\n",key);
-+ flag++;
-+ }
-+ else
-+ {
-+ printd ("\tValue is = %s",keyvalue);
-+ printd (" (%d)\n", atoi(keyvalue));
-+ add_key_value(key, atoi(keyvalue));
-+ flag = 0;
-+ }
-+ keyvalue = strtok (NULL, " =");
-+ }
-+ }
-+
-+
-+
-+ linecount++;
-+ printd("%s", "------------------- \n");
-+
-+ }
-+
-+ fclose(fp);
-+
-+ printf("\n\nCOMPLETED: Parsing of the user specified parameters.. \n \
-+ \nConfiguring device now.. \n\n");
-+ if(BANDWIDTH == 1) {
-+ bandwidth_usage();
-+ if (DELAY <= 0)
-+ DELAY = 1;
-+
-+ if (perf_init()){
-+ printf("perf_init return non zero \n");
-+ return 1;
-+ }
-+
-+ outfile = fopen("emif-performance.csv", "w+");
-+ if (!outfile) {
-+ printf("\n Error opening file");
-+ }
-+ for (;;) {
-+ perf_start();
-+ sleep(DELAY);
-+ perf_stop();
-+ perf_print();
-+ }
-+
-+ fclose(outfile);
-+ perf_close();
-+ return 0;
-+ }
-+
-+ if(STATCOLL == 1) {
-+ printf("STATISTICS COLLECTOR option chosen\n");
-+ printf("------------------------------------------------\n\n");
-+ fp = fopen("initiators.cfg", "r");
-+ if (fp == NULL) {
-+ fprintf(stderr, "couldn't open the specified file initiators.cfg'\n");
-+ return -1;
-+ }
-+
-+ int i=0;
-+ char list[100][50];
-+ memset(list, sizeof(list), 0);
-+ while (fgets(line, sizeof line, fp)) {
-+ printf("Line is = %s", line);
-+ /* Slightly strange way to chop off the \n character */
-+ strtok(line, "\n");
-+ strcpy(list[i++], line);
-+ }
-+ fclose(fp);
-+
-+ statcoll_start(TOTAL_TIME, INTERVAL_US, list, xpos, ypos);
-+ }
-+
-+}
-+
-diff --git a/clients/soc_performance_monitor.c b/clients/soc_performance_monitor.c
-new file mode 100644
-index 0000000..5d1db32
---- /dev/null
-+++ b/clients/soc_performance_monitor.c
-@@ -0,0 +1,630 @@
-+/*
-+ * Copyright (C) 2016 Texas Instruments
-+ * Author: Karthik Ramanan <karthik.ramanan@ti.com>
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License version 2 as published by
-+ * the Free Software Foundation.
-+ *
-+ * This program is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
-+ * more details.
-+ *
-+ * You should have received a copy of the GNU General Public License along with
-+ * this program. If not, see <http://www.gnu.org/licenses/>.
-+ */
-+
-+#include <stdint.h>
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <string.h>
-+#include <stdint.h>
-+#include <signal.h>
-+#include <time.h>
-+#include <math.h>
-+#include <unistd.h>
-+#include <sys/time.h>
-+#include <pthread.h>
-+#include <errno.h>
-+#include <unistd.h>
-+#include <fcntl.h>
-+#include <sys/stat.h>
-+
-+#include "time_bar_graph.h"
-+
-+#include "soc_performance_monitor.h"
-+
-+static int debug=0;
-+
-+static char readfifo[100];
-+static int MAX_WIDTH=1920;
-+static int MAX_HEIGHT=1080;
-+static int x_pos=0;
-+static int y_pos=40;
-+
-+void *ctx;
-+struct time_graph_create_params tg_p;
-+struct bar_graph_create_params bg_p;
-+
-+static int cpu_load_offset = 0;
-+static int total_cpu_load_items = 0;
-+static int total_elements = 0;
-+
-+struct _bar_graph_y_config *y_cfg;
-+struct _text_config *t_cfg;
-+char *tg_text[100];
-+char *bg_text[100];
-+
-+
-+int command_handler(int command, double *y, char **text)
-+{
-+ static int fd;
-+ char buf[MAX_BUF];
-+ int i, bytes, offset;
-+
-+ switch(command)
-+ {
-+ case OPEN:
-+ fd = open(readfifo, O_RDONLY|O_NONBLOCK);
-+ break;
-+
-+ case READ:
-+
-+ /* open, read, and display the message from the FIFO */
-+ bytes=read(fd, buf, MAX_BUF);
-+ buf[bytes]='\0';
-+ if(bytes > 0)
-+ {
-+ char command[100];
-+ char string[100];
-+ sscanf(buf, "%s %s", command, string);
-+ printd("Received %s\n", buf);
-+ if(strcmp(command, "TABLE:") == 0)
-+ {
-+ char field[100], value[100], unit[100];
-+ sscanf(buf, "%s %s %s %s", command, field, value, unit);
-+ for(i=0; i<cpu_load_offset; i++) {
-+ if(strcmp(text[i*2], field) == 0) {
-+ printd("Updating value(%s), unit(%s)\n", value, unit);
-+ sprintf(text[i*2+1], "%s %s", value, unit);
-+ }
-+ }
-+ }
-+ else if(strcmp(command, "CPULOAD:") == 0)
-+ {
-+ char field[100], value[100];
-+
-+ sscanf(buf, "%s %s %s", command, field, value);
-+
-+ for(i=cpu_load_offset; i<cpu_load_offset+total_cpu_load_items; i++) {
-+ if(strcmp(text[i*2], field) == 0) {
-+ if(strlen(value) <= 2) {
-+ y[i*2+1] = atoi(value)/100.0;
-+ sprintf(text[i*2+1], " %02s%s", value,"%");
-+ printd("CPULOAD: Updating %s with %s\n", field, value);
-+ }
-+ else {
-+ printf("Ignoring value: %s\n", value);
-+ }
-+ }
-+ }
-+ }
-+ else if(strcmp(command, "MOVE:") == 0)
-+ {
-+ char value[100];
-+ printd("Received MOVE command : %s\n", buf);
-+ sscanf(string, "%s", value);
-+ sprintf(tg_p.title, "CPU Usage[@position-req=%sx%d]", value, y_pos);
-+ move_graph(ctx, &tg_p);
-+ }
-+ else
-+ {
-+ printf("ERROR: Received unexpected data from FIFO - \" %s \" \n", buf);
-+ }
-+ memset(buf, 0x0, sizeof(buf));
-+ }
-+
-+ break;
-+
-+ case CLOSE:
-+ close(fd);
-+ break;
-+ }
-+ return bytes;
-+}
-+
-+volatile sig_atomic_t sigtermed = 0;
-+
-+void my_signal_handler(int signum)
-+{
-+ if (signum == SIGTERM || signum == SIGINT) {
-+ sigtermed = 1;
-+ }
-+}
-+
-+int get_strings_in_section(char *string, char **output)
-+{
-+ FILE *fd;
-+ char line[512];
-+ int total_strings = 0;
-+
-+ fd = fopen("soc_performance_monitor.cfg", "r");
-+ if(fd == NULL) {
-+ fprintf(stderr, "ERROR: Unable to open file soc_performance_monitor.cfg\n");
-+ fprintf(stderr, " Please copy the file from /etc/visualization_scripts into current directory\n");
-+ exit(0);
-+ }
-+
-+ while(fgets(line, sizeof line, fd)) {
-+ if(strstr(line, string)) {
-+ printf("\n-------------------------------------------------\n");
-+ printf("CONFIG FILE PARSE: Found section %s in line : %s\n", string, line);
-+ break;
-+ }
-+ }
-+
-+ while(fgets(line, sizeof line, fd)) {
-+ printd("Line is = %s", line);
-+
-+ if (line[0] == '#' || line[0] == '\n' || line[0] == '[') {
-+ break;
-+ }
-+
-+ line[strlen(line) - 1] = '\0';
-+ strcpy(output[total_strings++], line);
-+
-+ }
-+ fclose(fd);
-+
-+ return total_strings;
-+}
-+
-+
-+void fill_cpu_load_details(int start_offset, int end_offset, char **output, struct table_configuration *table_config)
-+{
-+ int i;
-+
-+ const int BL_START_X = table_config->BL_START_X;
-+ const int BL_START_Y = table_config->BL_START_Y;
-+ const int BAR_GAP = table_config->BAR_GAP;
-+ const int BAR_HEIGHT = table_config->BAR_HEIGHT;
-+ const int BAR_WIDTH = table_config->BAR_WIDTH;
-+ const int TR_START_X = table_config->TR_START_X;
-+ const int TR_START_Y = table_config->TR_START_Y;
-+ const int FONT_SIZE = table_config->FONT_SIZE;
-+ printf("Filling from %d to %d\n", start_offset, end_offset);
-+ cpu_load_offset = start_offset;
-+
-+ for(i=start_offset; i< end_offset-1; i++) {
-+ y_cfg[i*2].region.bottom_left.x = BL_START_X + (i-start_offset) * (BAR_GAP + BAR_WIDTH);
-+ y_cfg[i*2].region.bottom_left.y = BL_START_Y;
-+ y_cfg[i*2].region.top_right.x = TR_START_X + (i-start_offset) * (BAR_GAP + BAR_WIDTH);
-+ y_cfg[i*2].region.top_right.y = TR_START_Y;
-+ y_cfg[i*2].line_color.r = 1.0;
-+ y_cfg[i*2].line_color.g = 1.0;
-+ y_cfg[i*2].line_color.b = 1.0;
-+ y_cfg[i*2].line_color.a = 1.0;
-+ y_cfg[i*2].fill_color.r = 0.0;
-+ y_cfg[i*2].fill_color.g = 0.0;
-+ y_cfg[i*2].fill_color.b = 1.0;
-+ y_cfg[i*2].fill_color.a = 0.7;
-+
-+ y_cfg[i*2+1].region.bottom_left.x = BL_START_X +(i-start_offset) * (BAR_GAP + BAR_WIDTH);
-+ y_cfg[i*2+1].region.bottom_left.y = BL_START_Y;
-+ y_cfg[i*2+1].region.top_right.x = TR_START_X + (i-start_offset) * (BAR_GAP + BAR_WIDTH);
-+ y_cfg[i*2+1].region.top_right.y = TR_START_Y;
-+ y_cfg[i*2+1].line_color.r = 1.0;
-+ y_cfg[i*2+1].line_color.g = 1.0;
-+ y_cfg[i*2+1].line_color.b = 1.0;
-+ y_cfg[i*2+1].line_color.a = 1.0;
-+ y_cfg[i*2+1].fill_color.r = 1.0;
-+ y_cfg[i*2+1].fill_color.g = 0.0;
-+ y_cfg[i*2+1].fill_color.b = 0.0;
-+ y_cfg[i*2+1].fill_color.a = 1.0;
-+
-+
-+ t_cfg[i*2].color.r = 1.0;
-+ t_cfg[i*2].color.g = 1.0;
-+ t_cfg[i*2].color.b = 1.0;
-+ t_cfg[i*2].color.a = 1.0;
-+ t_cfg[i*2].at.x = BL_START_X + (i-start_offset) * (BAR_GAP + BAR_WIDTH);
-+ t_cfg[i*2].at.y = BL_START_Y + FONT_SIZE;
-+ t_cfg[i*2].fontsize = FONT_SIZE;
-+
-+ t_cfg[i*2+1].color.r = 1.0;
-+ t_cfg[i*2+1].color.g = 1.0;
-+ t_cfg[i*2+1].color.b = 1.0;
-+ t_cfg[i*2+1].color.a = 1.0;
-+ t_cfg[i*2+1].at.x = BL_START_X + (i-start_offset) * (BAR_GAP + BAR_WIDTH);
-+ t_cfg[i*2+1].at.y = BL_START_Y - BAR_HEIGHT - FONT_SIZE;
-+ t_cfg[i*2+1].fontsize = FONT_SIZE;
-+
-+ strcpy(bg_text[i*2], output[i - start_offset]);
-+ strcpy(bg_text[i*2+1], "0%");
-+ }
-+
-+ t_cfg[(end_offset-1)*2].color.r = 0.0;
-+ t_cfg[(end_offset-1)*2].color.g = 1.0;
-+ t_cfg[(end_offset-1)*2].color.b = 1.0;
-+ t_cfg[(end_offset-1)*2].color.a = 1.0;
-+ t_cfg[(end_offset-1)*2].at.x = BL_START_X + 80;
-+ t_cfg[(end_offset-1)*2].at.y = TR_START_Y - 40;
-+ t_cfg[(end_offset-1)*2].fontsize = FONT_SIZE + 3;
-+
-+ printd("Copying title string %s\n", output[end_offset - start_offset -1]);
-+ strcpy(bg_text[(end_offset-1)*2], output[end_offset - start_offset-1]);
-+}
-+
-+void fill_table_details(int start_offset, int end_offset, char **output, struct table_configuration *table_config)
-+{
-+ int i;
-+
-+ const int BL_START_X = table_config->BL_START_X;
-+ const int BL_START_Y = table_config->BL_START_Y;
-+ const int BAR_GAP = table_config->BAR_GAP;
-+ const int BAR_HEIGHT = table_config->BAR_HEIGHT;
-+ const int BAR_WIDTH = table_config->BAR_WIDTH;
-+ const int TR_START_X = table_config->TR_START_X;
-+ const int TR_START_Y = table_config->TR_START_Y;
-+ const int FONT_SIZE = table_config->FONT_SIZE;
-+ printf("Filling from %d to %d\n", start_offset, end_offset);
-+
-+
-+ char tokenize[200];
-+ char tokens[10][100];
-+ char *pair, *key, *value;
-+ int k=0;
-+ char title[100], unit[100];
-+
-+ strcpy(tokenize, output[end_offset - start_offset - 1]);
-+ memset(tokens, 0, sizeof(tokens));
-+
-+ k=0;
-+ pair = strtok (tokenize,",");
-+ while (pair != NULL) {
-+ strcpy(tokens[k++], pair);
-+ pair = strtok (NULL, ",");
-+ }
-+
-+ i=0;
-+ memset(title, 0, sizeof(title));
-+ memset(unit, 0, sizeof(unit));
-+ while(i < k) {
-+ key=strtok(tokens[i], "=");
-+ if(key != NULL) {
-+ if(strcmp(key,"TITLE") == 0) {
-+ value = strtok(NULL, "=");
-+ if(value != NULL) {
-+ strcpy(title, value);
-+ }
-+ }
-+ if(strcmp(key,"UNIT") == 0) {
-+ value = strtok(NULL, "=");
-+ if(value != NULL) {
-+ strcpy(unit, value);
-+ }
-+ }
-+ }
-+ i++;
-+ }
-+
-+ for(i=start_offset; i< end_offset-1; i++) {
-+ y_cfg[i*2].region.bottom_left.x = BL_START_X;
-+ y_cfg[i*2].region.bottom_left.y = BL_START_Y + (i - start_offset) * (BAR_GAP + BAR_HEIGHT);
-+ y_cfg[i*2].region.top_right.x = TR_START_X;
-+ y_cfg[i*2].region.top_right.y = TR_START_Y + (i - start_offset) * (BAR_GAP + BAR_HEIGHT);
-+ y_cfg[i*2].line_color.r = 1.0;
-+ y_cfg[i*2].line_color.g = 1.0;
-+ y_cfg[i*2].line_color.b = 1.0;
-+ y_cfg[i*2].line_color.a = 1.0;
-+ y_cfg[i*2].fill_color.r = 0.0;
-+ y_cfg[i*2].fill_color.g = 0.3;
-+ y_cfg[i*2].fill_color.b = 0.0;
-+ y_cfg[i*2].fill_color.a = 0.7;
-+
-+ y_cfg[i*2+1].region.bottom_left.x = TR_START_X;
-+ y_cfg[i*2+1].region.bottom_left.y = BL_START_Y + (i - start_offset) * (BAR_GAP + BAR_HEIGHT);
-+ y_cfg[i*2+1].region.top_right.x = TR_START_X + (BAR_WIDTH); //+ 1 * BL_START_X;
-+ y_cfg[i*2+1].region.top_right.y = TR_START_Y + (i - start_offset) * (BAR_GAP + BAR_HEIGHT);;
-+ y_cfg[i*2+1].line_color.r = 1.0;
-+ y_cfg[i*2+1].line_color.g = 1.0;
-+ y_cfg[i*2+1].line_color.b = 1.0;
-+ y_cfg[i*2+1].line_color.a = 1.0;
-+ y_cfg[i*2+1].fill_color.r = 0.3;
-+ y_cfg[i*2+1].fill_color.g = 0.0;
-+ y_cfg[i*2+1].fill_color.b = 0.0;
-+ y_cfg[i*2+1].fill_color.a = 0.7;
-+
-+
-+ t_cfg[i*2].color.r = 1.0;
-+ t_cfg[i*2].color.g = 1.0;
-+ t_cfg[i*2].color.b = 1.0;
-+ t_cfg[i*2].color.a = 1.0;
-+ t_cfg[i*2].at.x = BL_START_X + 5;
-+ t_cfg[i*2].at.y = BL_START_Y + (i - start_offset) * (BAR_GAP+BAR_HEIGHT) -5;
-+ t_cfg[i*2].fontsize = FONT_SIZE;
-+
-+ t_cfg[i*2+1].color.r = 1.0;
-+ t_cfg[i*2+1].color.g = 1.0;
-+ t_cfg[i*2+1].color.b = 1.0;
-+ t_cfg[i*2+1].color.a = 1.0;
-+ t_cfg[i*2+1].at.x = TR_START_X + 50;//BAR_WIDTH + TR_START_X;
-+ t_cfg[i*2+1].at.y = BL_START_Y + (i - start_offset) * (BAR_GAP + BAR_HEIGHT) -5;
-+ t_cfg[i*2+1].fontsize = FONT_SIZE;
-+
-+ printd("Copying string %s at %d\n", output[i-start_offset], i);
-+ strcpy(bg_text[i*2], output[i-start_offset]);
-+ printd("Setting text 0 %s at %d\n", unit, i*2+1);
-+ sprintf(bg_text[i*2+1], "0 %s", unit);
-+ }
-+ for(i=start_offset; i< end_offset*2; i++) {
-+ printd("%d - (%d, %d) to (%d, %d)\n", i, y_cfg[i].region.bottom_left.x, y_cfg[i].region.bottom_left.y, y_cfg[i].region.top_right.x, y_cfg[i].region.top_right.y);
-+ }
-+
-+ t_cfg[(end_offset-1)*2].color.r = 0.0;
-+ t_cfg[(end_offset-1)*2].color.g = 1.0;
-+ t_cfg[(end_offset-1)*2].color.b = 1.0;
-+ t_cfg[(end_offset-1)*2].color.a = 1.0;
-+ t_cfg[(end_offset-1)*2].at.x = BL_START_X + 80;
-+ t_cfg[(end_offset-1)*2].at.y = BL_START_Y - 40;
-+ t_cfg[(end_offset-1)*2].fontsize = FONT_SIZE + 3;
-+
-+ printd("Copying title string %s\n", title);
-+ strcpy(bg_text[(end_offset-1)*2], title);
-+
-+}
-+
-+
-+int get_key_value_from_string(char *string, char *limiter, char *key, char *value)
-+{
-+ char *mykey, *myvalue;
-+
-+ mykey=strtok(string, limiter);
-+ if(mykey != NULL) {
-+ myvalue = strtok(NULL, "=");
-+ strtok(myvalue, "\n");
-+ if(myvalue == NULL) {
-+ return -1;
-+ }
-+ }
-+ else {
-+ return -1;
-+ }
-+ printd("Key is %s\n", mykey);
-+ printd("Value is %s\n", myvalue);
-+ strcpy(key, mykey);
-+ strcpy(value, myvalue);
-+ return 0;
-+
-+}
-+
-+void populate_table_configuration(struct table_configuration *tbl_cfg, int cur_items, char **item_list)
-+{
-+ static int total_items = 0;
-+ static int total_tables = 0;
-+
-+ tbl_cfg->BAR_HEIGHT = 25;
-+ tbl_cfg->BAR_WIDTH = 150;
-+ tbl_cfg->BL_START_X = 40;
-+ tbl_cfg->BL_START_Y = 80 + (total_items + total_tables) * tbl_cfg->BAR_HEIGHT;
-+ tbl_cfg->BAR_GAP = 0;
-+ tbl_cfg->TR_START_X = tbl_cfg->BL_START_X + tbl_cfg->BAR_WIDTH;
-+ tbl_cfg->TR_START_Y = tbl_cfg->BL_START_Y - tbl_cfg->BAR_HEIGHT;
-+ tbl_cfg->FONT_SIZE = 15;
-+
-+ printf("Proceeding with filling out details...\n");
-+ if(cur_items > 0)
-+ fill_table_details(total_items, total_items+cur_items, item_list, tbl_cfg);
-+
-+ total_items += cur_items;
-+ if(cur_items > 0)
-+ total_tables++;
-+
-+ printf("total_items = %d, total_tables = %d\n", total_items, total_tables);
-+ return;
-+}
-+
-+int fill_list_from_section(char **section_list, char *section_name)
-+{
-+ int total_items, j;
-+
-+ for(j=0; j<20; j++) {
-+ section_list[j] = malloc(100);
-+ }
-+
-+ total_items = get_strings_in_section(section_name, section_list);
-+ printf("\tThe total values in the section %s are %d\n", section_name, total_items);
-+ for(j=0; j<total_items; j++) {
-+ printf("\t\tThe returned strings for BOOT_TIME are %s\n", section_list[j]);
-+ }
-+
-+ total_elements += total_items;
-+
-+ return total_items;
-+}
-+
-+int main(int argc, char *argv[])
-+{
-+ double *bg_y;
-+ double *tg_y;
-+ int i,j;
-+ int refresh_rate;
-+
-+ if (SIG_ERR == signal(SIGPIPE,SIG_IGN))
-+ exit(1);
-+
-+ if (SIG_ERR == signal(SIGINT,my_signal_handler))
-+ exit(1);
-+
-+ if (SIG_ERR == signal(SIGTERM,my_signal_handler))
-+ exit(1);
-+
-+ if(argc == 2) {
-+ printf("Enabling debug\n");
-+ debug = atoi(argv[1]);
-+ }
-+ else {
-+ printf("Debug is disabled\n");
-+ debug = 0;
-+ }
-+
-+ char *output[20];
-+ int total = fill_list_from_section(output, "GLOBAL");
-+ for(j=0; j<total; j++) {
-+ char key[100], value[100];
-+ int ret = get_key_value_from_string(output[j], "=", key, value);
-+ if(ret == 0) {
-+ if(strcmp(key, "FIFO") == 0) {
-+ strcpy(readfifo, value);
-+ }
-+ if(strcmp(key, "REFRESH_RATE_USEC") == 0) {
-+ refresh_rate = atoi(value);
-+ }
-+ if(strcmp(key, "MAX_WIDTH") == 0) {
-+ MAX_WIDTH = atoi(value);
-+ }
-+ if(strcmp(key, "MAX_HEIGHT") == 0) {
-+ MAX_HEIGHT = atoi(value);
-+ }
-+ if(strcmp(key, "X_POS") == 0) {
-+ x_pos = atoi(value);
-+ }
-+ if(strcmp(key, "Y_POS") == 0) {
-+ y_pos = atoi(value);
-+ }
-+ }
-+
-+ }
-+
-+ printf("\n-------------------------------------------------\n");
-+ printf("Configured REFRESH_RATE is %d\n", refresh_rate);
-+ printf("Configured FIFO is %s\n", readfifo);
-+ printf("Configured MAX_WIDTH is %d\n", MAX_WIDTH);
-+ printf("Configured MAX_HEIGHT is %d\n", MAX_HEIGHT);
-+ printf("Configured starting location is (%d, %d)\n", x_pos, y_pos);
-+ printf("\n-------------------------------------------------\n");
-+
-+ int fd = open(readfifo, O_RDONLY|O_NONBLOCK);
-+ if (fd != -1) {
-+ printf("SUCCESS: Configured FIFO exists\n");
-+ close(fd);
-+ }
-+ else {
-+ printf("ERROR: %s not found\nPlease create the fifo by executing mkfifo %s before running the application\n", readfifo, readfifo);
-+ exit(0);
-+ }
-+
-+
-+ bg_p.title = malloc(100);
-+ sprintf(bg_p.title, "CPU Usage[@position-req=%dx%d]", x_pos, y_pos);
-+
-+ /* ------------------------------------------------------------------------*/
-+ /* Section for populating all lists from cfg sections*/
-+ /* ------------------------------------------------------------------------*/
-+ char *boot_list[20];
-+ int total_boot_items = fill_list_from_section(boot_list, "BOOT_TIME");
-+
-+ char *temperature_list[20];
-+ int total_temperature_items = fill_list_from_section(temperature_list, "TEMPERATURE");
-+
-+ char *cpu_load_list[20];
-+ total_cpu_load_items = fill_list_from_section(cpu_load_list, "CPU_LOAD");
-+
-+ char *voltage_list[20];
-+ int total_voltage_items = fill_list_from_section(voltage_list, "VOLTAGE");
-+
-+ char *frequency_list[20];
-+ int total_frequency_items = fill_list_from_section(frequency_list, "FREQUENCY");
-+ /* ------------------------------------------------------------------------*/
-+ /* total_elements will be updated inside the fill_list_from_section function */
-+
-+ t_cfg = malloc(sizeof(struct _text_config) * (total_elements*2 + 1));
-+ y_cfg = malloc(sizeof(struct _bar_graph_y_config) * total_elements*2);
-+ bg_p.num_of_y_items = total_elements*2;
-+ bg_p.y_config_array = y_cfg;
-+ bg_p.num_of_text_items = total_elements*2 + 1;
-+ bg_p.text_config_array = t_cfg;
-+
-+ bg_y = malloc(sizeof(double) * total_elements * 2);
-+ for(i=0; i< (total_elements*2+1); i++) {
-+ bg_text[i] = malloc(150);
-+ bg_y[i] = 1.0;
-+ }
-+
-+ tg_y = malloc(sizeof(double) * total_elements * 2);
-+ for(i=0; i< (total_elements*2+1); i++) {
-+ tg_text[i] = malloc(150);
-+ tg_y[i] = 0.1 * i;
-+ }
-+
-+ struct table_configuration boot_table_config;
-+ populate_table_configuration(&boot_table_config, total_boot_items, boot_list);
-+
-+ struct table_configuration temp_table_config;
-+ populate_table_configuration(&temp_table_config, total_temperature_items, temperature_list);
-+
-+ struct table_configuration voltage_table_config;
-+ populate_table_configuration(&voltage_table_config, total_voltage_items, voltage_list);
-+
-+ struct table_configuration frequency_table_config;
-+ populate_table_configuration(&frequency_table_config, total_frequency_items, frequency_list);
-+
-+ struct table_configuration cpu_load_config;
-+ cpu_load_config.BL_START_X = 40;
-+ cpu_load_config.BL_START_Y = 80 + (total_boot_items + total_temperature_items + total_voltage_items + total_frequency_items+ 4) * boot_table_config.BAR_HEIGHT + 80 /*cpu_load_config.BAR_HEIGHT */;
-+ cpu_load_config.BAR_GAP = 20;
-+ cpu_load_config.BAR_HEIGHT = 80;
-+ cpu_load_config.BAR_WIDTH = 40;
-+ cpu_load_config.TR_START_X = cpu_load_config.BL_START_X + cpu_load_config.BAR_WIDTH;
-+ cpu_load_config.TR_START_Y = cpu_load_config.BL_START_Y - cpu_load_config.BAR_HEIGHT;
-+ cpu_load_config.FONT_SIZE = 15;
-+ if(total_cpu_load_items > 0) {
-+ fill_cpu_load_details(total_boot_items+total_temperature_items+total_voltage_items+total_frequency_items, total_boot_items+total_temperature_items+total_voltage_items+total_frequency_items+total_cpu_load_items, cpu_load_list, &cpu_load_config);
-+ }
-+ else {
-+ cpu_load_offset = total_boot_items + total_temperature_items + total_voltage_items + total_frequency_items;
-+ }
-+
-+ tg_p.title=(char *)malloc(100);
-+ sprintf(tg_p.title, "CPU Usage[@position-req=%dx%d]", x_pos, y_pos);
-+ tg_p.height = MAX_HEIGHT;
-+ tg_p.width = MAX_WIDTH;
-+
-+ struct _y_config *tg_y_cfg = malloc(tg_p.num_of_y_items * sizeof(struct _y_config));
-+ tg_p.y_config_array = tg_y_cfg;
-+ tg_p.text_config_array = t_cfg;
-+
-+ printf("Proceeding to create starting visualization...\n");
-+ ctx = time_graph_create(argc, argv, &tg_p);
-+ if (!ctx) {
-+ printf("Unable to create time_graph... \n");
-+ exit(0);
-+ }
-+
-+ ctx = bar_graph_create(argc, argv, &bg_p);
-+ if (!ctx) {
-+ printf("Error creating context\n");
-+ exit(0);
-+ }
-+
-+ command_handler(OPEN, NULL, NULL);
-+
-+ /* Plot the graph first time */
-+ time_graph_plot(ctx, tg_y, (const char **)tg_text);
-+ bar_graph_plot(ctx, bg_y, (const char **)bg_text);
-+
-+ while (!sigtermed)
-+ {
-+ usleep(refresh_rate);
-+ int bytes_read = command_handler(READ, bg_y, bg_text);
-+ if(bytes_read > 0) {
-+ time_graph_plot(ctx, tg_y, (const char **)tg_text);
-+ bar_graph_plot(ctx, bg_y, (const char **)bg_text);
-+ }
-+ }
-+
-+ bar_graph_destroy(ctx);
-+ command_handler(CLOSE, NULL, NULL);
-+ return 0;
-+}
-diff --git a/clients/soc_performance_monitor.h b/clients/soc_performance_monitor.h
-new file mode 100644
-index 0000000..861c8c7
---- /dev/null
-+++ b/clients/soc_performance_monitor.h
-@@ -0,0 +1,40 @@
-+#define __SLEEP usleep(1000000)
-+
-+#define MAX_BUF 1024
-+#define OPEN 1
-+#define READ 2
-+#define CLOSE 3
-+
-+#define MAX_COLORS 12
-+
-+#define printd(fmt, ...) \
-+ do { if (debug) fprintf(stderr, fmt, __VA_ARGS__); } while (0)
-+
-+
-+struct _rgba pallette[MAX_COLORS] =
-+{
-+ { 1.0, 0.0, 0.0, 1.0 },
-+ { 0.0, 0.5, 0.0, 1.0 },
-+ { 0.0, 0.0, 1.0, 1.0 },
-+ { 0.0, 0.0, 0.0, 1.0 },
-+ { 0.0, 0.5, 1.0, 1.0 },
-+ { 1.0, 0.0, 1.0, 1.0 },
-+ { 0.5, 0.5, 1.0, 1.0 },
-+ { 1.0, 0.5, 0.0, 1.0 },
-+ { 0.5, 0.5, 0.25, 1.0 },
-+ { 0.5, 0.0, 0.0, 1.0 },
-+ { 1.0, 0.5, 0.5, 1.0 },
-+ { 0.0, 0.0, 0.20, 1.0 }
-+};
-+
-+struct table_configuration {
-+ int BL_START_X;
-+ int BL_START_Y;
-+ int BAR_GAP;
-+ int BAR_HEIGHT;
-+ int BAR_WIDTH;
-+ int TR_START_X;
-+ int TR_START_Y;
-+ int FONT_SIZE;
-+};
-+
-diff --git a/clients/statcoll.c b/clients/statcoll.c
-new file mode 100644
-index 0000000..5d5cae7
---- /dev/null
-+++ b/clients/statcoll.c
-@@ -0,0 +1,1433 @@
-+/*
-+ * Copyright (C) 2015 Texas Instruments
-+ * created by prash@ti.com on 16 Jan 2013
-+ * Adapted to Linux with changes in framework: Karthik R <karthik.ramanan@ti.com>
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License version 2 as published by
-+ * the Free Software Foundation.
-+ *
-+ * This program is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
-+ * more details.
-+ *
-+ * You should have received a copy of the GNU General Public License along with
-+ * this program. If not, see <http://www.gnu.org/licenses/>.
-+ */
-+
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <string.h>
-+#include <sys/mman.h>
-+#include <fcntl.h>
-+#include <signal.h>
-+#include <unistd.h>
-+#include <sys/time.h>
-+
-+#include "statcoll.h"
-+#include "statcoll_gui.h"
-+#include "time_bar_graph.h"
-+
-+#define ENABLE_MODE 0x0
-+#define READ_STATUS_MODE 0x1
-+
-+
-+
-+#define OPEN 1
-+#define READ 2
-+#define CLOSE 3
-+
-+
-+#if 1
-+#define __SLEEP sleep(1)
-+#else
-+#define __SLEEP usleep(100000)
-+#endif
-+//#define DUMMY_MODE
-+
-+#define MAX_COLORS 12
-+
-+struct _rgba pallette[MAX_COLORS] =
-+{
-+ { 1.0, 0.0, 0.0, 1.0 },
-+ { 0.0, 0.5, 0.0, 1.0 },
-+ { 0.0, 0.0, 1.0, 1.0 },
-+ { 0.0, 0.0, 0.0, 1.0 },
-+ { 0.0, 0.5, 1.0, 1.0 },
-+ { 1.0, 0.0, 1.0, 1.0 },
-+ { 0.5, 0.5, 1.0, 1.0 },
-+ { 1.0, 0.5, 0.0, 1.0 },
-+ { 0.5, 0.5, 0.25, 1.0 },
-+ { 0.5, 0.0, 0.0, 1.0 },
-+ { 1.0, 0.5, 0.5, 1.0 },
-+ { 0.0, 0.0, 0.20, 1.0 }
-+};
-+
-+const struct list_of_initiators initiators[STATCOL_MAX] =
-+{
-+ { STATCOL_EMIF1_SYS, "STATCOL_EMIF1_SYS" },
-+ { STATCOL_EMIF2_SYS,"STATCOL_EMIF2_SYS" },
-+ { STATCOL_MA_MPU_P1,"STATCOL_MPU_P1" },
-+ { STATCOL_MA_MPU_P2,"STATCOL_MPU_P2" },
-+ { STATCOL_MPU1,"STATCOL_MPU1" },
-+ { STATCOL_MMU1,"STATCOL_MMU1" },
-+ { STATCOL_TPTC_RD1,"STATCOL_TPTC_RD1" },
-+ { STATCOL_TPTC_WR1,"STATCOL_TPTC_WR1" },
-+ { STATCOL_TPTC_RD2,"STATCOL_TPTC_RD2" },
-+ { STATCOL_TPTC_WR2,"STATCOL_TPTC_WR2" },
-+ { STATCOL_VIP1_P1,"STATCOL_VIP1_P1" },
-+ { STATCOL_VIP1_P2,"STATCOL_VIP1_P2" },
-+ { STATCOL_VIP2_P1,"STATCOL_VIP2_P1" },
-+ { STATCOL_VIP2_P2,"STATCOL_VIP2_P2" },
-+ { STATCOL_VIP3_P1,"STATCOL_VIP3_P1" },
-+ { STATCOL_VIP3_P2,"STATCOL_VIP3_P2" },
-+ { STATCOL_VPE_P1,"STATCOL_VPE_P1" },
-+ { STATCOL_VPE_P2,"STATCOL_VPE_P2" },
-+ { STATCOL_EVE1_TC0,"STATCOL_EVE1_TC0" },
-+ { STATCOL_EVE1_TC1,"STATCOL_EVE1_TC1" },
-+ { STATCOL_EVE2_TC0,"STATCOL_EVE2_TC0" },
-+ { STATCOL_EVE2_TC1,"STATCOL_EVE2_TC1" },
-+ { STATCOL_EVE3_TC0,"STATCOL_EVE3_TC0" },
-+ { STATCOL_EVE3_TC1,"STATCOL_EVE3_TC1" },
-+ { STATCOL_EVE4_TC0,"STATCOL_EVE4_TC0" },
-+ { STATCOL_EVE4_TC1,"STATCOL_EVE4_TC1" },
-+ { STATCOL_DSP1_MDMA,"STATCOL_DSP1_MDMA" },
-+ { STATCOL_DSP1_EDMA,"STATCOL_DSP1_EDMA" },
-+ { STATCOL_DSP2_MDMA,"STATCOL_DSP2_MDMA" },
-+ { STATCOL_DSP2_EDMA,"STATCOL_DSP2_EDMA" },
-+ { STATCOL_IVA,"STATCOL_IVA" },
-+ { STATCOL_GPU_P1,"STATCOL_GPU_P1" },
-+ { STATCOL_GPU_P2,"STATCOL_GPU_P2" },
-+ { STATCOL_BB2D_P1,"STATCOL_BB2D_P1" },
-+ { STATCOL_DSS,"STATCOL_DSS" },
-+ { STATCOL_CSI2_2,"STATCOL_CSI2_2" },
-+ { STATCOL_MMU2,"STATCOL_MMU2" },
-+ { STATCOL_IPU1,"STATCOL_IPU1" },
-+ { STATCOL_IPU2,"STATCOL_IPU2" },
-+ { STATCOL_DMA_SYSTEM_RD,"STATCOL_DMA_SYSTEM_RD" },
-+ { STATCOL_DMA_SYSTEM_WR,"STATCOL_DMA_SYSTEM_WR" },
-+ { STATCOL_CSI2_1,"STATCOL_CSI2_1" },
-+ { STATCOL_USB3_SS,"STATCOL_USB3_SS" },
-+ { STATCOL_USB2_SS,"STATCOL_USB2_SS" },
-+ { STATCOL_USB2_ULPI_SS1,"STATCOL_USB2_ULPI_SS1" },
-+ { STATCOL_USB2_ULPI_SS2,"STATCOL_USB2_ULPI_SS2" },
-+ { STATCOL_PCIE_SS1,"STATCOL_PCIE_SS1" },
-+ { STATCOL_PCIE_SS2,"STATCOL_PCIE_SS2" },
-+ { STATCOL_DSP1_CFG,"STATCOL_DSP1_CFG" },
-+ { STATCOL_DSP2_CFG,"STATCOL_DSP2_CFG" },
-+ { STATCOL_GMAC_SW,"STATCOL_GMAC_SW" },
-+ { STATCOL_PRUSS1_P1,"STATCOL_PRUSS1_P1" },
-+ { STATCOL_PRUSS1_P2,"STATCOL_PRUSS1_P2" },
-+ { STATCOL_PRUSS2_P1,"STATCOL_PRUSS2_P1" },
-+ { STATCOL_PRUSS2_P2,"STATCOL_PRUSS2_P2" },
-+ { STATCOL_DMA_CRYPTO_RD,"STATCOL_DMA_CRYPTO_RD" },
-+ { STATCOL_DMA_CRYPTO_WR,"STATCOL_DMA_CRYPTO_WR" },
-+ { STATCOL_MPU2,"STATCOL_MPU2" },
-+ { STATCOL_MMC1,"STATCOL_MMC1" },
-+ { STATCOL_MMC2,"STATCOL_MMC2" },
-+ { STATCOL_SATA,"STATCOL_SATA" },
-+ { STATCOL_MLBSS,"STATCOL_MLBSS" },
-+ { STATCOL_BB2D_P2,"STATCOL_BB2D_P2" },
-+ { STATCOL_IEEE1500,"STATCOL_IEEE1500" },
-+ { STATCOL_DBG,"STATCOL_DBG" },
-+ { STATCOL_VCP1,"STATCOL_VCP1" },
-+ { STATCOL_OCMC_RAM1,"STATCOL_OCMC_RAM1" },
-+ { STATCOL_OCMC_RAM2,"STATCOL_OCMC_RAM2" },
-+ { STATCOL_OCMC_RAM3,"STATCOL_OCMC_RAM3" },
-+ { STATCOL_GPMC,"STATCOL_GPMC" },
-+ { STATCOL_MCASP1,"STATCOL_MCASP1" },
-+ { STATCOL_MCASP2,"STATCOL_MCASP2" },
-+ { STATCOL_MCASP3,"STATCOL_MCASP3" },
-+ { STATCOL_VCP2, "STATCOL_VCP2" }
-+};
-+
-+StatCollectorObj gStatColState;
-+
-+static void *statcoll_base_mem;
-+static int *l3_3_clkctrl;
-+
-+static UInt32 *statCountDSS = NULL;
-+static UInt32 *statCountIVA = NULL;
-+static UInt32 *statCountBB2DP1 = NULL;
-+static UInt32 *statCountBB2DP2 = NULL;
-+static UInt32 *statCountUSB4 = NULL;
-+static UInt32 *statCountSata = NULL;
-+static UInt32 *statCountEmif1 = NULL;
-+static UInt32 *statCountEmif2 = NULL;
-+
-+
-+static statcoll_initiators_object global_object[STATCOL_MAX];
-+UInt32 statCountIdx = 0;
-+UInt32 TRACE_SZ = 0;
-+
-+void create_overall_box(struct _bar_graph_y_config *y_cfg, struct _text_config *t_cfg, char *text[])
-+{
-+ int i=0;
-+
-+ memset(y_cfg, 0x0, sizeof(struct _y_config)*25);
-+ memset(t_cfg, 0x0, sizeof(struct _text_config)*25);
-+
-+
-+ for(i=0; i<TOTAL_Y_PARAMETERS; i++) {
-+ (y_cfg+i)->line_color.r = 1.0;
-+ (y_cfg+i)->line_color.g = 1.0;
-+ (y_cfg+i)->line_color.b = 1.0;
-+ (y_cfg+i)->line_color.a = 0.7;
-+ (y_cfg+i)->fill_color.r = 0.0;
-+ (y_cfg+i)->fill_color.g = 0.0;
-+ (y_cfg+i)->fill_color.b = 0.0;
-+ (y_cfg+i)->fill_color.a = 0.1;
-+ }
-+
-+ (y_cfg+0)->region.bottom_left.x = 0;
-+ (y_cfg+0)->region.bottom_left.y = MAX_HEIGHT - HEIGHT_EMIF_AREA;
-+ (y_cfg+0)->region.top_right.x = MAX_WIDTH;
-+ (y_cfg+0)->region.top_right.y = 0;
-+
-+ (t_cfg+0)->at.x = MAX_WIDTH/2 - 8*FONT_SIZE - 50;
-+ (t_cfg+0)->at.y = BORDER - FONT_SIZE + 6;
-+ strcpy(text[0], string_list[0]);
-+
-+ (y_cfg+1)->region.bottom_left.x = TIME_GRAPH_AREA_BL_X;
-+ (y_cfg+1)->region.bottom_left.y = TIME_GRAPH_AREA_BL_Y;
-+ (y_cfg+1)->region.top_right.x = TIME_GRAPH_AREA_TR_X;
-+ (y_cfg+1)->region.top_right.y = TIME_GRAPH_AREA_TR_Y;
-+
-+ (t_cfg+1)->at.x = TIME_GRAPH_AREA_BL_X - 2*FONT_SIZE;
-+ (t_cfg+1)->at.y = TIME_GRAPH_AREA_TR_Y;
-+ strcpy(text[1],string_list[1]);
-+
-+ for(i=2; i<7; i++)
-+ {
-+ (y_cfg+i)->region.bottom_left.x = TIME_GRAPH_AREA_BL_X;
-+ (y_cfg+i)->region.bottom_left.y = TIME_GRAPH_AREA_BL_Y;// - (i-2) * (30);
-+ (y_cfg+i)->region.top_right.x = TIME_GRAPH_AREA_TR_X;
-+ (y_cfg+i)->region.top_right.y = TIME_GRAPH_AREA_TR_Y + (i-1) * ((TIME_GRAPH_AREA_BL_Y - TIME_GRAPH_AREA_TR_Y)/5);
-+ (t_cfg+i)->at.x = TIME_GRAPH_AREA_BL_X - 2*FONT_SIZE;
-+ (t_cfg+i)->at.y = TIME_GRAPH_AREA_TR_Y + (i-1) * ((TIME_GRAPH_AREA_BL_Y - TIME_GRAPH_AREA_TR_Y)/5);//TIME_GRAPH_AREA_TR_Y;
-+ strcpy(text[i],string_list[i]);
-+ }
-+
-+#if 1
-+ (y_cfg+7)->region.bottom_left.x = EMIF_AREA_BL_X;
-+ (y_cfg+7)->region.bottom_left.y = EMIF_AREA_BL_Y;
-+ (y_cfg+7)->region.top_right.x = EMIF_AREA_TR_X;
-+ (y_cfg+7)->region.top_right.y = EMIF_AREA_TR_Y;
-+
-+ (t_cfg+7)->at.x = WIDTH_EMIF_AREA/2 - 2*FONT_SIZE;
-+ (t_cfg+7)->at.y = EMIF_AREA_TR_Y + FONT_SIZE;
-+ strcpy(text[7],string_list[7]);
-+
-+ for(i=8; i<12; i=i+2)
-+ {
-+ (y_cfg+i)->region.bottom_left.x = EMIF_AREA_BL_X + BORDER + (i-8)*(BAR_WIDTH+BAR_GAP)/2;
-+ (y_cfg+i)->region.bottom_left.y = EMIF_AREA_BL_Y - BORDER/2;// - (i-2) * (30);
-+ (y_cfg+i)->region.top_right.x = EMIF_AREA_BL_X + BORDER + BAR_WIDTH + (i-8) * (BAR_WIDTH + BAR_GAP)/2;
-+ (y_cfg+i)->region.top_right.y = EMIF_AREA_TR_Y + BORDER * 1.2;
-+
-+ (y_cfg+i)->fill_color.r = 1.0;
-+ (y_cfg+i)->fill_color.g = 0.0;
-+ (y_cfg+i)->fill_color.b = 0.0;
-+ (y_cfg+i)->fill_color.a = 0.1;
-+
-+ (y_cfg+i+1)->region.bottom_left.x = EMIF_AREA_BL_X + BORDER + (i-8) * (BAR_WIDTH + BAR_GAP)/2;
-+ (y_cfg+i+1)->region.bottom_left.y = EMIF_AREA_BL_Y - BORDER/2;
-+ (y_cfg+i+1)->region.top_right.x = EMIF_AREA_BL_X + BORDER + BAR_WIDTH + (i-8) * (BAR_WIDTH + BAR_GAP)/2;
-+ (y_cfg+i+1)->region.top_right.y = EMIF_AREA_TR_Y + BORDER*1.2;
-+
-+ (y_cfg+i+1)->fill_color.r = 0.0;
-+ (y_cfg+i+1)->fill_color.g = 1.0;
-+ (y_cfg+i+1)->fill_color.b = 0.0;
-+ (y_cfg+i+1)->fill_color.a = 1.0;
-+
-+ (t_cfg+i)->at.x = EMIF_AREA_BL_X + BAR_WIDTH + BORDER + (i-8) * (BAR_WIDTH + BAR_GAP)/2- 2.2*FONT_SIZE;
-+ (t_cfg+i)->at.y = EMIF_AREA_TR_Y + BORDER*1.2 -5;
-+
-+ /* Fixed strings */
-+ (t_cfg+i+1)->at.x = EMIF_AREA_BL_X + BORDER + (i-8) * (BAR_WIDTH + BAR_GAP)/2;
-+ (t_cfg+i+1)->at.y = EMIF_AREA_BL_Y;// - BORDER + FONT_SIZE;
-+
-+ strcpy(text[i],string_list[i]);
-+ strcpy(text[i+1],string_list[i+1]);
-+ }
-+
-+ (y_cfg+12)->region.bottom_left.x = INITIATORS_AREA_BL_X;
-+ (y_cfg+12)->region.bottom_left.y = INITIATORS_AREA_BL_Y;
-+ (y_cfg+12)->region.top_right.x = INITIATORS_AREA_TR_X;
-+ (y_cfg+12)->region.top_right.y = INITIATORS_AREA_TR_Y;
-+
-+ (t_cfg+12)->at.x = EMIF_AREA_TR_X + (INITIATORS_AREA_TR_X - INITIATORS_AREA_BL_X)/2 - 4 * FONT_SIZE;
-+ (t_cfg+12)->at.y = INITIATORS_AREA_TR_Y + FONT_SIZE;
-+ strcpy(text[12],string_list[12]);
-+
-+ for(i=13; i<25; i=i+2)
-+ {
-+ (y_cfg+i)->region.bottom_left.x = INITIATORS_AREA_BL_X + BORDER + (i-13)*(BAR_WIDTH+BAR_GAP)/2;
-+ (y_cfg+i)->region.bottom_left.y = INITIATORS_AREA_BL_Y - BORDER/2;// - (i-2) * (30);
-+ (y_cfg+i)->region.top_right.x = INITIATORS_AREA_BL_X + BORDER + BAR_WIDTH + (i-13) * (BAR_WIDTH + BAR_GAP)/2;
-+ (y_cfg+i)->region.top_right.y = INITIATORS_AREA_TR_Y + BORDER*1.2;
-+
-+ (y_cfg+i)->fill_color.r = 1.0;
-+ (y_cfg+i)->fill_color.g = 0.0;
-+ (y_cfg+i)->fill_color.b = 0.0;
-+ (y_cfg+i)->fill_color.a = 0.1;
-+
-+ (y_cfg+i+1)->region.bottom_left.x = INITIATORS_AREA_BL_X + BORDER + (i-13) * (BAR_WIDTH + BAR_GAP)/2;
-+ (y_cfg+i+1)->region.bottom_left.y = INITIATORS_AREA_BL_Y - BORDER/2;// - (i-2) * (30);
-+ (y_cfg+i+1)->region.top_right.x = INITIATORS_AREA_BL_X + BORDER + BAR_WIDTH + (i-13) * (BAR_WIDTH + BAR_GAP)/2;
-+ (y_cfg+i+1)->region.top_right.y = INITIATORS_AREA_TR_Y + BORDER* 1.2;
-+
-+ (y_cfg+i+1)->fill_color.r = 0.0;
-+ (y_cfg+i+1)->fill_color.g = 1.0;
-+ (y_cfg+i+1)->fill_color.b = 0.0;
-+ (y_cfg+i+1)->fill_color.a = 1.0;
-+
-+ (t_cfg+i)->at.x = INITIATORS_AREA_BL_X + BORDER + BAR_WIDTH + (i-13) * (BAR_WIDTH + BAR_GAP)/2 - 2.2* FONT_SIZE;
-+ (t_cfg+i)->at.y = INITIATORS_AREA_TR_Y + BORDER*1.2 -5;
-+
-+ (t_cfg+i+1)->at.x = INITIATORS_AREA_BL_X + BORDER + (i-13)*(BAR_WIDTH+BAR_GAP)/2;
-+ (t_cfg+i+1)->at.y = INITIATORS_AREA_BL_Y;
-+
-+ strcpy(text[i],string_list[i]);
-+ strcpy(text[i+1],string_list[i+1]);
-+ }
-+#endif
-+
-+#if 0
-+ for(i=0; i<25; i++)
-+ printf("(%d, %d) to (%d, %d)\n", (y_cfg +i)->region.bottom_left.x,(y_cfg +i)->region.bottom_left.y,(y_cfg +i)->region.top_right.x, (y_cfg +i)->region.top_right.y);
-+#endif
-+
-+
-+
-+ for(i=0; i<25; i++) {
-+ (t_cfg+i)->color.r = 0.0;
-+ (t_cfg+i)->color.g = 1.0;
-+ (t_cfg+i)->color.b = 1.0;
-+ (t_cfg+i)->color.a = 1.0;
-+ (t_cfg+i)->fontsize = FONT_SIZE;
-+ }
-+ (t_cfg+0)->fontsize = 20;
-+
-+
-+}
-+
-+
-+void statCollectorInit()
-+{
-+ int index;
-+
-+ gStatColState.stat0_filter_cnt = 0;
-+ gStatColState.stat1_filter_cnt = 0;
-+ gStatColState.stat2_filter_cnt = 0;
-+ gStatColState.stat3_filter_cnt = 0;
-+ gStatColState.stat4_filter_cnt = 0;
-+ gStatColState.stat5_filter_cnt = 0;
-+ gStatColState.stat6_filter_cnt = 0;
-+ gStatColState.stat7_filter_cnt = 0;
-+ gStatColState.stat8_filter_cnt = 0;
-+ gStatColState.stat9_filter_cnt = 0;
-+
-+ for(index=STATCOL_EMIF1_SYS; index < STATCOL_MAX; index++)
-+ {
-+ global_object[index].b_enabled = 0;
-+
-+ strcpy(global_object[index].name, initiators[index].name);
-+
-+ global_object[index].readings = malloc(TRACE_SZ * sizeof(UInt32));
-+ memset(global_object[index].readings, 0, TRACE_SZ * sizeof(UInt32));
-+
-+ global_object[index].timestamp = NULL;
-+
-+ global_object[index].group_id = 0xFF;
-+ global_object[index].counter_id = 0;
-+ global_object[index].base_address = 0;
-+ global_object[index].mux_req = 0;
-+ }
-+
-+}
-+
-+void wr_stat_reg(UInt32 address, UInt32 data)
-+{
-+ UInt32 *mymem = statcoll_base_mem;
-+ UInt32 delta = (address - STATCOLL_BASE) / 4;
-+#ifndef DUMMY_MODE
-+ mymem[delta] = data;
-+#else
-+ printf("WRITE: Address = 0x%x, Data = 0x%x\n", address, data);
-+#endif
-+}
-+
-+UInt32 rd_stat_reg(UInt32 address)
-+{
-+#ifndef DUMMY_MODE
-+ UInt32 *mymem = statcoll_base_mem;
-+ UInt32 data;
-+ UInt32 delta = (address - STATCOLL_BASE) / 4;
-+ data = mymem[delta];
-+ return data;
-+#else
-+ printf("READ: Address = 0x%x\n", address);
-+#endif
-+}
-+
-+UInt32 statCollectorControlInitialize(UInt32 instance_id)
-+{
-+ UInt32 cur_base_address = 0;
-+ UInt32 cur_event_mux_req;
-+ UInt32 cur_event_mux_resp;
-+ UInt32 cur_stat_filter_cnt;
-+
-+ switch (instance_id)
-+ {
-+ case STATCOL_EMIF1_SYS:
-+ cur_base_address = stat_coll0_base_address;
-+ cur_event_mux_req = 0;
-+ cur_event_mux_resp = 1;
-+ gStatColState.stat0_filter_cnt = gStatColState.stat0_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat0_filter_cnt;
-+ global_object[instance_id].group_id = 0;
-+ break;
-+ case STATCOL_EMIF2_SYS:
-+ cur_base_address = stat_coll0_base_address;
-+ cur_event_mux_req = 2;
-+ cur_event_mux_resp = 3;
-+ gStatColState.stat0_filter_cnt = gStatColState.stat0_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat0_filter_cnt;
-+ global_object[instance_id].group_id = 0;
-+ break;
-+ case STATCOL_MA_MPU_P1:
-+ cur_base_address = stat_coll0_base_address;
-+ cur_event_mux_req = 4;
-+ cur_event_mux_resp = 5;
-+ gStatColState.stat0_filter_cnt = gStatColState.stat0_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat0_filter_cnt;
-+ global_object[instance_id].group_id = 0;
-+ break;
-+ case STATCOL_MA_MPU_P2:
-+ cur_base_address = stat_coll0_base_address;
-+ cur_event_mux_req = 6;
-+ cur_event_mux_resp = 7;
-+ gStatColState.stat0_filter_cnt = gStatColState.stat0_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat0_filter_cnt;
-+ global_object[instance_id].group_id = 0;
-+ break;
-+ case STATCOL_MPU1:
-+ cur_base_address = stat_coll1_base_address;
-+ cur_event_mux_req = 0;
-+ cur_event_mux_resp = 1;
-+ gStatColState.stat1_filter_cnt = gStatColState.stat1_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat1_filter_cnt;
-+ global_object[instance_id].group_id = 1;
-+ break;
-+ case STATCOL_MMU1:
-+ cur_base_address = stat_coll1_base_address;
-+ cur_event_mux_req = 2;
-+ cur_event_mux_resp = 3;
-+ gStatColState.stat1_filter_cnt = gStatColState.stat1_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat1_filter_cnt;
-+ global_object[instance_id].group_id = 1;
-+ break;
-+ case STATCOL_TPTC_RD1:
-+ cur_base_address = stat_coll1_base_address;
-+ cur_event_mux_req = 4;
-+ cur_event_mux_resp = 5;
-+ gStatColState.stat1_filter_cnt = gStatColState.stat1_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat1_filter_cnt;
-+ global_object[instance_id].group_id = 1;
-+ break;
-+ case STATCOL_TPTC_WR1:
-+ cur_base_address = stat_coll1_base_address;
-+ cur_event_mux_req = 6;
-+ cur_event_mux_resp = 7;
-+ gStatColState.stat1_filter_cnt = gStatColState.stat1_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat1_filter_cnt;
-+ global_object[instance_id].group_id = 1;
-+ break;
-+ case STATCOL_TPTC_RD2:
-+ cur_base_address = stat_coll1_base_address;
-+ cur_event_mux_req = 8;
-+ cur_event_mux_resp = 9;
-+ gStatColState.stat1_filter_cnt = gStatColState.stat1_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat1_filter_cnt;
-+ global_object[instance_id].group_id = 1;
-+ break;
-+ case STATCOL_TPTC_WR2:
-+ cur_base_address = stat_coll1_base_address;
-+ cur_event_mux_req = 10;
-+ cur_event_mux_resp = 11;
-+ gStatColState.stat1_filter_cnt = gStatColState.stat1_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat1_filter_cnt;
-+ global_object[instance_id].group_id = 1;
-+ break;
-+ case STATCOL_VIP1_P1:
-+ cur_base_address = stat_coll2_base_address;
-+ cur_event_mux_req = 0;
-+ cur_event_mux_resp = 1;
-+ gStatColState.stat2_filter_cnt = gStatColState.stat2_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat2_filter_cnt;
-+ global_object[instance_id].group_id = 2;
-+ break;
-+ case STATCOL_VIP1_P2:
-+ cur_base_address = stat_coll2_base_address;
-+ cur_event_mux_req = 2;
-+ cur_event_mux_resp = 3;
-+ gStatColState.stat2_filter_cnt = gStatColState.stat2_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat2_filter_cnt;
-+ global_object[instance_id].group_id = 2;
-+ break;
-+ case STATCOL_VIP2_P1:
-+ cur_base_address = stat_coll2_base_address;
-+ cur_event_mux_req = 4;
-+ cur_event_mux_resp = 5;
-+ gStatColState.stat2_filter_cnt = gStatColState.stat2_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat2_filter_cnt;
-+ global_object[instance_id].group_id = 2;
-+ break;
-+ case STATCOL_VIP2_P2:
-+ cur_base_address = stat_coll2_base_address;
-+ cur_event_mux_req = 6;
-+ cur_event_mux_resp = 7;
-+ gStatColState.stat2_filter_cnt = gStatColState.stat2_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat2_filter_cnt;
-+ global_object[instance_id].group_id = 2;
-+ break;
-+ case STATCOL_VIP3_P1:
-+ cur_base_address = stat_coll2_base_address;
-+ cur_event_mux_req = 8;
-+ cur_event_mux_resp = 9;
-+ gStatColState.stat2_filter_cnt = gStatColState.stat2_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat2_filter_cnt;
-+ global_object[instance_id].group_id = 2;
-+ break;
-+ case STATCOL_VIP3_P2:
-+ cur_base_address = stat_coll2_base_address;
-+ cur_event_mux_req = 10;
-+ cur_event_mux_resp = 11;
-+ gStatColState.stat2_filter_cnt = gStatColState.stat2_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat2_filter_cnt;
-+ global_object[instance_id].group_id = 2;
-+ break;
-+ case STATCOL_VPE_P1:
-+ cur_base_address = stat_coll2_base_address;
-+ cur_event_mux_req = 12;
-+ cur_event_mux_resp = 13;
-+ gStatColState.stat2_filter_cnt = gStatColState.stat2_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat2_filter_cnt;
-+ global_object[instance_id].group_id = 2;
-+ break;
-+ case STATCOL_VPE_P2:
-+ cur_base_address = stat_coll2_base_address;
-+ cur_event_mux_req = 14;
-+ cur_event_mux_resp = 15;
-+ gStatColState.stat2_filter_cnt = gStatColState.stat2_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat2_filter_cnt;
-+ global_object[instance_id].group_id = 2;
-+ break;
-+ case STATCOL_EVE1_TC0:
-+ cur_base_address = stat_coll3_base_address;
-+ cur_event_mux_req = 0;
-+ cur_event_mux_resp = 1;
-+ gStatColState.stat3_filter_cnt = gStatColState.stat3_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat3_filter_cnt;
-+ global_object[instance_id].group_id = 3;
-+ break;
-+ case STATCOL_EVE1_TC1:
-+ cur_base_address = stat_coll3_base_address;
-+ cur_event_mux_req = 2;
-+ cur_event_mux_resp = 3;
-+ gStatColState.stat3_filter_cnt = gStatColState.stat3_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat3_filter_cnt;
-+ global_object[instance_id].group_id = 3;
-+ break;
-+ case STATCOL_EVE2_TC0:
-+ cur_base_address = stat_coll3_base_address;
-+ cur_event_mux_req = 4;
-+ cur_event_mux_resp = 5;
-+ gStatColState.stat3_filter_cnt = gStatColState.stat3_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat3_filter_cnt;
-+ global_object[instance_id].group_id = 3;
-+ break;
-+ case STATCOL_EVE2_TC1:
-+ cur_base_address = stat_coll3_base_address;
-+ cur_event_mux_req = 6;
-+ cur_event_mux_resp = 7;
-+ gStatColState.stat3_filter_cnt = gStatColState.stat3_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat3_filter_cnt;
-+ global_object[instance_id].group_id = 3;
-+ break;
-+ case STATCOL_EVE3_TC0:
-+ cur_base_address = stat_coll3_base_address;
-+ cur_event_mux_req = 8;
-+ cur_event_mux_resp = 9;
-+ gStatColState.stat3_filter_cnt = gStatColState.stat3_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat3_filter_cnt;
-+ global_object[instance_id].group_id = 3;
-+ break;
-+ case STATCOL_EVE3_TC1:
-+ cur_base_address = stat_coll3_base_address;
-+ cur_event_mux_req = 10;
-+ cur_event_mux_resp = 11;
-+ gStatColState.stat3_filter_cnt = gStatColState.stat3_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat3_filter_cnt;
-+ global_object[instance_id].group_id = 3;
-+ break;
-+ case STATCOL_EVE4_TC0:
-+ cur_base_address = stat_coll3_base_address;
-+ cur_event_mux_req = 12;
-+ cur_event_mux_resp = 13;
-+ gStatColState.stat3_filter_cnt = gStatColState.stat3_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat3_filter_cnt;
-+ global_object[instance_id].group_id = 3;
-+ break;
-+ case STATCOL_EVE4_TC1:
-+ cur_base_address = stat_coll3_base_address;
-+ cur_event_mux_req = 14;
-+ cur_event_mux_resp = 15;
-+ gStatColState.stat3_filter_cnt = gStatColState.stat3_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat3_filter_cnt;
-+ global_object[instance_id].group_id = 3;
-+ break;
-+ case STATCOL_DSP1_MDMA:
-+ cur_base_address = stat_coll4_base_address;
-+ cur_event_mux_req = 0;
-+ cur_event_mux_resp = 1;
-+ gStatColState.stat4_filter_cnt = gStatColState.stat4_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat4_filter_cnt;
-+ global_object[instance_id].group_id = 4;
-+ break;
-+ case STATCOL_DSP1_EDMA:
-+ cur_base_address = stat_coll4_base_address;
-+ cur_event_mux_req = 2;
-+ cur_event_mux_resp = 3;
-+ gStatColState.stat4_filter_cnt = gStatColState.stat4_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat4_filter_cnt;
-+ global_object[instance_id].group_id = 4;
-+ break;
-+ case STATCOL_DSP2_MDMA:
-+ cur_base_address = stat_coll4_base_address;
-+ cur_event_mux_req = 4;
-+ cur_event_mux_resp = 5;
-+ gStatColState.stat4_filter_cnt = gStatColState.stat4_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat4_filter_cnt;
-+ global_object[instance_id].group_id = 4;
-+ break;
-+ case STATCOL_DSP2_EDMA:
-+ cur_base_address = stat_coll4_base_address;
-+ cur_event_mux_req = 6;
-+ cur_event_mux_resp = 7;
-+ gStatColState.stat4_filter_cnt = gStatColState.stat4_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat4_filter_cnt;
-+ global_object[instance_id].group_id = 4;
-+ break;
-+ case STATCOL_IVA:
-+ cur_base_address = stat_coll4_base_address;
-+ cur_event_mux_req = 8;
-+ cur_event_mux_resp = 9;
-+ gStatColState.stat4_filter_cnt = gStatColState.stat4_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat4_filter_cnt;
-+ global_object[instance_id].group_id = 4;
-+ break;
-+ case STATCOL_GPU_P1:
-+ cur_base_address = stat_coll4_base_address;
-+ cur_event_mux_req = 10;
-+ cur_event_mux_resp = 11;
-+ gStatColState.stat4_filter_cnt = gStatColState.stat4_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat4_filter_cnt;
-+ global_object[instance_id].group_id = 4;
-+ break;
-+ case STATCOL_GPU_P2:
-+ cur_base_address = stat_coll4_base_address;
-+ cur_event_mux_req = 12;
-+ cur_event_mux_resp = 13;
-+ gStatColState.stat4_filter_cnt = gStatColState.stat4_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat4_filter_cnt;
-+ global_object[instance_id].group_id = 4;
-+ break;
-+ case STATCOL_BB2D_P1:
-+ cur_base_address = stat_coll4_base_address;
-+ cur_event_mux_req = 14;
-+ cur_event_mux_resp = 15;
-+ gStatColState.stat4_filter_cnt = gStatColState.stat4_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat4_filter_cnt;
-+ global_object[instance_id].group_id = 4;
-+ break;
-+ case STATCOL_DSS:
-+ cur_base_address = stat_coll5_base_address;
-+ cur_event_mux_req = 0;
-+ cur_event_mux_resp = 1;
-+ gStatColState.stat5_filter_cnt = gStatColState.stat5_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat5_filter_cnt;
-+ global_object[instance_id].group_id = 5;
-+ break;
-+ case STATCOL_CSI2_2:
-+ cur_base_address = stat_coll5_base_address;
-+ cur_event_mux_req = 2;
-+ cur_event_mux_resp = 3;
-+ gStatColState.stat5_filter_cnt = gStatColState.stat5_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat5_filter_cnt;
-+ global_object[instance_id].group_id = 5;
-+ break;
-+ case STATCOL_MMU2:
-+ cur_base_address = stat_coll5_base_address;
-+ cur_event_mux_req = 4;
-+ cur_event_mux_resp = 5;
-+ gStatColState.stat5_filter_cnt = gStatColState.stat5_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat5_filter_cnt;
-+ global_object[instance_id].group_id = 5;
-+ break;
-+ case STATCOL_IPU1:
-+ cur_base_address = stat_coll5_base_address;
-+ cur_event_mux_req = 6;
-+ cur_event_mux_resp = 7;
-+ gStatColState.stat5_filter_cnt = gStatColState.stat5_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat5_filter_cnt;
-+ global_object[instance_id].group_id = 5;
-+ break;
-+ case STATCOL_IPU2:
-+ cur_base_address = stat_coll5_base_address;
-+ cur_event_mux_req = 8;
-+ cur_event_mux_resp = 9;
-+ gStatColState.stat5_filter_cnt = gStatColState.stat5_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat5_filter_cnt;
-+ global_object[instance_id].group_id = 5;
-+ break;
-+ case STATCOL_DMA_SYSTEM_RD:
-+ cur_base_address = stat_coll5_base_address;
-+ cur_event_mux_req = 10;
-+ cur_event_mux_resp = 11;
-+ gStatColState.stat5_filter_cnt = gStatColState.stat5_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat5_filter_cnt;
-+ global_object[instance_id].group_id = 5;
-+ break;
-+ case STATCOL_DMA_SYSTEM_WR:
-+ cur_base_address = stat_coll5_base_address;
-+ cur_event_mux_req = 12;
-+ cur_event_mux_resp = 13;
-+ gStatColState.stat5_filter_cnt = gStatColState.stat5_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat5_filter_cnt;
-+ global_object[instance_id].group_id = 5;
-+ break;
-+ case STATCOL_CSI2_1:
-+ cur_base_address = stat_coll5_base_address;
-+ cur_event_mux_req = 14;
-+ cur_event_mux_resp = 15;
-+ gStatColState.stat5_filter_cnt = gStatColState.stat5_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat5_filter_cnt;
-+ global_object[instance_id].group_id = 5;
-+ break;
-+ case STATCOL_USB3_SS:
-+ cur_base_address = stat_coll6_base_address;
-+ cur_event_mux_req = 0;
-+ cur_event_mux_resp = 1;
-+ gStatColState.stat6_filter_cnt = gStatColState.stat6_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat6_filter_cnt;
-+ global_object[instance_id].group_id = 6;
-+ break;
-+ case STATCOL_USB2_SS:
-+ cur_base_address = stat_coll6_base_address;
-+ cur_event_mux_req = 2;
-+ cur_event_mux_resp = 3;
-+ gStatColState.stat6_filter_cnt = gStatColState.stat6_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat6_filter_cnt;
-+ global_object[instance_id].group_id = 6;
-+ break;
-+ case STATCOL_USB2_ULPI_SS1:
-+ cur_base_address = stat_coll6_base_address;
-+ cur_event_mux_req = 4;
-+ cur_event_mux_resp = 5;
-+ gStatColState.stat6_filter_cnt = gStatColState.stat6_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat6_filter_cnt;
-+ global_object[instance_id].group_id = 6;
-+ break;
-+ case STATCOL_USB2_ULPI_SS2:
-+ cur_base_address = stat_coll6_base_address;
-+ cur_event_mux_req = 6;
-+ cur_event_mux_resp = 7;
-+ gStatColState.stat6_filter_cnt = gStatColState.stat6_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat6_filter_cnt;
-+ global_object[instance_id].group_id = 6;
-+ break;
-+ case STATCOL_PCIE_SS1:
-+ cur_base_address = stat_coll6_base_address;
-+ cur_event_mux_req = 8;
-+ cur_event_mux_resp = 9;
-+ gStatColState.stat6_filter_cnt = gStatColState.stat6_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat6_filter_cnt;
-+ global_object[instance_id].group_id = 6;
-+ break;
-+ case STATCOL_PCIE_SS2:
-+ cur_base_address = stat_coll6_base_address;
-+ cur_event_mux_req = 10;
-+ cur_event_mux_resp = 11;
-+ gStatColState.stat6_filter_cnt = gStatColState.stat6_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat6_filter_cnt;
-+ global_object[instance_id].group_id = 6;
-+ break;
-+ case STATCOL_DSP1_CFG:
-+ cur_base_address = stat_coll6_base_address;
-+ cur_event_mux_req = 12;
-+ cur_event_mux_resp = 13;
-+ gStatColState.stat6_filter_cnt = gStatColState.stat6_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat6_filter_cnt;
-+ global_object[instance_id].group_id = 6;
-+ break;
-+ case STATCOL_DSP2_CFG:
-+ cur_base_address = stat_coll6_base_address;
-+ cur_event_mux_req = 14;
-+ cur_event_mux_resp = 15;
-+ gStatColState.stat6_filter_cnt = gStatColState.stat6_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat6_filter_cnt;
-+ global_object[instance_id].group_id = 6;
-+ break;
-+ case STATCOL_GMAC_SW:
-+ cur_base_address = stat_coll7_base_address;
-+ cur_event_mux_req = 0;
-+ cur_event_mux_resp = 1;
-+ gStatColState.stat7_filter_cnt = gStatColState.stat7_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat7_filter_cnt;
-+ global_object[instance_id].group_id = 7;
-+ break;
-+ case STATCOL_PRUSS1_P1:
-+ cur_base_address = stat_coll7_base_address;
-+ cur_event_mux_req = 2;
-+ cur_event_mux_resp = 3;
-+ gStatColState.stat7_filter_cnt = gStatColState.stat7_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat7_filter_cnt;
-+ global_object[instance_id].group_id = 7;
-+ break;
-+ case STATCOL_PRUSS1_P2:
-+ cur_base_address = stat_coll7_base_address;
-+ cur_event_mux_req = 4;
-+ cur_event_mux_resp = 5;
-+ gStatColState.stat7_filter_cnt = gStatColState.stat7_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat7_filter_cnt;
-+ global_object[instance_id].group_id = 7;
-+ break;
-+ case STATCOL_PRUSS2_P1:
-+ cur_base_address = stat_coll7_base_address;
-+ cur_event_mux_req = 6;
-+ cur_event_mux_resp = 7;
-+ gStatColState.stat7_filter_cnt = gStatColState.stat7_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat7_filter_cnt;
-+ global_object[instance_id].group_id = 7;
-+ break;
-+ case STATCOL_PRUSS2_P2:
-+ cur_base_address = stat_coll7_base_address;
-+ cur_event_mux_req = 8;
-+ cur_event_mux_resp = 9;
-+ gStatColState.stat7_filter_cnt = gStatColState.stat7_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat7_filter_cnt;
-+ global_object[instance_id].group_id = 7;
-+ break;
-+ case STATCOL_DMA_CRYPTO_RD:
-+ cur_base_address = stat_coll7_base_address;
-+ cur_event_mux_req = 10;
-+ cur_event_mux_resp = 11;
-+ gStatColState.stat7_filter_cnt = gStatColState.stat7_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat7_filter_cnt;
-+ global_object[instance_id].group_id = 7;
-+ break;
-+ case STATCOL_DMA_CRYPTO_WR:
-+ cur_base_address = stat_coll7_base_address;
-+ cur_event_mux_req = 12;
-+ cur_event_mux_resp = 13;
-+ gStatColState.stat7_filter_cnt = gStatColState.stat7_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat7_filter_cnt;
-+ global_object[instance_id].group_id = 7;
-+ break;
-+ case STATCOL_MPU2:
-+ cur_base_address = stat_coll7_base_address;
-+ cur_event_mux_req = 14;
-+ cur_event_mux_resp = 15;
-+ gStatColState.stat7_filter_cnt = gStatColState.stat7_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat7_filter_cnt;
-+ global_object[instance_id].group_id = 7;
-+ break;
-+ case STATCOL_MMC1:
-+ cur_base_address = stat_coll8_base_address;
-+ cur_event_mux_req = 0;
-+ cur_event_mux_resp = 1;
-+ gStatColState.stat8_filter_cnt = gStatColState.stat8_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat8_filter_cnt;
-+ global_object[instance_id].group_id = 8;
-+ break;
-+ case STATCOL_MMC2:
-+ cur_base_address = stat_coll8_base_address;
-+ cur_event_mux_req = 2;
-+ cur_event_mux_resp = 3;
-+ gStatColState.stat8_filter_cnt = gStatColState.stat8_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat8_filter_cnt;
-+ global_object[instance_id].group_id = 8;
-+ break;
-+ case STATCOL_SATA:
-+ cur_base_address = stat_coll8_base_address;
-+ cur_event_mux_req = 4;
-+ cur_event_mux_resp = 5;
-+ gStatColState.stat8_filter_cnt = gStatColState.stat8_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat8_filter_cnt;
-+ global_object[instance_id].group_id = 8;
-+ break;
-+ case STATCOL_MLBSS:
-+ cur_base_address = stat_coll8_base_address;
-+ cur_event_mux_req = 6;
-+ cur_event_mux_resp = 7;
-+ gStatColState.stat8_filter_cnt = gStatColState.stat8_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat8_filter_cnt;
-+ global_object[instance_id].group_id = 8;
-+ break;
-+ case STATCOL_BB2D_P2:
-+ cur_base_address = stat_coll8_base_address;
-+ cur_event_mux_req = 8;
-+ cur_event_mux_resp = 9;
-+ gStatColState.stat8_filter_cnt = gStatColState.stat8_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat8_filter_cnt;
-+ global_object[instance_id].group_id = 8;
-+ break;
-+ case STATCOL_IEEE1500:
-+ cur_base_address = stat_coll8_base_address;
-+ cur_event_mux_req = 10;
-+ cur_event_mux_resp = 11;
-+ gStatColState.stat8_filter_cnt = gStatColState.stat8_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat8_filter_cnt;
-+ global_object[instance_id].group_id = 8;
-+ break;
-+ case STATCOL_DBG:
-+ cur_base_address = stat_coll8_base_address;
-+ cur_event_mux_req = 12;
-+ cur_event_mux_resp = 13;
-+ gStatColState.stat8_filter_cnt = gStatColState.stat8_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat8_filter_cnt;
-+ global_object[instance_id].group_id = 8;
-+ break;
-+ case STATCOL_VCP1:
-+ cur_base_address = stat_coll8_base_address;
-+ cur_event_mux_req = 14;
-+ cur_event_mux_resp = 15;
-+ gStatColState.stat8_filter_cnt = gStatColState.stat8_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat8_filter_cnt;
-+ global_object[instance_id].group_id = 8;
-+ break;
-+ case STATCOL_OCMC_RAM1:
-+ cur_base_address = stat_coll9_base_address;
-+ cur_event_mux_req = 0;
-+ cur_event_mux_resp = 1;
-+ gStatColState.stat9_filter_cnt = gStatColState.stat9_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat9_filter_cnt;
-+ global_object[instance_id].group_id = 9;
-+ break;
-+ case STATCOL_OCMC_RAM2:
-+ cur_base_address = stat_coll9_base_address;
-+ cur_event_mux_req = 2;
-+ cur_event_mux_resp = 3;
-+ gStatColState.stat9_filter_cnt = gStatColState.stat9_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat9_filter_cnt;
-+ global_object[instance_id].group_id = 9;
-+ break;
-+ case STATCOL_OCMC_RAM3:
-+ cur_base_address = stat_coll9_base_address;
-+ cur_event_mux_req = 4;
-+ cur_event_mux_resp = 5;
-+ gStatColState.stat9_filter_cnt = gStatColState.stat9_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat9_filter_cnt;
-+ global_object[instance_id].group_id = 9;
-+ break;
-+ case STATCOL_GPMC:
-+ cur_base_address = stat_coll9_base_address;
-+ cur_event_mux_req = 6;
-+ cur_event_mux_resp = 7;
-+ gStatColState.stat9_filter_cnt = gStatColState.stat9_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat9_filter_cnt;
-+ global_object[instance_id].group_id = 9;
-+ break;
-+ case STATCOL_MCASP1:
-+ cur_base_address = stat_coll9_base_address;
-+ cur_event_mux_req = 8;
-+ cur_event_mux_resp = 9;
-+ gStatColState.stat9_filter_cnt = gStatColState.stat9_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat9_filter_cnt;
-+ global_object[instance_id].group_id = 9;
-+ break;
-+ case STATCOL_MCASP2:
-+ cur_base_address = stat_coll9_base_address;
-+ cur_event_mux_req = 10;
-+ cur_event_mux_resp = 11;
-+ gStatColState.stat9_filter_cnt = gStatColState.stat9_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat9_filter_cnt;
-+ global_object[instance_id].group_id = 9;
-+ break;
-+ case STATCOL_MCASP3:
-+ cur_base_address = stat_coll9_base_address;
-+ cur_event_mux_req = 12;
-+ cur_event_mux_resp = 13;
-+ gStatColState.stat9_filter_cnt = gStatColState.stat9_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat9_filter_cnt;
-+ global_object[instance_id].group_id = 9;
-+ break;
-+ case STATCOL_VCP2:
-+ cur_base_address = stat_coll9_base_address;
-+ cur_event_mux_req = 14;
-+ cur_event_mux_resp = 15;
-+ gStatColState.stat9_filter_cnt = gStatColState.stat9_filter_cnt + 1;
-+ cur_stat_filter_cnt = gStatColState.stat9_filter_cnt;
-+ global_object[instance_id].group_id = 9;
-+ break;
-+ default:
-+ printf("ERROR: Unknown initiator %d\n", instance_id);
-+ exit(0);
-+ };
-+
-+ {
-+ if ( cur_stat_filter_cnt > 4 )
-+ {
-+ printf("WARNING: We have exhausted filters/counters.....\n");
-+ return 0;
-+ }
-+ // Global Enable Stat Collector
-+ wr_stat_reg(cur_base_address+0x8,0x1);
-+
-+ // Soft Enable Stat Collector
-+ wr_stat_reg(cur_base_address+0xC,0x1);
-+
-+ wr_stat_reg(cur_base_address+0x18,0x5);
-+ // Operation of Stat Collector / RespEvt => Packet
-+ wr_stat_reg(cur_base_address+0x1C,0x5);
-+
-+
-+ // Event Sel
-+ wr_stat_reg(cur_base_address+0x20+4*(cur_stat_filter_cnt-1),cur_event_mux_req);
-+
-+ // Op is EventInfo
-+ wr_stat_reg(cur_base_address+0x1FC+(0x158*(cur_stat_filter_cnt-1)),2);
-+
-+ // Event Info Sel Op -> packet length
-+ wr_stat_reg(cur_base_address+0x1F8+(0x158*(cur_stat_filter_cnt-1)),0);
-+
-+ // Filter Global Enable
-+ wr_stat_reg(cur_base_address+0xAC+(0x158*(cur_stat_filter_cnt-1)),0x1);
-+
-+ // Filter Enable
-+ wr_stat_reg(cur_base_address+0xBC+(0x158*(cur_stat_filter_cnt-1)),0x1);
-+
-+ // Manual dump
-+ wr_stat_reg(cur_base_address+0x54,0x1);
-+ // use send register to reset counters
-+
-+ }
-+
-+ global_object[instance_id].mux_req = cur_event_mux_req;
-+ global_object[instance_id].base_address = cur_base_address;
-+ global_object[instance_id].counter_id = cur_stat_filter_cnt;
-+ global_object[instance_id].b_enabled = 1;
-+
-+ return cur_stat_filter_cnt;
-+}
-+
-+
-+
-+void statCollectorReadGroup(UInt32 group_id)
-+{
-+ int i=0;
-+ UInt32 cur_base_address = 0x45001000 + ((group_id - 1) * 0x1000);
-+
-+ wr_stat_reg(cur_base_address+0xC,0x0);
-+
-+ for(i=0; i < STATCOL_MAX; i++)
-+ {
-+ if(global_object[i].group_id == (group_id - 1) &&
-+ global_object[i].b_enabled == 1)
-+ {
-+ UInt32 cur_stat_filter_cnt = global_object[i].counter_id;
-+
-+ global_object[i].readings[statCountIdx] = rd_stat_reg(cur_base_address+0x8C+((cur_stat_filter_cnt-1)*4));
-+ }
-+ }
-+
-+ wr_stat_reg(cur_base_address+0xC,0x1);
-+}
-+
-+
-+volatile sig_atomic_t sigtermed = 0;
-+
-+void my_signal_handler(int signum)
-+{
-+ if (signum == SIGTERM || signum == SIGINT) {
-+ sigtermed = 1;
-+ }
-+}
-+
-+struct sort
-+{
-+ int pos;
-+ double value;
-+};
-+
-+
-+void *ctx;
-+struct time_graph_create_params p;
-+char xpos_string[100], ypos_string[100];
-+
-+void mpu_handler(int command)
-+{
-+#if 1
-+ static int fd;
-+ char buf[1000];
-+ char * tabledata= "/tmp/statcollfifo";
-+ int i;
-+ int bytes;
-+ static int offset = 13;
-+
-+ switch(command)
-+ {
-+ case OPEN:
-+ fd = open(tabledata, O_RDONLY|O_NONBLOCK);
-+ break;
-+
-+ case READ:
-+
-+ /* open, read, and display the message from the FIFO */
-+ bytes=read(fd, buf, 1000);
-+ if(bytes > 0)
-+ {
-+ char str[100];
-+ char value[100];
-+ sscanf(buf, "%s %s", str, value);
-+ if(strcmp(str, "MOVE:") == 0)
-+ {
-+ printf("Received MOVE command : %s\n", buf);
-+ sprintf(p.title, "CPU Usage[@position-req=%sx%s]", value, ypos_string);
-+ move_graph(ctx, &p);
-+ }
-+ else
-+ {
-+ printf("ERROR: Received unexpected data from FIFO - \" %s \" \n", buf);
-+ }
-+ memset(buf, 0x0, sizeof(buf));
-+ }
-+
-+ break;
-+
-+ case CLOSE:
-+ close(fd);
-+ break;
-+ }
-+#endif
-+ return;
-+}
-+
-+
-+UInt32 statcoll_start(UInt32 TOTAL_TIME, UInt32 INTERVAL_US, char list[][50], UInt32 xpos, UInt32 ypos)
-+{
-+ int i, fd, index;
-+ UInt32 counterIdDss, counterIdIva, counterIdBB2dP1, counterIdBB2dP2, counterIdUsb4, counterIdSata, counterIdEmif1, counterIdEmif2;
-+
-+ if (SIG_ERR == signal(SIGPIPE,SIG_IGN))
-+ exit(1);
-+
-+ if (SIG_ERR == signal(SIGINT,my_signal_handler))
-+ exit(1);
-+
-+ if (SIG_ERR == signal(SIGTERM,my_signal_handler))
-+ exit(1);
-+
-+
-+ struct timeval tv1, tv2;
-+ gettimeofday(&tv1, NULL);
-+ printf("------------------------------------------------\n");
-+ printf("Compile time = %s %s\n",__DATE__, __TIME__);
-+ printf("------------------------------------------------\n\n");
-+ //printd("Start time = %d\n", time(NULL));
-+ //printd("Time seconds = %d, usecs = %d\n", tv.tv_sec, tv.tv_usec);
-+
-+ statcoll_params params;
-+ memset(&params, sizeof(params), 0);
-+ params.INTERVAL_US = INTERVAL_US;
-+ params.TOTAL_TIME = TOTAL_TIME;
-+
-+ i=0;
-+ index=0;
-+
-+ while(list[i][0] != 0)
-+ {
-+ for(index=0; index< STATCOL_MAX; index++) {
-+ if(strcmp(list[i], initiators[index].name) == 0)
-+ {
-+ strcpy(params.user_config_list[params.no_of_initiators].name, list[i]);
-+ params.user_config_list[params.no_of_initiators++].id = initiators[index].id;
-+ break;
-+ }
-+ }
-+
-+ if(index == STATCOL_MAX) {
-+ printf("ERROR: Unknown initiator.%d.. .%s. \n", i, list[i]);
-+ //exit(0);
-+ }
-+ i++;
-+ }
-+
-+ struct bar_graph_create_params bg_p;
-+ struct _y_config *y_cfg;
-+ struct _text_config *t_cfg;
-+ double *y;
-+ double *bg_y;
-+ char *text_list[STATCOL_MAX];
-+
-+ struct _bar_graph_y_config *bg_y_cfg;
-+ struct _text_config *bg_t_cfg;
-+ char *bg_text_list[STATCOL_MAX];
-+
-+ sprintf(xpos_string, "%d", xpos);
-+ sprintf(ypos_string, "%d", ypos);
-+ p.title=(char *)malloc(100);
-+ sprintf(p.title, "CPU Usage[@position-req=%sx%s]", xpos_string, ypos_string);
-+ //p.height = MAX_HEIGHT - HEIGHT_EMIF_AREA;
-+ p.height = MAX_HEIGHT;// - HEIGHT_EMIF_AREA;
-+ p.width = MAX_WIDTH;
-+ p.draw_area.bottom_left.x = TIME_GRAPH_AREA_BL_X;
-+ p.draw_area.bottom_left.y = TIME_GRAPH_AREA_BL_Y;
-+ p.draw_area.top_right.x = TIME_GRAPH_AREA_TR_X;
-+ p.draw_area.top_right.y = TIME_GRAPH_AREA_TR_Y;
-+ p.time_span = 120000; // 120 seconds
-+ p.num_of_y_items = params.no_of_initiators+1;
-+ p.num_of_text_items = 0;//params.no_of_initiators;
-+
-+
-+ y_cfg = malloc((params.no_of_initiators+1) * sizeof(struct _y_config));
-+ t_cfg = malloc(params.no_of_initiators * sizeof(struct _text_config));
-+ y = malloc((params.no_of_initiators+1) * sizeof(double));
-+ p.y_config_array = y_cfg;
-+ p.text_config_array = t_cfg;
-+
-+ bg_y_cfg = malloc(TOTAL_Y_PARAMETERS * sizeof(struct _bar_graph_y_config));
-+ bg_t_cfg = malloc(TOTAL_Y_PARAMETERS * sizeof(struct _text_config));
-+ bg_y = malloc(TOTAL_Y_PARAMETERS * sizeof(double));
-+
-+ for(i=0; i<TOTAL_Y_PARAMETERS; i++)
-+ {
-+ bg_text_list[i] = malloc(100);
-+ strcpy(bg_text_list[i],"test");
-+ }
-+
-+ create_overall_box(bg_y_cfg, bg_t_cfg, bg_text_list);
-+
-+
-+ i=0;
-+ while(i < params.no_of_initiators)
-+ {
-+ text_list[i] = malloc(100 * sizeof(char));
-+ memset(text_list[i], 0x0, 100);
-+
-+ ((struct _y_config *)y_cfg+i)->line_color.r = pallette[i%MAX_COLORS].r;
-+ ((struct _y_config *)y_cfg+i)->line_color.g = pallette[i%MAX_COLORS].g;
-+ ((struct _y_config *)y_cfg+i)->line_color.b = pallette[i%MAX_COLORS].b;
-+ ((struct _y_config *)y_cfg+i)->line_color.a = 0.0;//pallette[i%MAX_COLORS].a;
-+
-+ ((struct _y_config *)y_cfg+i)->fill_color.r = 0.0;
-+ ((struct _y_config *)y_cfg+i)->fill_color.g = 1.0;
-+ ((struct _y_config *)y_cfg+i)->fill_color.b = 0.0;
-+ ((struct _y_config *)y_cfg+i)->fill_color.a = 0.5;
-+
-+ i++;
-+ }
-+
-+ ((struct _y_config *)y_cfg+i)->line_color.r = 0.0;
-+ ((struct _y_config *)y_cfg+i)->line_color.g = 0.0;
-+ ((struct _y_config *)y_cfg+i)->line_color.b = 0.0;
-+ ((struct _y_config *)y_cfg+i)->line_color.a = 0.5;
-+ ((struct _y_config *)y_cfg+i)->fill_color.r = 0.1;
-+ ((struct _y_config *)y_cfg+i)->fill_color.g = 0.9;
-+ ((struct _y_config *)y_cfg+i)->fill_color.b = 0.5;
-+ ((struct _y_config *)y_cfg+i)->fill_color.a = 1.0;
-+
-+ bg_p.title = "CPU Usage";
-+
-+ bg_p.num_of_y_items = TOTAL_Y_PARAMETERS;
-+ bg_p.y_config_array = bg_y_cfg;
-+ bg_p.num_of_text_items = TOTAL_Y_PARAMETERS;
-+ bg_p.text_config_array = bg_t_cfg;
-+
-+
-+ int argc;
-+ char *argv[10];
-+ ctx = time_graph_create(argc, argv, &p);
-+ if (!ctx) {
-+ printf("Error creating context\n");
-+ exit(0);
-+ }
-+
-+ printf("\n Context after time_graph_create = 0x%x\n", ctx);
-+ ctx = bar_graph_create(argc, argv, &bg_p);
-+ if (!ctx) {
-+ printf("Error creating context\n");
-+ exit(0);
-+ }
-+
-+ printf("\n Context after bar_graph_create= 0x%x\n", ctx);
-+
-+ printf("Total configured initiators = %d\n", params.no_of_initiators);
-+
-+
-+ fd = open("/dev/mem", O_RDWR);
-+ if (fd == -1){
-+ printf("error fd=open() \n");
-+ return -1;
-+ }
-+ statcoll_base_mem = mmap(NULL, STATCOLL_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, STATCOLL_BASE);
-+
-+ if (statcoll_base_mem == MAP_FAILED){
-+ printf("ERROR: mmap failed \n");
-+ return;
-+ }
-+ close(fd);
-+
-+ fd = open("/dev/mem", O_RDWR);
-+ if (fd == -1){
-+ printf("error fd=open() \n");
-+ return -1;
-+ }
-+ l3_3_clkctrl = mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_SHARED, fd, CM_L3INSTR_REGISTER_BASE);
-+ if (l3_3_clkctrl == MAP_FAILED){
-+ printf("ERROR: mmap failed for CM_L3INSTR_REGISTER_BASE\n");
-+ return;
-+ }
-+ close(fd);
-+
-+ printf("SUCCESS: Mapped 0x%x to user space address 0x%x\n", STATCOLL_BASE, statcoll_base_mem);
-+ printf("INTERVAL = %d usecs\n", INTERVAL_US);
-+ printf("TOTAL TIME = %d seconds\n", TOTAL_TIME);
-+ TRACE_SZ = (TOTAL_TIME * 1000000)/INTERVAL_US;
-+ printf("TRACE SIZE = %d samples\n", TRACE_SZ);
-+
-+ printf("**************************************\n");
-+ printf("Going to initialize the L3 clocks \n");
-+ l3_3_clkctrl[CM_L3INSTR_L3INSTR_CLKSTCTRL_OFFSET >> 2] = 0x2;
-+ l3_3_clkctrl[CM_L3INSTR_L3_MAIN_2_CLKCTRL_OFFSET >> 2] = 0x1;
-+ printf("**************************************\n");
-+
-+ while( (l3_3_clkctrl[CM_L3INSTR_L3_MAIN_2_CLKCTRL_OFFSET >> 2] & 0x30000) != 0x0)
-+ {
-+ printf("Waiting on module to be functional\n");
-+ }
-+
-+ statCollectorInit();
-+
-+ printf("SUCCESS: Initialized STAT COLLECTOR\n");
-+ /* Initialize all enabled initiators */
-+ for(index =0; index < params.no_of_initiators; index++) {
-+ printf("\t\t Initialized %s\n", params.user_config_list[index].name);
-+ statCollectorControlInitialize(params.user_config_list[index].id);
-+ }
-+
-+ const char *bg_text = "CPU Utilization";
-+
-+ int second_counter=0;
-+ memset(y, 0x0, sizeof(double)* (params.no_of_initiators+1));
-+
-+
-+
-+
-+ mpu_handler(OPEN);
-+
-+
-+ while(statCountIdx != (TRACE_SZ - 1))
-+ {
-+ usleep(INTERVAL_US);
-+ int group;
-+ for(group = 1; group<11; group++)
-+ statCollectorReadGroup(group);
-+
-+ mpu_handler(READ);
-+
-+ if(statCountIdx != 0 )
-+ for(i=0; i<params.no_of_initiators; i++) {
-+ y[i] += (double)(global_object[params.user_config_list[i].id].readings[statCountIdx])/ (8000000000);
-+ }
-+ second_counter++;
-+
-+ if(second_counter % 30 == 0)
-+ {
-+
-+ for(i=0; i<TOTAL_Y_PARAMETERS; i++) {
-+ bg_y[i] = 1.0;
-+ }
-+
-+ //HACK
-+ bg_y[9]=y[0]*2;
-+ bg_y[11]=y[1]*2;
-+ sprintf(bg_text_list[8], "%02.1f%s", y[0]*100, "%");
-+ sprintf(bg_text_list[10], "%02.1f%s", y[1]*100, "%");
-+
-+ struct sort sort_array[STATCOL_MAX];
-+ memset(sort_array, 0x0, sizeof(struct sort) * STATCOL_MAX);
-+ /* Sort here */
-+ for(i=2; i<params.no_of_initiators; i++) {
-+ sort_array[i-2].value = y[i];
-+ sort_array[i-2].pos = i;
-+ }
-+
-+ int j;
-+ double tempdouble;
-+ int tempint;
-+ for(i=0; i<params.no_of_initiators-2; i++) {
-+ for(j=i+1; j<params.no_of_initiators-2; j++) {
-+ if(sort_array[i].value < sort_array[j].value) {
-+ tempdouble = sort_array[j].value;
-+ tempint = sort_array[j].pos;
-+
-+ sort_array[j].value = sort_array[i].value;
-+ sort_array[j].pos = sort_array[i].pos;
-+
-+ sort_array[i].value = tempdouble;
-+ sort_array[i].pos = tempint;
-+ }
-+ }
-+ }
-+
-+ for(i=0; i<6; i++)
-+ {
-+ //HACK
-+ bg_y[14+i*2] = sort_array[i].value*2;
-+ sprintf(bg_text_list[13+i*2], "%02.1f%s", sort_array[i].value*100, "%");
-+ sprintf(bg_text_list[14+i*2], "%s", (params.user_config_list[sort_array[i].pos].name)+8);
-+ }
-+
-+ bar_graph_plot(ctx, bg_y, (const char **)bg_text_list);
-+
-+ y[params.no_of_initiators]=y[0]+y[1];
-+ time_graph_plot(ctx, y, (const char **)text_list);
-+ //printf("Plotting the time_graph\n");
-+ memset(y, 0x0, sizeof(double)* (params.no_of_initiators+1));
-+ }
-+ statCountIdx++;
-+
-+ }
-+
-+ mpu_handler(CLOSE);
-+
-+ printf("------------------------------------------------\n\n");
-+ printf("SUCCESS: Stat collection completed... Writing into file now\n");
-+ FILE *outfile = fopen("statcollector.csv", "w+");
-+ if (!outfile) {
-+ printf("\n ERROR: Error opening file");
-+ }
-+
-+ /* Ignore the first index at 0 */
-+ for(index=1; index<statCountIdx; index++) {
-+ for(i=0; i<params.no_of_initiators; i++) {
-+ fprintf(outfile,"%s = %d,", params.user_config_list[i].name, global_object[params.user_config_list[i].id].readings[index]);
-+ }
-+ fprintf(outfile,"\n");
-+ }
-+ fclose(outfile);
-+
-+ time_graph_destroy(ctx);
-+ gettimeofday(&tv2, NULL);
-+ //printf("End time = %d\n", time(NULL));
-+ //printf("Time seconds = %d, usecs = %d\n", tv.tv_sec, tv.tv_usec);
-+ printf("Total execution time = %d secs, %d usecs\n\n", (tv2.tv_sec - tv1.tv_sec), (tv2.tv_usec - tv2.tv_usec));
-+
-+ return 0;
-+}
-+
-+
-diff --git a/clients/statcoll.h b/clients/statcoll.h
-new file mode 100644
-index 0000000..fa92753
---- /dev/null
-+++ b/clients/statcoll.h
-@@ -0,0 +1,152 @@
-+#ifndef __STATCOLL_H
-+#define __STATCOLL_H
-+
-+
-+#define CM_L3INSTR_REGISTER_BASE (0x4A008000)
-+
-+#define CM_L3INSTR_L3INSTR_CLKSTCTRL_OFFSET (0xE00)
-+#define CM_L3INSTR_L3_MAIN_2_CLKCTRL_OFFSET (0xE20)
-+
-+#define STATCOLL_SIZE 40960
-+#define STATCOLL_BASE (0x45001000)
-+
-+#define stat_coll0_base_address (0x45001000)
-+#define stat_coll1_base_address (0x45002000)
-+#define stat_coll2_base_address (0x45003000)
-+#define stat_coll3_base_address (0x45004000)
-+#define stat_coll4_base_address (0x45005000)
-+#define stat_coll5_base_address (0x45006000)
-+#define stat_coll6_base_address (0x45007000)
-+#define stat_coll7_base_address (0x45008000)
-+#define stat_coll8_base_address (0x45009000)
-+#define stat_coll9_base_address (0x4500a000)
-+
-+#define printd(fmt, ...) \
-+ do { if (debug) fprintf(stderr, fmt, __VA_ARGS__); } while (0)
-+
-+typedef unsigned int UInt32;
-+
-+
-+typedef enum
-+{
-+ STATCOL_EMIF1_SYS,
-+ STATCOL_EMIF2_SYS,
-+ STATCOL_MA_MPU_P1,
-+ STATCOL_MA_MPU_P2,
-+ STATCOL_MPU1,
-+ STATCOL_MMU1,
-+ STATCOL_TPTC_RD1,
-+ STATCOL_TPTC_WR1,
-+ STATCOL_TPTC_RD2,
-+ STATCOL_TPTC_WR2,
-+ STATCOL_VIP1_P1,
-+ STATCOL_VIP1_P2,
-+ STATCOL_VIP2_P1,
-+ STATCOL_VIP2_P2,
-+ STATCOL_VIP3_P1,
-+ STATCOL_VIP3_P2,
-+ STATCOL_VPE_P1,
-+ STATCOL_VPE_P2,
-+ STATCOL_EVE1_TC0,
-+ STATCOL_EVE1_TC1,
-+ STATCOL_EVE2_TC0,
-+ STATCOL_EVE2_TC1,
-+ STATCOL_EVE3_TC0,
-+ STATCOL_EVE3_TC1,
-+ STATCOL_EVE4_TC0,
-+ STATCOL_EVE4_TC1,
-+ STATCOL_DSP1_MDMA,
-+ STATCOL_DSP1_EDMA,
-+ STATCOL_DSP2_MDMA,
-+ STATCOL_DSP2_EDMA,
-+ STATCOL_IVA,
-+ STATCOL_GPU_P1,
-+ STATCOL_GPU_P2,
-+ STATCOL_BB2D_P1,
-+ STATCOL_DSS,
-+ STATCOL_CSI2_2,
-+ STATCOL_MMU2,
-+ STATCOL_IPU1,
-+ STATCOL_IPU2,
-+ STATCOL_DMA_SYSTEM_RD,
-+ STATCOL_DMA_SYSTEM_WR,
-+ STATCOL_CSI2_1,
-+ STATCOL_USB3_SS,
-+ STATCOL_USB2_SS,
-+ STATCOL_USB2_ULPI_SS1,
-+ STATCOL_USB2_ULPI_SS2,
-+ STATCOL_PCIE_SS1,
-+ STATCOL_PCIE_SS2,
-+ STATCOL_DSP1_CFG,
-+ STATCOL_DSP2_CFG,
-+ STATCOL_GMAC_SW,
-+ STATCOL_PRUSS1_P1,
-+ STATCOL_PRUSS1_P2,
-+ STATCOL_PRUSS2_P1,
-+ STATCOL_PRUSS2_P2,
-+ STATCOL_DMA_CRYPTO_RD,
-+ STATCOL_DMA_CRYPTO_WR,
-+ STATCOL_MPU2,
-+ STATCOL_MMC1,
-+ STATCOL_MMC2,
-+ STATCOL_SATA,
-+ STATCOL_MLBSS,
-+ STATCOL_BB2D_P2,
-+ STATCOL_IEEE1500,
-+ STATCOL_DBG,
-+ STATCOL_VCP1,
-+ STATCOL_OCMC_RAM1,
-+ STATCOL_OCMC_RAM2,
-+ STATCOL_OCMC_RAM3,
-+ STATCOL_GPMC,
-+ STATCOL_MCASP1,
-+ STATCOL_MCASP2,
-+ STATCOL_MCASP3,
-+ STATCOL_VCP2,
-+ STATCOL_MAX
-+} STATCOL_ID;
-+
-+
-+
-+typedef struct
-+{
-+ UInt32 stat0_filter_cnt;
-+ UInt32 stat1_filter_cnt;
-+ UInt32 stat2_filter_cnt;
-+ UInt32 stat3_filter_cnt;
-+ UInt32 stat4_filter_cnt;
-+ UInt32 stat5_filter_cnt;
-+ UInt32 stat6_filter_cnt;
-+ UInt32 stat7_filter_cnt;
-+ UInt32 stat8_filter_cnt;
-+ UInt32 stat9_filter_cnt;
-+} StatCollectorObj;
-+
-+struct list_of_initiators
-+{
-+ STATCOL_ID id;
-+ char name[50];
-+};
-+
-+typedef struct
-+{
-+ UInt32 INTERVAL_US;
-+ UInt32 TOTAL_TIME;
-+ UInt32 no_of_initiators;
-+ struct list_of_initiators user_config_list[STATCOL_MAX];
-+} statcoll_params;
-+
-+typedef struct
-+{
-+ UInt32 b_enabled;
-+ char name[100];
-+ UInt32 *readings;
-+ UInt32 *timestamp;
-+ UInt32 group_id;
-+ UInt32 counter_id;
-+ UInt32 base_address;
-+ UInt32 mux_req;
-+}statcoll_initiators_object;
-+
-+
-+#endif
-diff --git a/clients/statcoll_gui.h b/clients/statcoll_gui.h
-new file mode 100644
-index 0000000..7362bde
---- /dev/null
-+++ b/clients/statcoll_gui.h
-@@ -0,0 +1,101 @@
-+
-+/*
-+
-+ ---------------------------------------------
-+ | |
-+ | --------------------------------------- |
-+ | |
-+ | |
-+ | |
-+ | |
-+ | |
-+ | |
-+ | |
-+ | |
-+ | |
-+ | |
-+ | |
-+ | |
-+ | |
-+ | |
-+ | |
-+ ---------------------------------------------
-+ | | |
-+ | | |
-+ | | |
-+ | | |
-+ | | |
-+ | | |
-+ ---------------------------------------------
-+
-+
-+
-+
-+*/
-+#define POSITION_X 2800
-+#define POSITION_Y 40
-+
-+#define MAX_WIDTH 900
-+//#define MAX_WIDTH 528
-+#define MAX_HEIGHT 900
-+
-+/* Derived parameters */
-+#define BAR_GAP (MAX_WIDTH/25)
-+#define BAR_WIDTH (MAX_WIDTH/16)
-+
-+#define BAR_HEIGHT ((MX_HEIGHT/40) * 6)
-+
-+#define BORDER (MAX_WIDTH/15)
-+
-+#define HEIGHT_EMIF_AREA (MAX_HEIGHT/4)
-+
-+#define FONT_SIZE (MAX_WIDTH/40)
-+
-+#define WIDTH_EMIF_AREA (MAX_WIDTH / 4)
-+
-+#define TOTAL_Y_PARAMETERS (25)
-+
-+#define TIME_GRAPH_AREA_BL_X (BORDER)
-+#define TIME_GRAPH_AREA_BL_Y (MAX_HEIGHT - HEIGHT_EMIF_AREA - BORDER)
-+#define TIME_GRAPH_AREA_TR_X (MAX_WIDTH - BORDER)
-+#define TIME_GRAPH_AREA_TR_Y (BORDER)
-+
-+#define EMIF_AREA_BL_X (0)
-+#define EMIF_AREA_BL_Y (MAX_HEIGHT)
-+#define EMIF_AREA_TR_X (WIDTH_EMIF_AREA)
-+#define EMIF_AREA_TR_Y (MAX_HEIGHT - HEIGHT_EMIF_AREA)
-+
-+#define INITIATORS_AREA_BL_X (WIDTH_EMIF_AREA)
-+#define INITIATORS_AREA_BL_Y (MAX_HEIGHT)
-+#define INITIATORS_AREA_TR_X (MAX_WIDTH)
-+#define INITIATORS_AREA_TR_Y (MAX_HEIGHT - HEIGHT_EMIF_AREA)
-+
-+
-+const char *string_list[TOTAL_Y_PARAMETERS] = {
-+ "----DDR BANDWIDTH PLOT----",
-+ "8 GBPS",
-+ "6.4 ",
-+ "4.8",
-+ "3.2",
-+ "1.6",
-+ "0",
-+ "EMIF Plot",
-+ "test",
-+ "EMIF1",
-+ "test",
-+ "EMIF2",
-+ "TOP 6 INITIATORS",
-+ "test",
-+ "MPU",
-+ "test",
-+ "DSS",
-+ "test",
-+ "DSP",
-+ "test",
-+ "IVA",
-+ "test",
-+ "GPU",
-+ "test",
-+ "BB2D",
-+};
-+
-diff --git a/clients/time_bar_graph.c b/clients/time_bar_graph.c
-new file mode 100644
-index 0000000..9fa9c12
---- /dev/null
-+++ b/clients/time_bar_graph.c
-@@ -0,0 +1,515 @@
-+/*
-+ * Copyright © 2008 Kristian Høgsberg
-+ *
-+ * Permission to use, copy, modify, distribute, and sell this software and its
-+ * documentation for any purpose is hereby granted without fee, provided that
-+ * the above copyright notice appear in all copies and that both that copyright
-+ * notice and this permission notice appear in supporting documentation, and
-+ * that the name of the copyright holders not be used in advertising or
-+ * publicity pertaining to distribution of the software without specific,
-+ * written prior permission. The copyright holders make no representations
-+ * about the suitability of this software for any purpose. It is provided "as
-+ * is" without express or implied warranty.
-+ *
-+ * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-+ * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
-+ * OF THIS SOFTWARE.
-+ */
-+
-+#include <stdint.h>
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <string.h>
-+#include <stdint.h>
-+#include <signal.h>
-+#include <time.h>
-+#include <math.h>
-+#include <cairo.h>
-+#include <sys/time.h>
-+#include <pthread.h>
-+#include <errno.h>
-+#include <unistd.h>
-+#include <sys/eventfd.h>
-+#include <sys/epoll.h>
-+
-+#include <linux/input.h>
-+#include <wayland-client.h>
-+#include "window.h"
-+#include "../shared/cairo-util.h"
-+#include "time_bar_graph.h"
-+
-+//#define DEBUG 1
-+#ifdef DEBUG
-+#define DBG(x...) printf(x)
-+#else
-+#define DBG(x...) // printf(x)
-+#endif
-+
-+#define MAX_ITEMS 180
-+#define MAX_TEXT_SIZE 128
-+
-+struct graph_dataset_point {
-+ int next_index;
-+ double y_values[MAX_ITEMS];
-+};
-+
-+struct graph_data {
-+ int dataset_size;
-+ int first_index, last_index, num_elems;
-+ uint64_t last_time;
-+ struct graph_dataset_point dataset[1];
-+};
-+
-+struct graph {
-+ struct display *display;
-+ struct window *window;
-+ struct widget *widget;
-+ int width, height;
-+ struct time_graph_create_params params;
-+ struct bar_graph_create_params bar_graph_params;
-+ struct _y_config y_config_array[MAX_ITEMS];
-+ struct _text_config text_config_array[MAX_ITEMS];
-+
-+ /* Bar graph parameters */
-+ struct _bar_graph_y_config bar_graph_y_config_array[MAX_ITEMS];
-+ struct _text_config bar_graph_text_config_array[MAX_ITEMS];
-+
-+ pthread_t thr;
-+ int eventfd;
-+ struct task task;
-+ double x_scaling_factor;
-+ pthread_mutex_t mtx;
-+ double time_graph_y_values[MAX_ITEMS];
-+ char text_values[MAX_ITEMS][MAX_TEXT_SIZE];
-+
-+ double bar_graph_y_values[MAX_ITEMS];
-+ char bar_graph_text_values[MAX_ITEMS][MAX_TEXT_SIZE];
-+
-+ uint64_t time_now;
-+ time_t start_time_tv_sec;
-+ struct graph_data *data;
-+};
-+
-+struct graph *global_graph=NULL;
-+static void
-+draw_stuff(struct graph *g, cairo_surface_t *surface)
-+{
-+ cairo_t *cr;
-+ int i, j, n_elems;
-+ double c_x, c_y, d_x, d_y;
-+
-+ cr = cairo_create(surface);
-+ cairo_set_operator(cr, CAIRO_OPERATOR_SOURCE);
-+ cairo_set_source_rgba(cr, 0.0, 0.0, 0.0, 0.5);
-+ cairo_paint(cr);
-+ cairo_select_font_face(cr, "mono",
-+ CAIRO_FONT_SLANT_NORMAL,
-+ CAIRO_FONT_WEIGHT_BOLD);
-+ cairo_set_line_width (cr, 1.0);
-+ cairo_set_operator(cr, CAIRO_OPERATOR_OVER);
-+ pthread_mutex_lock(&g->mtx);
-+ for (j=0; g->data->num_elems > 0 && j<g->params.num_of_y_items; j++) {
-+ n_elems = g->data->num_elems;
-+ DBG("first_index: %d, last_index: %d\n", g->data->first_index, g->data->last_index);
-+ if (g->y_config_array[j].fill_color.a != 0.0)
-+ cairo_move_to(cr, (double)g->params.draw_area.bottom_left.x, (double)g->params.draw_area.bottom_left.y);
-+ c_x = (double)g->params.draw_area.bottom_left.x;
-+ c_y = (double)g->params.draw_area.bottom_left.y;
-+ d_x = 0;
-+ i = g->data->first_index;
-+ while (n_elems) {
-+ DBG("index: %d, x: %f, y: %f, next_index: %d\n", i, c_x,
-+ g->data->dataset[i].y_values[j], g->data->dataset[i].next_index);
-+ d_y = g->data->dataset[i].y_values[j] - c_y;
-+ c_y = g->data->dataset[i].y_values[j];
-+ c_x = c_x + d_x;
-+ if (g->y_config_array[j].fill_color.a == 0.0 && n_elems == g->data->num_elems) {
-+ cairo_move_to(cr, c_x, c_y);
-+ } else {
-+ cairo_curve_to(cr, c_x - (d_x * 0.75), c_y - (d_y * 0.92), c_x - (d_x * 0.25), c_y - (d_y * 0.08), c_x, c_y);
-+ }
-+ if (g->data->dataset[i].next_index > i) {
-+ d_x = (g->data->dataset[i].next_index - i);
-+ } else {
-+ d_x = (g->data->dataset_size + g->data->dataset[i].next_index - i);
-+ }
-+ i = g->data->dataset[i].next_index;
-+ n_elems--;
-+ }
-+ if (g->y_config_array[j].fill_color.a != 0.0) {
-+ cairo_line_to(cr, c_x, (double)g->params.draw_area.bottom_left.y);
-+ cairo_line_to(cr, (double)g->params.draw_area.bottom_left.x, (double)g->params.draw_area.bottom_left.y);
-+ cairo_close_path(cr);
-+ cairo_set_source_rgba(cr, g->y_config_array[j].fill_color.r, g->y_config_array[j].fill_color.g,
-+ g->y_config_array[j].fill_color.b, g->y_config_array[j].fill_color.a);
-+ cairo_fill_preserve(cr);
-+ }
-+ cairo_set_source_rgba(cr, g->y_config_array[j].line_color.r, g->y_config_array[j].line_color.g,
-+ g->y_config_array[j].line_color.b, g->y_config_array[j].line_color.a);
-+ cairo_stroke(cr);
-+ }
-+
-+ for (j=0; j<g->params.num_of_text_items; j++) {
-+ cairo_move_to(cr, (double)g->text_config_array[j].at.x, (double)g->text_config_array[j].at.y);
-+ cairo_set_font_size(cr, g->text_config_array[j].fontsize);
-+ cairo_set_source_rgba(cr, g->text_config_array[j].color.r, g->text_config_array[j].color.g,
-+ g->text_config_array[j].color.b, g->text_config_array[j].color.a);
-+ cairo_show_text(cr, g->text_values[j]);
-+ }
-+
-+
-+ for (j=0; j<g->bar_graph_params.num_of_y_items; j++) {
-+ cairo_move_to(cr, (double)g->bar_graph_params.y_config_array[j].region.bottom_left.x,
-+ (double)g->bar_graph_params.y_config_array[j].region.bottom_left.y);
-+ c_y = (double)g->bar_graph_params.y_config_array[j].region.bottom_left.y -
-+ (g->bar_graph_y_values[j] * (double)(g->bar_graph_params.y_config_array[j].region.bottom_left.y -
-+ g->bar_graph_params.y_config_array[j].region.top_right.y));
-+ cairo_line_to(cr, (double)g->bar_graph_params.y_config_array[j].region.bottom_left.x, c_y);
-+ cairo_line_to(cr, (double)g->bar_graph_params.y_config_array[j].region.top_right.x, c_y);
-+ cairo_line_to(cr, (double)g->bar_graph_params.y_config_array[j].region.top_right.x,
-+ (double)g->bar_graph_params.y_config_array[j].region.bottom_left.y);
-+ cairo_line_to(cr, (double)g->bar_graph_params.y_config_array[j].region.bottom_left.x,
-+ (double)g->bar_graph_params.y_config_array[j].region.bottom_left.y);
-+ cairo_close_path(cr);
-+ cairo_set_source_rgba(cr, g->bar_graph_y_config_array[j].fill_color.r, g->bar_graph_y_config_array[j].fill_color.g,
-+ g->bar_graph_y_config_array[j].fill_color.b, g->bar_graph_y_config_array[j].fill_color.a);
-+ cairo_fill_preserve(cr);
-+ cairo_set_source_rgba(cr, g->bar_graph_y_config_array[j].line_color.r, g->bar_graph_y_config_array[j].line_color.g,
-+ g->bar_graph_y_config_array[j].line_color.b, g->bar_graph_y_config_array[j].line_color.a);
-+ cairo_stroke(cr);
-+ }
-+ for (j=0; j<g->bar_graph_params.num_of_text_items; j++) {
-+ cairo_move_to(cr, (double)g->bar_graph_text_config_array[j].at.x, (double)g->bar_graph_text_config_array[j].at.y);
-+ cairo_set_font_size(cr, g->bar_graph_text_config_array[j].fontsize);
-+ cairo_set_source_rgba(cr, g->bar_graph_text_config_array[j].color.r, g->bar_graph_text_config_array[j].color.g,
-+ g->bar_graph_text_config_array[j].color.b, g->bar_graph_text_config_array[j].color.a);
-+ cairo_save (cr);
-+ //cairo_rotate(cr, 2*3.14*21/24);
-+ cairo_show_text(cr, g->bar_graph_text_values[j]);
-+ cairo_restore(cr);
-+ }
-+ pthread_mutex_unlock(&g->mtx);
-+ cairo_destroy(cr);
-+}
-+
-+static void
-+resize_handler(struct widget *widget,
-+ int32_t width, int32_t height, void *data)
-+{
-+ struct graph *g = data;
-+
-+ /* Dont resize me */
-+ widget_set_size(g->widget, g->width, g->height);
-+}
-+
-+static void
-+redraw_handler(struct widget *widget, void *data)
-+{
-+ struct graph *g = data;
-+ cairo_surface_t *surface;
-+
-+ surface = window_get_surface(g->window);
-+ if (surface == NULL ||
-+ cairo_surface_status(surface) != CAIRO_STATUS_SUCCESS) {
-+ fprintf(stderr, "failed to create cairo egl surface\n");
-+ return;
-+ }
-+
-+ draw_stuff(g, surface);
-+ cairo_surface_destroy(surface);
-+}
-+
-+static void
-+button_handler(struct widget *widget,
-+ struct input *input, uint32_t time,
-+ uint32_t button, enum wl_pointer_button_state state, void *data)
-+{
-+ struct graph *g = data;
-+
-+ switch (button) {
-+ case BTN_LEFT:
-+ if (state == WL_POINTER_BUTTON_STATE_PRESSED)
-+ window_move(g->window, input,
-+ display_get_serial(g->display));
-+ break;
-+ case BTN_MIDDLE:
-+ if (state == WL_POINTER_BUTTON_STATE_PRESSED)
-+ widget_schedule_redraw(widget);
-+ break;
-+ case BTN_RIGHT:
-+ if (state == WL_POINTER_BUTTON_STATE_PRESSED)
-+ window_show_frame_menu(g->window, input, time);
-+ break;
-+ }
-+}
-+
-+static void
-+touch_down_handler(struct widget *widget, struct input *input,
-+ uint32_t serial, uint32_t time, int32_t id,
-+ float x, float y, void *data)
-+{
-+ struct graph *g = data;
-+ window_move(g->window, input, display_get_serial(g->display));
-+}
-+
-+static void task_run(struct task *task, uint32_t events)
-+{
-+ eventfd_t e;
-+ struct graph *g = (struct graph *)(task->link.prev);
-+ uint64_t time_diff;
-+ int elems, tmp, incr, i;
-+ double y;
-+
-+ eventfd_read(g->eventfd, &e);
-+ if(e == 1) {
-+ pthread_mutex_lock(&g->mtx);
-+ /* Process new data */
-+ DBG("time_now: %llu, last_time: %llu\n", g->time_now, g->data->last_time);
-+ if (g->time_now > g->data->last_time) {
-+ time_diff = g->time_now - g->data->last_time;
-+ y = (double)time_diff * g->x_scaling_factor;
-+ incr = (int)y;
-+ DBG("incr: %d\n", incr);
-+
-+ if (g->data->last_index >= g->data->first_index) elems = g->data->last_index - g->data->first_index + 1;
-+ else elems = g->data->dataset_size - g->data->first_index + g->data->last_index + 1;
-+ /* Move first index to make room for new element */
-+ while (g->data->dataset_size > 0 && (elems + incr) > g->data->dataset_size) {
-+ tmp = g->data->dataset[g->data->first_index].next_index - g->data->first_index;
-+ if (tmp < 0) tmp = g->data->dataset_size + tmp;
-+ g->data->first_index = g->data->dataset[g->data->first_index].next_index;
-+ elems -= tmp;
-+ g->data->num_elems--;
-+ }
-+ for (i=0; i<g->params.num_of_y_items; i++) {
-+ /* Scale Y */
-+ y = g->time_graph_y_values[i] * (double)(g->params.draw_area.bottom_left.y-g->params.draw_area.top_right.y);
-+ y = (double)g->params.draw_area.bottom_left.y - y;
-+ g->data->dataset[g->data->last_index].y_values[i] = y;
-+ }
-+ g->data->dataset[g->data->last_index].next_index = g->data->last_index + incr;
-+ if (g->data->dataset[g->data->last_index].next_index >= g->data->dataset_size)
-+ g->data->dataset[g->data->last_index].next_index -= g->data->dataset_size;
-+ g->data->num_elems++;
-+ g->data->last_index = g->data->dataset[g->data->last_index].next_index;
-+ g->data->last_time = g->time_now;
-+ }
-+ pthread_mutex_unlock(&g->mtx);
-+ }
-+ widget_schedule_redraw(g->widget);
-+ DBG("event task ran...\n");
-+}
-+
-+void *time_graph_create(int argc, char *argv[], struct time_graph_create_params *cp)
-+{
-+ struct graph *g;
-+ struct display *d;
-+ int dataset_size;
-+ struct timeval tv;
-+
-+ if (cp->num_of_y_items > MAX_ITEMS) return NULL;
-+ if (cp->num_of_text_items > MAX_ITEMS) return NULL;
-+
-+ g = (struct graph*)malloc(sizeof(struct graph));
-+ if (g == NULL) {
-+ fprintf(stderr, "failed to allocate memory\n");
-+ return NULL;
-+ }
-+ global_graph = g;
-+ g->params = *cp;
-+ if (cp->num_of_y_items)
-+ memcpy(&g->y_config_array[0], cp->y_config_array,
-+ sizeof(struct _y_config) * cp->num_of_y_items);
-+ if (cp->num_of_text_items)
-+ memcpy(&g->text_config_array[0], cp->text_config_array,
-+ sizeof(struct _text_config) * cp->num_of_text_items);
-+ d = display_create(&argc, argv);
-+ if (d == NULL) {
-+ fprintf(stderr, "failed to create display: %m\n");
-+ return NULL;
-+ }
-+ g->display = d;
-+ //g->bg_image = load_cairo_surface(cp->bg_image);
-+ g->width = cp->width; //cairo_image_surface_get_width(g->bg_image);
-+ g->height = cp->height; //cairo_image_surface_get_height(g->bg_image);
-+ dataset_size = cp->draw_area.top_right.x - cp->draw_area.bottom_left.x;
-+ g->data = (struct graph_data *)malloc(sizeof(struct graph_data) +
-+ (dataset_size * sizeof(struct graph_dataset_point)));
-+ if (!g->data) {
-+ fprintf(stderr, "failed to allocate memory\n");
-+ display_destroy(g->display);
-+ //cairo_surface_destroy(g->bg_image);
-+ free(g);
-+ return NULL;
-+ }
-+ g->data->first_index = 0;
-+ g->data->last_index = 0;
-+ g->data->num_elems = 0;
-+ g->data->dataset_size = dataset_size;
-+ g->x_scaling_factor = (double)dataset_size / (double)cp->time_span;
-+ g->window = window_create(d);
-+ g->widget = window_add_widget(g->window, g);
-+ window_set_title(g->window, cp->title);
-+ widget_set_resize_handler(g->widget, resize_handler);
-+ widget_set_redraw_handler(g->widget, redraw_handler);
-+ widget_set_button_handler(g->widget, button_handler);
-+ widget_set_default_cursor(g->widget, CURSOR_HAND1);
-+ widget_set_touch_down_handler(g->widget, touch_down_handler);
-+ window_schedule_resize(g->window, g->width, g->height);
-+ g->eventfd = eventfd(0, 0);
-+ g->task.run = task_run;
-+ g->task.link.prev = (struct wl_list*)g;
-+ g->task.link.next = NULL;
-+ display_watch_fd(d, g->eventfd, EPOLLIN, &g->task);
-+ pthread_mutex_init(&g->mtx, NULL);
-+
-+ if (0 != pthread_create(&g->thr, NULL, (void *(*)(void *))display_run, (void *)d)) {
-+ fprintf(stderr, "pthread_create failed: %m\n");
-+ widget_destroy(g->widget);
-+ window_destroy(g->window);
-+ display_destroy(g->display);
-+ //cairo_surface_destroy(g->bg_image);
-+ free(g->data);
-+ close(g->eventfd);
-+ free(g);
-+ return NULL;
-+ }
-+ gettimeofday(&tv, NULL);
-+ g->start_time_tv_sec = tv.tv_sec;
-+ g->data->last_time = 0;
-+ return (void*)g;
-+}
-+
-+void move_graph(void *ctx, struct time_graph_create_params *cp)
-+{
-+ struct graph *g = ctx;
-+ window_set_title(g->window, cp->title);
-+}
-+
-+void time_graph_plot(void *ctx, double *y_values, const char *text_values[])
-+{
-+ struct timeval tv;
-+ struct graph *g = ctx;
-+ int i;
-+ pthread_mutex_lock(&g->mtx);
-+ gettimeofday(&tv, NULL);
-+ g->time_now = ((tv.tv_sec - g->start_time_tv_sec) * 1000) + (tv.tv_usec / 1000);
-+ memcpy(g->time_graph_y_values, y_values, g->params.num_of_y_items * sizeof(double));
-+ for (i=0;i<g->params.num_of_text_items; i++) {
-+ strncpy(g->text_values[i], text_values[i], MAX_TEXT_SIZE);
-+ g->text_values[i][MAX_TEXT_SIZE-1] = '\0';
-+ }
-+ pthread_mutex_unlock(&g->mtx);
-+ eventfd_write(g->eventfd, (eventfd_t)1);
-+}
-+
-+void time_graph_destroy(void *ctx)
-+{
-+ struct graph *g = (struct graph *)ctx;
-+ display_exit(g->display);
-+ eventfd_write(g->eventfd, (eventfd_t)1);
-+ pthread_join(g->thr, NULL);
-+ widget_destroy(g->widget);
-+ window_destroy(g->window);
-+ display_destroy(g->display);
-+ free(g->data);
-+ close(g->eventfd);
-+ free(g);
-+ global_graph=NULL;
-+}
-+
-+void util_get_cpu_usage(double *cpu_usage)
-+{
-+ static FILE *fp = NULL;
-+ char buf[256];
-+ uint64_t tot;
-+ uint64_t u, n, s, i, w, x, y, z;
-+ static uint64_t last_i = 0, last_total = 0;
-+
-+
-+ if (!fp) {
-+ if (!(fp = fopen("/proc/stat", "r")))
-+ fprintf(stderr, "Failed /proc/stat open: %s", strerror(errno));
-+ }
-+ if (fp) {
-+ while (1) {
-+ rewind(fp);
-+ fflush(fp);
-+ if (!fgets(buf, sizeof(buf), fp)) {
-+ fprintf(stderr, "failed /proc/stat read\n");
-+ } else {
-+ sscanf(buf, "cpu %Lu %Lu %Lu %Lu %Lu %Lu %Lu %Lu",
-+ &u,
-+ &n,
-+ &s,
-+ &i,
-+ &w,
-+ &x,
-+ &y,
-+ &z
-+ );
-+ if (last_total == 0) {
-+ last_total = u+n+s+i+w+x+y+z;
-+ last_i = i;
-+ usleep(100000);
-+ } else {
-+ tot = u+n+s+i+w+x+y+z;
-+ *cpu_usage = (1.0 - ((double)(i-last_i)/(double)(tot-last_total)));
-+ last_i = i;
-+ last_total = tot;
-+ break;
-+ }
-+ }
-+ }
-+ }
-+}
-+
-+void *bar_graph_create(int argc, char *argv[], struct bar_graph_create_params *cp)
-+{
-+ struct graph *g;
-+ struct display *d;
-+ struct timeval tv;
-+
-+ if (cp->num_of_y_items > MAX_ITEMS) return NULL;
-+ if (cp->num_of_text_items > MAX_ITEMS) return NULL;
-+
-+ if (global_graph == NULL) {
-+ fprintf(stderr, "graph not initialized invoke time_graph_create first\n");
-+ return NULL;
-+ }
-+ g=global_graph;
-+ g->bar_graph_params = *cp;
-+ if (cp->num_of_y_items)
-+ memcpy(&g->bar_graph_y_config_array[0], cp->y_config_array,
-+ sizeof(struct _bar_graph_y_config) * cp->num_of_y_items);
-+ if (cp->num_of_text_items)
-+ memcpy(&g->bar_graph_text_config_array[0], cp->text_config_array,
-+ sizeof(struct _text_config) * cp->num_of_text_items);
-+
-+ return g;
-+}
-+
-+void bar_graph_plot(void *ctx, double *y_values, const char *text_values[])
-+{
-+ struct graph *g = ctx;
-+ int i;
-+ pthread_mutex_lock(&g->mtx);
-+ memcpy(g->bar_graph_y_values, y_values, g->bar_graph_params.num_of_y_items * sizeof(double));
-+ for (i=0;i<g->bar_graph_params.num_of_text_items; i++) {
-+ strncpy(g->bar_graph_text_values[i], text_values[i], MAX_TEXT_SIZE);
-+ g->bar_graph_text_values[i][MAX_TEXT_SIZE-1] = '\0';
-+ }
-+ pthread_mutex_unlock(&g->mtx);
-+ //eventfd_write(g->eventfd, (eventfd_t)2);
-+}
-+
-+void bar_graph_destroy(void *ctx)
-+{
-+ printf("Nothing to be done for this call\n");
-+ return;
-+}
-+
-diff --git a/clients/time_bar_graph.h b/clients/time_bar_graph.h
-new file mode 100644
-index 0000000..97ac05a
---- /dev/null
-+++ b/clients/time_bar_graph.h
-@@ -0,0 +1,93 @@
-+
-+#ifndef _BAR_GRAPH_H_
-+#define _BAR_GRAPH_H_
-+
-+#include <stdint.h>
-+
-+struct _rgba {
-+ double r, g, b, a; // Values between 0 and 1
-+};
-+
-+struct _coordinate {
-+ uint32_t x, y; // Co-ordinates relative to top-left of the window
-+};
-+
-+struct _rect {
-+ struct _coordinate bottom_left, top_right;
-+};
-+
-+struct _y_config {
-+ struct _rgba line_color; // Line color
-+ struct _rgba fill_color; // Fill color, 0 alpha => no fill
-+};
-+
-+struct _text_config {
-+ struct _rgba color; // Color for drawing the text, RGBA
-+ struct _coordinate at; // where to draw the text
-+ int fontsize; // Font size
-+};
-+
-+struct time_graph_create_params {
-+ char *title;
-+ //const char *bg_image;
-+ uint32_t width;
-+ uint32_t height;
-+ struct _rect draw_area;
-+ uint32_t time_span; // Amount of time the graph has to span in milliseconds
-+ uint32_t num_of_y_items;
-+ struct _y_config *y_config_array;
-+ uint32_t num_of_text_items;
-+ struct _text_config *text_config_array;
-+};
-+
-+
-+struct _bar_graph_y_config {
-+ struct _rect region; // Region for the bar graph
-+ struct _rgba line_color; // Color for drawing the line, RGBA
-+ struct _rgba fill_color; // Fill under the line with color RGBA, 0 => no fill
-+};
-+
-+struct bar_graph_create_params {
-+ char *title;
-+ //const char *bg_image;
-+ uint32_t num_of_y_items;
-+ struct _bar_graph_y_config *y_config_array;
-+ uint32_t num_of_text_items;
-+ struct _text_config *text_config_array;
-+};
-+
-+/* Creates a time graph using create parameters */
-+void *bar_graph_create(int argc, char *argv[], struct bar_graph_create_params *cp);
-+
-+void move_graph(void *ctx, struct time_graph_create_params *cp);
-+
-+/* Plots a new set of y-values from the values in the array y_values.
-+ The number of values must be equal to "num_of_y_items" from create params
-+ y_values must be normalized between 0.0 to 1.0
-+*/
-+void bar_graph_plot(void *ctx, double *y_values, const char *text_values[]);
-+
-+/* Destroy the graph */
-+void bar_graph_destroy(void *ctx);
-+
-+
-+/* Creates a time graph using create parameters */
-+void *time_graph_create(int argc, char *argv[], struct time_graph_create_params *cp);
-+
-+/*
-+ * Plots a new set of points from the values in the array y_values.
-+ * The number of values in the array y_values must be equal to "num_of_y_items"
-+ * from create params
-+ * y_values must be normalized between 0.0 to 1.0
-+
-+ * The number of values in the array text_values must be equal to "num_of_text_items"
-+ * from create params
-+*/
-+void time_graph_plot(void *ctx, double *y_values, const char *text_values[]);
-+
-+/* Destroy the graph */
-+void time_graph_destroy(void *ctx);
-+
-+void util_get_cpu_usage(double *cpu_usage);
-+
-+#endif /* _BAR_GRAPH_H_ */
---
-1.9.1
-
diff --git a/meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0003-weston-Fix-virtual-keyboard-display-issue-for-QT5-ap.patch b/meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0003-weston-Fix-virtual-keyboard-display-issue-for-QT5-ap.patch
deleted file mode 100644
index 32901db99..000000000
--- a/meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0003-weston-Fix-virtual-keyboard-display-issue-for-QT5-ap.patch
+++ /dev/null
@@ -1,41 +0,0 @@
-From 8034bc1862bbebb332e91917c6458ef8efb5b54e Mon Sep 17 00:00:00 2001
-From: Eric Ruei <e-ruei1@ti.com>
-Date: Fri, 8 Mar 2019 18:49:07 -0500
-Subject: [PATCH] weston: Fix virtual keyboard display issue for QT5
- application
-
-The virtual keyboard does pop up as expected, however, it will never hide
-even when the application is terminated. This problem is due to the order
-of the text APIs( text_input_activate and test_input_show_input_panel) are
-invoked in QT5 and a potential bug of the API implementation. The virtual
-keyboard works as expected if the test_input_show_input_panel() is invoked
-prior to the test_input_activate() as most of the weston sample applications
-do. However, the problem will show up if that order is reversed and the reason
-why is that the current_panel is not set in this case and hence this panel
-cannot be hidden.
-
-It is required to set the current_panel to the text_input when the input_panel
-becomes visible at the first time.
-
-Upstream status: Pending
-
-Signed-off-by: Eric Ruei <e-ruei1@ti.com>
----
- compositor/text-backend.c | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/compositor/text-backend.c b/compositor/text-backend.c
-index 664c36f..b610dfb 100644
---- a/compositor/text-backend.c
-+++ b/compositor/text-backend.c
-@@ -349,6 +349,7 @@ text_input_show_input_panel(struct wl_client *client,
- text_input->surface);
- wl_signal_emit(&ec->update_input_panel_signal,
- &text_input->cursor_rectangle);
-+ text_input->manager->current_text_input = text_input;
- }
- }
-
---
-1.9.1
-
diff --git a/meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0004-weston-Fix-touch-screen-crash-issue.patch b/meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0004-weston-Fix-touch-screen-crash-issue.patch
deleted file mode 100644
index 4849d5b64..000000000
--- a/meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0004-weston-Fix-touch-screen-crash-issue.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-From 60250e9dc57fe56148c8a24bba107bce8a873fb4 Mon Sep 17 00:00:00 2001
-From: Karthik Ramanan <a0393906@ti.com>
-Date: Mon, 12 Mar 2018 10:56:28 +0530
-Subject: [PATCH 4/4] weston: Fix touch screen crash issue
-
-Touch screen operation causes the weston to crash with segment fault sometimes.
-The crash occurs when the coordinate (x,y) passed to the weston input module
-is outside the view window, hence the weston compositor is not able to pick
-up a display view and there is no code to detect this condition at function
-notify_touch().
-
-Upstream status: pending
-
-Signed-off-by: Eric Ruei <e-ruei1@ti.com>
-Signed-off-by: Karthik Ramanan <a0393906@ti.com>
----
- libweston/input.c | 6 ++++++
- 1 file changed, 6 insertions(+)
-
-diff --git a/libweston/input.c b/libweston/input.c
-index 4fedc55..bcb2f28 100644
---- a/libweston/input.c
-+++ b/libweston/input.c
-@@ -2185,6 +2185,12 @@ notify_touch(struct weston_seat *seat, uint32_t time, int touch_id,
- * until all touch points are up again. */
- if (touch->num_tp == 1) {
- ev = weston_compositor_pick_view(ec, x, y, &sx, &sy);
-+ if (!ev)
-+ {
-+ weston_log("notify_touch: weston_compositor_pick_view(%d, %d) failed to find a view!\n",
-+ wl_fixed_to_int(x), wl_fixed_to_int(y));
-+ return;
-+ }
- weston_touch_set_focus(touch, ev);
- } else if (!touch->focus) {
- /* Unexpected condition: We have non-initial touch but
---
-1.9.1
-
diff --git a/meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0005-weston-drm-fix-dual-display-issue.patch b/meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0005-weston-drm-fix-dual-display-issue.patch
deleted file mode 100644
index 9b06b81b3..000000000
--- a/meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0005-weston-drm-fix-dual-display-issue.patch
+++ /dev/null
@@ -1,79 +0,0 @@
-From db6f5ce008d9b8a4cc7db71659ce1d21d3d7f97f Mon Sep 17 00:00:00 2001
-From: Eric Ruei <e-ruei1@ti.com>
-Date: Tue, 26 Mar 2019 13:32:31 -0400
-Subject: [PATCH 3/3] weston: drm: fix dual display issue
-
-This patch fixes the dual display issue by enhancing the primary plane
-search algorithm to keep the plane which is connected to the crtc of
-the output because the direct switching of active planes is not allowed.
-
-Upstream status: Pending
-
-Signed-off-by: Eric Ruei <e-ruei1@ti.com>
----
- libweston/compositor-drm.c | 17 ++++++++++++++++-
- 1 file changed, 16 insertions(+), 1 deletion(-)
-
-diff --git a/libweston/compositor-drm.c b/libweston/compositor-drm.c
-index 3891176..fa694c3 100644
---- a/libweston/compositor-drm.c
-+++ b/libweston/compositor-drm.c
-@@ -428,6 +428,7 @@ struct drm_plane {
-
- uint32_t possible_crtcs;
- uint32_t plane_id;
-+ uint32_t crtc_id;
- uint32_t count_formats;
-
- struct drm_property_info props[WDRM_PLANE__COUNT];
-@@ -4073,6 +4074,7 @@ drm_plane_create(struct drm_backend *b, const drmModePlane *kplane,
- if (kplane) {
- plane->possible_crtcs = kplane->possible_crtcs;
- plane->plane_id = kplane->plane_id;
-+ plane->crtc_id = kplane->crtc_id;
-
- props = drmModeObjectGetProperties(b->drm.fd, kplane->plane_id,
- DRM_MODE_OBJECT_PLANE);
-@@ -4097,6 +4099,7 @@ drm_plane_create(struct drm_backend *b, const drmModePlane *kplane,
- else {
- plane->possible_crtcs = (1 << output->pipe);
- plane->plane_id = 0;
-+ plane->crtc_id = 0;
- plane->count_formats = 1;
- plane->formats[0].format = format;
- plane->type = type;
-@@ -4157,6 +4160,7 @@ drm_output_find_special_plane(struct drm_backend *b, struct drm_output *output,
- enum wdrm_plane_type type)
- {
- struct drm_plane *plane;
-+ struct drm_plane *plane2 = NULL; /* secondary plane */
-
- if (!b->universal_planes) {
- uint32_t format;
-@@ -4204,11 +4208,22 @@ drm_output_find_special_plane(struct drm_backend *b, struct drm_output *output,
- if (found_elsewhere)
- continue;
-
-+ /* The output should keep the primary plane connected to its
-+ * crtc since the direct switching of active plane is not
-+ * allowed. */
-+ if ((type == WDRM_PLANE_TYPE_PRIMARY) &&
-+ (plane->crtc_id != output->crtc_id)) {
-+ if (plane->crtc_id == 0) {
-+ plane->possible_crtcs = (1 << output->pipe);
-+ plane2 = plane;
-+ }
-+ continue;
-+ }
- plane->possible_crtcs = (1 << output->pipe);
- return plane;
- }
-
-- return NULL;
-+ return plane2;
- }
-
- /**
---
-1.9.1
-
diff --git a/meta-agl-bsp/meta-ti/recipes-arago/weston/weston_8.0.0.bbappend b/meta-agl-bsp/meta-ti/recipes-arago/weston/weston_8.0.0.bbappend
deleted file mode 100644
index 09f1cdc53..000000000
--- a/meta-agl-bsp/meta-ti/recipes-arago/weston/weston_8.0.0.bbappend
+++ /dev/null
@@ -1,13 +0,0 @@
-PACKAGECONFIG[kms] = "-Dbackend-drm=true,-Dbackend-drm=false,drm udev virtual/libgbm mtdev"
-
-PR:append = ".arago2"
-
-FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
-
-# file://0005-weston-drm-fix-dual-display-issue.patch
-SRC_URI += " \
- file://0003-weston-Fix-virtual-keyboard-display-issue-for-QT5-ap.patch \
- file://0004-weston-Fix-touch-screen-crash-issue.patch \
-"
-
-INHIBIT_PACKAGE_STRIP = "1"
diff --git a/meta-agl-bsp/meta-ti/recipes-bsp/ti-sgx-ddk-km/ti-sgx-ddk-km/0001-Add-support-for-AGL-toolchain.patch b/meta-agl-bsp/meta-ti/recipes-bsp/ti-sgx-ddk-km/ti-sgx-ddk-km/0001-Add-support-for-AGL-toolchain.patch
deleted file mode 100644
index 93aff157a..000000000
--- a/meta-agl-bsp/meta-ti/recipes-bsp/ti-sgx-ddk-km/ti-sgx-ddk-km/0001-Add-support-for-AGL-toolchain.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-From 11131a5e778d19c06eefbcf61447c6efbcee0613 Mon Sep 17 00:00:00 2001
-From: Paul Barker <paul.barker@sancloud.co.uk>
-Date: Mon, 18 Nov 2019 08:47:41 +0000
-Subject: [PATCH] Add support for AGL toolchain
-
-We can use the pre-existing config for arm-linux-gnueabihf, we just need
-to make sure our toolchain is matched against this and not
-arm-linux-gnueabi.
-
-Signed-off-by: Paul Barker <paul.barker@sancloud.co.uk>
----
- eurasia_km/eurasiacon/build/linux2/config/compiler.mk | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/eurasia_km/eurasiacon/build/linux2/config/compiler.mk b/eurasia_km/eurasiacon/build/linux2/config/compiler.mk
-index 2ba3e5e..03e86c5 100644
---- a/eurasia_km/eurasiacon/build/linux2/config/compiler.mk
-+++ b/eurasia_km/eurasiacon/build/linux2/config/compiler.mk
-@@ -68,7 +68,7 @@ define calculate-compiler-preferred-target
- ifneq ($$(filter aarch64-%,$$($(1)_compiler_preferred_target)),)
- $(1)_compiler_preferred_target := aarch64-linux-gnu
- endif
-- ifneq ($$(filter arm-%-gnueabihf arm-oe-linux-gnueabi,$$($(1)_compiler_preferred_target)),)
-+ ifneq ($$(filter arm-%-gnueabihf arm-oe-linux-gnueabi arm-agl-linux-gnueabi,$$($(1)_compiler_preferred_target)),)
- $(1)_compiler_preferred_target := arm-linux-gnueabihf
- endif
- ifneq ($$(filter arm-%-gnueabi armv7a-cros-linux-gnueabi armv7hl-redhat-linux-gnueabi,$$($(1)_compiler_preferred_target)),)
---
-2.17.1
-
diff --git a/meta-agl-bsp/meta-ti/recipes-bsp/ti-sgx-ddk-km/ti-sgx-ddk-km_%.bbappend b/meta-agl-bsp/meta-ti/recipes-bsp/ti-sgx-ddk-km/ti-sgx-ddk-km_%.bbappend
deleted file mode 100644
index 62f1947e5..000000000
--- a/meta-agl-bsp/meta-ti/recipes-bsp/ti-sgx-ddk-km/ti-sgx-ddk-km_%.bbappend
+++ /dev/null
@@ -1,3 +0,0 @@
-FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
-
-SRC_URI += "file://0001-Add-support-for-AGL-toolchain.patch"
diff --git a/meta-agl-bsp/meta-ti/recipes-graphics/libgles/ti-sgx-ddk-um/pvr.service b/meta-agl-bsp/meta-ti/recipes-graphics/libgles/ti-sgx-ddk-um/pvr.service
deleted file mode 100644
index 1acb94fd4..000000000
--- a/meta-agl-bsp/meta-ti/recipes-graphics/libgles/ti-sgx-ddk-um/pvr.service
+++ /dev/null
@@ -1,19 +0,0 @@
-[Unit]
-Description=PVR service
-SourcePath=/etc/ti-sgx/rc.pvr
-DefaultDependencies=no
-Before=psplash-start.service
-
-[Service]
-Type=forking
-Restart=no
-TimeoutSec=5min
-IgnoreSIGPIPE=no
-KillMode=process
-GuessMainPID=no
-RemainAfterExit=yes
-ExecStart=/etc/ti-sgx/rc.pvr start
-ExecStop=/etc/ti-sgx/rc.pvr stop
-
-[Install]
-WantedBy=sysinit.target
diff --git a/meta-agl-bsp/meta-ti/recipes-graphics/libgles/ti-sgx-ddk-um_%.bbappend b/meta-agl-bsp/meta-ti/recipes-graphics/libgles/ti-sgx-ddk-um_%.bbappend
deleted file mode 100644
index 3f497a1be..000000000
--- a/meta-agl-bsp/meta-ti/recipes-graphics/libgles/ti-sgx-ddk-um_%.bbappend
+++ /dev/null
@@ -1,18 +0,0 @@
-FILESEXTRAPATHS:append := ":${THISDIR}/${PN}"
-FILES:${PN} += "/etc/ti-sgx/"
-
-SRC_URI:append = "\
- file://pvr.service \
-"
-
-inherit systemd
-
-SYSTEMD_PACKAGES = "${PN}"
-SYSTEMD_SERVICE:${PN} = "pvr.service"
-
-do_install:append() {
- install -d ${D}${systemd_system_unitdir}
- install -m 0755 ${WORKDIR}/pvr.service ${D}${systemd_system_unitdir}
- install -d ${D}/etc/ti-sgx
- install -m 0755 ${D}/etc/init.d/rc.pvr ${D}/etc/ti-sgx
-}
diff --git a/meta-agl-bsp/meta-ti/recipes-graphics/mesa/mesa-gl_%.bbappend b/meta-agl-bsp/meta-ti/recipes-graphics/mesa/mesa-gl_%.bbappend
deleted file mode 100644
index d12ab2be2..000000000
--- a/meta-agl-bsp/meta-ti/recipes-graphics/mesa/mesa-gl_%.bbappend
+++ /dev/null
@@ -1,7 +0,0 @@
-# Remove GBM support from Mesa
-# TI Platforms provides own GBM library
-
-PACKAGES:remove = "libgbm"
-PACKAGES:remove = "libgbm-dev"
-
-EXTRA_OECONF:remove = "--enable-gbm"
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
index 43a7d639b..b857cb19f 100644
--- 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
@@ -1,5 +1,5 @@
DESCRIPTION = "Xen hypervisor u-boot image"
-LICENSE = "GPLv2"
+LICENSE = "GPL-2.0-only"
SECTION = "console/tools"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/GPL-2.0;md5=801f80980d171dd6425610833a22dbe6"
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
new file mode 100644
index 000000000..8bc102c92
--- /dev/null
+++ b/meta-agl-bsp/virtualization-layer/recipes-graphics/mesa/mesa/0001-virgl-virgl_driinfo.h.in-Disable-by-default-emulated.patch
@@ -0,0 +1,34 @@
+From 39dea63ebce2764c683c8c2eddbb10cf07a970c4 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 f57e5880965..1c06f932c5c 100644
+--- a/src/gallium/drivers/virgl/virgl_driinfo.h.in
++++ b/src/gallium/drivers/virgl/virgl_driinfo.h.in
+@@ -8,7 +8,7 @@
+ // 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)
+ DRI_CONF_SECTION_END
+--
+2.35.1
+
diff --git a/meta-agl-bsp/virtualization-layer/recipes-graphics/mesa/mesa_22.%.bbappend b/meta-agl-bsp/virtualization-layer/recipes-graphics/mesa/mesa_22.%.bbappend
new file mode 100644
index 000000000..0a6606ebf
--- /dev/null
+++ b/meta-agl-bsp/virtualization-layer/recipes-graphics/mesa/mesa_22.%.bbappend
@@ -0,0 +1,3 @@
+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
new file mode 100644
index 000000000..5970414eb
--- /dev/null
+++ b/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto-dev.bbappend
@@ -0,0 +1,10 @@
+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-kmeta/bsp/virtio/virtio-aarch64-standard.scc b/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-aarch64-standard.scc
index d675de474..2d1570e9f 100644
--- a/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-kmeta/bsp/virtio/virtio-aarch64-standard.scc
+++ b/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-aarch64-standard.scc
@@ -7,7 +7,7 @@ include ktypes/standard/standard.scc nopatch
include arch/arm/aarch64.scc
include cfg/8250.scc
include cfg/virtio.scc
-include 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/virtio-drm.cfg b/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-drm.cfg
new file mode 100644
index 000000000..2facc345e
--- /dev/null
+++ b/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-drm.cfg
@@ -0,0 +1,3 @@
+CONFIG_DRM=y
+CONFIG_FB=y
+CONFIG_DRM_FBDEV_EMULATION=y
diff --git a/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-kmeta/arch/arm/aarch64.cfg b/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-kmeta/arch/arm/aarch64.cfg
deleted file mode 100644
index 25381e133..000000000
--- a/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-kmeta/arch/arm/aarch64.cfg
+++ /dev/null
@@ -1,29 +0,0 @@
-# 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-kmeta/arch/arm/aarch64.scc b/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-kmeta/arch/arm/aarch64.scc
deleted file mode 100644
index 1de6faf9b..000000000
--- a/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-kmeta/arch/arm/aarch64.scc
+++ /dev/null
@@ -1,2 +0,0 @@
-# SPDX-License-Identifier: MIT
-kconf hardware aarch64.cfg
diff --git a/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-kmeta/bsp/virtio/virtio-input-add-multi-touch-support.patch b/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-kmeta/bsp/virtio/virtio-input-add-multi-touch-support.patch
deleted file mode 100644
index 59a9f9b5d..000000000
--- a/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-kmeta/bsp/virtio/virtio-input-add-multi-touch-support.patch
+++ /dev/null
@@ -1,66 +0,0 @@
-From 16c10bede8b3d8594279752bf53153491f3f944f Mon Sep 17 00:00:00 2001
-From: Mathias Crombez <mathias.crombez@faurecia.com>
-Date: Fri, 15 Jan 2021 02:26:23 +0200
-Subject: [PATCH] virtio-input: add multi-touch support
-
-Without multi-touch slots allocated, ABS_MT_SLOT events will be lost by
-input_handle_abs_event.
-
-Implementation is based on uinput_create_device.
-
-Signed-off-by: Mathias Crombez <mathias.crombez@faurecia.com>
-Co-developed-by: Vasyl Vavrychuk <vasyl.vavrychuk@opensynergy.com>
-Signed-off-by: Vasyl Vavrychuk <vasyl.vavrychuk@opensynergy.com>
-Link: https://lore.kernel.org/r/20210115002623.8576-1-vasyl.vavrychuk@opensynergy.com
-Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
-Reviewed-by: Gerd Hoffmann <kraxel@redhat.com>
----
- drivers/virtio/virtio_input.c | 11 ++++++++++-
- 1 file changed, 10 insertions(+), 1 deletion(-)
-
-diff --git a/drivers/virtio/virtio_input.c b/drivers/virtio/virtio_input.c
-index 244965c20d9b..ce51ae165943 100644
---- a/drivers/virtio/virtio_input.c
-+++ b/drivers/virtio/virtio_input.c
-@@ -7,6 +7,7 @@
-
- #include <uapi/linux/virtio_ids.h>
- #include <uapi/linux/virtio_input.h>
-+#include <linux/input/mt.h>
-
- struct virtio_input {
- struct virtio_device *vdev;
-@@ -219,7 +220,7 @@ static int virtinput_probe(struct virtio_device *vdev)
- struct virtio_input *vi;
- unsigned long flags;
- size_t size;
-- int abs, err;
-+ int abs, err, nslots;
-
- if (!virtio_has_feature(vdev, VIRTIO_F_VERSION_1))
- return -ENODEV;
-@@ -304,6 +305,13 @@ static int virtinput_probe(struct virtio_device *vdev)
- continue;
- virtinput_cfg_abs(vi, abs);
- }
-+
-+ if (test_bit(ABS_MT_SLOT, vi->idev->absbit)) {
-+ nslots = input_abs_get_max(vi->idev, ABS_MT_SLOT) + 1;
-+ err = input_mt_init_slots(vi->idev, nslots, 0);
-+ if (err)
-+ goto err_mt_init_slots;
-+ }
- }
-
- virtio_device_ready(vdev);
-@@ -319,6 +327,7 @@ static int virtinput_probe(struct virtio_device *vdev)
- spin_lock_irqsave(&vi->lock, flags);
- vi->ready = false;
- spin_unlock_irqrestore(&vi->lock, flags);
-+err_mt_init_slots:
- input_free_device(vi->idev);
- err_input_alloc:
- vdev->config->del_vqs(vdev);
---
-2.31.1
-
diff --git a/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-kmeta/bsp/virtio/virtio-snd/0001-uapi-virtio_ids-add-a-sound-device-type-ID-from-OASI.patch b/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-kmeta/bsp/virtio/virtio-snd/0001-uapi-virtio_ids-add-a-sound-device-type-ID-from-OASI.patch
deleted file mode 100644
index e303d10c7..000000000
--- a/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-kmeta/bsp/virtio/virtio-snd/0001-uapi-virtio_ids-add-a-sound-device-type-ID-from-OASI.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From 6afbb3650d7e02785030f1212c88b50d7296bb45 Mon Sep 17 00:00:00 2001
-From: Anton Yakovlev <anton.yakovlev@opensynergy.com>
-Date: Tue, 2 Mar 2021 17:47:01 +0100
-Subject: [PATCH] uapi: virtio_ids: add a sound device type ID from OASIS spec
-
-The OASIS virtio spec defines a sound device type ID that is not
-present in the header yet.
-
-Signed-off-by: Anton Yakovlev <anton.yakovlev@opensynergy.com>
-Link: https://lore.kernel.org/r/20210302164709.3142702-2-anton.yakovlev@opensynergy.com
-Signed-off-by: Takashi Iwai <tiwai@suse.de>
-Signed-off-by: Vasyl Vavrychuk <vasyl.vavrychuk@opensynergy.com>
----
- include/uapi/linux/virtio_ids.h | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/include/uapi/linux/virtio_ids.h b/include/uapi/linux/virtio_ids.h
-index b052355ac7a3..bc740d6d2259 100644
---- a/include/uapi/linux/virtio_ids.h
-+++ b/include/uapi/linux/virtio_ids.h
-@@ -45,6 +45,7 @@
- #define VIRTIO_ID_CRYPTO 20 /* virtio crypto */
- #define VIRTIO_ID_IOMMU 23 /* virtio IOMMU */
- #define VIRTIO_ID_MEM 24 /* virtio mem */
-+#define VIRTIO_ID_SOUND 25 /* virtio sound */
- #define VIRTIO_ID_FS 26 /* virtio filesystem */
- #define VIRTIO_ID_PMEM 27 /* virtio pmem */
- #define VIRTIO_ID_MAC80211_HWSIM 29 /* virtio mac80211-hwsim */
diff --git a/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-kmeta/bsp/virtio/virtio-snd/0002-ALSA-virtio-add-virtio-sound-driver.patch b/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-kmeta/bsp/virtio/virtio-snd/0002-ALSA-virtio-add-virtio-sound-driver.patch
deleted file mode 100644
index e2f80442f..000000000
--- a/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-kmeta/bsp/virtio/virtio-snd/0002-ALSA-virtio-add-virtio-sound-driver.patch
+++ /dev/null
@@ -1,849 +0,0 @@
-From a1cde5ccba57562aa77739b63b50586e6b197b52 Mon Sep 17 00:00:00 2001
-From: Anton Yakovlev <anton.yakovlev@opensynergy.com>
-Date: Tue, 2 Mar 2021 17:47:02 +0100
-Subject: [PATCH] ALSA: virtio: add virtio sound driver
-
-Introduce skeleton of the virtio sound driver. The driver implements
-the virtio sound device specification, which has become part of the
-virtio standard.
-
-Initial initialization of the device, virtqueues and creation of an
-empty ALSA sound device.
-
-Signed-off-by: Anton Yakovlev <anton.yakovlev@opensynergy.com>
-Link: https://lore.kernel.org/r/20210302164709.3142702-3-anton.yakovlev@opensynergy.com
-Signed-off-by: Takashi Iwai <tiwai@suse.de>
-Signed-off-by: Vasyl Vavrychuk <vasyl.vavrychuk@opensynergy.com>
----
- MAINTAINERS | 9 +
- include/uapi/linux/virtio_snd.h | 334 ++++++++++++++++++++++++++++++++
- sound/Kconfig | 2 +
- sound/Makefile | 3 +-
- sound/virtio/Kconfig | 10 +
- sound/virtio/Makefile | 7 +
- sound/virtio/virtio_card.c | 324 +++++++++++++++++++++++++++++++
- sound/virtio/virtio_card.h | 65 +++++++
- 8 files changed, 753 insertions(+), 1 deletion(-)
- create mode 100644 include/uapi/linux/virtio_snd.h
- create mode 100644 sound/virtio/Kconfig
- create mode 100644 sound/virtio/Makefile
- create mode 100644 sound/virtio/virtio_card.c
- create mode 100644 sound/virtio/virtio_card.h
-
-diff --git a/MAINTAINERS b/MAINTAINERS
-index 407ae5c24566..49772b741967 100644
---- a/MAINTAINERS
-+++ b/MAINTAINERS
-@@ -18670,6 +18670,15 @@ W: https://virtio-mem.gitlab.io/
- F: drivers/virtio/virtio_mem.c
- F: include/uapi/linux/virtio_mem.h
-
-+VIRTIO SOUND DRIVER
-+M: Anton Yakovlev <anton.yakovlev@opensynergy.com>
-+M: "Michael S. Tsirkin" <mst@redhat.com>
-+L: virtualization@lists.linux-foundation.org
-+L: alsa-devel@alsa-project.org (moderated for non-subscribers)
-+S: Maintained
-+F: include/uapi/linux/virtio_snd.h
-+F: sound/virtio/*
-+
- VIRTUAL BOX GUEST DEVICE DRIVER
- M: Hans de Goede <hdegoede@redhat.com>
- M: Arnd Bergmann <arnd@arndb.de>
-diff --git a/include/uapi/linux/virtio_snd.h b/include/uapi/linux/virtio_snd.h
-new file mode 100644
-index 000000000000..dfe49547a7b0
---- /dev/null
-+++ b/include/uapi/linux/virtio_snd.h
-@@ -0,0 +1,334 @@
-+/* SPDX-License-Identifier: BSD-3-Clause */
-+/*
-+ * Copyright (C) 2021 OpenSynergy GmbH
-+ */
-+#ifndef VIRTIO_SND_IF_H
-+#define VIRTIO_SND_IF_H
-+
-+#include <linux/virtio_types.h>
-+
-+/*******************************************************************************
-+ * CONFIGURATION SPACE
-+ */
-+struct virtio_snd_config {
-+ /* # of available physical jacks */
-+ __le32 jacks;
-+ /* # of available PCM streams */
-+ __le32 streams;
-+ /* # of available channel maps */
-+ __le32 chmaps;
-+};
-+
-+enum {
-+ /* device virtqueue indexes */
-+ VIRTIO_SND_VQ_CONTROL = 0,
-+ VIRTIO_SND_VQ_EVENT,
-+ VIRTIO_SND_VQ_TX,
-+ VIRTIO_SND_VQ_RX,
-+ /* # of device virtqueues */
-+ VIRTIO_SND_VQ_MAX
-+};
-+
-+/*******************************************************************************
-+ * COMMON DEFINITIONS
-+ */
-+
-+/* supported dataflow directions */
-+enum {
-+ VIRTIO_SND_D_OUTPUT = 0,
-+ VIRTIO_SND_D_INPUT
-+};
-+
-+enum {
-+ /* jack control request types */
-+ VIRTIO_SND_R_JACK_INFO = 1,
-+ VIRTIO_SND_R_JACK_REMAP,
-+
-+ /* PCM control request types */
-+ VIRTIO_SND_R_PCM_INFO = 0x0100,
-+ VIRTIO_SND_R_PCM_SET_PARAMS,
-+ VIRTIO_SND_R_PCM_PREPARE,
-+ VIRTIO_SND_R_PCM_RELEASE,
-+ VIRTIO_SND_R_PCM_START,
-+ VIRTIO_SND_R_PCM_STOP,
-+
-+ /* channel map control request types */
-+ VIRTIO_SND_R_CHMAP_INFO = 0x0200,
-+
-+ /* jack event types */
-+ VIRTIO_SND_EVT_JACK_CONNECTED = 0x1000,
-+ VIRTIO_SND_EVT_JACK_DISCONNECTED,
-+
-+ /* PCM event types */
-+ VIRTIO_SND_EVT_PCM_PERIOD_ELAPSED = 0x1100,
-+ VIRTIO_SND_EVT_PCM_XRUN,
-+
-+ /* common status codes */
-+ VIRTIO_SND_S_OK = 0x8000,
-+ VIRTIO_SND_S_BAD_MSG,
-+ VIRTIO_SND_S_NOT_SUPP,
-+ VIRTIO_SND_S_IO_ERR
-+};
-+
-+/* common header */
-+struct virtio_snd_hdr {
-+ __le32 code;
-+};
-+
-+/* event notification */
-+struct virtio_snd_event {
-+ /* VIRTIO_SND_EVT_XXX */
-+ struct virtio_snd_hdr hdr;
-+ /* optional event data */
-+ __le32 data;
-+};
-+
-+/* common control request to query an item information */
-+struct virtio_snd_query_info {
-+ /* VIRTIO_SND_R_XXX_INFO */
-+ struct virtio_snd_hdr hdr;
-+ /* item start identifier */
-+ __le32 start_id;
-+ /* item count to query */
-+ __le32 count;
-+ /* item information size in bytes */
-+ __le32 size;
-+};
-+
-+/* common item information header */
-+struct virtio_snd_info {
-+ /* function group node id (High Definition Audio Specification 7.1.2) */
-+ __le32 hda_fn_nid;
-+};
-+
-+/*******************************************************************************
-+ * JACK CONTROL MESSAGES
-+ */
-+struct virtio_snd_jack_hdr {
-+ /* VIRTIO_SND_R_JACK_XXX */
-+ struct virtio_snd_hdr hdr;
-+ /* 0 ... virtio_snd_config::jacks - 1 */
-+ __le32 jack_id;
-+};
-+
-+/* supported jack features */
-+enum {
-+ VIRTIO_SND_JACK_F_REMAP = 0
-+};
-+
-+struct virtio_snd_jack_info {
-+ /* common header */
-+ struct virtio_snd_info hdr;
-+ /* supported feature bit map (1 << VIRTIO_SND_JACK_F_XXX) */
-+ __le32 features;
-+ /* pin configuration (High Definition Audio Specification 7.3.3.31) */
-+ __le32 hda_reg_defconf;
-+ /* pin capabilities (High Definition Audio Specification 7.3.4.9) */
-+ __le32 hda_reg_caps;
-+ /* current jack connection status (0: disconnected, 1: connected) */
-+ __u8 connected;
-+
-+ __u8 padding[7];
-+};
-+
-+/* jack remapping control request */
-+struct virtio_snd_jack_remap {
-+ /* .code = VIRTIO_SND_R_JACK_REMAP */
-+ struct virtio_snd_jack_hdr hdr;
-+ /* selected association number */
-+ __le32 association;
-+ /* selected sequence number */
-+ __le32 sequence;
-+};
-+
-+/*******************************************************************************
-+ * PCM CONTROL MESSAGES
-+ */
-+struct virtio_snd_pcm_hdr {
-+ /* VIRTIO_SND_R_PCM_XXX */
-+ struct virtio_snd_hdr hdr;
-+ /* 0 ... virtio_snd_config::streams - 1 */
-+ __le32 stream_id;
-+};
-+
-+/* supported PCM stream features */
-+enum {
-+ VIRTIO_SND_PCM_F_SHMEM_HOST = 0,
-+ VIRTIO_SND_PCM_F_SHMEM_GUEST,
-+ VIRTIO_SND_PCM_F_MSG_POLLING,
-+ VIRTIO_SND_PCM_F_EVT_SHMEM_PERIODS,
-+ VIRTIO_SND_PCM_F_EVT_XRUNS
-+};
-+
-+/* supported PCM sample formats */
-+enum {
-+ /* analog formats (width / physical width) */
-+ VIRTIO_SND_PCM_FMT_IMA_ADPCM = 0, /* 4 / 4 bits */
-+ VIRTIO_SND_PCM_FMT_MU_LAW, /* 8 / 8 bits */
-+ VIRTIO_SND_PCM_FMT_A_LAW, /* 8 / 8 bits */
-+ VIRTIO_SND_PCM_FMT_S8, /* 8 / 8 bits */
-+ VIRTIO_SND_PCM_FMT_U8, /* 8 / 8 bits */
-+ VIRTIO_SND_PCM_FMT_S16, /* 16 / 16 bits */
-+ VIRTIO_SND_PCM_FMT_U16, /* 16 / 16 bits */
-+ VIRTIO_SND_PCM_FMT_S18_3, /* 18 / 24 bits */
-+ VIRTIO_SND_PCM_FMT_U18_3, /* 18 / 24 bits */
-+ VIRTIO_SND_PCM_FMT_S20_3, /* 20 / 24 bits */
-+ VIRTIO_SND_PCM_FMT_U20_3, /* 20 / 24 bits */
-+ VIRTIO_SND_PCM_FMT_S24_3, /* 24 / 24 bits */
-+ VIRTIO_SND_PCM_FMT_U24_3, /* 24 / 24 bits */
-+ VIRTIO_SND_PCM_FMT_S20, /* 20 / 32 bits */
-+ VIRTIO_SND_PCM_FMT_U20, /* 20 / 32 bits */
-+ VIRTIO_SND_PCM_FMT_S24, /* 24 / 32 bits */
-+ VIRTIO_SND_PCM_FMT_U24, /* 24 / 32 bits */
-+ VIRTIO_SND_PCM_FMT_S32, /* 32 / 32 bits */
-+ VIRTIO_SND_PCM_FMT_U32, /* 32 / 32 bits */
-+ VIRTIO_SND_PCM_FMT_FLOAT, /* 32 / 32 bits */
-+ VIRTIO_SND_PCM_FMT_FLOAT64, /* 64 / 64 bits */
-+ /* digital formats (width / physical width) */
-+ VIRTIO_SND_PCM_FMT_DSD_U8, /* 8 / 8 bits */
-+ VIRTIO_SND_PCM_FMT_DSD_U16, /* 16 / 16 bits */
-+ VIRTIO_SND_PCM_FMT_DSD_U32, /* 32 / 32 bits */
-+ VIRTIO_SND_PCM_FMT_IEC958_SUBFRAME /* 32 / 32 bits */
-+};
-+
-+/* supported PCM frame rates */
-+enum {
-+ VIRTIO_SND_PCM_RATE_5512 = 0,
-+ VIRTIO_SND_PCM_RATE_8000,
-+ VIRTIO_SND_PCM_RATE_11025,
-+ VIRTIO_SND_PCM_RATE_16000,
-+ VIRTIO_SND_PCM_RATE_22050,
-+ VIRTIO_SND_PCM_RATE_32000,
-+ VIRTIO_SND_PCM_RATE_44100,
-+ VIRTIO_SND_PCM_RATE_48000,
-+ VIRTIO_SND_PCM_RATE_64000,
-+ VIRTIO_SND_PCM_RATE_88200,
-+ VIRTIO_SND_PCM_RATE_96000,
-+ VIRTIO_SND_PCM_RATE_176400,
-+ VIRTIO_SND_PCM_RATE_192000,
-+ VIRTIO_SND_PCM_RATE_384000
-+};
-+
-+struct virtio_snd_pcm_info {
-+ /* common header */
-+ struct virtio_snd_info hdr;
-+ /* supported feature bit map (1 << VIRTIO_SND_PCM_F_XXX) */
-+ __le32 features;
-+ /* supported sample format bit map (1 << VIRTIO_SND_PCM_FMT_XXX) */
-+ __le64 formats;
-+ /* supported frame rate bit map (1 << VIRTIO_SND_PCM_RATE_XXX) */
-+ __le64 rates;
-+ /* dataflow direction (VIRTIO_SND_D_XXX) */
-+ __u8 direction;
-+ /* minimum # of supported channels */
-+ __u8 channels_min;
-+ /* maximum # of supported channels */
-+ __u8 channels_max;
-+
-+ __u8 padding[5];
-+};
-+
-+/* set PCM stream format */
-+struct virtio_snd_pcm_set_params {
-+ /* .code = VIRTIO_SND_R_PCM_SET_PARAMS */
-+ struct virtio_snd_pcm_hdr hdr;
-+ /* size of the hardware buffer */
-+ __le32 buffer_bytes;
-+ /* size of the hardware period */
-+ __le32 period_bytes;
-+ /* selected feature bit map (1 << VIRTIO_SND_PCM_F_XXX) */
-+ __le32 features;
-+ /* selected # of channels */
-+ __u8 channels;
-+ /* selected sample format (VIRTIO_SND_PCM_FMT_XXX) */
-+ __u8 format;
-+ /* selected frame rate (VIRTIO_SND_PCM_RATE_XXX) */
-+ __u8 rate;
-+
-+ __u8 padding;
-+};
-+
-+/*******************************************************************************
-+ * PCM I/O MESSAGES
-+ */
-+
-+/* I/O request header */
-+struct virtio_snd_pcm_xfer {
-+ /* 0 ... virtio_snd_config::streams - 1 */
-+ __le32 stream_id;
-+};
-+
-+/* I/O request status */
-+struct virtio_snd_pcm_status {
-+ /* VIRTIO_SND_S_XXX */
-+ __le32 status;
-+ /* current device latency */
-+ __le32 latency_bytes;
-+};
-+
-+/*******************************************************************************
-+ * CHANNEL MAP CONTROL MESSAGES
-+ */
-+struct virtio_snd_chmap_hdr {
-+ /* VIRTIO_SND_R_CHMAP_XXX */
-+ struct virtio_snd_hdr hdr;
-+ /* 0 ... virtio_snd_config::chmaps - 1 */
-+ __le32 chmap_id;
-+};
-+
-+/* standard channel position definition */
-+enum {
-+ VIRTIO_SND_CHMAP_NONE = 0, /* undefined */
-+ VIRTIO_SND_CHMAP_NA, /* silent */
-+ VIRTIO_SND_CHMAP_MONO, /* mono stream */
-+ VIRTIO_SND_CHMAP_FL, /* front left */
-+ VIRTIO_SND_CHMAP_FR, /* front right */
-+ VIRTIO_SND_CHMAP_RL, /* rear left */
-+ VIRTIO_SND_CHMAP_RR, /* rear right */
-+ VIRTIO_SND_CHMAP_FC, /* front center */
-+ VIRTIO_SND_CHMAP_LFE, /* low frequency (LFE) */
-+ VIRTIO_SND_CHMAP_SL, /* side left */
-+ VIRTIO_SND_CHMAP_SR, /* side right */
-+ VIRTIO_SND_CHMAP_RC, /* rear center */
-+ VIRTIO_SND_CHMAP_FLC, /* front left center */
-+ VIRTIO_SND_CHMAP_FRC, /* front right center */
-+ VIRTIO_SND_CHMAP_RLC, /* rear left center */
-+ VIRTIO_SND_CHMAP_RRC, /* rear right center */
-+ VIRTIO_SND_CHMAP_FLW, /* front left wide */
-+ VIRTIO_SND_CHMAP_FRW, /* front right wide */
-+ VIRTIO_SND_CHMAP_FLH, /* front left high */
-+ VIRTIO_SND_CHMAP_FCH, /* front center high */
-+ VIRTIO_SND_CHMAP_FRH, /* front right high */
-+ VIRTIO_SND_CHMAP_TC, /* top center */
-+ VIRTIO_SND_CHMAP_TFL, /* top front left */
-+ VIRTIO_SND_CHMAP_TFR, /* top front right */
-+ VIRTIO_SND_CHMAP_TFC, /* top front center */
-+ VIRTIO_SND_CHMAP_TRL, /* top rear left */
-+ VIRTIO_SND_CHMAP_TRR, /* top rear right */
-+ VIRTIO_SND_CHMAP_TRC, /* top rear center */
-+ VIRTIO_SND_CHMAP_TFLC, /* top front left center */
-+ VIRTIO_SND_CHMAP_TFRC, /* top front right center */
-+ VIRTIO_SND_CHMAP_TSL, /* top side left */
-+ VIRTIO_SND_CHMAP_TSR, /* top side right */
-+ VIRTIO_SND_CHMAP_LLFE, /* left LFE */
-+ VIRTIO_SND_CHMAP_RLFE, /* right LFE */
-+ VIRTIO_SND_CHMAP_BC, /* bottom center */
-+ VIRTIO_SND_CHMAP_BLC, /* bottom left center */
-+ VIRTIO_SND_CHMAP_BRC /* bottom right center */
-+};
-+
-+/* maximum possible number of channels */
-+#define VIRTIO_SND_CHMAP_MAX_SIZE 18
-+
-+struct virtio_snd_chmap_info {
-+ /* common header */
-+ struct virtio_snd_info hdr;
-+ /* dataflow direction (VIRTIO_SND_D_XXX) */
-+ __u8 direction;
-+ /* # of valid channel position values */
-+ __u8 channels;
-+ /* channel position values (VIRTIO_SND_CHMAP_XXX) */
-+ __u8 positions[VIRTIO_SND_CHMAP_MAX_SIZE];
-+};
-+
-+#endif /* VIRTIO_SND_IF_H */
-diff --git a/sound/Kconfig b/sound/Kconfig
-index 36785410fbe1..e56d96d2b11c 100644
---- a/sound/Kconfig
-+++ b/sound/Kconfig
-@@ -99,6 +99,8 @@ source "sound/synth/Kconfig"
-
- source "sound/xen/Kconfig"
-
-+source "sound/virtio/Kconfig"
-+
- endif # SND
-
- endif # !UML
-diff --git a/sound/Makefile b/sound/Makefile
-index 797ecdcd35e2..04ef04b1168f 100644
---- a/sound/Makefile
-+++ b/sound/Makefile
-@@ -5,7 +5,8 @@
- obj-$(CONFIG_SOUND) += soundcore.o
- obj-$(CONFIG_DMASOUND) += oss/dmasound/
- obj-$(CONFIG_SND) += core/ i2c/ drivers/ isa/ pci/ ppc/ arm/ sh/ synth/ usb/ \
-- firewire/ sparc/ spi/ parisc/ pcmcia/ mips/ soc/ atmel/ hda/ x86/ xen/
-+ firewire/ sparc/ spi/ parisc/ pcmcia/ mips/ soc/ atmel/ hda/ x86/ xen/ \
-+ virtio/
- obj-$(CONFIG_SND_AOA) += aoa/
-
- # This one must be compilable even if sound is configured out
-diff --git a/sound/virtio/Kconfig b/sound/virtio/Kconfig
-new file mode 100644
-index 000000000000..094cba24ee5b
---- /dev/null
-+++ b/sound/virtio/Kconfig
-@@ -0,0 +1,10 @@
-+# SPDX-License-Identifier: GPL-2.0+
-+# Sound card driver for virtio
-+
-+config SND_VIRTIO
-+ tristate "Virtio sound driver"
-+ depends on VIRTIO
-+ select SND_PCM
-+ select SND_JACK
-+ help
-+ This is the virtual sound driver for virtio. Say Y or M.
-diff --git a/sound/virtio/Makefile b/sound/virtio/Makefile
-new file mode 100644
-index 000000000000..8c87ebb9982b
---- /dev/null
-+++ b/sound/virtio/Makefile
-@@ -0,0 +1,7 @@
-+# SPDX-License-Identifier: GPL-2.0+
-+
-+obj-$(CONFIG_SND_VIRTIO) += virtio_snd.o
-+
-+virtio_snd-objs := \
-+ virtio_card.o
-+
-diff --git a/sound/virtio/virtio_card.c b/sound/virtio/virtio_card.c
-new file mode 100644
-index 000000000000..5a37056858e9
---- /dev/null
-+++ b/sound/virtio/virtio_card.c
-@@ -0,0 +1,324 @@
-+// SPDX-License-Identifier: GPL-2.0+
-+/*
-+ * virtio-snd: Virtio sound device
-+ * Copyright (C) 2021 OpenSynergy GmbH
-+ */
-+#include <linux/module.h>
-+#include <linux/moduleparam.h>
-+#include <linux/virtio_config.h>
-+#include <sound/initval.h>
-+#include <uapi/linux/virtio_ids.h>
-+
-+#include "virtio_card.h"
-+
-+static void virtsnd_remove(struct virtio_device *vdev);
-+
-+/**
-+ * virtsnd_event_send() - Add an event to the event queue.
-+ * @vqueue: Underlying event virtqueue.
-+ * @event: Event.
-+ * @notify: Indicates whether or not to send a notification to the device.
-+ * @gfp: Kernel flags for memory allocation.
-+ *
-+ * Context: Any context.
-+ */
-+static void virtsnd_event_send(struct virtqueue *vqueue,
-+ struct virtio_snd_event *event, bool notify,
-+ gfp_t gfp)
-+{
-+ struct scatterlist sg;
-+ struct scatterlist *psgs[1] = { &sg };
-+
-+ /* reset event content */
-+ memset(event, 0, sizeof(*event));
-+
-+ sg_init_one(&sg, event, sizeof(*event));
-+
-+ if (virtqueue_add_sgs(vqueue, psgs, 0, 1, event, gfp) || !notify)
-+ return;
-+
-+ if (virtqueue_kick_prepare(vqueue))
-+ virtqueue_notify(vqueue);
-+}
-+
-+/**
-+ * virtsnd_event_dispatch() - Dispatch an event from the device side.
-+ * @snd: VirtIO sound device.
-+ * @event: VirtIO sound event.
-+ *
-+ * Context: Any context.
-+ */
-+static void virtsnd_event_dispatch(struct virtio_snd *snd,
-+ struct virtio_snd_event *event)
-+{
-+}
-+
-+/**
-+ * virtsnd_event_notify_cb() - Dispatch all reported events from the event queue.
-+ * @vqueue: Underlying event virtqueue.
-+ *
-+ * This callback function is called upon a vring interrupt request from the
-+ * device.
-+ *
-+ * Context: Interrupt context.
-+ */
-+static void virtsnd_event_notify_cb(struct virtqueue *vqueue)
-+{
-+ struct virtio_snd *snd = vqueue->vdev->priv;
-+ struct virtio_snd_queue *queue = virtsnd_event_queue(snd);
-+ struct virtio_snd_event *event;
-+ u32 length;
-+ unsigned long flags;
-+
-+ spin_lock_irqsave(&queue->lock, flags);
-+ do {
-+ virtqueue_disable_cb(vqueue);
-+ while ((event = virtqueue_get_buf(vqueue, &length))) {
-+ virtsnd_event_dispatch(snd, event);
-+ virtsnd_event_send(vqueue, event, true, GFP_ATOMIC);
-+ }
-+ if (unlikely(virtqueue_is_broken(vqueue)))
-+ break;
-+ } while (!virtqueue_enable_cb(vqueue));
-+ spin_unlock_irqrestore(&queue->lock, flags);
-+}
-+
-+/**
-+ * virtsnd_find_vqs() - Enumerate and initialize all virtqueues.
-+ * @snd: VirtIO sound device.
-+ *
-+ * After calling this function, the event queue is disabled.
-+ *
-+ * Context: Any context.
-+ * Return: 0 on success, -errno on failure.
-+ */
-+static int virtsnd_find_vqs(struct virtio_snd *snd)
-+{
-+ struct virtio_device *vdev = snd->vdev;
-+ static vq_callback_t *callbacks[VIRTIO_SND_VQ_MAX] = {
-+ [VIRTIO_SND_VQ_EVENT] = virtsnd_event_notify_cb
-+ };
-+ static const char *names[VIRTIO_SND_VQ_MAX] = {
-+ [VIRTIO_SND_VQ_EVENT] = "virtsnd-event"
-+ };
-+ struct virtqueue *vqs[VIRTIO_SND_VQ_MAX] = { 0 };
-+ unsigned int i;
-+ unsigned int n;
-+ int rc;
-+
-+ rc = virtio_find_vqs(vdev, VIRTIO_SND_VQ_MAX, vqs, callbacks, names,
-+ NULL);
-+ if (rc) {
-+ dev_err(&vdev->dev, "failed to initialize virtqueues\n");
-+ return rc;
-+ }
-+
-+ for (i = 0; i < VIRTIO_SND_VQ_MAX; ++i)
-+ snd->queues[i].vqueue = vqs[i];
-+
-+ /* Allocate events and populate the event queue */
-+ virtqueue_disable_cb(vqs[VIRTIO_SND_VQ_EVENT]);
-+
-+ n = virtqueue_get_vring_size(vqs[VIRTIO_SND_VQ_EVENT]);
-+
-+ snd->event_msgs = kmalloc_array(n, sizeof(*snd->event_msgs),
-+ GFP_KERNEL);
-+ if (!snd->event_msgs)
-+ return -ENOMEM;
-+
-+ for (i = 0; i < n; ++i)
-+ virtsnd_event_send(vqs[VIRTIO_SND_VQ_EVENT],
-+ &snd->event_msgs[i], false, GFP_KERNEL);
-+
-+ return 0;
-+}
-+
-+/**
-+ * virtsnd_enable_event_vq() - Enable the event virtqueue.
-+ * @snd: VirtIO sound device.
-+ *
-+ * Context: Any context.
-+ */
-+static void virtsnd_enable_event_vq(struct virtio_snd *snd)
-+{
-+ struct virtio_snd_queue *queue = virtsnd_event_queue(snd);
-+
-+ if (!virtqueue_enable_cb(queue->vqueue))
-+ virtsnd_event_notify_cb(queue->vqueue);
-+}
-+
-+/**
-+ * virtsnd_disable_event_vq() - Disable the event virtqueue.
-+ * @snd: VirtIO sound device.
-+ *
-+ * Context: Any context.
-+ */
-+static void virtsnd_disable_event_vq(struct virtio_snd *snd)
-+{
-+ struct virtio_snd_queue *queue = virtsnd_event_queue(snd);
-+ struct virtio_snd_event *event;
-+ u32 length;
-+ unsigned long flags;
-+
-+ if (queue->vqueue) {
-+ spin_lock_irqsave(&queue->lock, flags);
-+ virtqueue_disable_cb(queue->vqueue);
-+ while ((event = virtqueue_get_buf(queue->vqueue, &length)))
-+ virtsnd_event_dispatch(snd, event);
-+ spin_unlock_irqrestore(&queue->lock, flags);
-+ }
-+}
-+
-+/**
-+ * virtsnd_build_devs() - Read configuration and build ALSA devices.
-+ * @snd: VirtIO sound device.
-+ *
-+ * Context: Any context that permits to sleep.
-+ * Return: 0 on success, -errno on failure.
-+ */
-+static int virtsnd_build_devs(struct virtio_snd *snd)
-+{
-+ struct virtio_device *vdev = snd->vdev;
-+ struct device *dev = &vdev->dev;
-+ int rc;
-+
-+ rc = snd_card_new(dev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1,
-+ THIS_MODULE, 0, &snd->card);
-+ if (rc < 0)
-+ return rc;
-+
-+ snd->card->private_data = snd;
-+
-+ strscpy(snd->card->driver, VIRTIO_SND_CARD_DRIVER,
-+ sizeof(snd->card->driver));
-+ strscpy(snd->card->shortname, VIRTIO_SND_CARD_NAME,
-+ sizeof(snd->card->shortname));
-+ if (dev->parent->bus)
-+ snprintf(snd->card->longname, sizeof(snd->card->longname),
-+ VIRTIO_SND_CARD_NAME " at %s/%s/%s",
-+ dev->parent->bus->name, dev_name(dev->parent),
-+ dev_name(dev));
-+ else
-+ snprintf(snd->card->longname, sizeof(snd->card->longname),
-+ VIRTIO_SND_CARD_NAME " at %s/%s",
-+ dev_name(dev->parent), dev_name(dev));
-+
-+ return snd_card_register(snd->card);
-+}
-+
-+/**
-+ * virtsnd_validate() - Validate if the device can be started.
-+ * @vdev: VirtIO parent device.
-+ *
-+ * Context: Any context.
-+ * Return: 0 on success, -EINVAL on failure.
-+ */
-+static int virtsnd_validate(struct virtio_device *vdev)
-+{
-+ if (!vdev->config->get) {
-+ dev_err(&vdev->dev, "configuration access disabled\n");
-+ return -EINVAL;
-+ }
-+
-+ if (!virtio_has_feature(vdev, VIRTIO_F_VERSION_1)) {
-+ dev_err(&vdev->dev,
-+ "device does not comply with spec version 1.x\n");
-+ return -EINVAL;
-+ }
-+
-+ return 0;
-+}
-+
-+/**
-+ * virtsnd_probe() - Create and initialize the device.
-+ * @vdev: VirtIO parent device.
-+ *
-+ * Context: Any context that permits to sleep.
-+ * Return: 0 on success, -errno on failure.
-+ */
-+static int virtsnd_probe(struct virtio_device *vdev)
-+{
-+ struct virtio_snd *snd;
-+ unsigned int i;
-+ int rc;
-+
-+ snd = devm_kzalloc(&vdev->dev, sizeof(*snd), GFP_KERNEL);
-+ if (!snd)
-+ return -ENOMEM;
-+
-+ snd->vdev = vdev;
-+
-+ vdev->priv = snd;
-+
-+ for (i = 0; i < VIRTIO_SND_VQ_MAX; ++i)
-+ spin_lock_init(&snd->queues[i].lock);
-+
-+ rc = virtsnd_find_vqs(snd);
-+ if (rc)
-+ goto on_exit;
-+
-+ virtio_device_ready(vdev);
-+
-+ rc = virtsnd_build_devs(snd);
-+ if (rc)
-+ goto on_exit;
-+
-+ virtsnd_enable_event_vq(snd);
-+
-+on_exit:
-+ if (rc)
-+ virtsnd_remove(vdev);
-+
-+ return rc;
-+}
-+
-+/**
-+ * virtsnd_remove() - Remove VirtIO and ALSA devices.
-+ * @vdev: VirtIO parent device.
-+ *
-+ * Context: Any context that permits to sleep.
-+ */
-+static void virtsnd_remove(struct virtio_device *vdev)
-+{
-+ struct virtio_snd *snd = vdev->priv;
-+
-+ virtsnd_disable_event_vq(snd);
-+
-+ if (snd->card)
-+ snd_card_free(snd->card);
-+
-+ vdev->config->del_vqs(vdev);
-+ vdev->config->reset(vdev);
-+
-+ kfree(snd->event_msgs);
-+}
-+
-+static const struct virtio_device_id id_table[] = {
-+ { VIRTIO_ID_SOUND, VIRTIO_DEV_ANY_ID },
-+ { 0 },
-+};
-+
-+static struct virtio_driver virtsnd_driver = {
-+ .driver.name = KBUILD_MODNAME,
-+ .driver.owner = THIS_MODULE,
-+ .id_table = id_table,
-+ .validate = virtsnd_validate,
-+ .probe = virtsnd_probe,
-+ .remove = virtsnd_remove,
-+};
-+
-+static int __init init(void)
-+{
-+ return register_virtio_driver(&virtsnd_driver);
-+}
-+module_init(init);
-+
-+static void __exit fini(void)
-+{
-+ unregister_virtio_driver(&virtsnd_driver);
-+}
-+module_exit(fini);
-+
-+MODULE_DEVICE_TABLE(virtio, id_table);
-+MODULE_DESCRIPTION("Virtio sound card driver");
-+MODULE_LICENSE("GPL");
-diff --git a/sound/virtio/virtio_card.h b/sound/virtio/virtio_card.h
-new file mode 100644
-index 000000000000..b903b1b12e90
---- /dev/null
-+++ b/sound/virtio/virtio_card.h
-@@ -0,0 +1,65 @@
-+/* SPDX-License-Identifier: GPL-2.0+ */
-+/*
-+ * virtio-snd: Virtio sound device
-+ * Copyright (C) 2021 OpenSynergy GmbH
-+ */
-+#ifndef VIRTIO_SND_CARD_H
-+#define VIRTIO_SND_CARD_H
-+
-+#include <linux/slab.h>
-+#include <linux/virtio.h>
-+#include <sound/core.h>
-+#include <uapi/linux/virtio_snd.h>
-+
-+#define VIRTIO_SND_CARD_DRIVER "virtio-snd"
-+#define VIRTIO_SND_CARD_NAME "VirtIO SoundCard"
-+
-+/**
-+ * struct virtio_snd_queue - Virtqueue wrapper structure.
-+ * @lock: Used to synchronize access to a virtqueue.
-+ * @vqueue: Underlying virtqueue.
-+ */
-+struct virtio_snd_queue {
-+ spinlock_t lock;
-+ struct virtqueue *vqueue;
-+};
-+
-+/**
-+ * struct virtio_snd - VirtIO sound card device.
-+ * @vdev: Underlying virtio device.
-+ * @queues: Virtqueue wrappers.
-+ * @card: ALSA sound card.
-+ * @event_msgs: Device events.
-+ */
-+struct virtio_snd {
-+ struct virtio_device *vdev;
-+ struct virtio_snd_queue queues[VIRTIO_SND_VQ_MAX];
-+ struct snd_card *card;
-+ struct virtio_snd_event *event_msgs;
-+};
-+
-+static inline struct virtio_snd_queue *
-+virtsnd_control_queue(struct virtio_snd *snd)
-+{
-+ return &snd->queues[VIRTIO_SND_VQ_CONTROL];
-+}
-+
-+static inline struct virtio_snd_queue *
-+virtsnd_event_queue(struct virtio_snd *snd)
-+{
-+ return &snd->queues[VIRTIO_SND_VQ_EVENT];
-+}
-+
-+static inline struct virtio_snd_queue *
-+virtsnd_tx_queue(struct virtio_snd *snd)
-+{
-+ return &snd->queues[VIRTIO_SND_VQ_TX];
-+}
-+
-+static inline struct virtio_snd_queue *
-+virtsnd_rx_queue(struct virtio_snd *snd)
-+{
-+ return &snd->queues[VIRTIO_SND_VQ_RX];
-+}
-+
-+#endif /* VIRTIO_SND_CARD_H */
diff --git a/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-kmeta/bsp/virtio/virtio-snd/0003-ALSA-virtio-handling-control-messages.patch b/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-kmeta/bsp/virtio/virtio-snd/0003-ALSA-virtio-handling-control-messages.patch
deleted file mode 100644
index 2ee988a4a..000000000
--- a/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-kmeta/bsp/virtio/virtio-snd/0003-ALSA-virtio-handling-control-messages.patch
+++ /dev/null
@@ -1,528 +0,0 @@
-From d4c8a3a4b9de5a25b6963f3ae1b8a5cb32081de5 Mon Sep 17 00:00:00 2001
-From: Anton Yakovlev <anton.yakovlev@opensynergy.com>
-Date: Tue, 2 Mar 2021 17:47:03 +0100
-Subject: [PATCH] ALSA: virtio: handling control messages
-
-The control queue can be used by different parts of the driver to send
-commands to the device. Control messages can be either synchronous or
-asynchronous. The lifetime of a message is controlled by a reference
-count.
-
-Introduce a module parameter to set the message completion timeout:
- msg_timeout_ms [=1000]
-
-Signed-off-by: Anton Yakovlev <anton.yakovlev@opensynergy.com>
-Link: https://lore.kernel.org/r/20210302164709.3142702-4-anton.yakovlev@opensynergy.com
-Signed-off-by: Takashi Iwai <tiwai@suse.de>
-Signed-off-by: Vasyl Vavrychuk <vasyl.vavrychuk@opensynergy.com>
----
- sound/virtio/Makefile | 3 +-
- sound/virtio/virtio_card.c | 13 ++
- sound/virtio/virtio_card.h | 7 +
- sound/virtio/virtio_ctl_msg.c | 310 ++++++++++++++++++++++++++++++++++
- sound/virtio/virtio_ctl_msg.h | 78 +++++++++
- 5 files changed, 410 insertions(+), 1 deletion(-)
- create mode 100644 sound/virtio/virtio_ctl_msg.c
- create mode 100644 sound/virtio/virtio_ctl_msg.h
-
-diff --git a/sound/virtio/Makefile b/sound/virtio/Makefile
-index 8c87ebb9982b..dc551e637441 100644
---- a/sound/virtio/Makefile
-+++ b/sound/virtio/Makefile
-@@ -3,5 +3,6 @@
- obj-$(CONFIG_SND_VIRTIO) += virtio_snd.o
-
- virtio_snd-objs := \
-- virtio_card.o
-+ virtio_card.o \
-+ virtio_ctl_msg.o
-
-diff --git a/sound/virtio/virtio_card.c b/sound/virtio/virtio_card.c
-index 5a37056858e9..b757b2444078 100644
---- a/sound/virtio/virtio_card.c
-+++ b/sound/virtio/virtio_card.c
-@@ -11,6 +11,10 @@
-
- #include "virtio_card.h"
-
-+u32 virtsnd_msg_timeout_ms = MSEC_PER_SEC;
-+module_param_named(msg_timeout_ms, virtsnd_msg_timeout_ms, uint, 0644);
-+MODULE_PARM_DESC(msg_timeout_ms, "Message completion timeout in milliseconds");
-+
- static void virtsnd_remove(struct virtio_device *vdev);
-
- /**
-@@ -96,9 +100,11 @@ static int virtsnd_find_vqs(struct virtio_snd *snd)
- {
- struct virtio_device *vdev = snd->vdev;
- static vq_callback_t *callbacks[VIRTIO_SND_VQ_MAX] = {
-+ [VIRTIO_SND_VQ_CONTROL] = virtsnd_ctl_notify_cb,
- [VIRTIO_SND_VQ_EVENT] = virtsnd_event_notify_cb
- };
- static const char *names[VIRTIO_SND_VQ_MAX] = {
-+ [VIRTIO_SND_VQ_CONTROL] = "virtsnd-ctl",
- [VIRTIO_SND_VQ_EVENT] = "virtsnd-event"
- };
- struct virtqueue *vqs[VIRTIO_SND_VQ_MAX] = { 0 };
-@@ -226,6 +232,11 @@ static int virtsnd_validate(struct virtio_device *vdev)
- return -EINVAL;
- }
-
-+ if (!virtsnd_msg_timeout_ms) {
-+ dev_err(&vdev->dev, "msg_timeout_ms value cannot be zero\n");
-+ return -EINVAL;
-+ }
-+
- return 0;
- }
-
-@@ -247,6 +258,7 @@ static int virtsnd_probe(struct virtio_device *vdev)
- return -ENOMEM;
-
- snd->vdev = vdev;
-+ INIT_LIST_HEAD(&snd->ctl_msgs);
-
- vdev->priv = snd;
-
-@@ -283,6 +295,7 @@ static void virtsnd_remove(struct virtio_device *vdev)
- struct virtio_snd *snd = vdev->priv;
-
- virtsnd_disable_event_vq(snd);
-+ virtsnd_ctl_msg_cancel_all(snd);
-
- if (snd->card)
- snd_card_free(snd->card);
-diff --git a/sound/virtio/virtio_card.h b/sound/virtio/virtio_card.h
-index b903b1b12e90..1e76eeff160f 100644
---- a/sound/virtio/virtio_card.h
-+++ b/sound/virtio/virtio_card.h
-@@ -11,6 +11,8 @@
- #include <sound/core.h>
- #include <uapi/linux/virtio_snd.h>
-
-+#include "virtio_ctl_msg.h"
-+
- #define VIRTIO_SND_CARD_DRIVER "virtio-snd"
- #define VIRTIO_SND_CARD_NAME "VirtIO SoundCard"
-
-@@ -29,15 +31,20 @@ struct virtio_snd_queue {
- * @vdev: Underlying virtio device.
- * @queues: Virtqueue wrappers.
- * @card: ALSA sound card.
-+ * @ctl_msgs: Pending control request list.
- * @event_msgs: Device events.
- */
- struct virtio_snd {
- struct virtio_device *vdev;
- struct virtio_snd_queue queues[VIRTIO_SND_VQ_MAX];
- struct snd_card *card;
-+ struct list_head ctl_msgs;
- struct virtio_snd_event *event_msgs;
- };
-
-+/* Message completion timeout in milliseconds (module parameter). */
-+extern u32 virtsnd_msg_timeout_ms;
-+
- static inline struct virtio_snd_queue *
- virtsnd_control_queue(struct virtio_snd *snd)
- {
-diff --git a/sound/virtio/virtio_ctl_msg.c b/sound/virtio/virtio_ctl_msg.c
-new file mode 100644
-index 000000000000..26ff7e7cc041
---- /dev/null
-+++ b/sound/virtio/virtio_ctl_msg.c
-@@ -0,0 +1,310 @@
-+// SPDX-License-Identifier: GPL-2.0+
-+/*
-+ * virtio-snd: Virtio sound device
-+ * Copyright (C) 2021 OpenSynergy GmbH
-+ */
-+#include <linux/moduleparam.h>
-+#include <linux/virtio_config.h>
-+
-+#include "virtio_card.h"
-+
-+/**
-+ * struct virtio_snd_msg - Control message.
-+ * @sg_request: Scattergather list containing a device request (header).
-+ * @sg_response: Scattergather list containing a device response (status).
-+ * @list: Pending message list entry.
-+ * @notify: Request completed notification.
-+ * @ref_count: Reference count used to manage a message lifetime.
-+ */
-+struct virtio_snd_msg {
-+ struct scatterlist sg_request;
-+ struct scatterlist sg_response;
-+ struct list_head list;
-+ struct completion notify;
-+ refcount_t ref_count;
-+};
-+
-+/**
-+ * virtsnd_ctl_msg_ref() - Increment reference counter for the message.
-+ * @msg: Control message.
-+ *
-+ * Context: Any context.
-+ */
-+void virtsnd_ctl_msg_ref(struct virtio_snd_msg *msg)
-+{
-+ refcount_inc(&msg->ref_count);
-+}
-+
-+/**
-+ * virtsnd_ctl_msg_unref() - Decrement reference counter for the message.
-+ * @msg: Control message.
-+ *
-+ * The message will be freed when the ref_count value is 0.
-+ *
-+ * Context: Any context.
-+ */
-+void virtsnd_ctl_msg_unref(struct virtio_snd_msg *msg)
-+{
-+ if (refcount_dec_and_test(&msg->ref_count))
-+ kfree(msg);
-+}
-+
-+/**
-+ * virtsnd_ctl_msg_request() - Get a pointer to the request header.
-+ * @msg: Control message.
-+ *
-+ * Context: Any context.
-+ */
-+void *virtsnd_ctl_msg_request(struct virtio_snd_msg *msg)
-+{
-+ return sg_virt(&msg->sg_request);
-+}
-+
-+/**
-+ * virtsnd_ctl_msg_request() - Get a pointer to the response header.
-+ * @msg: Control message.
-+ *
-+ * Context: Any context.
-+ */
-+void *virtsnd_ctl_msg_response(struct virtio_snd_msg *msg)
-+{
-+ return sg_virt(&msg->sg_response);
-+}
-+
-+/**
-+ * virtsnd_ctl_msg_alloc() - Allocate and initialize a control message.
-+ * @request_size: Size of request header.
-+ * @response_size: Size of response header.
-+ * @gfp: Kernel flags for memory allocation.
-+ *
-+ * The message will be automatically freed when the ref_count value is 0.
-+ *
-+ * Context: Any context. May sleep if @gfp flags permit.
-+ * Return: Allocated message on success, NULL on failure.
-+ */
-+struct virtio_snd_msg *virtsnd_ctl_msg_alloc(size_t request_size,
-+ size_t response_size, gfp_t gfp)
-+{
-+ struct virtio_snd_msg *msg;
-+
-+ if (!request_size || !response_size)
-+ return NULL;
-+
-+ msg = kzalloc(sizeof(*msg) + request_size + response_size, gfp);
-+ if (!msg)
-+ return NULL;
-+
-+ sg_init_one(&msg->sg_request, (u8 *)msg + sizeof(*msg), request_size);
-+ sg_init_one(&msg->sg_response, (u8 *)msg + sizeof(*msg) + request_size,
-+ response_size);
-+
-+ INIT_LIST_HEAD(&msg->list);
-+ init_completion(&msg->notify);
-+ /* This reference is dropped in virtsnd_ctl_msg_complete(). */
-+ refcount_set(&msg->ref_count, 1);
-+
-+ return msg;
-+}
-+
-+/**
-+ * virtsnd_ctl_msg_send() - Send a control message.
-+ * @snd: VirtIO sound device.
-+ * @msg: Control message.
-+ * @out_sgs: Additional sg-list to attach to the request header (may be NULL).
-+ * @in_sgs: Additional sg-list to attach to the response header (may be NULL).
-+ * @nowait: Flag indicating whether to wait for completion.
-+ *
-+ * Context: Any context. Takes and releases the control queue spinlock.
-+ * May sleep if @nowait is false.
-+ * Return: 0 on success, -errno on failure.
-+ */
-+int virtsnd_ctl_msg_send(struct virtio_snd *snd, struct virtio_snd_msg *msg,
-+ struct scatterlist *out_sgs,
-+ struct scatterlist *in_sgs, bool nowait)
-+{
-+ struct virtio_device *vdev = snd->vdev;
-+ struct virtio_snd_queue *queue = virtsnd_control_queue(snd);
-+ unsigned int js = msecs_to_jiffies(virtsnd_msg_timeout_ms);
-+ struct virtio_snd_hdr *request = virtsnd_ctl_msg_request(msg);
-+ struct virtio_snd_hdr *response = virtsnd_ctl_msg_response(msg);
-+ unsigned int nouts = 0;
-+ unsigned int nins = 0;
-+ struct scatterlist *psgs[4];
-+ bool notify = false;
-+ unsigned long flags;
-+ int rc;
-+
-+ virtsnd_ctl_msg_ref(msg);
-+
-+ /* Set the default status in case the message was canceled. */
-+ response->code = cpu_to_le32(VIRTIO_SND_S_IO_ERR);
-+
-+ psgs[nouts++] = &msg->sg_request;
-+ if (out_sgs)
-+ psgs[nouts++] = out_sgs;
-+
-+ psgs[nouts + nins++] = &msg->sg_response;
-+ if (in_sgs)
-+ psgs[nouts + nins++] = in_sgs;
-+
-+ spin_lock_irqsave(&queue->lock, flags);
-+ rc = virtqueue_add_sgs(queue->vqueue, psgs, nouts, nins, msg,
-+ GFP_ATOMIC);
-+ if (!rc) {
-+ notify = virtqueue_kick_prepare(queue->vqueue);
-+
-+ list_add_tail(&msg->list, &snd->ctl_msgs);
-+ }
-+ spin_unlock_irqrestore(&queue->lock, flags);
-+
-+ if (rc) {
-+ dev_err(&vdev->dev, "failed to send control message (0x%08x)\n",
-+ le32_to_cpu(request->code));
-+
-+ /*
-+ * Since in this case virtsnd_ctl_msg_complete() will not be
-+ * called, it is necessary to decrement the reference count.
-+ */
-+ virtsnd_ctl_msg_unref(msg);
-+
-+ goto on_exit;
-+ }
-+
-+ if (notify)
-+ virtqueue_notify(queue->vqueue);
-+
-+ if (nowait)
-+ goto on_exit;
-+
-+ rc = wait_for_completion_interruptible_timeout(&msg->notify, js);
-+ if (rc <= 0) {
-+ if (!rc) {
-+ dev_err(&vdev->dev,
-+ "control message (0x%08x) timeout\n",
-+ le32_to_cpu(request->code));
-+ rc = -ETIMEDOUT;
-+ }
-+
-+ goto on_exit;
-+ }
-+
-+ switch (le32_to_cpu(response->code)) {
-+ case VIRTIO_SND_S_OK:
-+ rc = 0;
-+ break;
-+ case VIRTIO_SND_S_NOT_SUPP:
-+ rc = -EOPNOTSUPP;
-+ break;
-+ case VIRTIO_SND_S_IO_ERR:
-+ rc = -EIO;
-+ break;
-+ default:
-+ rc = -EINVAL;
-+ break;
-+ }
-+
-+on_exit:
-+ virtsnd_ctl_msg_unref(msg);
-+
-+ return rc;
-+}
-+
-+/**
-+ * virtsnd_ctl_msg_complete() - Complete a control message.
-+ * @msg: Control message.
-+ *
-+ * Context: Any context. Expects the control queue spinlock to be held by
-+ * caller.
-+ */
-+void virtsnd_ctl_msg_complete(struct virtio_snd_msg *msg)
-+{
-+ list_del(&msg->list);
-+ complete(&msg->notify);
-+
-+ virtsnd_ctl_msg_unref(msg);
-+}
-+
-+/**
-+ * virtsnd_ctl_msg_cancel_all() - Cancel all pending control messages.
-+ * @snd: VirtIO sound device.
-+ *
-+ * Context: Any context.
-+ */
-+void virtsnd_ctl_msg_cancel_all(struct virtio_snd *snd)
-+{
-+ struct virtio_snd_queue *queue = virtsnd_control_queue(snd);
-+ unsigned long flags;
-+
-+ spin_lock_irqsave(&queue->lock, flags);
-+ while (!list_empty(&snd->ctl_msgs)) {
-+ struct virtio_snd_msg *msg =
-+ list_first_entry(&snd->ctl_msgs, struct virtio_snd_msg,
-+ list);
-+
-+ virtsnd_ctl_msg_complete(msg);
-+ }
-+ spin_unlock_irqrestore(&queue->lock, flags);
-+}
-+
-+/**
-+ * virtsnd_ctl_query_info() - Query the item configuration from the device.
-+ * @snd: VirtIO sound device.
-+ * @command: Control request code (VIRTIO_SND_R_XXX_INFO).
-+ * @start_id: Item start identifier.
-+ * @count: Item count to query.
-+ * @size: Item information size in bytes.
-+ * @info: Buffer for storing item information.
-+ *
-+ * Context: Any context that permits to sleep.
-+ * Return: 0 on success, -errno on failure.
-+ */
-+int virtsnd_ctl_query_info(struct virtio_snd *snd, int command, int start_id,
-+ int count, size_t size, void *info)
-+{
-+ struct virtio_snd_msg *msg;
-+ struct virtio_snd_query_info *query;
-+ struct scatterlist sg;
-+
-+ msg = virtsnd_ctl_msg_alloc(sizeof(*query),
-+ sizeof(struct virtio_snd_hdr), GFP_KERNEL);
-+ if (!msg)
-+ return -ENOMEM;
-+
-+ query = virtsnd_ctl_msg_request(msg);
-+ query->hdr.code = cpu_to_le32(command);
-+ query->start_id = cpu_to_le32(start_id);
-+ query->count = cpu_to_le32(count);
-+ query->size = cpu_to_le32(size);
-+
-+ sg_init_one(&sg, info, count * size);
-+
-+ return virtsnd_ctl_msg_send(snd, msg, NULL, &sg, false);
-+}
-+
-+/**
-+ * virtsnd_ctl_notify_cb() - Process all completed control messages.
-+ * @vqueue: Underlying control virtqueue.
-+ *
-+ * This callback function is called upon a vring interrupt request from the
-+ * device.
-+ *
-+ * Context: Interrupt context. Takes and releases the control queue spinlock.
-+ */
-+void virtsnd_ctl_notify_cb(struct virtqueue *vqueue)
-+{
-+ struct virtio_snd *snd = vqueue->vdev->priv;
-+ struct virtio_snd_queue *queue = virtsnd_control_queue(snd);
-+ struct virtio_snd_msg *msg;
-+ u32 length;
-+ unsigned long flags;
-+
-+ spin_lock_irqsave(&queue->lock, flags);
-+ do {
-+ virtqueue_disable_cb(vqueue);
-+ while ((msg = virtqueue_get_buf(vqueue, &length)))
-+ virtsnd_ctl_msg_complete(msg);
-+ if (unlikely(virtqueue_is_broken(vqueue)))
-+ break;
-+ } while (!virtqueue_enable_cb(vqueue));
-+ spin_unlock_irqrestore(&queue->lock, flags);
-+}
-diff --git a/sound/virtio/virtio_ctl_msg.h b/sound/virtio/virtio_ctl_msg.h
-new file mode 100644
-index 000000000000..7f4db044f28e
---- /dev/null
-+++ b/sound/virtio/virtio_ctl_msg.h
-@@ -0,0 +1,78 @@
-+/* SPDX-License-Identifier: GPL-2.0+ */
-+/*
-+ * virtio-snd: Virtio sound device
-+ * Copyright (C) 2021 OpenSynergy GmbH
-+ */
-+#ifndef VIRTIO_SND_MSG_H
-+#define VIRTIO_SND_MSG_H
-+
-+#include <linux/atomic.h>
-+#include <linux/virtio.h>
-+
-+struct virtio_snd;
-+struct virtio_snd_msg;
-+
-+void virtsnd_ctl_msg_ref(struct virtio_snd_msg *msg);
-+
-+void virtsnd_ctl_msg_unref(struct virtio_snd_msg *msg);
-+
-+void *virtsnd_ctl_msg_request(struct virtio_snd_msg *msg);
-+
-+void *virtsnd_ctl_msg_response(struct virtio_snd_msg *msg);
-+
-+struct virtio_snd_msg *virtsnd_ctl_msg_alloc(size_t request_size,
-+ size_t response_size, gfp_t gfp);
-+
-+int virtsnd_ctl_msg_send(struct virtio_snd *snd, struct virtio_snd_msg *msg,
-+ struct scatterlist *out_sgs,
-+ struct scatterlist *in_sgs, bool nowait);
-+
-+/**
-+ * virtsnd_ctl_msg_send_sync() - Simplified sending of synchronous message.
-+ * @snd: VirtIO sound device.
-+ * @msg: Control message.
-+ *
-+ * After returning from this function, the message will be deleted. If message
-+ * content is still needed, the caller must additionally to
-+ * virtsnd_ctl_msg_ref/unref() it.
-+ *
-+ * The msg_timeout_ms module parameter defines the message completion timeout.
-+ * If the message is not completed within this time, the function will return an
-+ * error.
-+ *
-+ * Context: Any context that permits to sleep.
-+ * Return: 0 on success, -errno on failure.
-+ *
-+ * The return value is a message status code (VIRTIO_SND_S_XXX) converted to an
-+ * appropriate -errno value.
-+ */
-+static inline int virtsnd_ctl_msg_send_sync(struct virtio_snd *snd,
-+ struct virtio_snd_msg *msg)
-+{
-+ return virtsnd_ctl_msg_send(snd, msg, NULL, NULL, false);
-+}
-+
-+/**
-+ * virtsnd_ctl_msg_send_async() - Simplified sending of asynchronous message.
-+ * @snd: VirtIO sound device.
-+ * @msg: Control message.
-+ *
-+ * Context: Any context.
-+ * Return: 0 on success, -errno on failure.
-+ */
-+static inline int virtsnd_ctl_msg_send_async(struct virtio_snd *snd,
-+ struct virtio_snd_msg *msg)
-+{
-+ return virtsnd_ctl_msg_send(snd, msg, NULL, NULL, true);
-+}
-+
-+void virtsnd_ctl_msg_cancel_all(struct virtio_snd *snd);
-+
-+void virtsnd_ctl_msg_complete(struct virtio_snd_msg *msg);
-+
-+int virtsnd_ctl_query_info(struct virtio_snd *snd, int command, int start_id,
-+ int count, size_t size, void *info);
-+
-+void virtsnd_ctl_notify_cb(struct virtqueue *vqueue);
-+
-+#endif /* VIRTIO_SND_MSG_H */
diff --git a/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-kmeta/bsp/virtio/virtio-snd/0004-ALSA-virtio-build-PCM-devices-and-substream-hardware.patch b/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-kmeta/bsp/virtio/virtio-snd/0004-ALSA-virtio-build-PCM-devices-and-substream-hardware.patch
deleted file mode 100644
index 27ae9a865..000000000
--- a/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-kmeta/bsp/virtio/virtio-snd/0004-ALSA-virtio-build-PCM-devices-and-substream-hardware.patch
+++ /dev/null
@@ -1,703 +0,0 @@
-From 12e4e501f9662a02e61acb5966fdceeffb0ff16d Mon Sep 17 00:00:00 2001
-From: Anton Yakovlev <anton.yakovlev@opensynergy.com>
-Date: Tue, 2 Mar 2021 17:47:04 +0100
-Subject: [PATCH] ALSA: virtio: build PCM devices and substream hardware
- descriptors
-
-Like the HDA specification, the virtio sound device specification links
-PCM substreams, jacks and PCM channel maps into functional groups. For
-each discovered group, a PCM device is created, the number of which
-coincides with the group number.
-
-Introduce the module parameters for setting the hardware buffer
-parameters:
- pcm_buffer_ms [=160]
- pcm_periods_min [=2]
- pcm_periods_max [=16]
- pcm_period_ms_min [=10]
- pcm_period_ms_max [=80]
-
-Signed-off-by: Anton Yakovlev <anton.yakovlev@opensynergy.com>
-Link: https://lore.kernel.org/r/20210302164709.3142702-5-anton.yakovlev@opensynergy.com
-Signed-off-by: Takashi Iwai <tiwai@suse.de>
-Signed-off-by: Vasyl Vavrychuk <vasyl.vavrychuk@opensynergy.com>
----
- sound/virtio/Makefile | 3 +-
- sound/virtio/virtio_card.c | 18 ++
- sound/virtio/virtio_card.h | 10 +
- sound/virtio/virtio_pcm.c | 479 +++++++++++++++++++++++++++++++++++++
- sound/virtio/virtio_pcm.h | 72 ++++++
- 5 files changed, 581 insertions(+), 1 deletion(-)
- create mode 100644 sound/virtio/virtio_pcm.c
- create mode 100644 sound/virtio/virtio_pcm.h
-
-diff --git a/sound/virtio/Makefile b/sound/virtio/Makefile
-index dc551e637441..69162a545a41 100644
---- a/sound/virtio/Makefile
-+++ b/sound/virtio/Makefile
-@@ -4,5 +4,6 @@ obj-$(CONFIG_SND_VIRTIO) += virtio_snd.o
-
- virtio_snd-objs := \
- virtio_card.o \
-- virtio_ctl_msg.o
-+ virtio_ctl_msg.o \
-+ virtio_pcm.o
-
-diff --git a/sound/virtio/virtio_card.c b/sound/virtio/virtio_card.c
-index b757b2444078..11c76ee311b7 100644
---- a/sound/virtio/virtio_card.c
-+++ b/sound/virtio/virtio_card.c
-@@ -209,6 +209,16 @@ static int virtsnd_build_devs(struct virtio_snd *snd)
- VIRTIO_SND_CARD_NAME " at %s/%s",
- dev_name(dev->parent), dev_name(dev));
-
-+ rc = virtsnd_pcm_parse_cfg(snd);
-+ if (rc)
-+ return rc;
-+
-+ if (snd->nsubstreams) {
-+ rc = virtsnd_pcm_build_devs(snd);
-+ if (rc)
-+ return rc;
-+ }
-+
- return snd_card_register(snd->card);
- }
-
-@@ -237,6 +247,9 @@ static int virtsnd_validate(struct virtio_device *vdev)
- return -EINVAL;
- }
-
-+ if (virtsnd_pcm_validate(vdev))
-+ return -EINVAL;
-+
- return 0;
- }
-
-@@ -259,6 +272,7 @@ static int virtsnd_probe(struct virtio_device *vdev)
-
- snd->vdev = vdev;
- INIT_LIST_HEAD(&snd->ctl_msgs);
-+ INIT_LIST_HEAD(&snd->pcm_list);
-
- vdev->priv = snd;
-
-@@ -293,6 +307,7 @@ static int virtsnd_probe(struct virtio_device *vdev)
- static void virtsnd_remove(struct virtio_device *vdev)
- {
- struct virtio_snd *snd = vdev->priv;
-+ unsigned int i;
-
- virtsnd_disable_event_vq(snd);
- virtsnd_ctl_msg_cancel_all(snd);
-@@ -303,6 +318,9 @@ static void virtsnd_remove(struct virtio_device *vdev)
- vdev->config->del_vqs(vdev);
- vdev->config->reset(vdev);
-
-+ for (i = 0; snd->substreams && i < snd->nsubstreams; ++i)
-+ cancel_work_sync(&snd->substreams[i].elapsed_period);
-+
- kfree(snd->event_msgs);
- }
-
-diff --git a/sound/virtio/virtio_card.h b/sound/virtio/virtio_card.h
-index 1e76eeff160f..77a1b7255370 100644
---- a/sound/virtio/virtio_card.h
-+++ b/sound/virtio/virtio_card.h
-@@ -12,9 +12,13 @@
- #include <uapi/linux/virtio_snd.h>
-
- #include "virtio_ctl_msg.h"
-+#include "virtio_pcm.h"
-
- #define VIRTIO_SND_CARD_DRIVER "virtio-snd"
- #define VIRTIO_SND_CARD_NAME "VirtIO SoundCard"
-+#define VIRTIO_SND_PCM_NAME "VirtIO PCM"
-+
-+struct virtio_pcm_substream;
-
- /**
- * struct virtio_snd_queue - Virtqueue wrapper structure.
-@@ -33,6 +37,9 @@ struct virtio_snd_queue {
- * @card: ALSA sound card.
- * @ctl_msgs: Pending control request list.
- * @event_msgs: Device events.
-+ * @pcm_list: VirtIO PCM device list.
-+ * @substreams: VirtIO PCM substreams.
-+ * @nsubstreams: Number of PCM substreams.
- */
- struct virtio_snd {
- struct virtio_device *vdev;
-@@ -40,6 +47,9 @@ struct virtio_snd {
- struct snd_card *card;
- struct list_head ctl_msgs;
- struct virtio_snd_event *event_msgs;
-+ struct list_head pcm_list;
-+ struct virtio_pcm_substream *substreams;
-+ u32 nsubstreams;
- };
-
- /* Message completion timeout in milliseconds (module parameter). */
-diff --git a/sound/virtio/virtio_pcm.c b/sound/virtio/virtio_pcm.c
-new file mode 100644
-index 000000000000..e16567e2e214
---- /dev/null
-+++ b/sound/virtio/virtio_pcm.c
-@@ -0,0 +1,479 @@
-+// SPDX-License-Identifier: GPL-2.0+
-+/*
-+ * virtio-snd: Virtio sound device
-+ * Copyright (C) 2021 OpenSynergy GmbH
-+ */
-+#include <linux/moduleparam.h>
-+#include <linux/virtio_config.h>
-+
-+#include "virtio_card.h"
-+
-+static u32 pcm_buffer_ms = 160;
-+module_param(pcm_buffer_ms, uint, 0644);
-+MODULE_PARM_DESC(pcm_buffer_ms, "PCM substream buffer time in milliseconds");
-+
-+static u32 pcm_periods_min = 2;
-+module_param(pcm_periods_min, uint, 0644);
-+MODULE_PARM_DESC(pcm_periods_min, "Minimum number of PCM periods");
-+
-+static u32 pcm_periods_max = 16;
-+module_param(pcm_periods_max, uint, 0644);
-+MODULE_PARM_DESC(pcm_periods_max, "Maximum number of PCM periods");
-+
-+static u32 pcm_period_ms_min = 10;
-+module_param(pcm_period_ms_min, uint, 0644);
-+MODULE_PARM_DESC(pcm_period_ms_min, "Minimum PCM period time in milliseconds");
-+
-+static u32 pcm_period_ms_max = 80;
-+module_param(pcm_period_ms_max, uint, 0644);
-+MODULE_PARM_DESC(pcm_period_ms_max, "Maximum PCM period time in milliseconds");
-+
-+/* Map for converting VirtIO format to ALSA format. */
-+static const snd_pcm_format_t g_v2a_format_map[] = {
-+ [VIRTIO_SND_PCM_FMT_IMA_ADPCM] = SNDRV_PCM_FORMAT_IMA_ADPCM,
-+ [VIRTIO_SND_PCM_FMT_MU_LAW] = SNDRV_PCM_FORMAT_MU_LAW,
-+ [VIRTIO_SND_PCM_FMT_A_LAW] = SNDRV_PCM_FORMAT_A_LAW,
-+ [VIRTIO_SND_PCM_FMT_S8] = SNDRV_PCM_FORMAT_S8,
-+ [VIRTIO_SND_PCM_FMT_U8] = SNDRV_PCM_FORMAT_U8,
-+ [VIRTIO_SND_PCM_FMT_S16] = SNDRV_PCM_FORMAT_S16_LE,
-+ [VIRTIO_SND_PCM_FMT_U16] = SNDRV_PCM_FORMAT_U16_LE,
-+ [VIRTIO_SND_PCM_FMT_S18_3] = SNDRV_PCM_FORMAT_S18_3LE,
-+ [VIRTIO_SND_PCM_FMT_U18_3] = SNDRV_PCM_FORMAT_U18_3LE,
-+ [VIRTIO_SND_PCM_FMT_S20_3] = SNDRV_PCM_FORMAT_S20_3LE,
-+ [VIRTIO_SND_PCM_FMT_U20_3] = SNDRV_PCM_FORMAT_U20_3LE,
-+ [VIRTIO_SND_PCM_FMT_S24_3] = SNDRV_PCM_FORMAT_S24_3LE,
-+ [VIRTIO_SND_PCM_FMT_U24_3] = SNDRV_PCM_FORMAT_U24_3LE,
-+ [VIRTIO_SND_PCM_FMT_S20] = SNDRV_PCM_FORMAT_S20_LE,
-+ [VIRTIO_SND_PCM_FMT_U20] = SNDRV_PCM_FORMAT_U20_LE,
-+ [VIRTIO_SND_PCM_FMT_S24] = SNDRV_PCM_FORMAT_S24_LE,
-+ [VIRTIO_SND_PCM_FMT_U24] = SNDRV_PCM_FORMAT_U24_LE,
-+ [VIRTIO_SND_PCM_FMT_S32] = SNDRV_PCM_FORMAT_S32_LE,
-+ [VIRTIO_SND_PCM_FMT_U32] = SNDRV_PCM_FORMAT_U32_LE,
-+ [VIRTIO_SND_PCM_FMT_FLOAT] = SNDRV_PCM_FORMAT_FLOAT_LE,
-+ [VIRTIO_SND_PCM_FMT_FLOAT64] = SNDRV_PCM_FORMAT_FLOAT64_LE,
-+ [VIRTIO_SND_PCM_FMT_DSD_U8] = SNDRV_PCM_FORMAT_DSD_U8,
-+ [VIRTIO_SND_PCM_FMT_DSD_U16] = SNDRV_PCM_FORMAT_DSD_U16_LE,
-+ [VIRTIO_SND_PCM_FMT_DSD_U32] = SNDRV_PCM_FORMAT_DSD_U32_LE,
-+ [VIRTIO_SND_PCM_FMT_IEC958_SUBFRAME] =
-+ SNDRV_PCM_FORMAT_IEC958_SUBFRAME_LE
-+};
-+
-+/* Map for converting VirtIO frame rate to ALSA frame rate. */
-+struct virtsnd_v2a_rate {
-+ unsigned int alsa_bit;
-+ unsigned int rate;
-+};
-+
-+static const struct virtsnd_v2a_rate g_v2a_rate_map[] = {
-+ [VIRTIO_SND_PCM_RATE_5512] = { SNDRV_PCM_RATE_5512, 5512 },
-+ [VIRTIO_SND_PCM_RATE_8000] = { SNDRV_PCM_RATE_8000, 8000 },
-+ [VIRTIO_SND_PCM_RATE_11025] = { SNDRV_PCM_RATE_11025, 11025 },
-+ [VIRTIO_SND_PCM_RATE_16000] = { SNDRV_PCM_RATE_16000, 16000 },
-+ [VIRTIO_SND_PCM_RATE_22050] = { SNDRV_PCM_RATE_22050, 22050 },
-+ [VIRTIO_SND_PCM_RATE_32000] = { SNDRV_PCM_RATE_32000, 32000 },
-+ [VIRTIO_SND_PCM_RATE_44100] = { SNDRV_PCM_RATE_44100, 44100 },
-+ [VIRTIO_SND_PCM_RATE_48000] = { SNDRV_PCM_RATE_48000, 48000 },
-+ [VIRTIO_SND_PCM_RATE_64000] = { SNDRV_PCM_RATE_64000, 64000 },
-+ [VIRTIO_SND_PCM_RATE_88200] = { SNDRV_PCM_RATE_88200, 88200 },
-+ [VIRTIO_SND_PCM_RATE_96000] = { SNDRV_PCM_RATE_96000, 96000 },
-+ [VIRTIO_SND_PCM_RATE_176400] = { SNDRV_PCM_RATE_176400, 176400 },
-+ [VIRTIO_SND_PCM_RATE_192000] = { SNDRV_PCM_RATE_192000, 192000 }
-+};
-+
-+/**
-+ * virtsnd_pcm_build_hw() - Parse substream config and build HW descriptor.
-+ * @vss: VirtIO substream.
-+ * @info: VirtIO substream information entry.
-+ *
-+ * Context: Any context.
-+ * Return: 0 on success, -EINVAL if configuration is invalid.
-+ */
-+static int virtsnd_pcm_build_hw(struct virtio_pcm_substream *vss,
-+ struct virtio_snd_pcm_info *info)
-+{
-+ struct virtio_device *vdev = vss->snd->vdev;
-+ unsigned int i;
-+ u64 values;
-+ size_t sample_max = 0;
-+ size_t sample_min = 0;
-+
-+ vss->features = le32_to_cpu(info->features);
-+
-+ /*
-+ * TODO: set SNDRV_PCM_INFO_{BATCH,BLOCK_TRANSFER} if device supports
-+ * only message-based transport.
-+ */
-+ vss->hw.info =
-+ SNDRV_PCM_INFO_MMAP |
-+ SNDRV_PCM_INFO_MMAP_VALID |
-+ SNDRV_PCM_INFO_BATCH |
-+ SNDRV_PCM_INFO_BLOCK_TRANSFER |
-+ SNDRV_PCM_INFO_INTERLEAVED |
-+ SNDRV_PCM_INFO_PAUSE;
-+
-+ if (!info->channels_min || info->channels_min > info->channels_max) {
-+ dev_err(&vdev->dev,
-+ "SID %u: invalid channel range [%u %u]\n",
-+ vss->sid, info->channels_min, info->channels_max);
-+ return -EINVAL;
-+ }
-+
-+ vss->hw.channels_min = info->channels_min;
-+ vss->hw.channels_max = info->channels_max;
-+
-+ values = le64_to_cpu(info->formats);
-+
-+ vss->hw.formats = 0;
-+
-+ for (i = 0; i < ARRAY_SIZE(g_v2a_format_map); ++i)
-+ if (values & (1ULL << i)) {
-+ snd_pcm_format_t alsa_fmt = g_v2a_format_map[i];
-+ int bytes = snd_pcm_format_physical_width(alsa_fmt) / 8;
-+
-+ if (!sample_min || sample_min > bytes)
-+ sample_min = bytes;
-+
-+ if (sample_max < bytes)
-+ sample_max = bytes;
-+
-+ vss->hw.formats |= pcm_format_to_bits(alsa_fmt);
-+ }
-+
-+ if (!vss->hw.formats) {
-+ dev_err(&vdev->dev,
-+ "SID %u: no supported PCM sample formats found\n",
-+ vss->sid);
-+ return -EINVAL;
-+ }
-+
-+ values = le64_to_cpu(info->rates);
-+
-+ vss->hw.rates = 0;
-+
-+ for (i = 0; i < ARRAY_SIZE(g_v2a_rate_map); ++i)
-+ if (values & (1ULL << i)) {
-+ if (!vss->hw.rate_min ||
-+ vss->hw.rate_min > g_v2a_rate_map[i].rate)
-+ vss->hw.rate_min = g_v2a_rate_map[i].rate;
-+
-+ if (vss->hw.rate_max < g_v2a_rate_map[i].rate)
-+ vss->hw.rate_max = g_v2a_rate_map[i].rate;
-+
-+ vss->hw.rates |= g_v2a_rate_map[i].alsa_bit;
-+ }
-+
-+ if (!vss->hw.rates) {
-+ dev_err(&vdev->dev,
-+ "SID %u: no supported PCM frame rates found\n",
-+ vss->sid);
-+ return -EINVAL;
-+ }
-+
-+ vss->hw.periods_min = pcm_periods_min;
-+ vss->hw.periods_max = pcm_periods_max;
-+
-+ /*
-+ * We must ensure that there is enough space in the buffer to store
-+ * pcm_buffer_ms ms for the combination (Cmax, Smax, Rmax), where:
-+ * Cmax = maximum supported number of channels,
-+ * Smax = maximum supported sample size in bytes,
-+ * Rmax = maximum supported frame rate.
-+ */
-+ vss->hw.buffer_bytes_max =
-+ PAGE_ALIGN(sample_max * vss->hw.channels_max * pcm_buffer_ms *
-+ (vss->hw.rate_max / MSEC_PER_SEC));
-+
-+ /*
-+ * We must ensure that the minimum period size is enough to store
-+ * pcm_period_ms_min ms for the combination (Cmin, Smin, Rmin), where:
-+ * Cmin = minimum supported number of channels,
-+ * Smin = minimum supported sample size in bytes,
-+ * Rmin = minimum supported frame rate.
-+ */
-+ vss->hw.period_bytes_min =
-+ sample_min * vss->hw.channels_min * pcm_period_ms_min *
-+ (vss->hw.rate_min / MSEC_PER_SEC);
-+
-+ /*
-+ * We must ensure that the maximum period size is enough to store
-+ * pcm_period_ms_max ms for the combination (Cmax, Smax, Rmax).
-+ */
-+ vss->hw.period_bytes_max =
-+ sample_max * vss->hw.channels_max * pcm_period_ms_max *
-+ (vss->hw.rate_max / MSEC_PER_SEC);
-+
-+ return 0;
-+}
-+
-+/**
-+ * virtsnd_pcm_find() - Find the PCM device for the specified node ID.
-+ * @snd: VirtIO sound device.
-+ * @nid: Function node ID.
-+ *
-+ * Context: Any context.
-+ * Return: a pointer to the PCM device or ERR_PTR(-ENOENT).
-+ */
-+struct virtio_pcm *virtsnd_pcm_find(struct virtio_snd *snd, u32 nid)
-+{
-+ struct virtio_pcm *vpcm;
-+
-+ list_for_each_entry(vpcm, &snd->pcm_list, list)
-+ if (vpcm->nid == nid)
-+ return vpcm;
-+
-+ return ERR_PTR(-ENOENT);
-+}
-+
-+/**
-+ * virtsnd_pcm_find_or_create() - Find or create the PCM device for the
-+ * specified node ID.
-+ * @snd: VirtIO sound device.
-+ * @nid: Function node ID.
-+ *
-+ * Context: Any context that permits to sleep.
-+ * Return: a pointer to the PCM device or ERR_PTR(-errno).
-+ */
-+struct virtio_pcm *virtsnd_pcm_find_or_create(struct virtio_snd *snd, u32 nid)
-+{
-+ struct virtio_device *vdev = snd->vdev;
-+ struct virtio_pcm *vpcm;
-+
-+ vpcm = virtsnd_pcm_find(snd, nid);
-+ if (!IS_ERR(vpcm))
-+ return vpcm;
-+
-+ vpcm = devm_kzalloc(&vdev->dev, sizeof(*vpcm), GFP_KERNEL);
-+ if (!vpcm)
-+ return ERR_PTR(-ENOMEM);
-+
-+ vpcm->nid = nid;
-+ list_add_tail(&vpcm->list, &snd->pcm_list);
-+
-+ return vpcm;
-+}
-+
-+/**
-+ * virtsnd_pcm_validate() - Validate if the device can be started.
-+ * @vdev: VirtIO parent device.
-+ *
-+ * Context: Any context.
-+ * Return: 0 on success, -EINVAL on failure.
-+ */
-+int virtsnd_pcm_validate(struct virtio_device *vdev)
-+{
-+ if (pcm_periods_min < 2 || pcm_periods_min > pcm_periods_max) {
-+ dev_err(&vdev->dev,
-+ "invalid range [%u %u] of the number of PCM periods\n",
-+ pcm_periods_min, pcm_periods_max);
-+ return -EINVAL;
-+ }
-+
-+ if (!pcm_period_ms_min || pcm_period_ms_min > pcm_period_ms_max) {
-+ dev_err(&vdev->dev,
-+ "invalid range [%u %u] of the size of the PCM period\n",
-+ pcm_period_ms_min, pcm_period_ms_max);
-+ return -EINVAL;
-+ }
-+
-+ if (pcm_buffer_ms < pcm_periods_min * pcm_period_ms_min) {
-+ dev_err(&vdev->dev,
-+ "pcm_buffer_ms(=%u) value cannot be < %u ms\n",
-+ pcm_buffer_ms, pcm_periods_min * pcm_period_ms_min);
-+ return -EINVAL;
-+ }
-+
-+ if (pcm_period_ms_max > pcm_buffer_ms / 2) {
-+ dev_err(&vdev->dev,
-+ "pcm_period_ms_max(=%u) value cannot be > %u ms\n",
-+ pcm_period_ms_max, pcm_buffer_ms / 2);
-+ return -EINVAL;
-+ }
-+
-+ return 0;
-+}
-+
-+/**
-+ * virtsnd_pcm_period_elapsed() - Kernel work function to handle the elapsed
-+ * period state.
-+ * @work: Elapsed period work.
-+ *
-+ * The main purpose of this function is to call snd_pcm_period_elapsed() in
-+ * a process context, not in an interrupt context. This is necessary because PCM
-+ * devices operate in non-atomic mode.
-+ *
-+ * Context: Process context.
-+ */
-+static void virtsnd_pcm_period_elapsed(struct work_struct *work)
-+{
-+ struct virtio_pcm_substream *vss =
-+ container_of(work, struct virtio_pcm_substream, elapsed_period);
-+
-+ snd_pcm_period_elapsed(vss->substream);
-+}
-+
-+/**
-+ * virtsnd_pcm_parse_cfg() - Parse the stream configuration.
-+ * @snd: VirtIO sound device.
-+ *
-+ * This function is called during initial device initialization.
-+ *
-+ * Context: Any context that permits to sleep.
-+ * Return: 0 on success, -errno on failure.
-+ */
-+int virtsnd_pcm_parse_cfg(struct virtio_snd *snd)
-+{
-+ struct virtio_device *vdev = snd->vdev;
-+ struct virtio_snd_pcm_info *info;
-+ u32 i;
-+ int rc;
-+
-+ virtio_cread_le(vdev, struct virtio_snd_config, streams,
-+ &snd->nsubstreams);
-+ if (!snd->nsubstreams)
-+ return 0;
-+
-+ snd->substreams = devm_kcalloc(&vdev->dev, snd->nsubstreams,
-+ sizeof(*snd->substreams), GFP_KERNEL);
-+ if (!snd->substreams)
-+ return -ENOMEM;
-+
-+ info = kcalloc(snd->nsubstreams, sizeof(*info), GFP_KERNEL);
-+ if (!info)
-+ return -ENOMEM;
-+
-+ rc = virtsnd_ctl_query_info(snd, VIRTIO_SND_R_PCM_INFO, 0,
-+ snd->nsubstreams, sizeof(*info), info);
-+ if (rc)
-+ goto on_exit;
-+
-+ for (i = 0; i < snd->nsubstreams; ++i) {
-+ struct virtio_pcm_substream *vss = &snd->substreams[i];
-+ struct virtio_pcm *vpcm;
-+
-+ vss->snd = snd;
-+ vss->sid = i;
-+ INIT_WORK(&vss->elapsed_period, virtsnd_pcm_period_elapsed);
-+
-+ rc = virtsnd_pcm_build_hw(vss, &info[i]);
-+ if (rc)
-+ goto on_exit;
-+
-+ vss->nid = le32_to_cpu(info[i].hdr.hda_fn_nid);
-+
-+ vpcm = virtsnd_pcm_find_or_create(snd, vss->nid);
-+ if (IS_ERR(vpcm)) {
-+ rc = PTR_ERR(vpcm);
-+ goto on_exit;
-+ }
-+
-+ switch (info[i].direction) {
-+ case VIRTIO_SND_D_OUTPUT:
-+ vss->direction = SNDRV_PCM_STREAM_PLAYBACK;
-+ break;
-+ case VIRTIO_SND_D_INPUT:
-+ vss->direction = SNDRV_PCM_STREAM_CAPTURE;
-+ break;
-+ default:
-+ dev_err(&vdev->dev, "SID %u: unknown direction (%u)\n",
-+ vss->sid, info[i].direction);
-+ rc = -EINVAL;
-+ goto on_exit;
-+ }
-+
-+ vpcm->streams[vss->direction].nsubstreams++;
-+ }
-+
-+on_exit:
-+ kfree(info);
-+
-+ return rc;
-+}
-+
-+/**
-+ * virtsnd_pcm_build_devs() - Build ALSA PCM devices.
-+ * @snd: VirtIO sound device.
-+ *
-+ * Context: Any context that permits to sleep.
-+ * Return: 0 on success, -errno on failure.
-+ */
-+int virtsnd_pcm_build_devs(struct virtio_snd *snd)
-+{
-+ struct virtio_device *vdev = snd->vdev;
-+ struct virtio_pcm *vpcm;
-+ u32 i;
-+ int rc;
-+
-+ list_for_each_entry(vpcm, &snd->pcm_list, list) {
-+ unsigned int npbs =
-+ vpcm->streams[SNDRV_PCM_STREAM_PLAYBACK].nsubstreams;
-+ unsigned int ncps =
-+ vpcm->streams[SNDRV_PCM_STREAM_CAPTURE].nsubstreams;
-+
-+ if (!npbs && !ncps)
-+ continue;
-+
-+ rc = snd_pcm_new(snd->card, VIRTIO_SND_CARD_DRIVER, vpcm->nid,
-+ npbs, ncps, &vpcm->pcm);
-+ if (rc) {
-+ dev_err(&vdev->dev, "snd_pcm_new[%u] failed: %d\n",
-+ vpcm->nid, rc);
-+ return rc;
-+ }
-+
-+ vpcm->pcm->info_flags = 0;
-+ vpcm->pcm->dev_class = SNDRV_PCM_CLASS_GENERIC;
-+ vpcm->pcm->dev_subclass = SNDRV_PCM_SUBCLASS_GENERIC_MIX;
-+ snprintf(vpcm->pcm->name, sizeof(vpcm->pcm->name),
-+ VIRTIO_SND_PCM_NAME " %u", vpcm->pcm->device);
-+ vpcm->pcm->private_data = vpcm;
-+ vpcm->pcm->nonatomic = true;
-+
-+ for (i = 0; i < ARRAY_SIZE(vpcm->streams); ++i) {
-+ struct virtio_pcm_stream *stream = &vpcm->streams[i];
-+
-+ if (!stream->nsubstreams)
-+ continue;
-+
-+ stream->substreams =
-+ devm_kcalloc(&vdev->dev, stream->nsubstreams,
-+ sizeof(*stream->substreams),
-+ GFP_KERNEL);
-+ if (!stream->substreams)
-+ return -ENOMEM;
-+
-+ stream->nsubstreams = 0;
-+ }
-+ }
-+
-+ for (i = 0; i < snd->nsubstreams; ++i) {
-+ struct virtio_pcm_stream *vs;
-+ struct virtio_pcm_substream *vss = &snd->substreams[i];
-+
-+ vpcm = virtsnd_pcm_find(snd, vss->nid);
-+ if (IS_ERR(vpcm))
-+ return PTR_ERR(vpcm);
-+
-+ vs = &vpcm->streams[vss->direction];
-+ vs->substreams[vs->nsubstreams++] = vss;
-+ }
-+
-+ list_for_each_entry(vpcm, &snd->pcm_list, list) {
-+ for (i = 0; i < ARRAY_SIZE(vpcm->streams); ++i) {
-+ struct virtio_pcm_stream *vs = &vpcm->streams[i];
-+ struct snd_pcm_str *ks = &vpcm->pcm->streams[i];
-+ struct snd_pcm_substream *kss;
-+
-+ if (!vs->nsubstreams)
-+ continue;
-+
-+ for (kss = ks->substream; kss; kss = kss->next)
-+ vs->substreams[kss->number]->substream = kss;
-+ }
-+
-+ snd_pcm_set_managed_buffer_all(vpcm->pcm,
-+ SNDRV_DMA_TYPE_VMALLOC, NULL,
-+ 0, 0);
-+ }
-+
-+ return 0;
-+}
-diff --git a/sound/virtio/virtio_pcm.h b/sound/virtio/virtio_pcm.h
-new file mode 100644
-index 000000000000..84f2f3f14f48
---- /dev/null
-+++ b/sound/virtio/virtio_pcm.h
-@@ -0,0 +1,72 @@
-+/* SPDX-License-Identifier: GPL-2.0+ */
-+/*
-+ * virtio-snd: Virtio sound device
-+ * Copyright (C) 2021 OpenSynergy GmbH
-+ */
-+#ifndef VIRTIO_SND_PCM_H
-+#define VIRTIO_SND_PCM_H
-+
-+#include <linux/atomic.h>
-+#include <linux/virtio_config.h>
-+#include <sound/pcm.h>
-+
-+struct virtio_pcm;
-+struct virtio_pcm_msg;
-+
-+/**
-+ * struct virtio_pcm_substream - VirtIO PCM substream.
-+ * @snd: VirtIO sound device.
-+ * @nid: Function group node identifier.
-+ * @sid: Stream identifier.
-+ * @direction: Stream data flow direction (SNDRV_PCM_STREAM_XXX).
-+ * @features: Stream VirtIO feature bit map (1 << VIRTIO_SND_PCM_F_XXX).
-+ * @substream: Kernel ALSA substream.
-+ * @hw: Kernel ALSA substream hardware descriptor.
-+ * @elapsed_period: Kernel work to handle the elapsed period state.
-+ */
-+struct virtio_pcm_substream {
-+ struct virtio_snd *snd;
-+ u32 nid;
-+ u32 sid;
-+ u32 direction;
-+ u32 features;
-+ struct snd_pcm_substream *substream;
-+ struct snd_pcm_hardware hw;
-+ struct work_struct elapsed_period;
-+};
-+
-+/**
-+ * struct virtio_pcm_stream - VirtIO PCM stream.
-+ * @substreams: VirtIO substreams belonging to the stream.
-+ * @nsubstreams: Number of substreams.
-+ */
-+struct virtio_pcm_stream {
-+ struct virtio_pcm_substream **substreams;
-+ u32 nsubstreams;
-+};
-+
-+/**
-+ * struct virtio_pcm - VirtIO PCM device.
-+ * @list: VirtIO PCM list entry.
-+ * @nid: Function group node identifier.
-+ * @pcm: Kernel PCM device.
-+ * @streams: VirtIO PCM streams (playback and capture).
-+ */
-+struct virtio_pcm {
-+ struct list_head list;
-+ u32 nid;
-+ struct snd_pcm *pcm;
-+ struct virtio_pcm_stream streams[SNDRV_PCM_STREAM_LAST + 1];
-+};
-+
-+int virtsnd_pcm_validate(struct virtio_device *vdev);
-+
-+int virtsnd_pcm_parse_cfg(struct virtio_snd *snd);
-+
-+int virtsnd_pcm_build_devs(struct virtio_snd *snd);
-+
-+struct virtio_pcm *virtsnd_pcm_find(struct virtio_snd *snd, u32 nid);
-+
-+struct virtio_pcm *virtsnd_pcm_find_or_create(struct virtio_snd *snd, u32 nid);
-+
-+#endif /* VIRTIO_SND_PCM_H */
diff --git a/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-kmeta/bsp/virtio/virtio-snd/0005-ALSA-virtio-handling-control-and-I-O-messages-for-th.patch b/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-kmeta/bsp/virtio/virtio-snd/0005-ALSA-virtio-handling-control-and-I-O-messages-for-th.patch
deleted file mode 100644
index 3a63a530b..000000000
--- a/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-kmeta/bsp/virtio/virtio-snd/0005-ALSA-virtio-handling-control-and-I-O-messages-for-th.patch
+++ /dev/null
@@ -1,645 +0,0 @@
-From e60175c8c7a51861c6f31af4cf99b95f3da7a59f Mon Sep 17 00:00:00 2001
-From: Anton Yakovlev <anton.yakovlev@opensynergy.com>
-Date: Tue, 2 Mar 2021 17:47:05 +0100
-Subject: [PATCH] ALSA: virtio: handling control and I/O messages for the PCM
- device
-
-The driver implements a message-based transport for I/O substream
-operations. Before the start of the substream, the hardware buffer is
-sliced into I/O messages, the number of which is equal to the current
-number of periods. The size of each message is equal to the current
-size of one period.
-
-I/O messages are organized in an ordered queue. The completion of the
-I/O message indicates an elapsed period (the only exception is the end
-of the stream for the capture substream). Upon completion, the message
-is automatically re-added to the end of the queue.
-
-Signed-off-by: Anton Yakovlev <anton.yakovlev@opensynergy.com>
-Link: https://lore.kernel.org/r/20210302164709.3142702-6-anton.yakovlev@opensynergy.com
-Signed-off-by: Takashi Iwai <tiwai@suse.de>
-Signed-off-by: Vasyl Vavrychuk <vasyl.vavrychuk@opensynergy.com>
----
- sound/virtio/Makefile | 3 +-
- sound/virtio/virtio_card.c | 22 +-
- sound/virtio/virtio_card.h | 9 +
- sound/virtio/virtio_pcm.c | 32 +++
- sound/virtio/virtio_pcm.h | 40 ++++
- sound/virtio/virtio_pcm_msg.c | 414 ++++++++++++++++++++++++++++++++++
- 6 files changed, 515 insertions(+), 5 deletions(-)
- create mode 100644 sound/virtio/virtio_pcm_msg.c
-
-diff --git a/sound/virtio/Makefile b/sound/virtio/Makefile
-index 69162a545a41..626af3cc3ed7 100644
---- a/sound/virtio/Makefile
-+++ b/sound/virtio/Makefile
-@@ -5,5 +5,6 @@ obj-$(CONFIG_SND_VIRTIO) += virtio_snd.o
- virtio_snd-objs := \
- virtio_card.o \
- virtio_ctl_msg.o \
-- virtio_pcm.o
-+ virtio_pcm.o \
-+ virtio_pcm_msg.o
-
-diff --git a/sound/virtio/virtio_card.c b/sound/virtio/virtio_card.c
-index 11c76ee311b7..57b9b7f3a9c0 100644
---- a/sound/virtio/virtio_card.c
-+++ b/sound/virtio/virtio_card.c
-@@ -55,6 +55,12 @@ static void virtsnd_event_send(struct virtqueue *vqueue,
- static void virtsnd_event_dispatch(struct virtio_snd *snd,
- struct virtio_snd_event *event)
- {
-+ switch (le32_to_cpu(event->hdr.code)) {
-+ case VIRTIO_SND_EVT_PCM_PERIOD_ELAPSED:
-+ case VIRTIO_SND_EVT_PCM_XRUN:
-+ virtsnd_pcm_event(snd, event);
-+ break;
-+ }
- }
-
- /**
-@@ -101,11 +107,15 @@ static int virtsnd_find_vqs(struct virtio_snd *snd)
- struct virtio_device *vdev = snd->vdev;
- static vq_callback_t *callbacks[VIRTIO_SND_VQ_MAX] = {
- [VIRTIO_SND_VQ_CONTROL] = virtsnd_ctl_notify_cb,
-- [VIRTIO_SND_VQ_EVENT] = virtsnd_event_notify_cb
-+ [VIRTIO_SND_VQ_EVENT] = virtsnd_event_notify_cb,
-+ [VIRTIO_SND_VQ_TX] = virtsnd_pcm_tx_notify_cb,
-+ [VIRTIO_SND_VQ_RX] = virtsnd_pcm_rx_notify_cb
- };
- static const char *names[VIRTIO_SND_VQ_MAX] = {
- [VIRTIO_SND_VQ_CONTROL] = "virtsnd-ctl",
-- [VIRTIO_SND_VQ_EVENT] = "virtsnd-event"
-+ [VIRTIO_SND_VQ_EVENT] = "virtsnd-event",
-+ [VIRTIO_SND_VQ_TX] = "virtsnd-tx",
-+ [VIRTIO_SND_VQ_RX] = "virtsnd-rx"
- };
- struct virtqueue *vqs[VIRTIO_SND_VQ_MAX] = { 0 };
- unsigned int i;
-@@ -318,8 +328,12 @@ static void virtsnd_remove(struct virtio_device *vdev)
- vdev->config->del_vqs(vdev);
- vdev->config->reset(vdev);
-
-- for (i = 0; snd->substreams && i < snd->nsubstreams; ++i)
-- cancel_work_sync(&snd->substreams[i].elapsed_period);
-+ for (i = 0; snd->substreams && i < snd->nsubstreams; ++i) {
-+ struct virtio_pcm_substream *vss = &snd->substreams[i];
-+
-+ cancel_work_sync(&vss->elapsed_period);
-+ virtsnd_pcm_msg_free(vss);
-+ }
-
- kfree(snd->event_msgs);
- }
-diff --git a/sound/virtio/virtio_card.h b/sound/virtio/virtio_card.h
-index 77a1b7255370..c43f9744d362 100644
---- a/sound/virtio/virtio_card.h
-+++ b/sound/virtio/virtio_card.h
-@@ -79,4 +79,13 @@ virtsnd_rx_queue(struct virtio_snd *snd)
- return &snd->queues[VIRTIO_SND_VQ_RX];
- }
-
-+static inline struct virtio_snd_queue *
-+virtsnd_pcm_queue(struct virtio_pcm_substream *vss)
-+{
-+ if (vss->direction == SNDRV_PCM_STREAM_PLAYBACK)
-+ return virtsnd_tx_queue(vss->snd);
-+ else
-+ return virtsnd_rx_queue(vss->snd);
-+}
-+
- #endif /* VIRTIO_SND_CARD_H */
-diff --git a/sound/virtio/virtio_pcm.c b/sound/virtio/virtio_pcm.c
-index e16567e2e214..2dcd763efa29 100644
---- a/sound/virtio/virtio_pcm.c
-+++ b/sound/virtio/virtio_pcm.c
-@@ -353,6 +353,8 @@ int virtsnd_pcm_parse_cfg(struct virtio_snd *snd)
- vss->snd = snd;
- vss->sid = i;
- INIT_WORK(&vss->elapsed_period, virtsnd_pcm_period_elapsed);
-+ init_waitqueue_head(&vss->msg_empty);
-+ spin_lock_init(&vss->lock);
-
- rc = virtsnd_pcm_build_hw(vss, &info[i]);
- if (rc)
-@@ -477,3 +479,33 @@ int virtsnd_pcm_build_devs(struct virtio_snd *snd)
-
- return 0;
- }
-+
-+/**
-+ * virtsnd_pcm_event() - Handle the PCM device event notification.
-+ * @snd: VirtIO sound device.
-+ * @event: VirtIO sound event.
-+ *
-+ * Context: Interrupt context.
-+ */
-+void virtsnd_pcm_event(struct virtio_snd *snd, struct virtio_snd_event *event)
-+{
-+ struct virtio_pcm_substream *vss;
-+ u32 sid = le32_to_cpu(event->data);
-+
-+ if (sid >= snd->nsubstreams)
-+ return;
-+
-+ vss = &snd->substreams[sid];
-+
-+ switch (le32_to_cpu(event->hdr.code)) {
-+ case VIRTIO_SND_EVT_PCM_PERIOD_ELAPSED:
-+ /* TODO: deal with shmem elapsed period */
-+ break;
-+ case VIRTIO_SND_EVT_PCM_XRUN:
-+ spin_lock(&vss->lock);
-+ if (vss->xfer_enabled)
-+ vss->xfer_xrun = true;
-+ spin_unlock(&vss->lock);
-+ break;
-+ }
-+}
-diff --git a/sound/virtio/virtio_pcm.h b/sound/virtio/virtio_pcm.h
-index 84f2f3f14f48..6722f1139666 100644
---- a/sound/virtio/virtio_pcm.h
-+++ b/sound/virtio/virtio_pcm.h
-@@ -23,6 +23,17 @@ struct virtio_pcm_msg;
- * @substream: Kernel ALSA substream.
- * @hw: Kernel ALSA substream hardware descriptor.
- * @elapsed_period: Kernel work to handle the elapsed period state.
-+ * @lock: Spinlock that protects fields shared by interrupt handlers and
-+ * substream operators.
-+ * @buffer_bytes: Current buffer size in bytes.
-+ * @hw_ptr: Substream hardware pointer value in bytes [0 ... buffer_bytes).
-+ * @xfer_enabled: Data transfer state (0 - off, 1 - on).
-+ * @xfer_xrun: Data underflow/overflow state (0 - no xrun, 1 - xrun).
-+ * @msgs: Allocated I/O messages.
-+ * @nmsgs: Number of allocated I/O messages.
-+ * @msg_last_enqueued: Index of the last I/O message added to the virtqueue.
-+ * @msg_count: Number of pending I/O messages in the virtqueue.
-+ * @msg_empty: Notify when msg_count is zero.
- */
- struct virtio_pcm_substream {
- struct virtio_snd *snd;
-@@ -33,6 +44,16 @@ struct virtio_pcm_substream {
- struct snd_pcm_substream *substream;
- struct snd_pcm_hardware hw;
- struct work_struct elapsed_period;
-+ spinlock_t lock;
-+ size_t buffer_bytes;
-+ size_t hw_ptr;
-+ bool xfer_enabled;
-+ bool xfer_xrun;
-+ struct virtio_pcm_msg **msgs;
-+ unsigned int nmsgs;
-+ int msg_last_enqueued;
-+ unsigned int msg_count;
-+ wait_queue_head_t msg_empty;
- };
-
- /**
-@@ -65,8 +86,27 @@ int virtsnd_pcm_parse_cfg(struct virtio_snd *snd);
-
- int virtsnd_pcm_build_devs(struct virtio_snd *snd);
-
-+void virtsnd_pcm_event(struct virtio_snd *snd, struct virtio_snd_event *event);
-+
-+void virtsnd_pcm_tx_notify_cb(struct virtqueue *vqueue);
-+
-+void virtsnd_pcm_rx_notify_cb(struct virtqueue *vqueue);
-+
- struct virtio_pcm *virtsnd_pcm_find(struct virtio_snd *snd, u32 nid);
-
- struct virtio_pcm *virtsnd_pcm_find_or_create(struct virtio_snd *snd, u32 nid);
-
-+struct virtio_snd_msg *
-+virtsnd_pcm_ctl_msg_alloc(struct virtio_pcm_substream *vss,
-+ unsigned int command, gfp_t gfp);
-+
-+int virtsnd_pcm_msg_alloc(struct virtio_pcm_substream *vss,
-+ unsigned int periods, unsigned int period_bytes);
-+
-+void virtsnd_pcm_msg_free(struct virtio_pcm_substream *vss);
-+
-+int virtsnd_pcm_msg_send(struct virtio_pcm_substream *vss);
-+
-+unsigned int virtsnd_pcm_msg_pending_num(struct virtio_pcm_substream *vss);
-+
- #endif /* VIRTIO_SND_PCM_H */
-diff --git a/sound/virtio/virtio_pcm_msg.c b/sound/virtio/virtio_pcm_msg.c
-new file mode 100644
-index 000000000000..f88c8f29cbd8
---- /dev/null
-+++ b/sound/virtio/virtio_pcm_msg.c
-@@ -0,0 +1,414 @@
-+// SPDX-License-Identifier: GPL-2.0+
-+/*
-+ * virtio-snd: Virtio sound device
-+ * Copyright (C) 2021 OpenSynergy GmbH
-+ */
-+#include <sound/pcm_params.h>
-+
-+#include "virtio_card.h"
-+
-+/**
-+ * struct virtio_pcm_msg - VirtIO I/O message.
-+ * @substream: VirtIO PCM substream.
-+ * @xfer: Request header payload.
-+ * @status: Response header payload.
-+ * @length: Data length in bytes.
-+ * @sgs: Payload scatter-gather table.
-+ */
-+struct virtio_pcm_msg {
-+ struct virtio_pcm_substream *substream;
-+ struct virtio_snd_pcm_xfer xfer;
-+ struct virtio_snd_pcm_status status;
-+ size_t length;
-+ struct scatterlist sgs[0];
-+};
-+
-+/**
-+ * enum pcm_msg_sg_index - Index values for the virtio_pcm_msg->sgs field in
-+ * an I/O message.
-+ * @PCM_MSG_SG_XFER: Element containing a virtio_snd_pcm_xfer structure.
-+ * @PCM_MSG_SG_STATUS: Element containing a virtio_snd_pcm_status structure.
-+ * @PCM_MSG_SG_DATA: The first element containing a data buffer.
-+ */
-+enum pcm_msg_sg_index {
-+ PCM_MSG_SG_XFER = 0,
-+ PCM_MSG_SG_STATUS,
-+ PCM_MSG_SG_DATA
-+};
-+
-+/**
-+ * virtsnd_pcm_sg_num() - Count the number of sg-elements required to represent
-+ * vmalloc'ed buffer.
-+ * @data: Pointer to vmalloc'ed buffer.
-+ * @length: Buffer size.
-+ *
-+ * Context: Any context.
-+ * Return: Number of physically contiguous parts in the @data.
-+ */
-+static int virtsnd_pcm_sg_num(u8 *data, unsigned int length)
-+{
-+ phys_addr_t sg_address;
-+ unsigned int sg_length;
-+ int num = 0;
-+
-+ while (length) {
-+ struct page *pg = vmalloc_to_page(data);
-+ phys_addr_t pg_address = page_to_phys(pg);
-+ size_t pg_length;
-+
-+ pg_length = PAGE_SIZE - offset_in_page(data);
-+ if (pg_length > length)
-+ pg_length = length;
-+
-+ if (!num || sg_address + sg_length != pg_address) {
-+ sg_address = pg_address;
-+ sg_length = pg_length;
-+ num++;
-+ } else {
-+ sg_length += pg_length;
-+ }
-+
-+ data += pg_length;
-+ length -= pg_length;
-+ }
-+
-+ return num;
-+}
-+
-+/**
-+ * virtsnd_pcm_sg_from() - Build sg-list from vmalloc'ed buffer.
-+ * @sgs: Preallocated sg-list to populate.
-+ * @nsgs: The maximum number of elements in the @sgs.
-+ * @data: Pointer to vmalloc'ed buffer.
-+ * @length: Buffer size.
-+ *
-+ * Splits the buffer into physically contiguous parts and makes an sg-list of
-+ * such parts.
-+ *
-+ * Context: Any context.
-+ */
-+static void virtsnd_pcm_sg_from(struct scatterlist *sgs, int nsgs, u8 *data,
-+ unsigned int length)
-+{
-+ int idx = -1;
-+
-+ while (length) {
-+ struct page *pg = vmalloc_to_page(data);
-+ size_t pg_length;
-+
-+ pg_length = PAGE_SIZE - offset_in_page(data);
-+ if (pg_length > length)
-+ pg_length = length;
-+
-+ if (idx == -1 ||
-+ sg_phys(&sgs[idx]) + sgs[idx].length != page_to_phys(pg)) {
-+ if (idx + 1 == nsgs)
-+ break;
-+ sg_set_page(&sgs[++idx], pg, pg_length,
-+ offset_in_page(data));
-+ } else {
-+ sgs[idx].length += pg_length;
-+ }
-+
-+ data += pg_length;
-+ length -= pg_length;
-+ }
-+
-+ sg_mark_end(&sgs[idx]);
-+}
-+
-+/**
-+ * virtsnd_pcm_msg_alloc() - Allocate I/O messages.
-+ * @vss: VirtIO PCM substream.
-+ * @periods: Current number of periods.
-+ * @period_bytes: Current period size in bytes.
-+ *
-+ * The function slices the buffer into @periods parts (each with the size of
-+ * @period_bytes), and creates @periods corresponding I/O messages.
-+ *
-+ * Context: Any context that permits to sleep.
-+ * Return: 0 on success, -ENOMEM on failure.
-+ */
-+int virtsnd_pcm_msg_alloc(struct virtio_pcm_substream *vss,
-+ unsigned int periods, unsigned int period_bytes)
-+{
-+ struct snd_pcm_runtime *runtime = vss->substream->runtime;
-+ unsigned int i;
-+
-+ vss->msgs = kcalloc(periods, sizeof(*vss->msgs), GFP_KERNEL);
-+ if (!vss->msgs)
-+ return -ENOMEM;
-+
-+ vss->nmsgs = periods;
-+
-+ for (i = 0; i < periods; ++i) {
-+ u8 *data = runtime->dma_area + period_bytes * i;
-+ int sg_num = virtsnd_pcm_sg_num(data, period_bytes);
-+ struct virtio_pcm_msg *msg;
-+
-+ msg = kzalloc(sizeof(*msg) + sizeof(*msg->sgs) * (sg_num + 2),
-+ GFP_KERNEL);
-+ if (!msg)
-+ return -ENOMEM;
-+
-+ msg->substream = vss;
-+ sg_init_one(&msg->sgs[PCM_MSG_SG_XFER], &msg->xfer,
-+ sizeof(msg->xfer));
-+ sg_init_one(&msg->sgs[PCM_MSG_SG_STATUS], &msg->status,
-+ sizeof(msg->status));
-+ msg->length = period_bytes;
-+ virtsnd_pcm_sg_from(&msg->sgs[PCM_MSG_SG_DATA], sg_num, data,
-+ period_bytes);
-+
-+ vss->msgs[i] = msg;
-+ }
-+
-+ return 0;
-+}
-+
-+/**
-+ * virtsnd_pcm_msg_free() - Free all allocated I/O messages.
-+ * @vss: VirtIO PCM substream.
-+ *
-+ * Context: Any context.
-+ */
-+void virtsnd_pcm_msg_free(struct virtio_pcm_substream *vss)
-+{
-+ unsigned int i;
-+
-+ for (i = 0; vss->msgs && i < vss->nmsgs; ++i)
-+ kfree(vss->msgs[i]);
-+ kfree(vss->msgs);
-+
-+ vss->msgs = NULL;
-+ vss->nmsgs = 0;
-+}
-+
-+/**
-+ * virtsnd_pcm_msg_send() - Send asynchronous I/O messages.
-+ * @vss: VirtIO PCM substream.
-+ *
-+ * All messages are organized in an ordered circular list. Each time the
-+ * function is called, all currently non-enqueued messages are added to the
-+ * virtqueue. For this, the function keeps track of two values:
-+ *
-+ * msg_last_enqueued = index of the last enqueued message,
-+ * msg_count = # of pending messages in the virtqueue.
-+ *
-+ * Context: Any context. Expects the tx/rx queue and the VirtIO substream
-+ * spinlocks to be held by caller.
-+ * Return: 0 on success, -errno on failure.
-+ */
-+int virtsnd_pcm_msg_send(struct virtio_pcm_substream *vss)
-+{
-+ struct snd_pcm_runtime *runtime = vss->substream->runtime;
-+ struct virtio_snd *snd = vss->snd;
-+ struct virtio_device *vdev = snd->vdev;
-+ struct virtqueue *vqueue = virtsnd_pcm_queue(vss)->vqueue;
-+ int i;
-+ int n;
-+ bool notify = false;
-+
-+ i = (vss->msg_last_enqueued + 1) % runtime->periods;
-+ n = runtime->periods - vss->msg_count;
-+
-+ for (; n; --n, i = (i + 1) % runtime->periods) {
-+ struct virtio_pcm_msg *msg = vss->msgs[i];
-+ struct scatterlist *psgs[] = {
-+ &msg->sgs[PCM_MSG_SG_XFER],
-+ &msg->sgs[PCM_MSG_SG_DATA],
-+ &msg->sgs[PCM_MSG_SG_STATUS]
-+ };
-+ int rc;
-+
-+ msg->xfer.stream_id = cpu_to_le32(vss->sid);
-+ memset(&msg->status, 0, sizeof(msg->status));
-+
-+ if (vss->direction == SNDRV_PCM_STREAM_PLAYBACK)
-+ rc = virtqueue_add_sgs(vqueue, psgs, 2, 1, msg,
-+ GFP_ATOMIC);
-+ else
-+ rc = virtqueue_add_sgs(vqueue, psgs, 1, 2, msg,
-+ GFP_ATOMIC);
-+
-+ if (rc) {
-+ dev_err(&vdev->dev,
-+ "SID %u: failed to send I/O message\n",
-+ vss->sid);
-+ return rc;
-+ }
-+
-+ vss->msg_last_enqueued = i;
-+ vss->msg_count++;
-+ }
-+
-+ if (!(vss->features & (1U << VIRTIO_SND_PCM_F_MSG_POLLING)))
-+ notify = virtqueue_kick_prepare(vqueue);
-+
-+ if (notify)
-+ virtqueue_notify(vqueue);
-+
-+ return 0;
-+}
-+
-+/**
-+ * virtsnd_pcm_msg_pending_num() - Returns the number of pending I/O messages.
-+ * @vss: VirtIO substream.
-+ *
-+ * Context: Any context.
-+ * Return: Number of messages.
-+ */
-+unsigned int virtsnd_pcm_msg_pending_num(struct virtio_pcm_substream *vss)
-+{
-+ unsigned int num;
-+ unsigned long flags;
-+
-+ spin_lock_irqsave(&vss->lock, flags);
-+ num = vss->msg_count;
-+ spin_unlock_irqrestore(&vss->lock, flags);
-+
-+ return num;
-+}
-+
-+/**
-+ * virtsnd_pcm_msg_complete() - Complete an I/O message.
-+ * @msg: I/O message.
-+ * @written_bytes: Number of bytes written to the message.
-+ *
-+ * Completion of the message means the elapsed period. If transmission is
-+ * allowed, then each completed message is immediately placed back at the end
-+ * of the queue.
-+ *
-+ * For the playback substream, @written_bytes is equal to sizeof(msg->status).
-+ *
-+ * For the capture substream, @written_bytes is equal to sizeof(msg->status)
-+ * plus the number of captured bytes.
-+ *
-+ * Context: Interrupt context. Takes and releases the VirtIO substream spinlock.
-+ */
-+static void virtsnd_pcm_msg_complete(struct virtio_pcm_msg *msg,
-+ size_t written_bytes)
-+{
-+ struct virtio_pcm_substream *vss = msg->substream;
-+
-+ /*
-+ * hw_ptr always indicates the buffer position of the first I/O message
-+ * in the virtqueue. Therefore, on each completion of an I/O message,
-+ * the hw_ptr value is unconditionally advanced.
-+ */
-+ spin_lock(&vss->lock);
-+ /*
-+ * If the capture substream returned an incorrect status, then just
-+ * increase the hw_ptr by the message size.
-+ */
-+ if (vss->direction == SNDRV_PCM_STREAM_PLAYBACK ||
-+ written_bytes <= sizeof(msg->status))
-+ vss->hw_ptr += msg->length;
-+ else
-+ vss->hw_ptr += written_bytes - sizeof(msg->status);
-+
-+ if (vss->hw_ptr >= vss->buffer_bytes)
-+ vss->hw_ptr -= vss->buffer_bytes;
-+
-+ vss->xfer_xrun = false;
-+ vss->msg_count--;
-+
-+ if (vss->xfer_enabled) {
-+ struct snd_pcm_runtime *runtime = vss->substream->runtime;
-+
-+ runtime->delay =
-+ bytes_to_frames(runtime,
-+ le32_to_cpu(msg->status.latency_bytes));
-+
-+ schedule_work(&vss->elapsed_period);
-+
-+ virtsnd_pcm_msg_send(vss);
-+ } else if (!vss->msg_count) {
-+ wake_up_all(&vss->msg_empty);
-+ }
-+ spin_unlock(&vss->lock);
-+}
-+
-+/**
-+ * virtsnd_pcm_notify_cb() - Process all completed I/O messages.
-+ * @queue: Underlying tx/rx virtqueue.
-+ *
-+ * Context: Interrupt context. Takes and releases the tx/rx queue spinlock.
-+ */
-+static inline void virtsnd_pcm_notify_cb(struct virtio_snd_queue *queue)
-+{
-+ struct virtio_pcm_msg *msg;
-+ u32 written_bytes;
-+ unsigned long flags;
-+
-+ spin_lock_irqsave(&queue->lock, flags);
-+ do {
-+ virtqueue_disable_cb(queue->vqueue);
-+ while ((msg = virtqueue_get_buf(queue->vqueue, &written_bytes)))
-+ virtsnd_pcm_msg_complete(msg, written_bytes);
-+ if (unlikely(virtqueue_is_broken(queue->vqueue)))
-+ break;
-+ } while (!virtqueue_enable_cb(queue->vqueue));
-+ spin_unlock_irqrestore(&queue->lock, flags);
-+}
-+
-+/**
-+ * virtsnd_pcm_tx_notify_cb() - Process all completed TX messages.
-+ * @vqueue: Underlying tx virtqueue.
-+ *
-+ * Context: Interrupt context.
-+ */
-+void virtsnd_pcm_tx_notify_cb(struct virtqueue *vqueue)
-+{
-+ struct virtio_snd *snd = vqueue->vdev->priv;
-+
-+ virtsnd_pcm_notify_cb(virtsnd_tx_queue(snd));
-+}
-+
-+/**
-+ * virtsnd_pcm_rx_notify_cb() - Process all completed RX messages.
-+ * @vqueue: Underlying rx virtqueue.
-+ *
-+ * Context: Interrupt context.
-+ */
-+void virtsnd_pcm_rx_notify_cb(struct virtqueue *vqueue)
-+{
-+ struct virtio_snd *snd = vqueue->vdev->priv;
-+
-+ virtsnd_pcm_notify_cb(virtsnd_rx_queue(snd));
-+}
-+
-+/**
-+ * virtsnd_pcm_ctl_msg_alloc() - Allocate and initialize the PCM device control
-+ * message for the specified substream.
-+ * @vss: VirtIO PCM substream.
-+ * @command: Control request code (VIRTIO_SND_R_PCM_XXX).
-+ * @gfp: Kernel flags for memory allocation.
-+ *
-+ * Context: Any context. May sleep if @gfp flags permit.
-+ * Return: Allocated message on success, NULL on failure.
-+ */
-+struct virtio_snd_msg *
-+virtsnd_pcm_ctl_msg_alloc(struct virtio_pcm_substream *vss,
-+ unsigned int command, gfp_t gfp)
-+{
-+ size_t request_size = sizeof(struct virtio_snd_pcm_hdr);
-+ size_t response_size = sizeof(struct virtio_snd_hdr);
-+ struct virtio_snd_msg *msg;
-+
-+ switch (command) {
-+ case VIRTIO_SND_R_PCM_SET_PARAMS:
-+ request_size = sizeof(struct virtio_snd_pcm_set_params);
-+ break;
-+ }
-+
-+ msg = virtsnd_ctl_msg_alloc(request_size, response_size, gfp);
-+ if (msg) {
-+ struct virtio_snd_pcm_hdr *hdr = virtsnd_ctl_msg_request(msg);
-+
-+ hdr->hdr.code = cpu_to_le32(command);
-+ hdr->stream_id = cpu_to_le32(vss->sid);
-+ }
-+
-+ return msg;
-+}
diff --git a/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-kmeta/bsp/virtio/virtio-snd/0006-ALSA-virtio-PCM-substream-operators.patch b/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-kmeta/bsp/virtio/virtio-snd/0006-ALSA-virtio-PCM-substream-operators.patch
deleted file mode 100644
index 9196b34e4..000000000
--- a/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-kmeta/bsp/virtio/virtio-snd/0006-ALSA-virtio-PCM-substream-operators.patch
+++ /dev/null
@@ -1,525 +0,0 @@
-From 93c313dc4fc78b077bb0911afe3a77ffa845ad58 Mon Sep 17 00:00:00 2001
-From: Anton Yakovlev <anton.yakovlev@opensynergy.com>
-Date: Tue, 2 Mar 2021 17:47:06 +0100
-Subject: [PATCH] ALSA: virtio: PCM substream operators
-
-Introduce the operators required for the operation of substreams.
-
-Signed-off-by: Anton Yakovlev <anton.yakovlev@opensynergy.com>
-Link: https://lore.kernel.org/r/20210302164709.3142702-7-anton.yakovlev@opensynergy.com
-Signed-off-by: Takashi Iwai <tiwai@suse.de>
-Signed-off-by: Vasyl Vavrychuk <vasyl.vavrychuk@opensynergy.com>
----
- sound/virtio/Makefile | 3 +-
- sound/virtio/virtio_pcm.c | 2 +
- sound/virtio/virtio_pcm.h | 5 +
- sound/virtio/virtio_pcm_ops.c | 445 ++++++++++++++++++++++++++++++++++
- 4 files changed, 454 insertions(+), 1 deletion(-)
- create mode 100644 sound/virtio/virtio_pcm_ops.c
-
-diff --git a/sound/virtio/Makefile b/sound/virtio/Makefile
-index 626af3cc3ed7..34493226793f 100644
---- a/sound/virtio/Makefile
-+++ b/sound/virtio/Makefile
-@@ -6,5 +6,6 @@ virtio_snd-objs := \
- virtio_card.o \
- virtio_ctl_msg.o \
- virtio_pcm.o \
-- virtio_pcm_msg.o
-+ virtio_pcm_msg.o \
-+ virtio_pcm_ops.o
-
-diff --git a/sound/virtio/virtio_pcm.c b/sound/virtio/virtio_pcm.c
-index 2dcd763efa29..c10d91fff2fb 100644
---- a/sound/virtio/virtio_pcm.c
-+++ b/sound/virtio/virtio_pcm.c
-@@ -470,6 +470,8 @@ int virtsnd_pcm_build_devs(struct virtio_snd *snd)
-
- for (kss = ks->substream; kss; kss = kss->next)
- vs->substreams[kss->number]->substream = kss;
-+
-+ snd_pcm_set_ops(vpcm->pcm, i, &virtsnd_pcm_ops);
- }
-
- snd_pcm_set_managed_buffer_all(vpcm->pcm,
-diff --git a/sound/virtio/virtio_pcm.h b/sound/virtio/virtio_pcm.h
-index 6722f1139666..efd0228746cf 100644
---- a/sound/virtio/virtio_pcm.h
-+++ b/sound/virtio/virtio_pcm.h
-@@ -29,6 +29,8 @@ struct virtio_pcm_msg;
- * @hw_ptr: Substream hardware pointer value in bytes [0 ... buffer_bytes).
- * @xfer_enabled: Data transfer state (0 - off, 1 - on).
- * @xfer_xrun: Data underflow/overflow state (0 - no xrun, 1 - xrun).
-+ * @stopped: True if the substream is stopped and must be released on the device
-+ * side.
- * @msgs: Allocated I/O messages.
- * @nmsgs: Number of allocated I/O messages.
- * @msg_last_enqueued: Index of the last I/O message added to the virtqueue.
-@@ -49,6 +51,7 @@ struct virtio_pcm_substream {
- size_t hw_ptr;
- bool xfer_enabled;
- bool xfer_xrun;
-+ bool stopped;
- struct virtio_pcm_msg **msgs;
- unsigned int nmsgs;
- int msg_last_enqueued;
-@@ -80,6 +83,8 @@ struct virtio_pcm {
- struct virtio_pcm_stream streams[SNDRV_PCM_STREAM_LAST + 1];
- };
-
-+extern const struct snd_pcm_ops virtsnd_pcm_ops;
-+
- int virtsnd_pcm_validate(struct virtio_device *vdev);
-
- int virtsnd_pcm_parse_cfg(struct virtio_snd *snd);
-diff --git a/sound/virtio/virtio_pcm_ops.c b/sound/virtio/virtio_pcm_ops.c
-new file mode 100644
-index 000000000000..0682a2df6c8c
---- /dev/null
-+++ b/sound/virtio/virtio_pcm_ops.c
-@@ -0,0 +1,445 @@
-+// SPDX-License-Identifier: GPL-2.0+
-+/*
-+ * virtio-snd: Virtio sound device
-+ * Copyright (C) 2021 OpenSynergy GmbH
-+ */
-+#include <sound/pcm_params.h>
-+
-+#include "virtio_card.h"
-+
-+/*
-+ * I/O messages lifetime
-+ * ---------------------
-+ *
-+ * Allocation:
-+ * Messages are initially allocated in the ops->hw_params() after the size and
-+ * number of periods have been successfully negotiated.
-+ *
-+ * Freeing:
-+ * Messages can be safely freed after the queue has been successfully flushed
-+ * (RELEASE command in the ops->sync_stop()) and the ops->hw_free() has been
-+ * called.
-+ *
-+ * When the substream stops, the ops->sync_stop() waits until the device has
-+ * completed all pending messages. This wait can be interrupted either by a
-+ * signal or due to a timeout. In this case, the device can still access
-+ * messages even after calling ops->hw_free(). It can also issue an interrupt,
-+ * and the interrupt handler will also try to access message structures.
-+ *
-+ * Therefore, freeing of already allocated messages occurs:
-+ *
-+ * - in ops->hw_params(), if this operator was called several times in a row,
-+ * or if ops->hw_free() failed to free messages previously;
-+ *
-+ * - in ops->hw_free(), if the queue has been successfully flushed;
-+ *
-+ * - in dev->release().
-+ */
-+
-+/* Map for converting ALSA format to VirtIO format. */
-+struct virtsnd_a2v_format {
-+ snd_pcm_format_t alsa_bit;
-+ unsigned int vio_bit;
-+};
-+
-+static const struct virtsnd_a2v_format g_a2v_format_map[] = {
-+ { SNDRV_PCM_FORMAT_IMA_ADPCM, VIRTIO_SND_PCM_FMT_IMA_ADPCM },
-+ { SNDRV_PCM_FORMAT_MU_LAW, VIRTIO_SND_PCM_FMT_MU_LAW },
-+ { SNDRV_PCM_FORMAT_A_LAW, VIRTIO_SND_PCM_FMT_A_LAW },
-+ { SNDRV_PCM_FORMAT_S8, VIRTIO_SND_PCM_FMT_S8 },
-+ { SNDRV_PCM_FORMAT_U8, VIRTIO_SND_PCM_FMT_U8 },
-+ { SNDRV_PCM_FORMAT_S16_LE, VIRTIO_SND_PCM_FMT_S16 },
-+ { SNDRV_PCM_FORMAT_U16_LE, VIRTIO_SND_PCM_FMT_U16 },
-+ { SNDRV_PCM_FORMAT_S18_3LE, VIRTIO_SND_PCM_FMT_S18_3 },
-+ { SNDRV_PCM_FORMAT_U18_3LE, VIRTIO_SND_PCM_FMT_U18_3 },
-+ { SNDRV_PCM_FORMAT_S20_3LE, VIRTIO_SND_PCM_FMT_S20_3 },
-+ { SNDRV_PCM_FORMAT_U20_3LE, VIRTIO_SND_PCM_FMT_U20_3 },
-+ { SNDRV_PCM_FORMAT_S24_3LE, VIRTIO_SND_PCM_FMT_S24_3 },
-+ { SNDRV_PCM_FORMAT_U24_3LE, VIRTIO_SND_PCM_FMT_U24_3 },
-+ { SNDRV_PCM_FORMAT_S20_LE, VIRTIO_SND_PCM_FMT_S20 },
-+ { SNDRV_PCM_FORMAT_U20_LE, VIRTIO_SND_PCM_FMT_U20 },
-+ { SNDRV_PCM_FORMAT_S24_LE, VIRTIO_SND_PCM_FMT_S24 },
-+ { SNDRV_PCM_FORMAT_U24_LE, VIRTIO_SND_PCM_FMT_U24 },
-+ { SNDRV_PCM_FORMAT_S32_LE, VIRTIO_SND_PCM_FMT_S32 },
-+ { SNDRV_PCM_FORMAT_U32_LE, VIRTIO_SND_PCM_FMT_U32 },
-+ { SNDRV_PCM_FORMAT_FLOAT_LE, VIRTIO_SND_PCM_FMT_FLOAT },
-+ { SNDRV_PCM_FORMAT_FLOAT64_LE, VIRTIO_SND_PCM_FMT_FLOAT64 },
-+ { SNDRV_PCM_FORMAT_DSD_U8, VIRTIO_SND_PCM_FMT_DSD_U8 },
-+ { SNDRV_PCM_FORMAT_DSD_U16_LE, VIRTIO_SND_PCM_FMT_DSD_U16 },
-+ { SNDRV_PCM_FORMAT_DSD_U32_LE, VIRTIO_SND_PCM_FMT_DSD_U32 },
-+ { SNDRV_PCM_FORMAT_IEC958_SUBFRAME_LE,
-+ VIRTIO_SND_PCM_FMT_IEC958_SUBFRAME }
-+};
-+
-+/* Map for converting ALSA frame rate to VirtIO frame rate. */
-+struct virtsnd_a2v_rate {
-+ unsigned int rate;
-+ unsigned int vio_bit;
-+};
-+
-+static const struct virtsnd_a2v_rate g_a2v_rate_map[] = {
-+ { 5512, VIRTIO_SND_PCM_RATE_5512 },
-+ { 8000, VIRTIO_SND_PCM_RATE_8000 },
-+ { 11025, VIRTIO_SND_PCM_RATE_11025 },
-+ { 16000, VIRTIO_SND_PCM_RATE_16000 },
-+ { 22050, VIRTIO_SND_PCM_RATE_22050 },
-+ { 32000, VIRTIO_SND_PCM_RATE_32000 },
-+ { 44100, VIRTIO_SND_PCM_RATE_44100 },
-+ { 48000, VIRTIO_SND_PCM_RATE_48000 },
-+ { 64000, VIRTIO_SND_PCM_RATE_64000 },
-+ { 88200, VIRTIO_SND_PCM_RATE_88200 },
-+ { 96000, VIRTIO_SND_PCM_RATE_96000 },
-+ { 176400, VIRTIO_SND_PCM_RATE_176400 },
-+ { 192000, VIRTIO_SND_PCM_RATE_192000 }
-+};
-+
-+static int virtsnd_pcm_sync_stop(struct snd_pcm_substream *substream);
-+
-+/**
-+ * virtsnd_pcm_open() - Open the PCM substream.
-+ * @substream: Kernel ALSA substream.
-+ *
-+ * Context: Process context.
-+ * Return: 0 on success, -errno on failure.
-+ */
-+static int virtsnd_pcm_open(struct snd_pcm_substream *substream)
-+{
-+ struct virtio_pcm *vpcm = snd_pcm_substream_chip(substream);
-+ struct virtio_pcm_stream *vs = &vpcm->streams[substream->stream];
-+ struct virtio_pcm_substream *vss = vs->substreams[substream->number];
-+
-+ substream->runtime->hw = vss->hw;
-+ substream->private_data = vss;
-+
-+ snd_pcm_hw_constraint_integer(substream->runtime,
-+ SNDRV_PCM_HW_PARAM_PERIODS);
-+
-+ vss->stopped = !!virtsnd_pcm_msg_pending_num(vss);
-+
-+ /*
-+ * If the substream has already been used, then the I/O queue may be in
-+ * an invalid state. Just in case, we do a check and try to return the
-+ * queue to its original state, if necessary.
-+ */
-+ return virtsnd_pcm_sync_stop(substream);
-+}
-+
-+/**
-+ * virtsnd_pcm_close() - Close the PCM substream.
-+ * @substream: Kernel ALSA substream.
-+ *
-+ * Context: Process context.
-+ * Return: 0.
-+ */
-+static int virtsnd_pcm_close(struct snd_pcm_substream *substream)
-+{
-+ return 0;
-+}
-+
-+/**
-+ * virtsnd_pcm_dev_set_params() - Set the parameters of the PCM substream on
-+ * the device side.
-+ * @vss: VirtIO PCM substream.
-+ * @buffer_bytes: Size of the hardware buffer.
-+ * @period_bytes: Size of the hardware period.
-+ * @channels: Selected number of channels.
-+ * @format: Selected sample format (SNDRV_PCM_FORMAT_XXX).
-+ * @rate: Selected frame rate.
-+ *
-+ * Context: Any context that permits to sleep.
-+ * Return: 0 on success, -errno on failure.
-+ */
-+static int virtsnd_pcm_dev_set_params(struct virtio_pcm_substream *vss,
-+ unsigned int buffer_bytes,
-+ unsigned int period_bytes,
-+ unsigned int channels,
-+ snd_pcm_format_t format,
-+ unsigned int rate)
-+{
-+ struct virtio_snd_msg *msg;
-+ struct virtio_snd_pcm_set_params *request;
-+ unsigned int i;
-+ int vformat = -1;
-+ int vrate = -1;
-+
-+ for (i = 0; i < ARRAY_SIZE(g_a2v_format_map); ++i)
-+ if (g_a2v_format_map[i].alsa_bit == format) {
-+ vformat = g_a2v_format_map[i].vio_bit;
-+
-+ break;
-+ }
-+
-+ for (i = 0; i < ARRAY_SIZE(g_a2v_rate_map); ++i)
-+ if (g_a2v_rate_map[i].rate == rate) {
-+ vrate = g_a2v_rate_map[i].vio_bit;
-+
-+ break;
-+ }
-+
-+ if (vformat == -1 || vrate == -1)
-+ return -EINVAL;
-+
-+ msg = virtsnd_pcm_ctl_msg_alloc(vss, VIRTIO_SND_R_PCM_SET_PARAMS,
-+ GFP_KERNEL);
-+ if (!msg)
-+ return -ENOMEM;
-+
-+ request = virtsnd_ctl_msg_request(msg);
-+ request->buffer_bytes = cpu_to_le32(buffer_bytes);
-+ request->period_bytes = cpu_to_le32(period_bytes);
-+ request->channels = channels;
-+ request->format = vformat;
-+ request->rate = vrate;
-+
-+ if (vss->features & (1U << VIRTIO_SND_PCM_F_MSG_POLLING))
-+ request->features |=
-+ cpu_to_le32(1U << VIRTIO_SND_PCM_F_MSG_POLLING);
-+
-+ if (vss->features & (1U << VIRTIO_SND_PCM_F_EVT_XRUNS))
-+ request->features |=
-+ cpu_to_le32(1U << VIRTIO_SND_PCM_F_EVT_XRUNS);
-+
-+ return virtsnd_ctl_msg_send_sync(vss->snd, msg);
-+}
-+
-+/**
-+ * virtsnd_pcm_hw_params() - Set the parameters of the PCM substream.
-+ * @substream: Kernel ALSA substream.
-+ * @hw_params: Hardware parameters.
-+ *
-+ * Context: Process context.
-+ * Return: 0 on success, -errno on failure.
-+ */
-+static int virtsnd_pcm_hw_params(struct snd_pcm_substream *substream,
-+ struct snd_pcm_hw_params *hw_params)
-+{
-+ struct virtio_pcm_substream *vss = snd_pcm_substream_chip(substream);
-+ struct virtio_device *vdev = vss->snd->vdev;
-+ int rc;
-+
-+ if (virtsnd_pcm_msg_pending_num(vss)) {
-+ dev_err(&vdev->dev, "SID %u: invalid I/O queue state\n",
-+ vss->sid);
-+ return -EBADFD;
-+ }
-+
-+ rc = virtsnd_pcm_dev_set_params(vss, params_buffer_bytes(hw_params),
-+ params_period_bytes(hw_params),
-+ params_channels(hw_params),
-+ params_format(hw_params),
-+ params_rate(hw_params));
-+ if (rc)
-+ return rc;
-+
-+ /*
-+ * Free previously allocated messages if ops->hw_params() is called
-+ * several times in a row, or if ops->hw_free() failed to free messages.
-+ */
-+ virtsnd_pcm_msg_free(vss);
-+
-+ return virtsnd_pcm_msg_alloc(vss, params_periods(hw_params),
-+ params_period_bytes(hw_params));
-+}
-+
-+/**
-+ * virtsnd_pcm_hw_free() - Reset the parameters of the PCM substream.
-+ * @substream: Kernel ALSA substream.
-+ *
-+ * Context: Process context.
-+ * Return: 0
-+ */
-+static int virtsnd_pcm_hw_free(struct snd_pcm_substream *substream)
-+{
-+ struct virtio_pcm_substream *vss = snd_pcm_substream_chip(substream);
-+
-+ /* If the queue is flushed, we can safely free the messages here. */
-+ if (!virtsnd_pcm_msg_pending_num(vss))
-+ virtsnd_pcm_msg_free(vss);
-+
-+ return 0;
-+}
-+
-+/**
-+ * virtsnd_pcm_prepare() - Prepare the PCM substream.
-+ * @substream: Kernel ALSA substream.
-+ *
-+ * Context: Process context.
-+ * Return: 0 on success, -errno on failure.
-+ */
-+static int virtsnd_pcm_prepare(struct snd_pcm_substream *substream)
-+{
-+ struct virtio_pcm_substream *vss = snd_pcm_substream_chip(substream);
-+ struct virtio_device *vdev = vss->snd->vdev;
-+ struct virtio_snd_msg *msg;
-+
-+ if (virtsnd_pcm_msg_pending_num(vss)) {
-+ dev_err(&vdev->dev, "SID %u: invalid I/O queue state\n",
-+ vss->sid);
-+ return -EBADFD;
-+ }
-+
-+ vss->buffer_bytes = snd_pcm_lib_buffer_bytes(substream);
-+ vss->hw_ptr = 0;
-+ vss->xfer_xrun = false;
-+ vss->msg_last_enqueued = -1;
-+ vss->msg_count = 0;
-+
-+ msg = virtsnd_pcm_ctl_msg_alloc(vss, VIRTIO_SND_R_PCM_PREPARE,
-+ GFP_KERNEL);
-+ if (!msg)
-+ return -ENOMEM;
-+
-+ return virtsnd_ctl_msg_send_sync(vss->snd, msg);
-+}
-+
-+/**
-+ * virtsnd_pcm_trigger() - Process command for the PCM substream.
-+ * @substream: Kernel ALSA substream.
-+ * @command: Substream command (SNDRV_PCM_TRIGGER_XXX).
-+ *
-+ * Context: Any context. Takes and releases the VirtIO substream spinlock.
-+ * May take and release the tx/rx queue spinlock.
-+ * Return: 0 on success, -errno on failure.
-+ */
-+static int virtsnd_pcm_trigger(struct snd_pcm_substream *substream, int command)
-+{
-+ struct virtio_pcm_substream *vss = snd_pcm_substream_chip(substream);
-+ struct virtio_snd *snd = vss->snd;
-+ struct virtio_snd_queue *queue;
-+ struct virtio_snd_msg *msg;
-+ unsigned long flags;
-+ int rc;
-+
-+ switch (command) {
-+ case SNDRV_PCM_TRIGGER_START:
-+ case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
-+ queue = virtsnd_pcm_queue(vss);
-+
-+ spin_lock_irqsave(&queue->lock, flags);
-+ spin_lock(&vss->lock);
-+ rc = virtsnd_pcm_msg_send(vss);
-+ if (!rc)
-+ vss->xfer_enabled = true;
-+ spin_unlock(&vss->lock);
-+ spin_unlock_irqrestore(&queue->lock, flags);
-+ if (rc)
-+ return rc;
-+
-+ msg = virtsnd_pcm_ctl_msg_alloc(vss, VIRTIO_SND_R_PCM_START,
-+ GFP_KERNEL);
-+ if (!msg) {
-+ spin_lock_irqsave(&vss->lock, flags);
-+ vss->xfer_enabled = false;
-+ spin_unlock_irqrestore(&vss->lock, flags);
-+
-+ return -ENOMEM;
-+ }
-+
-+ return virtsnd_ctl_msg_send_sync(snd, msg);
-+ case SNDRV_PCM_TRIGGER_STOP:
-+ vss->stopped = true;
-+ fallthrough;
-+ case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
-+ spin_lock_irqsave(&vss->lock, flags);
-+ vss->xfer_enabled = false;
-+ spin_unlock_irqrestore(&vss->lock, flags);
-+
-+ msg = virtsnd_pcm_ctl_msg_alloc(vss, VIRTIO_SND_R_PCM_STOP,
-+ GFP_KERNEL);
-+ if (!msg)
-+ return -ENOMEM;
-+
-+ return virtsnd_ctl_msg_send_sync(snd, msg);
-+ default:
-+ return -EINVAL;
-+ }
-+}
-+
-+/**
-+ * virtsnd_pcm_sync_stop() - Synchronous PCM substream stop.
-+ * @substream: Kernel ALSA substream.
-+ *
-+ * The function can be called both from the upper level or from the driver
-+ * itself.
-+ *
-+ * Context: Process context. Takes and releases the VirtIO substream spinlock.
-+ * Return: 0 on success, -errno on failure.
-+ */
-+static int virtsnd_pcm_sync_stop(struct snd_pcm_substream *substream)
-+{
-+ struct virtio_pcm_substream *vss = snd_pcm_substream_chip(substream);
-+ struct virtio_snd *snd = vss->snd;
-+ struct virtio_snd_msg *msg;
-+ unsigned int js = msecs_to_jiffies(virtsnd_msg_timeout_ms);
-+ int rc;
-+
-+ cancel_work_sync(&vss->elapsed_period);
-+
-+ if (!vss->stopped)
-+ return 0;
-+
-+ msg = virtsnd_pcm_ctl_msg_alloc(vss, VIRTIO_SND_R_PCM_RELEASE,
-+ GFP_KERNEL);
-+ if (!msg)
-+ return -ENOMEM;
-+
-+ rc = virtsnd_ctl_msg_send_sync(snd, msg);
-+ if (rc)
-+ return rc;
-+
-+ /*
-+ * The spec states that upon receipt of the RELEASE command "the device
-+ * MUST complete all pending I/O messages for the specified stream ID".
-+ * Thus, we consider the absence of I/O messages in the queue as an
-+ * indication that the substream has been released.
-+ */
-+ rc = wait_event_interruptible_timeout(vss->msg_empty,
-+ !virtsnd_pcm_msg_pending_num(vss),
-+ js);
-+ if (rc <= 0) {
-+ dev_warn(&snd->vdev->dev, "SID %u: failed to flush I/O queue\n",
-+ vss->sid);
-+
-+ return !rc ? -ETIMEDOUT : rc;
-+ }
-+
-+ vss->stopped = false;
-+
-+ return 0;
-+}
-+
-+/**
-+ * virtsnd_pcm_pointer() - Get the current hardware position for the PCM
-+ * substream.
-+ * @substream: Kernel ALSA substream.
-+ *
-+ * Context: Any context. Takes and releases the VirtIO substream spinlock.
-+ * Return: Hardware position in frames inside [0 ... buffer_size) range.
-+ */
-+static snd_pcm_uframes_t
-+virtsnd_pcm_pointer(struct snd_pcm_substream *substream)
-+{
-+ struct virtio_pcm_substream *vss = snd_pcm_substream_chip(substream);
-+ snd_pcm_uframes_t hw_ptr = SNDRV_PCM_POS_XRUN;
-+ unsigned long flags;
-+
-+ spin_lock_irqsave(&vss->lock, flags);
-+ if (!vss->xfer_xrun)
-+ hw_ptr = bytes_to_frames(substream->runtime, vss->hw_ptr);
-+ spin_unlock_irqrestore(&vss->lock, flags);
-+
-+ return hw_ptr;
-+}
-+
-+/* PCM substream operators map. */
-+const struct snd_pcm_ops virtsnd_pcm_ops = {
-+ .open = virtsnd_pcm_open,
-+ .close = virtsnd_pcm_close,
-+ .ioctl = snd_pcm_lib_ioctl,
-+ .hw_params = virtsnd_pcm_hw_params,
-+ .hw_free = virtsnd_pcm_hw_free,
-+ .prepare = virtsnd_pcm_prepare,
-+ .trigger = virtsnd_pcm_trigger,
-+ .sync_stop = virtsnd_pcm_sync_stop,
-+ .pointer = virtsnd_pcm_pointer,
-+};
diff --git a/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-kmeta/bsp/virtio/virtio-snd/0007-ALSA-virtio-introduce-jack-support.patch b/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-kmeta/bsp/virtio/virtio-snd/0007-ALSA-virtio-introduce-jack-support.patch
deleted file mode 100644
index af30421e0..000000000
--- a/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-kmeta/bsp/virtio/virtio-snd/0007-ALSA-virtio-introduce-jack-support.patch
+++ /dev/null
@@ -1,351 +0,0 @@
-From 07692f250a96382b38daa2b7e2b96689f64d7a40 Mon Sep 17 00:00:00 2001
-From: Anton Yakovlev <anton.yakovlev@opensynergy.com>
-Date: Tue, 2 Mar 2021 17:47:07 +0100
-Subject: [PATCH] ALSA: virtio: introduce jack support
-
-Enumerate all available jacks and create ALSA controls.
-
-At the moment jacks have a simple implementation and can only be used
-to receive notifications about a plugged in/out device.
-
-Signed-off-by: Anton Yakovlev <anton.yakovlev@opensynergy.com>
-Link: https://lore.kernel.org/r/20210302164709.3142702-8-anton.yakovlev@opensynergy.com
-Signed-off-by: Takashi Iwai <tiwai@suse.de>
-Signed-off-by: Vasyl Vavrychuk <vasyl.vavrychuk@opensynergy.com>
----
- sound/virtio/Makefile | 1 +
- sound/virtio/virtio_card.c | 14 +++
- sound/virtio/virtio_card.h | 12 ++
- sound/virtio/virtio_jack.c | 233 +++++++++++++++++++++++++++++++++++++
- 4 files changed, 260 insertions(+)
- create mode 100644 sound/virtio/virtio_jack.c
-
-diff --git a/sound/virtio/Makefile b/sound/virtio/Makefile
-index 34493226793f..09f485291285 100644
---- a/sound/virtio/Makefile
-+++ b/sound/virtio/Makefile
-@@ -5,6 +5,7 @@ obj-$(CONFIG_SND_VIRTIO) += virtio_snd.o
- virtio_snd-objs := \
- virtio_card.o \
- virtio_ctl_msg.o \
-+ virtio_jack.o \
- virtio_pcm.o \
- virtio_pcm_msg.o \
- virtio_pcm_ops.o
-diff --git a/sound/virtio/virtio_card.c b/sound/virtio/virtio_card.c
-index 57b9b7f3a9c0..89bd66c1256e 100644
---- a/sound/virtio/virtio_card.c
-+++ b/sound/virtio/virtio_card.c
-@@ -56,6 +56,10 @@ static void virtsnd_event_dispatch(struct virtio_snd *snd,
- struct virtio_snd_event *event)
- {
- switch (le32_to_cpu(event->hdr.code)) {
-+ case VIRTIO_SND_EVT_JACK_CONNECTED:
-+ case VIRTIO_SND_EVT_JACK_DISCONNECTED:
-+ virtsnd_jack_event(snd, event);
-+ break;
- case VIRTIO_SND_EVT_PCM_PERIOD_ELAPSED:
- case VIRTIO_SND_EVT_PCM_XRUN:
- virtsnd_pcm_event(snd, event);
-@@ -219,10 +223,20 @@ static int virtsnd_build_devs(struct virtio_snd *snd)
- VIRTIO_SND_CARD_NAME " at %s/%s",
- dev_name(dev->parent), dev_name(dev));
-
-+ rc = virtsnd_jack_parse_cfg(snd);
-+ if (rc)
-+ return rc;
-+
- rc = virtsnd_pcm_parse_cfg(snd);
- if (rc)
- return rc;
-
-+ if (snd->njacks) {
-+ rc = virtsnd_jack_build_devs(snd);
-+ if (rc)
-+ return rc;
-+ }
-+
- if (snd->nsubstreams) {
- rc = virtsnd_pcm_build_devs(snd);
- if (rc)
-diff --git a/sound/virtio/virtio_card.h b/sound/virtio/virtio_card.h
-index c43f9744d362..f154313c79fd 100644
---- a/sound/virtio/virtio_card.h
-+++ b/sound/virtio/virtio_card.h
-@@ -18,6 +18,7 @@
- #define VIRTIO_SND_CARD_NAME "VirtIO SoundCard"
- #define VIRTIO_SND_PCM_NAME "VirtIO PCM"
-
-+struct virtio_jack;
- struct virtio_pcm_substream;
-
- /**
-@@ -38,6 +39,8 @@ struct virtio_snd_queue {
- * @ctl_msgs: Pending control request list.
- * @event_msgs: Device events.
- * @pcm_list: VirtIO PCM device list.
-+ * @jacks: VirtIO jacks.
-+ * @njacks: Number of jacks.
- * @substreams: VirtIO PCM substreams.
- * @nsubstreams: Number of PCM substreams.
- */
-@@ -48,6 +51,8 @@ struct virtio_snd {
- struct list_head ctl_msgs;
- struct virtio_snd_event *event_msgs;
- struct list_head pcm_list;
-+ struct virtio_jack *jacks;
-+ u32 njacks;
- struct virtio_pcm_substream *substreams;
- u32 nsubstreams;
- };
-@@ -88,4 +93,11 @@ virtsnd_pcm_queue(struct virtio_pcm_substream *vss)
- return virtsnd_rx_queue(vss->snd);
- }
-
-+int virtsnd_jack_parse_cfg(struct virtio_snd *snd);
-+
-+int virtsnd_jack_build_devs(struct virtio_snd *snd);
-+
-+void virtsnd_jack_event(struct virtio_snd *snd,
-+ struct virtio_snd_event *event);
-+
- #endif /* VIRTIO_SND_CARD_H */
-diff --git a/sound/virtio/virtio_jack.c b/sound/virtio/virtio_jack.c
-new file mode 100644
-index 000000000000..c69f1dcdcc84
---- /dev/null
-+++ b/sound/virtio/virtio_jack.c
-@@ -0,0 +1,233 @@
-+// SPDX-License-Identifier: GPL-2.0+
-+/*
-+ * virtio-snd: Virtio sound device
-+ * Copyright (C) 2021 OpenSynergy GmbH
-+ */
-+#include <linux/virtio_config.h>
-+#include <sound/jack.h>
-+#include <sound/hda_verbs.h>
-+
-+#include "virtio_card.h"
-+
-+/**
-+ * DOC: Implementation Status
-+ *
-+ * At the moment jacks have a simple implementation and can only be used to
-+ * receive notifications about a plugged in/out device.
-+ *
-+ * VIRTIO_SND_R_JACK_REMAP
-+ * is not supported
-+ */
-+
-+/**
-+ * struct virtio_jack - VirtIO jack.
-+ * @jack: Kernel jack control.
-+ * @nid: Functional group node identifier.
-+ * @features: Jack virtio feature bit map (1 << VIRTIO_SND_JACK_F_XXX).
-+ * @defconf: Pin default configuration value.
-+ * @caps: Pin capabilities value.
-+ * @connected: Current jack connection status.
-+ * @type: Kernel jack type (SND_JACK_XXX).
-+ */
-+struct virtio_jack {
-+ struct snd_jack *jack;
-+ u32 nid;
-+ u32 features;
-+ u32 defconf;
-+ u32 caps;
-+ bool connected;
-+ int type;
-+};
-+
-+/**
-+ * virtsnd_jack_get_label() - Get the name string for the jack.
-+ * @vjack: VirtIO jack.
-+ *
-+ * Returns the jack name based on the default pin configuration value (see HDA
-+ * specification).
-+ *
-+ * Context: Any context.
-+ * Return: Name string.
-+ */
-+static const char *virtsnd_jack_get_label(struct virtio_jack *vjack)
-+{
-+ unsigned int defconf = vjack->defconf;
-+ unsigned int device =
-+ (defconf & AC_DEFCFG_DEVICE) >> AC_DEFCFG_DEVICE_SHIFT;
-+ unsigned int location =
-+ (defconf & AC_DEFCFG_LOCATION) >> AC_DEFCFG_LOCATION_SHIFT;
-+
-+ switch (device) {
-+ case AC_JACK_LINE_OUT:
-+ return "Line Out";
-+ case AC_JACK_SPEAKER:
-+ return "Speaker";
-+ case AC_JACK_HP_OUT:
-+ return "Headphone";
-+ case AC_JACK_CD:
-+ return "CD";
-+ case AC_JACK_SPDIF_OUT:
-+ case AC_JACK_DIG_OTHER_OUT:
-+ if (location == AC_JACK_LOC_HDMI)
-+ return "HDMI Out";
-+ else
-+ return "SPDIF Out";
-+ case AC_JACK_LINE_IN:
-+ return "Line";
-+ case AC_JACK_AUX:
-+ return "Aux";
-+ case AC_JACK_MIC_IN:
-+ return "Mic";
-+ case AC_JACK_SPDIF_IN:
-+ return "SPDIF In";
-+ case AC_JACK_DIG_OTHER_IN:
-+ return "Digital In";
-+ default:
-+ return "Misc";
-+ }
-+}
-+
-+/**
-+ * virtsnd_jack_get_type() - Get the type for the jack.
-+ * @vjack: VirtIO jack.
-+ *
-+ * Returns the jack type based on the default pin configuration value (see HDA
-+ * specification).
-+ *
-+ * Context: Any context.
-+ * Return: SND_JACK_XXX value.
-+ */
-+static int virtsnd_jack_get_type(struct virtio_jack *vjack)
-+{
-+ unsigned int defconf = vjack->defconf;
-+ unsigned int device =
-+ (defconf & AC_DEFCFG_DEVICE) >> AC_DEFCFG_DEVICE_SHIFT;
-+
-+ switch (device) {
-+ case AC_JACK_LINE_OUT:
-+ case AC_JACK_SPEAKER:
-+ return SND_JACK_LINEOUT;
-+ case AC_JACK_HP_OUT:
-+ return SND_JACK_HEADPHONE;
-+ case AC_JACK_SPDIF_OUT:
-+ case AC_JACK_DIG_OTHER_OUT:
-+ return SND_JACK_AVOUT;
-+ case AC_JACK_MIC_IN:
-+ return SND_JACK_MICROPHONE;
-+ default:
-+ return SND_JACK_LINEIN;
-+ }
-+}
-+
-+/**
-+ * virtsnd_jack_parse_cfg() - Parse the jack configuration.
-+ * @snd: VirtIO sound device.
-+ *
-+ * This function is called during initial device initialization.
-+ *
-+ * Context: Any context that permits to sleep.
-+ * Return: 0 on success, -errno on failure.
-+ */
-+int virtsnd_jack_parse_cfg(struct virtio_snd *snd)
-+{
-+ struct virtio_device *vdev = snd->vdev;
-+ struct virtio_snd_jack_info *info;
-+ u32 i;
-+ int rc;
-+
-+ virtio_cread_le(vdev, struct virtio_snd_config, jacks, &snd->njacks);
-+ if (!snd->njacks)
-+ return 0;
-+
-+ snd->jacks = devm_kcalloc(&vdev->dev, snd->njacks, sizeof(*snd->jacks),
-+ GFP_KERNEL);
-+ if (!snd->jacks)
-+ return -ENOMEM;
-+
-+ info = kcalloc(snd->njacks, sizeof(*info), GFP_KERNEL);
-+ if (!info)
-+ return -ENOMEM;
-+
-+ rc = virtsnd_ctl_query_info(snd, VIRTIO_SND_R_JACK_INFO, 0, snd->njacks,
-+ sizeof(*info), info);
-+ if (rc)
-+ goto on_exit;
-+
-+ for (i = 0; i < snd->njacks; ++i) {
-+ struct virtio_jack *vjack = &snd->jacks[i];
-+
-+ vjack->nid = le32_to_cpu(info[i].hdr.hda_fn_nid);
-+ vjack->features = le32_to_cpu(info[i].features);
-+ vjack->defconf = le32_to_cpu(info[i].hda_reg_defconf);
-+ vjack->caps = le32_to_cpu(info[i].hda_reg_caps);
-+ vjack->connected = info[i].connected;
-+ }
-+
-+on_exit:
-+ kfree(info);
-+
-+ return rc;
-+}
-+
-+/**
-+ * virtsnd_jack_build_devs() - Build ALSA controls for jacks.
-+ * @snd: VirtIO sound device.
-+ *
-+ * Context: Any context that permits to sleep.
-+ * Return: 0 on success, -errno on failure.
-+ */
-+int virtsnd_jack_build_devs(struct virtio_snd *snd)
-+{
-+ u32 i;
-+ int rc;
-+
-+ for (i = 0; i < snd->njacks; ++i) {
-+ struct virtio_jack *vjack = &snd->jacks[i];
-+
-+ vjack->type = virtsnd_jack_get_type(vjack);
-+
-+ rc = snd_jack_new(snd->card, virtsnd_jack_get_label(vjack),
-+ vjack->type, &vjack->jack, true, true);
-+ if (rc)
-+ return rc;
-+
-+ if (vjack->jack)
-+ vjack->jack->private_data = vjack;
-+
-+ snd_jack_report(vjack->jack,
-+ vjack->connected ? vjack->type : 0);
-+ }
-+
-+ return 0;
-+}
-+
-+/**
-+ * virtsnd_jack_event() - Handle the jack event notification.
-+ * @snd: VirtIO sound device.
-+ * @event: VirtIO sound event.
-+ *
-+ * Context: Interrupt context.
-+ */
-+void virtsnd_jack_event(struct virtio_snd *snd, struct virtio_snd_event *event)
-+{
-+ u32 jack_id = le32_to_cpu(event->data);
-+ struct virtio_jack *vjack;
-+
-+ if (jack_id >= snd->njacks)
-+ return;
-+
-+ vjack = &snd->jacks[jack_id];
-+
-+ switch (le32_to_cpu(event->hdr.code)) {
-+ case VIRTIO_SND_EVT_JACK_CONNECTED:
-+ vjack->connected = true;
-+ break;
-+ case VIRTIO_SND_EVT_JACK_DISCONNECTED:
-+ vjack->connected = false;
-+ break;
-+ default:
-+ return;
-+ }
-+
-+ snd_jack_report(vjack->jack, vjack->connected ? vjack->type : 0);
-+}
diff --git a/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-kmeta/bsp/virtio/virtio-snd/0008-ALSA-virtio-introduce-PCM-channel-map-support.patch b/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-kmeta/bsp/virtio/virtio-snd/0008-ALSA-virtio-introduce-PCM-channel-map-support.patch
deleted file mode 100644
index d27ddb435..000000000
--- a/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-kmeta/bsp/virtio/virtio-snd/0008-ALSA-virtio-introduce-PCM-channel-map-support.patch
+++ /dev/null
@@ -1,335 +0,0 @@
-From 861932797d59b807b4fcc8a2e12dafbddd5ca4d9 Mon Sep 17 00:00:00 2001
-From: Anton Yakovlev <anton.yakovlev@opensynergy.com>
-Date: Tue, 2 Mar 2021 17:47:08 +0100
-Subject: [PATCH] ALSA: virtio: introduce PCM channel map support
-
-Enumerate all available PCM channel maps and create ALSA controls.
-
-Signed-off-by: Anton Yakovlev <anton.yakovlev@opensynergy.com>
-Link: https://lore.kernel.org/r/20210302164709.3142702-9-anton.yakovlev@opensynergy.com
-Signed-off-by: Takashi Iwai <tiwai@suse.de>
-Signed-off-by: Vasyl Vavrychuk <vasyl.vavrychuk@opensynergy.com>
----
- sound/virtio/Makefile | 1 +
- sound/virtio/virtio_card.c | 10 ++
- sound/virtio/virtio_card.h | 8 ++
- sound/virtio/virtio_chmap.c | 219 ++++++++++++++++++++++++++++++++++++
- sound/virtio/virtio_pcm.h | 4 +
- 5 files changed, 242 insertions(+)
- create mode 100644 sound/virtio/virtio_chmap.c
-
-diff --git a/sound/virtio/Makefile b/sound/virtio/Makefile
-index 09f485291285..2742bddb8874 100644
---- a/sound/virtio/Makefile
-+++ b/sound/virtio/Makefile
-@@ -4,6 +4,7 @@ obj-$(CONFIG_SND_VIRTIO) += virtio_snd.o
-
- virtio_snd-objs := \
- virtio_card.o \
-+ virtio_chmap.o \
- virtio_ctl_msg.o \
- virtio_jack.o \
- virtio_pcm.o \
-diff --git a/sound/virtio/virtio_card.c b/sound/virtio/virtio_card.c
-index 89bd66c1256e..1c03fcc41c3b 100644
---- a/sound/virtio/virtio_card.c
-+++ b/sound/virtio/virtio_card.c
-@@ -231,6 +231,10 @@ static int virtsnd_build_devs(struct virtio_snd *snd)
- if (rc)
- return rc;
-
-+ rc = virtsnd_chmap_parse_cfg(snd);
-+ if (rc)
-+ return rc;
-+
- if (snd->njacks) {
- rc = virtsnd_jack_build_devs(snd);
- if (rc)
-@@ -243,6 +247,12 @@ static int virtsnd_build_devs(struct virtio_snd *snd)
- return rc;
- }
-
-+ if (snd->nchmaps) {
-+ rc = virtsnd_chmap_build_devs(snd);
-+ if (rc)
-+ return rc;
-+ }
-+
- return snd_card_register(snd->card);
- }
-
-diff --git a/sound/virtio/virtio_card.h b/sound/virtio/virtio_card.h
-index f154313c79fd..86ef3941895e 100644
---- a/sound/virtio/virtio_card.h
-+++ b/sound/virtio/virtio_card.h
-@@ -43,6 +43,8 @@ struct virtio_snd_queue {
- * @njacks: Number of jacks.
- * @substreams: VirtIO PCM substreams.
- * @nsubstreams: Number of PCM substreams.
-+ * @chmaps: VirtIO channel maps.
-+ * @nchmaps: Number of channel maps.
- */
- struct virtio_snd {
- struct virtio_device *vdev;
-@@ -55,6 +57,8 @@ struct virtio_snd {
- u32 njacks;
- struct virtio_pcm_substream *substreams;
- u32 nsubstreams;
-+ struct virtio_snd_chmap_info *chmaps;
-+ u32 nchmaps;
- };
-
- /* Message completion timeout in milliseconds (module parameter). */
-@@ -100,4 +104,8 @@ int virtsnd_jack_build_devs(struct virtio_snd *snd);
- void virtsnd_jack_event(struct virtio_snd *snd,
- struct virtio_snd_event *event);
-
-+int virtsnd_chmap_parse_cfg(struct virtio_snd *snd);
-+
-+int virtsnd_chmap_build_devs(struct virtio_snd *snd);
-+
- #endif /* VIRTIO_SND_CARD_H */
-diff --git a/sound/virtio/virtio_chmap.c b/sound/virtio/virtio_chmap.c
-new file mode 100644
-index 000000000000..5bc924933a59
---- /dev/null
-+++ b/sound/virtio/virtio_chmap.c
-@@ -0,0 +1,219 @@
-+// SPDX-License-Identifier: GPL-2.0+
-+/*
-+ * virtio-snd: Virtio sound device
-+ * Copyright (C) 2021 OpenSynergy GmbH
-+ */
-+#include <linux/virtio_config.h>
-+
-+#include "virtio_card.h"
-+
-+/* VirtIO->ALSA channel position map */
-+static const u8 g_v2a_position_map[] = {
-+ [VIRTIO_SND_CHMAP_NONE] = SNDRV_CHMAP_UNKNOWN,
-+ [VIRTIO_SND_CHMAP_NA] = SNDRV_CHMAP_NA,
-+ [VIRTIO_SND_CHMAP_MONO] = SNDRV_CHMAP_MONO,
-+ [VIRTIO_SND_CHMAP_FL] = SNDRV_CHMAP_FL,
-+ [VIRTIO_SND_CHMAP_FR] = SNDRV_CHMAP_FR,
-+ [VIRTIO_SND_CHMAP_RL] = SNDRV_CHMAP_RL,
-+ [VIRTIO_SND_CHMAP_RR] = SNDRV_CHMAP_RR,
-+ [VIRTIO_SND_CHMAP_FC] = SNDRV_CHMAP_FC,
-+ [VIRTIO_SND_CHMAP_LFE] = SNDRV_CHMAP_LFE,
-+ [VIRTIO_SND_CHMAP_SL] = SNDRV_CHMAP_SL,
-+ [VIRTIO_SND_CHMAP_SR] = SNDRV_CHMAP_SR,
-+ [VIRTIO_SND_CHMAP_RC] = SNDRV_CHMAP_RC,
-+ [VIRTIO_SND_CHMAP_FLC] = SNDRV_CHMAP_FLC,
-+ [VIRTIO_SND_CHMAP_FRC] = SNDRV_CHMAP_FRC,
-+ [VIRTIO_SND_CHMAP_RLC] = SNDRV_CHMAP_RLC,
-+ [VIRTIO_SND_CHMAP_RRC] = SNDRV_CHMAP_RRC,
-+ [VIRTIO_SND_CHMAP_FLW] = SNDRV_CHMAP_FLW,
-+ [VIRTIO_SND_CHMAP_FRW] = SNDRV_CHMAP_FRW,
-+ [VIRTIO_SND_CHMAP_FLH] = SNDRV_CHMAP_FLH,
-+ [VIRTIO_SND_CHMAP_FCH] = SNDRV_CHMAP_FCH,
-+ [VIRTIO_SND_CHMAP_FRH] = SNDRV_CHMAP_FRH,
-+ [VIRTIO_SND_CHMAP_TC] = SNDRV_CHMAP_TC,
-+ [VIRTIO_SND_CHMAP_TFL] = SNDRV_CHMAP_TFL,
-+ [VIRTIO_SND_CHMAP_TFR] = SNDRV_CHMAP_TFR,
-+ [VIRTIO_SND_CHMAP_TFC] = SNDRV_CHMAP_TFC,
-+ [VIRTIO_SND_CHMAP_TRL] = SNDRV_CHMAP_TRL,
-+ [VIRTIO_SND_CHMAP_TRR] = SNDRV_CHMAP_TRR,
-+ [VIRTIO_SND_CHMAP_TRC] = SNDRV_CHMAP_TRC,
-+ [VIRTIO_SND_CHMAP_TFLC] = SNDRV_CHMAP_TFLC,
-+ [VIRTIO_SND_CHMAP_TFRC] = SNDRV_CHMAP_TFRC,
-+ [VIRTIO_SND_CHMAP_TSL] = SNDRV_CHMAP_TSL,
-+ [VIRTIO_SND_CHMAP_TSR] = SNDRV_CHMAP_TSR,
-+ [VIRTIO_SND_CHMAP_LLFE] = SNDRV_CHMAP_LLFE,
-+ [VIRTIO_SND_CHMAP_RLFE] = SNDRV_CHMAP_RLFE,
-+ [VIRTIO_SND_CHMAP_BC] = SNDRV_CHMAP_BC,
-+ [VIRTIO_SND_CHMAP_BLC] = SNDRV_CHMAP_BLC,
-+ [VIRTIO_SND_CHMAP_BRC] = SNDRV_CHMAP_BRC
-+};
-+
-+/**
-+ * virtsnd_chmap_parse_cfg() - Parse the channel map configuration.
-+ * @snd: VirtIO sound device.
-+ *
-+ * This function is called during initial device initialization.
-+ *
-+ * Context: Any context that permits to sleep.
-+ * Return: 0 on success, -errno on failure.
-+ */
-+int virtsnd_chmap_parse_cfg(struct virtio_snd *snd)
-+{
-+ struct virtio_device *vdev = snd->vdev;
-+ u32 i;
-+ int rc;
-+
-+ virtio_cread_le(vdev, struct virtio_snd_config, chmaps, &snd->nchmaps);
-+ if (!snd->nchmaps)
-+ return 0;
-+
-+ snd->chmaps = devm_kcalloc(&vdev->dev, snd->nchmaps,
-+ sizeof(*snd->chmaps), GFP_KERNEL);
-+ if (!snd->chmaps)
-+ return -ENOMEM;
-+
-+ rc = virtsnd_ctl_query_info(snd, VIRTIO_SND_R_CHMAP_INFO, 0,
-+ snd->nchmaps, sizeof(*snd->chmaps),
-+ snd->chmaps);
-+ if (rc)
-+ return rc;
-+
-+ /* Count the number of channel maps per each PCM device/stream. */
-+ for (i = 0; i < snd->nchmaps; ++i) {
-+ struct virtio_snd_chmap_info *info = &snd->chmaps[i];
-+ u32 nid = le32_to_cpu(info->hdr.hda_fn_nid);
-+ struct virtio_pcm *vpcm;
-+ struct virtio_pcm_stream *vs;
-+
-+ vpcm = virtsnd_pcm_find_or_create(snd, nid);
-+ if (IS_ERR(vpcm))
-+ return PTR_ERR(vpcm);
-+
-+ switch (info->direction) {
-+ case VIRTIO_SND_D_OUTPUT:
-+ vs = &vpcm->streams[SNDRV_PCM_STREAM_PLAYBACK];
-+ break;
-+ case VIRTIO_SND_D_INPUT:
-+ vs = &vpcm->streams[SNDRV_PCM_STREAM_CAPTURE];
-+ break;
-+ default:
-+ dev_err(&vdev->dev,
-+ "chmap #%u: unknown direction (%u)\n", i,
-+ info->direction);
-+ return -EINVAL;
-+ }
-+
-+ vs->nchmaps++;
-+ }
-+
-+ return 0;
-+}
-+
-+/**
-+ * virtsnd_chmap_add_ctls() - Create an ALSA control for channel maps.
-+ * @pcm: ALSA PCM device.
-+ * @direction: PCM stream direction (SNDRV_PCM_STREAM_XXX).
-+ * @vs: VirtIO PCM stream.
-+ *
-+ * Context: Any context.
-+ * Return: 0 on success, -errno on failure.
-+ */
-+static int virtsnd_chmap_add_ctls(struct snd_pcm *pcm, int direction,
-+ struct virtio_pcm_stream *vs)
-+{
-+ u32 i;
-+ int max_channels = 0;
-+
-+ for (i = 0; i < vs->nchmaps; i++)
-+ if (max_channels < vs->chmaps[i].channels)
-+ max_channels = vs->chmaps[i].channels;
-+
-+ return snd_pcm_add_chmap_ctls(pcm, direction, vs->chmaps, max_channels,
-+ 0, NULL);
-+}
-+
-+/**
-+ * virtsnd_chmap_build_devs() - Build ALSA controls for channel maps.
-+ * @snd: VirtIO sound device.
-+ *
-+ * Context: Any context.
-+ * Return: 0 on success, -errno on failure.
-+ */
-+int virtsnd_chmap_build_devs(struct virtio_snd *snd)
-+{
-+ struct virtio_device *vdev = snd->vdev;
-+ struct virtio_pcm *vpcm;
-+ struct virtio_pcm_stream *vs;
-+ u32 i;
-+ int rc;
-+
-+ /* Allocate channel map elements per each PCM device/stream. */
-+ list_for_each_entry(vpcm, &snd->pcm_list, list) {
-+ for (i = 0; i < ARRAY_SIZE(vpcm->streams); ++i) {
-+ vs = &vpcm->streams[i];
-+
-+ if (!vs->nchmaps)
-+ continue;
-+
-+ vs->chmaps = devm_kcalloc(&vdev->dev, vs->nchmaps + 1,
-+ sizeof(*vs->chmaps),
-+ GFP_KERNEL);
-+ if (!vs->chmaps)
-+ return -ENOMEM;
-+
-+ vs->nchmaps = 0;
-+ }
-+ }
-+
-+ /* Initialize channel maps per each PCM device/stream. */
-+ for (i = 0; i < snd->nchmaps; ++i) {
-+ struct virtio_snd_chmap_info *info = &snd->chmaps[i];
-+ unsigned int channels = info->channels;
-+ unsigned int ch;
-+ struct snd_pcm_chmap_elem *chmap;
-+
-+ vpcm = virtsnd_pcm_find(snd, le32_to_cpu(info->hdr.hda_fn_nid));
-+ if (IS_ERR(vpcm))
-+ return PTR_ERR(vpcm);
-+
-+ if (info->direction == VIRTIO_SND_D_OUTPUT)
-+ vs = &vpcm->streams[SNDRV_PCM_STREAM_PLAYBACK];
-+ else
-+ vs = &vpcm->streams[SNDRV_PCM_STREAM_CAPTURE];
-+
-+ chmap = &vs->chmaps[vs->nchmaps++];
-+
-+ if (channels > ARRAY_SIZE(chmap->map))
-+ channels = ARRAY_SIZE(chmap->map);
-+
-+ chmap->channels = channels;
-+
-+ for (ch = 0; ch < channels; ++ch) {
-+ u8 position = info->positions[ch];
-+
-+ if (position >= ARRAY_SIZE(g_v2a_position_map))
-+ return -EINVAL;
-+
-+ chmap->map[ch] = g_v2a_position_map[position];
-+ }
-+ }
-+
-+ /* Create an ALSA control per each PCM device/stream. */
-+ list_for_each_entry(vpcm, &snd->pcm_list, list) {
-+ if (!vpcm->pcm)
-+ continue;
-+
-+ for (i = 0; i < ARRAY_SIZE(vpcm->streams); ++i) {
-+ vs = &vpcm->streams[i];
-+
-+ if (!vs->nchmaps)
-+ continue;
-+
-+ rc = virtsnd_chmap_add_ctls(vpcm->pcm, i, vs);
-+ if (rc)
-+ return rc;
-+ }
-+ }
-+
-+ return 0;
-+}
-diff --git a/sound/virtio/virtio_pcm.h b/sound/virtio/virtio_pcm.h
-index efd0228746cf..1353fdc9bd69 100644
---- a/sound/virtio/virtio_pcm.h
-+++ b/sound/virtio/virtio_pcm.h
-@@ -63,10 +63,14 @@ struct virtio_pcm_substream {
- * struct virtio_pcm_stream - VirtIO PCM stream.
- * @substreams: VirtIO substreams belonging to the stream.
- * @nsubstreams: Number of substreams.
-+ * @chmaps: Kernel channel maps belonging to the stream.
-+ * @nchmaps: Number of channel maps.
- */
- struct virtio_pcm_stream {
- struct virtio_pcm_substream **substreams;
- u32 nsubstreams;
-+ struct snd_pcm_chmap_elem *chmaps;
-+ u32 nchmaps;
- };
-
- /**
diff --git a/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-kmeta/bsp/virtio/virtio-snd/0009-ALSA-virtio-introduce-device-suspend-resume-support.patch b/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-kmeta/bsp/virtio/virtio-snd/0009-ALSA-virtio-introduce-device-suspend-resume-support.patch
deleted file mode 100644
index b7d278fd0..000000000
--- a/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-kmeta/bsp/virtio/virtio-snd/0009-ALSA-virtio-introduce-device-suspend-resume-support.patch
+++ /dev/null
@@ -1,174 +0,0 @@
-From b173fb2a0eb0067fc665ba48f9b2b8b5f991c078 Mon Sep 17 00:00:00 2001
-From: Anton Yakovlev <anton.yakovlev@opensynergy.com>
-Date: Tue, 2 Mar 2021 17:47:09 +0100
-Subject: [PATCH] ALSA: virtio: introduce device suspend/resume support
-
-All running PCM substreams are stopped on device suspend and restarted
-on device resume.
-
-Signed-off-by: Anton Yakovlev <anton.yakovlev@opensynergy.com>
-Link: https://lore.kernel.org/r/20210302164709.3142702-10-anton.yakovlev@opensynergy.com
-Signed-off-by: Takashi Iwai <tiwai@suse.de>
-Signed-off-by: Vasyl Vavrychuk <vasyl.vavrychuk@opensynergy.com>
----
- sound/virtio/virtio_card.c | 56 +++++++++++++++++++++++++++++++++++
- sound/virtio/virtio_pcm.h | 3 ++
- sound/virtio/virtio_pcm_ops.c | 33 ++++++++++++++++-----
- 3 files changed, 85 insertions(+), 7 deletions(-)
-
-diff --git a/sound/virtio/virtio_card.c b/sound/virtio/virtio_card.c
-index 1c03fcc41c3b..ae9128063917 100644
---- a/sound/virtio/virtio_card.c
-+++ b/sound/virtio/virtio_card.c
-@@ -362,6 +362,58 @@ static void virtsnd_remove(struct virtio_device *vdev)
- kfree(snd->event_msgs);
- }
-
-+#ifdef CONFIG_PM_SLEEP
-+/**
-+ * virtsnd_freeze() - Suspend device.
-+ * @vdev: VirtIO parent device.
-+ *
-+ * Context: Any context.
-+ * Return: 0 on success, -errno on failure.
-+ */
-+static int virtsnd_freeze(struct virtio_device *vdev)
-+{
-+ struct virtio_snd *snd = vdev->priv;
-+ unsigned int i;
-+
-+ virtsnd_disable_event_vq(snd);
-+ virtsnd_ctl_msg_cancel_all(snd);
-+
-+ vdev->config->del_vqs(vdev);
-+ vdev->config->reset(vdev);
-+
-+ for (i = 0; i < snd->nsubstreams; ++i)
-+ cancel_work_sync(&snd->substreams[i].elapsed_period);
-+
-+ kfree(snd->event_msgs);
-+ snd->event_msgs = NULL;
-+
-+ return 0;
-+}
-+
-+/**
-+ * virtsnd_restore() - Resume device.
-+ * @vdev: VirtIO parent device.
-+ *
-+ * Context: Any context.
-+ * Return: 0 on success, -errno on failure.
-+ */
-+static int virtsnd_restore(struct virtio_device *vdev)
-+{
-+ struct virtio_snd *snd = vdev->priv;
-+ int rc;
-+
-+ rc = virtsnd_find_vqs(snd);
-+ if (rc)
-+ return rc;
-+
-+ virtio_device_ready(vdev);
-+
-+ virtsnd_enable_event_vq(snd);
-+
-+ return 0;
-+}
-+#endif /* CONFIG_PM_SLEEP */
-+
- static const struct virtio_device_id id_table[] = {
- { VIRTIO_ID_SOUND, VIRTIO_DEV_ANY_ID },
- { 0 },
-@@ -374,6 +426,10 @@ static struct virtio_driver virtsnd_driver = {
- .validate = virtsnd_validate,
- .probe = virtsnd_probe,
- .remove = virtsnd_remove,
-+#ifdef CONFIG_PM_SLEEP
-+ .freeze = virtsnd_freeze,
-+ .restore = virtsnd_restore,
-+#endif
- };
-
- static int __init init(void)
-diff --git a/sound/virtio/virtio_pcm.h b/sound/virtio/virtio_pcm.h
-index 1353fdc9bd69..062eb8e8f2cf 100644
---- a/sound/virtio/virtio_pcm.h
-+++ b/sound/virtio/virtio_pcm.h
-@@ -31,6 +31,8 @@ struct virtio_pcm_msg;
- * @xfer_xrun: Data underflow/overflow state (0 - no xrun, 1 - xrun).
- * @stopped: True if the substream is stopped and must be released on the device
- * side.
-+ * @suspended: True if the substream is suspended and must be reconfigured on
-+ * the device side at resume.
- * @msgs: Allocated I/O messages.
- * @nmsgs: Number of allocated I/O messages.
- * @msg_last_enqueued: Index of the last I/O message added to the virtqueue.
-@@ -52,6 +54,7 @@ struct virtio_pcm_substream {
- bool xfer_enabled;
- bool xfer_xrun;
- bool stopped;
-+ bool suspended;
- struct virtio_pcm_msg **msgs;
- unsigned int nmsgs;
- int msg_last_enqueued;
-diff --git a/sound/virtio/virtio_pcm_ops.c b/sound/virtio/virtio_pcm_ops.c
-index 0682a2df6c8c..f8bfb87624be 100644
---- a/sound/virtio/virtio_pcm_ops.c
-+++ b/sound/virtio/virtio_pcm_ops.c
-@@ -115,6 +115,7 @@ static int virtsnd_pcm_open(struct snd_pcm_substream *substream)
- SNDRV_PCM_HW_PARAM_PERIODS);
-
- vss->stopped = !!virtsnd_pcm_msg_pending_num(vss);
-+ vss->suspended = false;
-
- /*
- * If the substream has already been used, then the I/O queue may be in
-@@ -272,16 +273,31 @@ static int virtsnd_pcm_prepare(struct snd_pcm_substream *substream)
- struct virtio_device *vdev = vss->snd->vdev;
- struct virtio_snd_msg *msg;
-
-- if (virtsnd_pcm_msg_pending_num(vss)) {
-- dev_err(&vdev->dev, "SID %u: invalid I/O queue state\n",
-- vss->sid);
-- return -EBADFD;
-+ if (!vss->suspended) {
-+ if (virtsnd_pcm_msg_pending_num(vss)) {
-+ dev_err(&vdev->dev, "SID %u: invalid I/O queue state\n",
-+ vss->sid);
-+ return -EBADFD;
-+ }
-+
-+ vss->buffer_bytes = snd_pcm_lib_buffer_bytes(substream);
-+ vss->hw_ptr = 0;
-+ vss->msg_last_enqueued = -1;
-+ } else {
-+ struct snd_pcm_runtime *runtime = substream->runtime;
-+ unsigned int buffer_bytes = snd_pcm_lib_buffer_bytes(substream);
-+ unsigned int period_bytes = snd_pcm_lib_period_bytes(substream);
-+ int rc;
-+
-+ rc = virtsnd_pcm_dev_set_params(vss, buffer_bytes, period_bytes,
-+ runtime->channels,
-+ runtime->format, runtime->rate);
-+ if (rc)
-+ return rc;
- }
-
-- vss->buffer_bytes = snd_pcm_lib_buffer_bytes(substream);
-- vss->hw_ptr = 0;
- vss->xfer_xrun = false;
-- vss->msg_last_enqueued = -1;
-+ vss->suspended = false;
- vss->msg_count = 0;
-
- msg = virtsnd_pcm_ctl_msg_alloc(vss, VIRTIO_SND_R_PCM_PREPARE,
-@@ -336,6 +352,9 @@ static int virtsnd_pcm_trigger(struct snd_pcm_substream *substream, int command)
- }
-
- return virtsnd_ctl_msg_send_sync(snd, msg);
-+ case SNDRV_PCM_TRIGGER_SUSPEND:
-+ vss->suspended = true;
-+ fallthrough;
- case SNDRV_PCM_TRIGGER_STOP:
- vss->stopped = true;
- fallthrough;
diff --git a/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-kmeta/bsp/virtio/virtio-snd/virtio-snd.cfg b/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-kmeta/bsp/virtio/virtio-snd/virtio-snd.cfg
deleted file mode 100644
index 35c5134a0..000000000
--- a/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-kmeta/bsp/virtio/virtio-snd/virtio-snd.cfg
+++ /dev/null
@@ -1,5 +0,0 @@
-CONFIG_SND_TIMER=y
-CONFIG_SND_PCM=y
-CONFIG_SND_JACK=y
-CONFIG_SND_JACK_INPUT_DEV=y
-CONFIG_SND_VIRTIO=y \ No newline at end of file
diff --git a/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-kmeta/bsp/virtio/virtio-snd/virtio-snd.scc b/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-kmeta/bsp/virtio/virtio-snd/virtio-snd.scc
deleted file mode 100644
index ba7b4ceb6..000000000
--- a/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-kmeta/bsp/virtio/virtio-snd/virtio-snd.scc
+++ /dev/null
@@ -1,11 +0,0 @@
-# SPDX-License-Identifier: MIT
-kconf hardware virtio-snd.cfg
-patch 0001-uapi-virtio_ids-add-a-sound-device-type-ID-from-OASI.patch
-patch 0002-ALSA-virtio-add-virtio-sound-driver.patch
-patch 0003-ALSA-virtio-handling-control-messages.patch
-patch 0004-ALSA-virtio-build-PCM-devices-and-substream-hardware.patch
-patch 0005-ALSA-virtio-handling-control-and-I-O-messages-for-th.patch
-patch 0006-ALSA-virtio-PCM-substream-operators.patch
-patch 0007-ALSA-virtio-introduce-jack-support.patch
-patch 0008-ALSA-virtio-introduce-PCM-channel-map-support.patch
-patch 0009-ALSA-virtio-introduce-device-suspend-resume-support.patch
diff --git a/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-kmeta/bsp/virtio/virtio.cfg b/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-kmeta/bsp/virtio/virtio.cfg
deleted file mode 100644
index b8b36e7ad..000000000
--- a/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-kmeta/bsp/virtio/virtio.cfg
+++ /dev/null
@@ -1,16 +0,0 @@
-# SPDX-License-Identifier: MIT
-
-# TODO: upstream to yocto-kernel-cache/cfg/8250.cfg
-CONFIG_SERIAL_OF_PLATFORM=y
-
-# Remove since PCI is not enabled
-# CONFIG_SERIAL_8250_PCI is not set
-
-# TODO: upstream to yocto-kernel-cache/cfg/virtio.cfg
-CONFIG_VSOCKETS=y
-CONFIG_VSOCKETS_DIAG=y
-CONFIG_VIRTIO_VSOCKETS=y
-CONFIG_VIRTIO_VSOCKETS_COMMON=y
-
-# Needed for CONFIG_DRM_VIRTIO_GPU
-CONFIG_DRM=y
diff --git a/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-kmeta/bsp/virtio/virtio.scc b/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-kmeta/bsp/virtio/virtio.scc
deleted file mode 100644
index 755cde94e..000000000
--- a/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-kmeta/bsp/virtio/virtio.scc
+++ /dev/null
@@ -1,5 +0,0 @@
-# SPDX-License-Identifier: MIT
-kconf hardware virtio.cfg
-patch virtio-input-add-multi-touch-support.patch
-
-include virtio-snd/virtio-snd.scc
diff --git a/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-pci.cfg b/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-pci.cfg
new file mode 100644
index 000000000..bbcaca312
--- /dev/null
+++ b/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-pci.cfg
@@ -0,0 +1,3 @@
+CONFIG_PCI=y
+CONFIG_VIRTIO_PCI=y
+CONFIG_PCI_HOST_GENERIC=y
diff --git a/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto_%.bbappend b/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto_%.bbappend
deleted file mode 100644
index 0f255cddb..000000000
--- a/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto_%.bbappend
+++ /dev/null
@@ -1,8 +0,0 @@
-FILESEXTRAPATHS:prepend := "${THISDIR}/linux-yocto:"
-
-SRC_URI:append:virtio-all = " \
- file://virtio-kmeta;type=kmeta;destsuffix=virtio-kmeta \
- file://virtio-kmeta/bsp/virtio/virtio-aarch64-${LINUX_KERNEL_TYPE}.scc \
-"
-
-COMPATIBLE_MACHINE_virtio-aarch64 = "virtio-aarch64"
diff --git a/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto_5.10.bb b/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto_5.10.bb
deleted file mode 100644
index 322ae51ea..000000000
--- a/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto_5.10.bb
+++ /dev/null
@@ -1,58 +0,0 @@
-KBRANCH ?= "v5.10/standard/base"
-
-require recipes-kernel/linux/linux-yocto.inc
-
-# board specific branches
-KBRANCH:qemuarm ?= "v5.10/standard/arm-versatile-926ejs"
-KBRANCH:qemuarm64 ?= "v5.10/standard/qemuarm64"
-KBRANCH:qemumips ?= "v5.10/standard/mti-malta32"
-KBRANCH:qemuppc ?= "v5.10/standard/qemuppc"
-KBRANCH:qemuriscv64 ?= "v5.10/standard/base"
-KBRANCH:qemuriscv32 ?= "v5.10/standard/base"
-KBRANCH:qemux86 ?= "v5.10/standard/base"
-KBRANCH:qemux86-64 ?= "v5.10/standard/base"
-KBRANCH:qemumips64 ?= "v5.10/standard/mti-malta64"
-
-SRCREV_machine:qemuarm ?= "d8551cae1ccdbe062a5c6068ce39ea8f4e1c72db"
-SRCREV_machine:qemuarm64 ?= "cf5b0320cf4544d3db9ce3ddd6ddb7553a610651"
-SRCREV_machine:qemumips ?= "7f1f1ad2f2d90b1b070c6b0a82f0add9aa492e37"
-SRCREV_machine:qemuppc ?= "cf5b0320cf4544d3db9ce3ddd6ddb7553a610651"
-SRCREV_machine:qemuriscv64 ?= "cf5b0320cf4544d3db9ce3ddd6ddb7553a610651"
-SRCREV_machine:qemuriscv32 ?= "cf5b0320cf4544d3db9ce3ddd6ddb7553a610651"
-SRCREV_machine:qemux86 ?= "cf5b0320cf4544d3db9ce3ddd6ddb7553a610651"
-SRCREV_machine:qemux86-64 ?= "cf5b0320cf4544d3db9ce3ddd6ddb7553a610651"
-SRCREV_machine:qemumips64 ?= "fd5ac097b891642eea13659bea536f3ec5910d6d"
-SRCREV_machine ?= "cf5b0320cf4544d3db9ce3ddd6ddb7553a610651"
-SRCREV_meta ?= "031f6c76e488a3563f35258c72ff1de3e25a512e"
-
-# remap qemuarm to qemuarma15 for the 5.8 kernel
-# KMACHINE:qemuarm ?= "qemuarma15"
-
-SRC_URI = "git://git.yoctoproject.org/linux-yocto.git;name=machine;branch=${KBRANCH}; \
- git://git.yoctoproject.org/yocto-kernel-cache;type=kmeta;name=meta;branch=yocto-5.10;destsuffix=${KMETA}"
-
-LIC_FILES_CHKSUM = "file://COPYING;md5=6bc538ed5bd9a7fc9398086aedcd7e46"
-LINUX_VERSION ?= "5.10.25"
-
-DEPENDS += "${@bb.utils.contains('ARCH', 'x86', 'elfutils-native', '', d)}"
-DEPENDS += "openssl-native util-linux-native"
-DEPENDS += "gmp-native"
-
-PV = "${LINUX_VERSION}+git${SRCPV}"
-
-KMETA = "kernel-meta"
-KCONF_BSP_AUDIT_LEVEL = "1"
-
-KERNEL_DEVICETREE:qemuarmv5 = "versatile-pb.dtb"
-
-COMPATIBLE_MACHINE = "qemuarm|qemuarmv5|qemuarm64|qemux86|qemuppc|qemuppc64|qemumips|qemumips64|qemux86-64|qemuriscv64|qemuriscv32"
-
-# Functionality flags
-KERNEL_EXTRA_FEATURES ?= "features/netfilter/netfilter.scc"
-KERNEL_FEATURES:append = " ${KERNEL_EXTRA_FEATURES}"
-KERNEL_FEATURES:append:qemuall=" cfg/virtio.scc features/drm-bochs/drm-bochs.scc"
-KERNEL_FEATURES:append:qemux86=" cfg/sound.scc cfg/paravirt_kvm.scc"
-KERNEL_FEATURES:append:qemux86-64=" cfg/sound.scc cfg/paravirt_kvm.scc"
-KERNEL_FEATURES:append = " ${@bb.utils.contains("TUNE_FEATURES", "mx32", " cfg/x32.scc", "", d)}"
-KERNEL_FEATURES:append = " ${@bb.utils.contains("DISTRO_FEATURES", "ptest", " features/scsi/scsi-debug.scc", "", d)}"
-KERNEL_FEATURES:append = " ${@bb.utils.contains("DISTRO_FEATURES", "ptest", " features/gpio/mockup.scc", "", d)}" \ No newline at end of file
diff --git a/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto_5.15.bbappend b/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto_5.15.bbappend
new file mode 100644
index 000000000..6952436a3
--- /dev/null
+++ b/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto_5.15.bbappend
@@ -0,0 +1,17 @@
+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 \
+"
+
+COMPATIBLE_MACHINE:virtio-aarch64 = "virtio-aarch64"