aboutsummaryrefslogtreecommitdiffstats
path: root/meta-xilinx-core/recipes-graphics
diff options
context:
space:
mode:
Diffstat (limited to 'meta-xilinx-core/recipes-graphics')
-rw-r--r--meta-xilinx-core/recipes-graphics/libepoxy/libepoxy_%.bbappend6
-rw-r--r--meta-xilinx-core/recipes-graphics/libgles/files/egl.pc12
-rw-r--r--meta-xilinx-core/recipes-graphics/libgles/files/gbm.pc12
-rw-r--r--meta-xilinx-core/recipes-graphics/libgles/files/glesv1.pc12
-rw-r--r--meta-xilinx-core/recipes-graphics/libgles/files/glesv1_cm.pc12
-rw-r--r--meta-xilinx-core/recipes-graphics/libgles/files/glesv2.pc12
-rw-r--r--meta-xilinx-core/recipes-graphics/libgles/libmali-xlnx.bb200
-rw-r--r--meta-xilinx-core/recipes-graphics/libglu/libglu_%.bbappend11
-rw-r--r--meta-xilinx-core/recipes-graphics/libsdl2/libsdl2_%.bbappend6
-rw-r--r--meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0001-Change-Makefile-to-be-compatible-with-Yocto.patch47
-rw-r--r--meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0002-staging-mali-r8p0-01rel0-Add-the-ZYNQ-ZYNQMP-platfor.patch52
-rw-r--r--meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0003-staging-mali-r8p0-01rel0-Remove-unused-trace-macros.patch35
-rw-r--r--meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0004-staging-mali-r8p0-01rel0-Don-t-include-mali_read_phy.patch47
-rw-r--r--meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0005-linux-mali_kernel_linux.c-Handle-clock-when-probed-a.patch90
-rw-r--r--meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0006-arm.c-global-variable-dma_ops-is-removed-from-the-ke.patch35
-rw-r--r--meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0010-common-mali_pm.c-Add-PM-runtime-barrier-after-removi.patch31
-rw-r--r--meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0011-linux-mali_kernel_linux.c-Enable-disable-clock-for-r.patch153
-rw-r--r--meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0012-linux-mali_memory_os_alloc-Remove-__GFP_COLD.patch33
-rw-r--r--meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0013-linux-mali_memory_secure-Add-header-file-dma-direct..patch34
-rw-r--r--meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0014-linux-mali_-timer-Get-rid-of-init_timer.patch156
-rw-r--r--meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0015-fix-driver-failed-to-check-map-error.patch17
-rw-r--r--meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0016-mali_memory_secure-Kernel-5.0-onwards-access_ok-API-.patch47
-rw-r--r--meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0017-Support-for-vm_insert_pfn-deprecated-from-kernel-4.2.patch146
-rw-r--r--meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0018-Change-return-type-to-vm_fault_t-for-fault-handler.patch32
-rw-r--r--meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0019-get_monotonic_boottime-ts-deprecated-from-kernel-4.2.patch36
-rw-r--r--meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0020-Fix-ioremap_nocache-deprecation-in-kernel-5.6.patch92
-rw-r--r--meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0021-Use-updated-timekeeping-functions-in-kernel-5.6.patch37
-rw-r--r--meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0022-Set-HAVE_UNLOCKED_IOCTL-default-to-true.patch38
-rw-r--r--meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0023-Use-PTR_ERR_OR_ZERO-instead-of-PTR_RET.patch33
-rw-r--r--meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0024-Use-community-device-tree-names.patch91
-rw-r--r--meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0025-Import-DMA_BUF-module-and-update-register_shrinker-f.patch67
-rw-r--r--meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0026-Fix-gpu-driver-probe-failure.patch46
-rw-r--r--meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0027-Updated-clock-name-and-structure-to-match-LIMA-drive.patch95
-rw-r--r--meta-xilinx-core/recipes-graphics/mali/kernel-module-mali_2022.1.bb58
-rw-r--r--meta-xilinx-core/recipes-graphics/mali/kernel-module-mali_2022.2.bb54
-rw-r--r--meta-xilinx-core/recipes-graphics/mali/kernel-module-mali_2023.1.bb58
-rw-r--r--meta-xilinx-core/recipes-graphics/mali/kernel-module-mali_2023.2.bb58
-rw-r--r--meta-xilinx-core/recipes-graphics/mesa/files/0001-DRI_Add_xlnx_dri.patch32
-rw-r--r--meta-xilinx-core/recipes-graphics/mesa/mesa-demos/0001-src-egl-eglinfo-Align-EXT_platform_device-extension-.patch44
-rw-r--r--meta-xilinx-core/recipes-graphics/mesa/mesa-demos/0002-src-egl-eglinfo-Use-EGL_PLATFORM_DEVICE_EXT-only-if-.patch41
-rw-r--r--meta-xilinx-core/recipes-graphics/mesa/mesa-demos/libmali-egl-workaround.patch69
-rw-r--r--meta-xilinx-core/recipes-graphics/mesa/mesa-demos_%.bbappend16
-rw-r--r--meta-xilinx-core/recipes-graphics/mesa/mesa-gl_%.bbappend18
-rw-r--r--meta-xilinx-core/recipes-graphics/mesa/mesa_%.bbappend15
-rw-r--r--meta-xilinx-core/recipes-graphics/virglrenderer/virglrenderer_%.bbappend6
-rw-r--r--meta-xilinx-core/recipes-graphics/wayland/files/0001-libweston-Remove-substitute-format-for-ARGB8888.patch30
-rw-r--r--meta-xilinx-core/recipes-graphics/wayland/files/9.0.0/0001-libweston-Remove-substitute-format-for-ARGB8888.patch29
-rw-r--r--meta-xilinx-core/recipes-graphics/wayland/files/init54
-rw-r--r--meta-xilinx-core/recipes-graphics/wayland/files/weston.service71
-rw-r--r--meta-xilinx-core/recipes-graphics/wayland/weston-init.bbappend5
-rw-r--r--meta-xilinx-core/recipes-graphics/wayland/weston.inc15
-rw-r--r--meta-xilinx-core/recipes-graphics/wayland/weston/0001-libweston-backend-drm-Re-order-gbm-destruction-at-DR.patch50
-rw-r--r--meta-xilinx-core/recipes-graphics/wayland/weston/0001-meson.build-fix-incorrect-header.patch32
-rw-r--r--meta-xilinx-core/recipes-graphics/wayland/weston/0001-tests-include-fcntl.h-for-open-O_RDWR-O_CLOEXEC-and-.patch47
-rw-r--r--meta-xilinx-core/recipes-graphics/wayland/weston/0001-weston-launch-Provide-a-default-version-that-doesn-t.patch199
-rw-r--r--meta-xilinx-core/recipes-graphics/wayland/weston/dont-use-plane-add-prop.patch23
-rw-r--r--meta-xilinx-core/recipes-graphics/wayland/weston/systemd-notify.weston-start9
-rw-r--r--meta-xilinx-core/recipes-graphics/wayland/weston/weston.desktop9
-rw-r--r--meta-xilinx-core/recipes-graphics/wayland/weston/weston.pngbin0 -> 2383 bytes
-rw-r--r--meta-xilinx-core/recipes-graphics/wayland/weston/xwayland.weston-start5
-rw-r--r--meta-xilinx-core/recipes-graphics/wayland/weston_13.%.bbappend12
-rw-r--r--meta-xilinx-core/recipes-graphics/wayland/weston_9.0.0.bb148
-rw-r--r--meta-xilinx-core/recipes-graphics/wayland/weston_9.0.0.bbappend3
-rw-r--r--meta-xilinx-core/recipes-graphics/x11-common/xserver-nodm-init/xserver-nodm.service.in13
-rw-r--r--meta-xilinx-core/recipes-graphics/x11-common/xserver-nodm-init_%.bbappend1
-rw-r--r--meta-xilinx-core/recipes-graphics/xorg-xserver/xserver-xf86-config/zynqmp/xorg.conf28
-rw-r--r--meta-xilinx-core/recipes-graphics/xorg-xserver/xserver-xf86-config_%.bbappend1
-rw-r--r--meta-xilinx-core/recipes-graphics/xorg-xserver/xserver-xorg/99-monitor-hotplug.rules1
-rwxr-xr-xmeta-xilinx-core/recipes-graphics/xorg-xserver/xserver-xorg/monitor-hotplug.sh65
-rw-r--r--meta-xilinx-core/recipes-graphics/xorg-xserver/xserver-xorg_%.bbappend23
-rw-r--r--meta-xilinx-core/recipes-graphics/xwayland/xwayland_%.bbappend7
71 files changed, 3122 insertions, 0 deletions
diff --git a/meta-xilinx-core/recipes-graphics/libepoxy/libepoxy_%.bbappend b/meta-xilinx-core/recipes-graphics/libepoxy/libepoxy_%.bbappend
new file mode 100644
index 00000000..03823f6e
--- /dev/null
+++ b/meta-xilinx-core/recipes-graphics/libepoxy/libepoxy_%.bbappend
@@ -0,0 +1,6 @@
+# Links to libmali-xlnx, so it becomes MACHINE_ARCH specific
+DEFAULT_PACKAGE_ARCH := "${PACKAGE_ARCH}"
+MALI_PACKAGE_ARCH[vardepsexclude] = "MACHINE_ARCH"
+MALI_PACKAGE_ARCH = "${@'${MACHINE_ARCH}' if d.getVar('PREFERRED_PROVIDER_virtual/libgles1') == 'libmali-xlnx' else '${DEFAULT_PACKAGE_ARCH}'}"
+PACKAGE_ARCH[vardepsexclude] = "MALI_PACKAGE_ARCH"
+PACKAGE_ARCH = "${@bb.utils.contains_any('DEPENDS', 'virtual/libgles1 virtual/libgles2 virtual/egl virtual/libgbm', '${MALI_PACKAGE_ARCH}', '${DEFAULT_PACKAGE_ARCH}', d)}"
diff --git a/meta-xilinx-core/recipes-graphics/libgles/files/egl.pc b/meta-xilinx-core/recipes-graphics/libgles/files/egl.pc
new file mode 100644
index 00000000..65c4c1f3
--- /dev/null
+++ b/meta-xilinx-core/recipes-graphics/libgles/files/egl.pc
@@ -0,0 +1,12 @@
+prefix=/usr
+exec_prefix=${prefix}
+libdir=/usr/lib
+includedir=/usr/include
+
+Name: egl
+Description: MALI EGL library
+Requires.private:
+Version: 17.3
+Libs: -L${libdir} -lEGL
+Libs.private: -lm -lpthread -ldl
+Cflags: -I${includedir}
diff --git a/meta-xilinx-core/recipes-graphics/libgles/files/gbm.pc b/meta-xilinx-core/recipes-graphics/libgles/files/gbm.pc
new file mode 100644
index 00000000..c40b5f4f
--- /dev/null
+++ b/meta-xilinx-core/recipes-graphics/libgles/files/gbm.pc
@@ -0,0 +1,12 @@
+prefix=/usr
+exec_prefix=${prefix}
+libdir=/usr/lib
+includedir=/usr/include
+
+Name: gbm
+Description: MALI gbm library
+Requires.private:
+Version: 17.3
+Libs: -L${libdir} -lgbm
+Libs.private: -lm -lpthread -ldl
+Cflags: -I${includedir}
diff --git a/meta-xilinx-core/recipes-graphics/libgles/files/glesv1.pc b/meta-xilinx-core/recipes-graphics/libgles/files/glesv1.pc
new file mode 100644
index 00000000..39467f33
--- /dev/null
+++ b/meta-xilinx-core/recipes-graphics/libgles/files/glesv1.pc
@@ -0,0 +1,12 @@
+prefix=/usr
+exec_prefix=${prefix}
+libdir=/usr/lib
+includedir=/usr/include
+
+Name: glesv1
+Description: MALI OpenGL ES 1.1 library
+Requires.private:
+Version: 17.3
+Libs: -L${libdir} -lGLESv1_CM
+Libs.private: -lm -lpthread -ldl
+Cflags: -I${includedir}
diff --git a/meta-xilinx-core/recipes-graphics/libgles/files/glesv1_cm.pc b/meta-xilinx-core/recipes-graphics/libgles/files/glesv1_cm.pc
new file mode 100644
index 00000000..1547b4c8
--- /dev/null
+++ b/meta-xilinx-core/recipes-graphics/libgles/files/glesv1_cm.pc
@@ -0,0 +1,12 @@
+prefix=/usr
+exec_prefix=${prefix}
+libdir=/usr/lib
+includedir=/usr/include
+
+Name: gles_cm
+Description: Mali OpenGL ES 1.1 CM library
+Requires.private:
+Version: 17.3
+Libs: -L${libdir} -lGLESv1_CM
+Libs.private: -lm -lpthread -ldl
+Cflags: -I${includedir}
diff --git a/meta-xilinx-core/recipes-graphics/libgles/files/glesv2.pc b/meta-xilinx-core/recipes-graphics/libgles/files/glesv2.pc
new file mode 100644
index 00000000..a0a84f23
--- /dev/null
+++ b/meta-xilinx-core/recipes-graphics/libgles/files/glesv2.pc
@@ -0,0 +1,12 @@
+prefix=/usr
+exec_prefix=${prefix}
+libdir=/usr/lib
+includedir=/usr/include
+
+Name: glesv2
+Description: MALI OpenGL ES 2.0 library
+Requires.private:
+Version: 17.3
+Libs: -L${libdir} -lGLESv2
+Libs.private: -lm -lpthread -ldl
+Cflags: -I${includedir}
diff --git a/meta-xilinx-core/recipes-graphics/libgles/libmali-xlnx.bb b/meta-xilinx-core/recipes-graphics/libgles/libmali-xlnx.bb
new file mode 100644
index 00000000..db99c4d7
--- /dev/null
+++ b/meta-xilinx-core/recipes-graphics/libgles/libmali-xlnx.bb
@@ -0,0 +1,200 @@
+DESCRIPTION = "libGLES for ZynqMP with Mali 400"
+
+LICENSE = "Proprietary"
+LIC_FILES_CHKSUM = "file://EULA;md5=82e466d0ed92c5a15f568dbe6b31089c"
+
+inherit features_check update-alternatives
+
+ANY_OF_DISTRO_FEATURES = "x11 fbdev wayland"
+REQUIRED_MACHINE_FEATURES = "mali400"
+
+PROVIDES += "virtual/libgles1 virtual/libgles2 virtual/egl virtual/libgbm"
+
+FILESEXTRAPATHS:prepend := "${THISDIR}/files:"
+
+REPO ?= "git://github.com/Xilinx/mali-userspace-binaries.git;protocol=https"
+BRANCH ?= "xlnx_rel_v2023.2"
+SRCREV ?= "b3a772aad859cdadc8513b11c3e995546c20e75e"
+BRANCHARG = "${@['nobranch=1', 'branch=${BRANCH}'][d.getVar('BRANCH', True) != '']}"
+
+PV = "r9p0-01rel0"
+SRC_URI = " \
+ ${REPO};${BRANCHARG} \
+ file://egl.pc \
+ file://glesv1_cm.pc \
+ file://glesv1.pc \
+ file://glesv2.pc \
+ file://gbm.pc \
+ "
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
+S = "${WORKDIR}/git"
+
+# If were switching at runtime, we would need all RDEPENDS needed for all backends available
+X11RDEPENDS = "libxdamage libxext libx11 libdrm libxfixes"
+X11DEPENDS = "libxdamage libxext virtual/libx11 libdrm libxfixes"
+
+# Don't install runtime dependencies for other backends unless the DISTRO supports it
+RDEPENDS:${PN} = " \
+ kernel-module-mali \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'x11', '${X11RDEPENDS}', '', d)} \
+"
+
+# We dont build anything but we want to avoid QA warning build-deps
+DEPENDS = "\
+ ${@bb.utils.contains('DISTRO_FEATURES', 'x11', '${X11DEPENDS}', '', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'wayland', 'wayland libdrm', '', d)} \
+"
+
+
+# x11 is default, set to "fbdev" , "wayland", or "headless" if required
+MALI_BACKEND_DEFAULT ?= "x11"
+
+USE_X11 = "${@bb.utils.contains("DISTRO_FEATURES", "x11", "yes", "no", d)}"
+USE_FB = "${@bb.utils.contains("DISTRO_FEATURES", "fbdev", "yes", "no", d)}"
+USE_WL = "${@bb.utils.contains("DISTRO_FEATURES", "wayland", "yes", "no", d)}"
+
+MONOLITHIC_LIBMALI = "libMali.so.9.0"
+
+do_install() {
+ #Identify the ARCH type
+ ${TARGET_PREFIX}gcc --version > ARCH_PLATFORM
+ if grep -q aarch64 "ARCH_PLATFORM"; then
+ ARCH_PLATFORM_DIR=aarch64-linux-gnu
+ else
+ ARCH_PLATFORM_DIR=arm-linux-gnueabihf
+ fi
+
+ # install headers
+ install -d -m 0655 ${D}${includedir}/EGL
+ install -m 0644 ${S}/${PV}/glesHeaders/EGL/*.h ${D}${includedir}/EGL/
+ install -d -m 0655 ${D}${includedir}/GLES
+ install -m 0644 ${S}/${PV}/glesHeaders/GLES/*.h ${D}${includedir}/GLES/
+ install -d -m 0655 ${D}${includedir}/GLES2
+ install -m 0644 ${S}/${PV}/glesHeaders/GLES2/*.h ${D}${includedir}/GLES2/
+ install -d -m 0655 ${D}${includedir}/KHR
+ install -m 0644 ${S}/${PV}/glesHeaders/KHR/*.h ${D}${includedir}/KHR/
+
+ install -d ${D}${libdir}/pkgconfig
+ install -m 0644 ${WORKDIR}/egl.pc ${D}${libdir}/pkgconfig/egl.pc
+ install -m 0644 ${WORKDIR}/glesv2.pc ${D}${libdir}/pkgconfig/glesv2.pc
+ install -m 0644 ${WORKDIR}/glesv1.pc ${D}${libdir}/pkgconfig/glesv1.pc
+ install -m 0644 ${WORKDIR}/glesv1_cm.pc ${D}${libdir}/pkgconfig/glesv1_cm.pc
+
+ install -d ${D}${libdir}
+ install -d ${D}${includedir}
+
+ cp -a --no-preserve=ownership ${S}/${PV}/${ARCH_PLATFORM_DIR}/common/*.so* ${D}${libdir}
+
+ install -Dm 0644 ${S}/${PV}/${ARCH_PLATFORM_DIR}/headless/${MONOLITHIC_LIBMALI} ${D}${libdir}/headless/${MONOLITHIC_LIBMALI}
+ ln -snf headless/${MONOLITHIC_LIBMALI} ${D}${libdir}/${MONOLITHIC_LIBMALI}
+
+ if [ "${USE_FB}" = "yes" ]; then
+ install -Dm 0644 ${S}/${PV}/${ARCH_PLATFORM_DIR}/fbdev/${MONOLITHIC_LIBMALI} ${D}${libdir}/fbdev/${MONOLITHIC_LIBMALI}
+ if [ "${MALI_BACKEND_DEFAULT}" = "fbdev" ]; then
+ ln -snf fbdev/${MONOLITHIC_LIBMALI} ${D}${libdir}/${MONOLITHIC_LIBMALI}
+ fi
+ fi
+ if [ "${USE_X11}" = "yes" ]; then
+ install -Dm 0644 ${S}/${PV}/${ARCH_PLATFORM_DIR}/x11/${MONOLITHIC_LIBMALI} ${D}${libdir}/x11/${MONOLITHIC_LIBMALI}
+ if [ "${MALI_BACKEND_DEFAULT}" = "x11" ]; then
+ ln -snf x11/${MONOLITHIC_LIBMALI} ${D}${libdir}/${MONOLITHIC_LIBMALI}
+ fi
+ else
+ # We cant rely on the fact that all apps will use pkgconfig correctly
+ sed -i -e 's/^#if defined(MESA_EGL_NO_X11_HEADERS)$/#if (1)/' ${D}${includedir}/EGL/eglplatform.h
+ fi
+ if [ "${USE_WL}" = "yes" ]; then
+ install -m 0644 ${S}/${PV}/glesHeaders/GBM/gbm.h ${D}${includedir}/
+ install -m 0644 ${WORKDIR}/gbm.pc ${D}${libdir}/pkgconfig/gbm.pc
+ install -Dm 0644 ${S}/${PV}/${ARCH_PLATFORM_DIR}/wayland/${MONOLITHIC_LIBMALI} ${D}${libdir}/wayland/${MONOLITHIC_LIBMALI}
+ if [ "${MALI_BACKEND_DEFAULT}" = "wayland" ]; then
+ ln -snf wayland/${MONOLITHIC_LIBMALI} ${D}${libdir}/${MONOLITHIC_LIBMALI}
+ fi
+ fi
+}
+
+
+# We need separate packages to provide multiple alternatives, at this point we install
+# everything on the default one but that can be split if necessary
+PACKAGES += "${@bb.utils.contains("DISTRO_FEATURES", "x11", "${PN}-x11", "", d)}"
+PACKAGES += "${@bb.utils.contains("DISTRO_FEATURES", "fbdev", "${PN}-fbdev", "", d)}"
+PACKAGES += "${@bb.utils.contains("DISTRO_FEATURES", "wayland", "${PN}-wayland", "", d)}"
+PACKAGES += "${PN}-headless"
+
+# This is default/common for all alternatives
+ALTERNATIVE_LINK_NAME[libmali-xlnx] = "${libdir}/${MONOLITHIC_LIBMALI}"
+
+
+# Declare alternatives and corresponding library location
+ALTERNATIVE:${PN}-x11 = "libmali-xlnx"
+ALTERNATIVE_TARGET_libmali-xlnx-x11[libmali-xlnx] = "${libdir}/x11/${MONOLITHIC_LIBMALI}"
+
+ALTERNATIVE:${PN}-fbdev = "libmali-xlnx"
+ALTERNATIVE_TARGET_libmali-xlnx-fbdev[libmali-xlnx] = "${libdir}/fbdev/${MONOLITHIC_LIBMALI}"
+
+ALTERNATIVE:${PN}-wayland = "libmali-xlnx"
+ALTERNATIVE_TARGET_libmali-xlnx-wayland[libmali-xlnx] = "${libdir}/wayland/${MONOLITHIC_LIBMALI}"
+
+ALTERNATIVE:${PN}-headless = "libmali-xlnx"
+ALTERNATIVE_TARGET_libmali-xlnx-headless[libmali-xlnx] = "${libdir}/headless/${MONOLITHIC_LIBMALI}"
+
+# Set priorities according to what we prveiously defined
+ALTERNATIVE_PRIORITY_libmali-xlnx-x11[libmali-xlnx] = "${@bb.utils.contains("MALI_BACKEND_DEFAULT", "x11", "20", "10", d)}"
+ALTERNATIVE_PRIORITY_libmali-xlnx-fbdev[libmali-xlnx] = "${@bb.utils.contains("MALI_BACKEND_DEFAULT", "fbdev", "20", "10", d)}"
+ALTERNATIVE_PRIORITY_libmali-xlnx-wayland[libmali-xlnx] = "${@bb.utils.contains("MALI_BACKEND_DEFAULT", "wayland", "20", "10", d)}"
+
+# If misconfigured, fallback to headless
+ALTERNATIVE_PRIORITY_libmali-xlnx-headless[libmali-xlnx] = "${@bb.utils.contains("MALI_BACKEND_DEFAULT", "headless", "20", "15", d)}"
+
+
+# Package gets renamed on the debian class, but we want to keep -xlnx
+DEBIAN_NOAUTONAME:libmali-xlnx = "1"
+
+# Update alternatives will actually have separate postinst scripts (one for each package)
+# This wont work for us, so we create a common postinst script and we pass that as the general
+# libmali-xlnx postinst script, but we defer execution to run on first boot (pkg_postinst_ontarget).
+# This will avoid ldconfig removing the symbolic links when creating the root filesystem.
+python populate_packages_updatealternatives:append () {
+ # We need to remove the 'fake' libmali-xlnx before creating any links
+ libdir = d.getVar('libdir')
+ common_postinst = "#!/bin/sh\nrm " + libdir + "/${MONOLITHIC_LIBMALI}\n"
+ for pkg in (d.getVar('PACKAGES') or "").split():
+ # Not all packages provide an alternative (e.g. ${PN}-lic)
+ postinst = d.getVar('pkg_postinst:%s' % pkg)
+ if postinst:
+ old_postinst = postinst
+ new_postinst = postinst.replace('#!/bin/sh','')
+ common_postinst += new_postinst
+ d.setVar('pkg_postinst_ontarget:%s' % 'libmali-xlnx', common_postinst)
+}
+
+
+# Inhibit warnings about files being stripped
+INHIBIT_PACKAGE_DEBUG_SPLIT = "1"
+INHIBIT_PACKAGE_STRIP = "1"
+INHIBIT_SYSROOT_STRIP = "1"
+
+RREPLACES:${PN} = "libegl libgles1 libglesv1-cm1 libgles2 libglesv2-2 libgbm"
+RPROVIDES:${PN} = "libegl libgles1 libglesv1-cm1 libgles2 libglesv2-2 libgbm"
+RCONFLICTS:${PN} = "libegl libgles1 libglesv1-cm1 libgles2 libglesv2-2 libgbm"
+
+# These libraries shouldn't get installed in world builds unless something
+# explicitly depends upon them.
+EXCLUDE_FROM_WORLD = "1"
+FILES:${PN} += "${libdir}/*"
+
+do_package:append() {
+
+ shlibswork_dir = d.getVar('SHLIBSWORKDIR')
+ pkg_filename = d.getVar('PN') + ".list"
+ shlibs_file = os.path.join(shlibswork_dir, pkg_filename)
+ lines = ""
+ with open(shlibs_file, "r") as f:
+ lines = f.readlines()
+ with open(shlibs_file, "w") as f:
+ for line in lines:
+ if d.getVar('MALI_BACKEND_DEFAULT') in line.strip("\n"):
+ f.write(line)
+}
diff --git a/meta-xilinx-core/recipes-graphics/libglu/libglu_%.bbappend b/meta-xilinx-core/recipes-graphics/libglu/libglu_%.bbappend
new file mode 100644
index 00000000..e824a179
--- /dev/null
+++ b/meta-xilinx-core/recipes-graphics/libglu/libglu_%.bbappend
@@ -0,0 +1,11 @@
+# OpenGL comes from libmali, adjust parameters
+MALI_DEPENDS = "${@bb.utils.contains('DISTRO_FEATURES', 'libmali', ' virtual/libgles2', '', d)}"
+DEPENDS:append = "${@bb.utils.contains('MACHINE_FEATURES', 'mali400', ' ${MALI_DEPENDS}', '', d)}"
+
+# Links to libmali-xlnx, so it becomes MACHINE_ARCH specific
+DEFAULT_PACKAGE_ARCH := "${PACKAGE_ARCH}"
+MALI_PACKAGE_ARCH[vardepsexclude] = "MACHINE_ARCH"
+MALI_PACKAGE_ARCH = "${@'${MACHINE_ARCH}' if d.getVar('PREFERRED_PROVIDER_virtual/libgles1') == 'libmali-xlnx' else '${DEFAULT_PACKAGE_ARCH}'}"
+PACKAGE_ARCH[vardepsexclude] = "MALI_PACKAGE_ARCH"
+PACKAGE_ARCH = "${@bb.utils.contains_any('DEPENDS', 'virtual/libgles1 virtual/libgles2 virtual/egl virtual/libgbm', '${MALI_PACKAGE_ARCH}', '${DEFAULT_PACKAGE_ARCH}', d)}"
+
diff --git a/meta-xilinx-core/recipes-graphics/libsdl2/libsdl2_%.bbappend b/meta-xilinx-core/recipes-graphics/libsdl2/libsdl2_%.bbappend
new file mode 100644
index 00000000..03823f6e
--- /dev/null
+++ b/meta-xilinx-core/recipes-graphics/libsdl2/libsdl2_%.bbappend
@@ -0,0 +1,6 @@
+# Links to libmali-xlnx, so it becomes MACHINE_ARCH specific
+DEFAULT_PACKAGE_ARCH := "${PACKAGE_ARCH}"
+MALI_PACKAGE_ARCH[vardepsexclude] = "MACHINE_ARCH"
+MALI_PACKAGE_ARCH = "${@'${MACHINE_ARCH}' if d.getVar('PREFERRED_PROVIDER_virtual/libgles1') == 'libmali-xlnx' else '${DEFAULT_PACKAGE_ARCH}'}"
+PACKAGE_ARCH[vardepsexclude] = "MALI_PACKAGE_ARCH"
+PACKAGE_ARCH = "${@bb.utils.contains_any('DEPENDS', 'virtual/libgles1 virtual/libgles2 virtual/egl virtual/libgbm', '${MALI_PACKAGE_ARCH}', '${DEFAULT_PACKAGE_ARCH}', d)}"
diff --git a/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0001-Change-Makefile-to-be-compatible-with-Yocto.patch b/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0001-Change-Makefile-to-be-compatible-with-Yocto.patch
new file mode 100644
index 00000000..3c82f602
--- /dev/null
+++ b/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0001-Change-Makefile-to-be-compatible-with-Yocto.patch
@@ -0,0 +1,47 @@
+From 6d283b9aa3f7fb761da4cb076b47a62275fc4caa Mon Sep 17 00:00:00 2001
+From: Madhurkiran Harikrishnan <madhurki@xilinx.com>
+Date: Tue, 21 Nov 2017 03:57:25 -0800
+Subject: [PATCH 1/9] Change Makefile to be compatible with Yocto
+
+Signed-off-by: Manjukumar Matha <manjukumar.harthikote-matha@xilinx.com>
+Signed-off-by: Hyun Kwon <hyun.kwon@xilinx.com>
+Signed-off-by: Madhurkiran Harikrishnan <madhurki@xilinx.com>
+Upstream Status: Inappropriate [Xilinx specific]
+---
+ driver/src/devicedrv/mali/Makefile | 11 +++++++++--
+ 1 file changed, 9 insertions(+), 2 deletions(-)
+
+diff --git a/driver/src/devicedrv/mali/Makefile b/driver/src/devicedrv/mali/Makefile
+index 5a259fe..a6dd94c 100644
+--- Makefile
++++ b/Makefile
+@@ -89,7 +89,11 @@ endif
+ # Define host system directory
+ KDIR-$(shell uname -m):=/lib/modules/$(shell uname -r)/build
+
+-include $(KDIR)/.config
++ifeq ($(O),)
++ -include $(KDIR)/.config
++else
++ -include $(O)/.config
++endif
+
+ ifeq ($(ARCH), arm)
+ # when compiling for ARM we're cross compiling
+@@ -204,9 +208,12 @@ EXTRA_DEFINES += -DMALI_MEM_SWAP_TRACKING=1
+ endif
+
+ all: $(UMP_SYMVERS_FILE)
+- $(MAKE) ARCH=$(ARCH) -C $(KDIR) M=$(CURDIR) modules
++ $(MAKE) ARCH=$(ARCH) -C $(KDIR) M=$(CURDIR) O=$(O) modules
+ @rm $(FILES_PREFIX)__malidrv_build_info.c $(FILES_PREFIX)__malidrv_build_info.o
+
++modules_install:
++ $(MAKE) ARCH=$(ARCH) -C $(KDIR) M=$(CURDIR) modules_install
++
+ clean:
+ $(MAKE) ARCH=$(ARCH) -C $(KDIR) M=$(CURDIR) clean
+
+--
+2.7.4
+
diff --git a/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0002-staging-mali-r8p0-01rel0-Add-the-ZYNQ-ZYNQMP-platfor.patch b/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0002-staging-mali-r8p0-01rel0-Add-the-ZYNQ-ZYNQMP-platfor.patch
new file mode 100644
index 00000000..0a7b6736
--- /dev/null
+++ b/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0002-staging-mali-r8p0-01rel0-Add-the-ZYNQ-ZYNQMP-platfor.patch
@@ -0,0 +1,52 @@
+From f27aab2b0e4d5dea9b5a0e4648c142257940c428 Mon Sep 17 00:00:00 2001
+From: Hyun Kwon <hyun.kwon@xilinx.com>
+Date: Thu, 25 Jun 2015 17:14:42 -0700
+Subject: [PATCH 2/9] staging: mali: r8p0-01rel0: Add the ZYNQ/ZYNQMP platform
+
+Add the number of PP cores that is required for Zynq/ZynqMP configuration.
+
+Signed-off-by: Hyun Kwon <hyun.kwon@xilinx.com>
+Signed-off-by: Michal Simek <michal.simek@xilinx.com>
+Upstream Status: Inappropriate [Xilinx specific]
+---
+ driver/src/devicedrv/mali/platform/arm/arm.c | 10 ++++++++++
+ 1 file changed, 10 insertions(+)
+
+diff --git a/driver/src/devicedrv/mali/platform/arm/arm.c b/driver/src/devicedrv/mali/platform/arm/arm.c
+index 4e09aca..fac99bc 100644
+--- platform/arm/arm.c
++++ b/platform/arm/arm.c
+@@ -261,6 +261,10 @@ static struct mali_gpu_device_data mali_gpu_data = {
+ .dedicated_mem_start = 0x80000000, /* Physical start address (use 0xD0000000 for old indirect setup) */
+ .dedicated_mem_size = 0x10000000, /* 256MB */
+ #endif
++#if defined(CONFIG_ARCH_ZYNQ) || defined(CONFIG_ARCH_ZYNQMP)
++ .fb_start = 0x00000000,
++ .fb_size = 0xfffff000,
++#else
+ #if defined(CONFIG_ARM64)
+ /* Some framebuffer drivers get the framebuffer dynamically, such as through GEM,
+ * in which the memory resource can't be predicted in advance.
+@@ -271,6 +275,7 @@ static struct mali_gpu_device_data mali_gpu_data = {
+ .fb_start = 0xe0000000,
+ .fb_size = 0x01000000,
+ #endif
++#endif /* !defined(CONFIG_ARCH_ZYNQ) && !defined(CONFIG_ARCH_ZYNQMP) */
+ .control_interval = 1000, /* 1000ms */
+ .utilization_callback = mali_gpu_utilization_callback,
+ .get_clock_info = NULL,
+@@ -505,6 +510,11 @@ int mali_platform_device_init(struct platform_device *device)
+ mali_write_phys(0xC0010020, 0xA); /* Enable direct memory mapping for FPGA */
+ }
+ }
++#elif defined(CONFIG_ARCH_ZYNQ) || defined(CONFIG_ARCH_ZYNQMP)
++
++ MALI_DEBUG_PRINT(4, ("Registering Zynq/ZynqMP Mali-400 device\n"));
++ num_pp_cores = 2;
++
+ #endif
+
+ /* After kernel 3.15 device tree will default set dev
+--
+2.7.4
+
diff --git a/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0003-staging-mali-r8p0-01rel0-Remove-unused-trace-macros.patch b/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0003-staging-mali-r8p0-01rel0-Remove-unused-trace-macros.patch
new file mode 100644
index 00000000..98aa6ac9
--- /dev/null
+++ b/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0003-staging-mali-r8p0-01rel0-Remove-unused-trace-macros.patch
@@ -0,0 +1,35 @@
+From d6e44bbf8d1377f78481f611dec237e8d24baf74 Mon Sep 17 00:00:00 2001
+From: Madhurkiran Harikrishnan <madhurki@xilinx.com>
+Date: Tue, 21 Nov 2017 04:00:27 -0800
+Subject: [PATCH 3/9] staging: mali: r8p0-01rel0: Remove unused trace macros
+
+TRACE_SYSTEM_STRING is not need in each trace file anymore.
+
+Signed-off-by: Hyun Kwon <hyun.kwon@xilinx.com>
+Signed-off-by: Madhurkiran Harikrishnan <madhurki@xilinx.com>
+Upstream Status: Pending
+---
+ driver/src/devicedrv/mali/linux/mali_linux_trace.h | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/driver/src/devicedrv/mali/linux/mali_linux_trace.h b/driver/src/devicedrv/mali/linux/mali_linux_trace.h
+index 7f0b19d..33cb1ca 100644
+--- linux/mali_linux_trace.h
++++ b/linux/mali_linux_trace.h
+@@ -13,13 +13,11 @@
+
+ #include <linux/types.h>
+
+-#include <linux/stringify.h>
+ #include <linux/tracepoint.h>
+
+ #undef TRACE_SYSTEM
+ #define TRACE_SYSTEM mali
+ #ifndef TRACEPOINTS_ENABLED
+-#define TRACE_SYSTEM_STRING __stringfy(TRACE_SYSTEM)
+ #endif
+ #define TRACE_INCLUDE_PATH .
+ #define TRACE_INCLUDE_FILE mali_linux_trace
+--
+2.7.4
+
diff --git a/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0004-staging-mali-r8p0-01rel0-Don-t-include-mali_read_phy.patch b/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0004-staging-mali-r8p0-01rel0-Don-t-include-mali_read_phy.patch
new file mode 100644
index 00000000..c5c49679
--- /dev/null
+++ b/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0004-staging-mali-r8p0-01rel0-Don-t-include-mali_read_phy.patch
@@ -0,0 +1,47 @@
+From 2f5e8944357f43fbde4cb642c6ee4a699c88efb5 Mon Sep 17 00:00:00 2001
+From: Hyun Kwon <hyun.kwon@xilinx.com>
+Date: Wed, 29 Jun 2016 09:14:37 -0700
+Subject: [PATCH 4/9] staging: mali: r8p0-01rel0: Don't include
+ mali_read_phys() for zynq/zynqmp
+
+mali_read_phys() is not used with CONFIG_ARCH_ZYNQ and CONFIG_ARCH_ZYNQMP.
+
+Signed-off-by: Hyun Kwon <hyun.kwon@xilinx.com>
+Upstream Status: Inappropriate [Xilinx specific]
+---
+ driver/src/devicedrv/mali/platform/arm/arm.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/driver/src/devicedrv/mali/platform/arm/arm.c b/driver/src/devicedrv/mali/platform/arm/arm.c
+index fac99bc..62f9be6 100644
+--- platform/arm/arm.c
++++ b/platform/arm/arm.c
+@@ -38,7 +38,9 @@
+ static int mali_core_scaling_enable = 0;
+
+ void mali_gpu_utilization_callback(struct mali_gpu_utilization_data *data);
++#if !(defined(CONFIG_ARCH_ZYNQ) || defined(CONFIG_ARCH_ZYNQMP))
+ static u32 mali_read_phys(u32 phys_addr);
++#endif
+ #if defined(CONFIG_ARCH_REALVIEW)
+ static void mali_write_phys(u32 phys_addr, u32 value);
+ #endif
+@@ -578,6 +580,7 @@ int mali_platform_device_deinit(struct platform_device *device)
+
+ #endif /* CONFIG_MALI_DT */
+
++#if !(defined(CONFIG_ARCH_ZYNQ) || defined(CONFIG_ARCH_ZYNQMP))
+ static u32 mali_read_phys(u32 phys_addr)
+ {
+ u32 phys_addr_page = phys_addr & 0xFFFFE000;
+@@ -592,6 +595,7 @@ static u32 mali_read_phys(u32 phys_addr)
+
+ return ret;
+ }
++#endif
+
+ #if defined(CONFIG_ARCH_REALVIEW)
+ static void mali_write_phys(u32 phys_addr, u32 value)
+--
+2.7.4
+
diff --git a/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0005-linux-mali_kernel_linux.c-Handle-clock-when-probed-a.patch b/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0005-linux-mali_kernel_linux.c-Handle-clock-when-probed-a.patch
new file mode 100644
index 00000000..3d784604
--- /dev/null
+++ b/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0005-linux-mali_kernel_linux.c-Handle-clock-when-probed-a.patch
@@ -0,0 +1,90 @@
+From e67e20ec6ff0c9720d87844270421453c738066a Mon Sep 17 00:00:00 2001
+From: Madhurkiran Harikrishnan <madhurki@xilinx.com>
+Date: Thu, 16 Feb 2017 12:15:58 -0800
+Subject: [PATCH 5/9] linux/mali_kernel_linux.c: Handle clock when probed and
+ removed
+
+This patch will handle the clock through clock
+specifier for GPU PP0 and PP1.
+
+Signed-off-by: Madhurkiran Harikrishnan <madhurki@xilinx.com>
+Upstream Status: Inappropriate [Xilinx specific]
+---
+ .../src/devicedrv/mali/linux/mali_kernel_linux.c | 40 +++++++++++++++++++++-
+ 1 file changed, 39 insertions(+), 1 deletion(-)
+
+diff --git a/driver/src/devicedrv/mali/linux/mali_kernel_linux.c b/driver/src/devicedrv/mali/linux/mali_kernel_linux.c
+index d7893a3..f15fb56 100644
+--- linux/mali_kernel_linux.c
++++ b/linux/mali_kernel_linux.c
+@@ -45,6 +45,14 @@
+ #if defined(CONFIG_MALI400_INTERNAL_PROFILING)
+ #include "mali_profiling_internal.h"
+ #endif
++
++#if defined(CONFIG_ARCH_ZYNQMP)
++/* Initialize variables for clocks */
++struct clk *clk_gpu;
++struct clk *clk_gpu_pp0;
++struct clk *clk_gpu_pp1;
++#endif
++
+ #if defined(CONFIG_MALI400_PROFILING) && defined(CONFIG_MALI_DVFS)
+ #include "mali_osk_profiling.h"
+ #include "mali_dvfs_policy.h"
+@@ -580,7 +588,23 @@ static int mali_probe(struct platform_device *pdev)
+ }
+ #endif
+
+-
++#if defined(CONFIG_ARCH_ZYNQMP)
++ /* Initialize clocks for GPU and PP */
++ clk_gpu = devm_clk_get(&pdev->dev, "gpu");
++ if (IS_ERR(clk_gpu))
++ return PTR_ERR(clk_gpu);
++ clk_prepare_enable(clk_gpu);
++
++ clk_gpu_pp0 = devm_clk_get(&pdev->dev, "gpu_pp0");
++ if (IS_ERR(clk_gpu_pp0))
++ return PTR_ERR(clk_gpu_pp0);
++ clk_prepare_enable(clk_gpu_pp0);
++
++ clk_gpu_pp1 = devm_clk_get(&pdev->dev, "gpu_pp1");
++ if (IS_ERR(clk_gpu_pp1))
++ return PTR_ERR(clk_gpu_pp1);
++ clk_prepare_enable(clk_gpu_pp1);
++#endif
+ if (_MALI_OSK_ERR_OK == _mali_osk_wq_init()) {
+ /* Initialize the Mali GPU HW specified by pdev */
+ if (_MALI_OSK_ERR_OK == mali_initialize_subsystems()) {
+@@ -608,6 +632,12 @@ static int mali_probe(struct platform_device *pdev)
+ _mali_osk_wq_term();
+ }
+
++#if defined(CONFIG_ARCH_ZYNQMP)
++ clk_disable_unprepare(clk_gpu);
++ clk_disable_unprepare(clk_gpu_pp0);
++ clk_disable_unprepare(clk_gpu_pp1);
++#endif
++
+ #ifdef CONFIG_MALI_DEVFREQ
+ mali_devfreq_term(mdev);
+ devfreq_init_failed:
+@@ -673,6 +703,14 @@ static int mali_remove(struct platform_device *pdev)
+ mali_platform_device_deinit(mali_platform_device);
+ #endif
+ mali_platform_device = NULL;
++
++#if defined(CONFIG_ARCH_ZYNQMP)
++ /* Remove clock */
++ clk_disable_unprepare(clk_gpu);
++ clk_disable_unprepare(clk_gpu_pp0);
++ clk_disable_unprepare(clk_gpu_pp1);
++#endif
++
+ return 0;
+ }
+
+--
+2.7.4
+
diff --git a/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0006-arm.c-global-variable-dma_ops-is-removed-from-the-ke.patch b/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0006-arm.c-global-variable-dma_ops-is-removed-from-the-ke.patch
new file mode 100644
index 00000000..3e1745fd
--- /dev/null
+++ b/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0006-arm.c-global-variable-dma_ops-is-removed-from-the-ke.patch
@@ -0,0 +1,35 @@
+From ed7242238151c12029c566d1974058c579d8ae3d Mon Sep 17 00:00:00 2001
+From: Madhurkiran Harikrishnan <madhurki@xilinx.com>
+Date: Wed, 25 Jan 2017 10:00:33 -0800
+Subject: [PATCH 6/9] arm.c: global variable dma_ops is removed from the kernel
+ 4.7
+
+Refer kernel commit 1dccb598df549d892b6450c261da54cdd7af44b4, the global
+dma_ops variable and the special-casing for ACPI is removed , and just
+returns the dma ops that got set for the device, or the dummy_dma_ops
+if none were present.
+
+Signed-off-by: Madhurkiran Harikrishnan <madhurki@xilinx.com>
+Upstream Status: Pending
+---
+ driver/src/devicedrv/mali/platform/arm/arm.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/driver/src/devicedrv/mali/platform/arm/arm.c b/driver/src/devicedrv/mali/platform/arm/arm.c
+index 62f9be6..57ca989 100644
+--- platform/arm/arm.c
++++ b/platform/arm/arm.c
+@@ -529,8 +529,9 @@ int mali_platform_device_init(struct platform_device *device)
+ */
+ if (!device->dev.dma_mask)
+ device->dev.dma_mask = &device->dev.coherent_dma_mask;
++#if (LINUX_VERSION_CODE < KERNEL_VERSION(4, 8, 0))
+ device->dev.archdata.dma_ops = dma_ops;
+-
++#endif
+ err = platform_device_add_data(device, &mali_gpu_data, sizeof(mali_gpu_data));
+
+ if (0 == err) {
+--
+2.7.4
+
diff --git a/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0010-common-mali_pm.c-Add-PM-runtime-barrier-after-removi.patch b/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0010-common-mali_pm.c-Add-PM-runtime-barrier-after-removi.patch
new file mode 100644
index 00000000..98a86c88
--- /dev/null
+++ b/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0010-common-mali_pm.c-Add-PM-runtime-barrier-after-removi.patch
@@ -0,0 +1,31 @@
+From 58e2c55176f1a146781430b2a570c8ce5f80d426 Mon Sep 17 00:00:00 2001
+From: Madhurkiran Harikrishnan <madhurki@xilinx.com>
+Date: Mon, 28 Aug 2017 09:40:37 -0700
+Subject: [PATCH] common/mali_pm.c: Add PM runtime barrier after removing
+ suspend
+
+Runtime PM suspend "put" results in addition of PM suspend
+API in work queue. This barrier API will remove it from
+the work queue.
+
+Signed-off-by: Madhurkiran Harikrishnan <madhurki@xilinx.com>
+Upstream-Status: Pending
+---
+ driver/src/devicedrv/mali/common/mali_pm.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/driver/src/devicedrv/mali/common/mali_pm.c b/driver/src/devicedrv/mali/common/mali_pm.c
+index 858c689..62a1e5f 100644
+--- common/mali_pm.c
++++ b/common/mali_pm.c
+@@ -301,6 +301,7 @@ void mali_pm_init_end(void)
+ }
+
+ _mali_osk_pm_dev_ref_put();
++ _mali_osk_pm_dev_barrier();
+ }
+
+ void mali_pm_update_sync(void)
+--
+2.7.4
+
diff --git a/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0011-linux-mali_kernel_linux.c-Enable-disable-clock-for-r.patch b/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0011-linux-mali_kernel_linux.c-Enable-disable-clock-for-r.patch
new file mode 100644
index 00000000..38ab4042
--- /dev/null
+++ b/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0011-linux-mali_kernel_linux.c-Enable-disable-clock-for-r.patch
@@ -0,0 +1,153 @@
+From aeff13ad9e9ef73172a9325f669aefd3c0403dbb Mon Sep 17 00:00:00 2001
+From: Madhurkiran Harikrishnan <madhurki@xilinx.com>
+Date: Wed, 21 Feb 2018 16:52:15 -0800
+Subject: [PATCH] linux/mali_kernel_linux.c: Enable/disable clock for runtime
+ resume/suspend
+
+Enable/Disable the clock for GP,PP0 and PP1 during runtime
+resume/suspend.
+
+Signed-off-by: Madhurkiran Harikrishnan <madhurki@xilinx.com>
+Reviewed-by: Hyun Kwon <hyunk@xilinx.com>
+Upstream Status: Inappropriate [Xilinx specific]
+---
+ .../src/devicedrv/mali/linux/mali_kernel_linux.c | 65 ++++++++++++++++++----
+ 1 file changed, 54 insertions(+), 11 deletions(-)
+
+diff --git a/driver/src/devicedrv/mali/linux/mali_kernel_linux.c b/driver/src/devicedrv/mali/linux/mali_kernel_linux.c
+index f15fb56..e61f33b 100644
+--- linux/mali_kernel_linux.c
++++ b/linux/mali_kernel_linux.c
+@@ -51,6 +51,7 @@
+ struct clk *clk_gpu;
+ struct clk *clk_gpu_pp0;
+ struct clk *clk_gpu_pp1;
++mali_bool clk_enabled;
+ #endif
+
+ #if defined(CONFIG_MALI400_PROFILING) && defined(CONFIG_MALI_DVFS)
+@@ -281,6 +282,46 @@ struct file_operations mali_fops = {
+ .mmap = mali_mmap
+ };
+
++static int mali_enable_clk(void)
++{
++#if defined(CONFIG_ARCH_ZYNQMP)
++ int err = 0;
++
++ if (clk_enabled)
++ return 0;
++
++ clk_enabled = MALI_TRUE;
++ err = clk_prepare_enable(clk_gpu);
++ if (err) {
++ MALI_PRINT_ERROR(("Could not enable clock for GP\n\r"));
++ return err;
++ }
++ err = clk_prepare_enable(clk_gpu_pp0);
++ if (err) {
++ MALI_PRINT_ERROR(("Could not enable clock for PP0\n\r"));
++ return err;
++ }
++ err = clk_prepare_enable(clk_gpu_pp1);
++ if (err) {
++ MALI_PRINT_ERROR(("Could not enable clock for PP1\n\r"));
++ return err;
++ }
++#endif
++ return 0;
++}
++
++static void mali_disable_clk(void)
++{
++#if defined(CONFIG_ARCH_ZYNQMP)
++ if (clk_enabled) {
++ clk_enabled = MALI_FALSE;
++ clk_disable_unprepare(clk_gpu);
++ clk_disable_unprepare(clk_gpu_pp0);
++ clk_disable_unprepare(clk_gpu_pp1);
++ }
++#endif
++}
++
+ #if MALI_ENABLE_CPU_CYCLES
+ void mali_init_cpu_time_counters(int reset, int enable_divide_by_64)
+ {
+@@ -593,18 +634,19 @@ static int mali_probe(struct platform_device *pdev)
+ clk_gpu = devm_clk_get(&pdev->dev, "gpu");
+ if (IS_ERR(clk_gpu))
+ return PTR_ERR(clk_gpu);
+- clk_prepare_enable(clk_gpu);
+
+ clk_gpu_pp0 = devm_clk_get(&pdev->dev, "gpu_pp0");
+ if (IS_ERR(clk_gpu_pp0))
+ return PTR_ERR(clk_gpu_pp0);
+- clk_prepare_enable(clk_gpu_pp0);
+
+ clk_gpu_pp1 = devm_clk_get(&pdev->dev, "gpu_pp1");
+ if (IS_ERR(clk_gpu_pp1))
+ return PTR_ERR(clk_gpu_pp1);
+- clk_prepare_enable(clk_gpu_pp1);
+ #endif
++
++ err = mali_enable_clk();
++ if (err)
++ return err;
+ if (_MALI_OSK_ERR_OK == _mali_osk_wq_init()) {
+ /* Initialize the Mali GPU HW specified by pdev */
+ if (_MALI_OSK_ERR_OK == mali_initialize_subsystems()) {
+@@ -632,11 +674,6 @@ static int mali_probe(struct platform_device *pdev)
+ _mali_osk_wq_term();
+ }
+
+-#if defined(CONFIG_ARCH_ZYNQMP)
+- clk_disable_unprepare(clk_gpu);
+- clk_disable_unprepare(clk_gpu_pp0);
+- clk_disable_unprepare(clk_gpu_pp1);
+-#endif
+
+ #ifdef CONFIG_MALI_DEVFREQ
+ mali_devfreq_term(mdev);
+@@ -644,6 +681,7 @@ devfreq_init_failed:
+ mali_pm_metrics_term(mdev);
+ pm_metrics_init_failed:
+ clk_disable_unprepare(mdev->clock);
++ mali_disable_clk();
+ clock_prepare_failed:
+ clk_put(mdev->clock);
+ #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0)) && defined(CONFIG_OF) \
+@@ -706,9 +744,7 @@ static int mali_remove(struct platform_device *pdev)
+
+ #if defined(CONFIG_ARCH_ZYNQMP)
+ /* Remove clock */
+- clk_disable_unprepare(clk_gpu);
+- clk_disable_unprepare(clk_gpu_pp0);
+- clk_disable_unprepare(clk_gpu_pp1);
++ mali_disable_clk();
+ #endif
+
+ return 0;
+@@ -816,6 +852,8 @@ static int mali_driver_runtime_suspend(struct device *dev)
+ devfreq_suspend_device(mdev->devfreq);
+ #endif
+
++ mali_disable_clk();
++
+ return 0;
+ } else {
+ return -EBUSY;
+@@ -824,6 +862,11 @@ static int mali_driver_runtime_suspend(struct device *dev)
+
+ static int mali_driver_runtime_resume(struct device *dev)
+ {
++ int err ;
++
++ err = mali_enable_clk();
++ if (err)
++ return err;
+ #ifdef CONFIG_MALI_DEVFREQ
+ struct mali_device *mdev = dev_get_drvdata(dev);
+ if (!mdev)
+--
+2.7.4
+
diff --git a/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0012-linux-mali_memory_os_alloc-Remove-__GFP_COLD.patch b/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0012-linux-mali_memory_os_alloc-Remove-__GFP_COLD.patch
new file mode 100644
index 00000000..24f0a22c
--- /dev/null
+++ b/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0012-linux-mali_memory_os_alloc-Remove-__GFP_COLD.patch
@@ -0,0 +1,33 @@
+From 779b1883d56804ecd08fe7f57d6c01e3db4e893b Mon Sep 17 00:00:00 2001
+From: Madhurkiran Harikrishnan <madhurkiran.harikrishnan@xilinx.com>
+Date: Wed, 5 Dec 2018 18:07:29 -0800
+Subject: [PATCH 1/3] linux: mali_memory_os_alloc: Remove __GFP_COLD
+
+The support for Cache hot and cold pages are removed from the kernel.
+For more information refer kernel commit 453f85d43fa9ee243f0fc3ac4e1be45615301e3f
+
+Signed-off-by: Madhurkiran Harikrishnan <madhurkiran.harikrishnan@xilinx.com>
+Reviewed-by: Hyun Kwon <hyun.kwon@xilinx.com>
+Upstream Status: Pending
+---
+ driver/src/devicedrv/mali/linux/mali_memory_os_alloc.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/driver/src/devicedrv/mali/linux/mali_memory_os_alloc.c b/driver/src/devicedrv/mali/linux/mali_memory_os_alloc.c
+index 1602371..830e8c6 100644
+--- linux/mali_memory_os_alloc.c
++++ b/linux/mali_memory_os_alloc.c
+@@ -202,7 +202,9 @@ int mali_mem_os_alloc_pages(mali_mem_os_mem *os_mem, u32 size)
+ /* Allocate new pages, if needed. */
+ for (i = 0; i < remaining; i++) {
+ dma_addr_t dma_addr;
+-#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 14, 0)
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0)
++ gfp_t flags = __GFP_ZERO | __GFP_RETRY_MAYFAIL | __GFP_NOWARN;
++#elif LINUX_VERSION_CODE == KERNEL_VERSION(4, 14, 0)
+ gfp_t flags = __GFP_ZERO | __GFP_RETRY_MAYFAIL | __GFP_NOWARN | __GFP_COLD;
+ #else
+ gfp_t flags = __GFP_ZERO | __GFP_REPEAT | __GFP_NOWARN | __GFP_COLD;
+--
+2.7.4
+
diff --git a/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0013-linux-mali_memory_secure-Add-header-file-dma-direct..patch b/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0013-linux-mali_memory_secure-Add-header-file-dma-direct..patch
new file mode 100644
index 00000000..c28a83f4
--- /dev/null
+++ b/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0013-linux-mali_memory_secure-Add-header-file-dma-direct..patch
@@ -0,0 +1,34 @@
+From d20b6eb3e48e56558488dbdda98875b1aed0c29f Mon Sep 17 00:00:00 2001
+From: Madhurkiran Harikrishnan <madhurkiran.harikrishnan@xilinx.com>
+Date: Wed, 5 Dec 2018 18:13:28 -0800
+Subject: [PATCH 2/3] linux: mali_memory_secure: Add header file dma-direct.h
+
+Add dma-direct.h header, as API dma_to_phys is defined here.
+refer kernel commit ea8c64ace86647260ec4255f483e5844d62af2df
+
+Signed-off-by: Madhurkiran Harikrishnan <madhurkiran.harikrishnan@xilinx.com>
+Reviewed-by: Hyun Kwon <hyun.kwon@xilinx.com>
+Upstream Status: Pending
+---
+ driver/src/devicedrv/mali/linux/mali_memory_secure.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/driver/src/devicedrv/mali/linux/mali_memory_secure.c b/driver/src/devicedrv/mali/linux/mali_memory_secure.c
+index 2836b1b..4f55fa5 100644
+--- linux/mali_memory_secure.c
++++ b/linux/mali_memory_secure.c
+@@ -13,7 +13,11 @@
+ #include "mali_memory_secure.h"
+ #include "mali_osk.h"
+ #include <linux/mutex.h>
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 16, 0)
++#include <linux/dma-direct.h>
++#else
+ #include <linux/dma-mapping.h>
++#endif
+ #include <linux/dma-buf.h>
+
+ _mali_osk_errcode_t mali_mem_secure_attach_dma_buf(mali_mem_secure *secure_mem, u32 size, int mem_fd)
+--
+2.7.4
+
diff --git a/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0014-linux-mali_-timer-Get-rid-of-init_timer.patch b/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0014-linux-mali_-timer-Get-rid-of-init_timer.patch
new file mode 100644
index 00000000..a7c1d5cc
--- /dev/null
+++ b/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0014-linux-mali_-timer-Get-rid-of-init_timer.patch
@@ -0,0 +1,156 @@
+From b6936450484b5aa9dd2438367a907af020341d1d Mon Sep 17 00:00:00 2001
+From: Madhurkiran Harikrishnan <madhurkiran.harikrishnan@xilinx.com>
+Date: Thu, 6 Dec 2018 13:30:44 -0800
+Subject: [PATCH 3/3] linux: mali_*timer: Get rid of init_timer
+
+kernel 4.19 got rid of ancient init_timer. Hence, replace it with
+timer_setup API. For more information refer kernel commit
+7eeb6b893bd28c68b6d664de1d3120e49b855cdb
+
+Signed-off-by: Madhurkiran Harikrishnan <madhurkiran.harikrishnan@xilinx.com>
+Reviewed-by: Hyun Kwon <hyun.kwon@xilinx.com>
+Upstream Status: Pending
+---
+ driver/src/devicedrv/mali/common/mali_control_timer.c | 6 ++++++
+ driver/src/devicedrv/mali/common/mali_group.c | 6 ++++++
+ driver/src/devicedrv/mali/common/mali_osk.h | 15 ++++++++++++++-
+ driver/src/devicedrv/mali/linux/mali_osk_timers.c | 15 ++++++++++++++-
+ 4 files changed, 40 insertions(+), 2 deletions(-)
+
+diff --git a/driver/src/devicedrv/mali/common/mali_control_timer.c b/driver/src/devicedrv/mali/common/mali_control_timer.c
+index 1296ffe..d24b934 100644
+--- common/mali_control_timer.c
++++ b/common/mali_control_timer.c
+@@ -65,11 +65,17 @@ _mali_osk_errcode_t mali_control_timer_init(void)
+ }
+ }
+
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 14, 0)
++ mali_control_timer = _mali_osk_timer_init(mali_control_timer_callback);
++#else
+ mali_control_timer = _mali_osk_timer_init();
++#endif
+ if (NULL == mali_control_timer) {
+ return _MALI_OSK_ERR_FAULT;
+ }
++#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 14, 0)
+ _mali_osk_timer_setcallback(mali_control_timer, mali_control_timer_callback, NULL);
++#endif
+
+ return _MALI_OSK_ERR_OK;
+ }
+diff --git a/driver/src/devicedrv/mali/common/mali_group.c b/driver/src/devicedrv/mali/common/mali_group.c
+index 5c7b3f4..1702e9a 100644
+--- common/mali_group.c
++++ b/common/mali_group.c
+@@ -65,9 +65,15 @@ struct mali_group *mali_group_create(struct mali_l2_cache_core *core,
+
+ group = _mali_osk_calloc(1, sizeof(struct mali_group));
+ if (NULL != group) {
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 14, 0)
++ group->timeout_timer = _mali_osk_timer_init(mali_group_timeout);
++#else
+ group->timeout_timer = _mali_osk_timer_init();
++#endif
+ if (NULL != group->timeout_timer) {
++#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 14, 0)
+ _mali_osk_timer_setcallback(group->timeout_timer, mali_group_timeout, (void *)group);
++#endif
+
+ group->l2_cache_core[0] = core;
+ _mali_osk_list_init(&group->group_list);
+diff --git a/driver/src/devicedrv/mali/common/mali_osk.h b/driver/src/devicedrv/mali/common/mali_osk.h
+index a501778..fe93d79 100644
+--- common/mali_osk.h
++++ b/common/mali_osk.h
+@@ -947,7 +947,17 @@ _mali_osk_errcode_t _mali_osk_notification_queue_dequeue(_mali_osk_notification_
+ * asked for.
+ *
+ * @{ */
+-
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 14, 0)
++/** @brief Initialize a timer
++ *
++ * Allocates resources for a new timer, and initializes them. This does not
++ * start the timer.
++ *
++ * @param callback Function to call when timer expires
++ * @return a pointer to the allocated timer object, or NULL on failure.
++ */
++_mali_osk_timer_t *_mali_osk_timer_init(_mali_osk_timer_callback_t callback);
++#else
+ /** @brief Initialize a timer
+ *
+ * Allocates resources for a new timer, and initializes them. This does not
+@@ -956,6 +966,7 @@ _mali_osk_errcode_t _mali_osk_notification_queue_dequeue(_mali_osk_notification_
+ * @return a pointer to the allocated timer object, or NULL on failure.
+ */
+ _mali_osk_timer_t *_mali_osk_timer_init(void);
++#endif
+
+ /** @brief Start a timer
+ *
+@@ -1034,6 +1045,7 @@ void _mali_osk_timer_del_async(_mali_osk_timer_t *tim);
+ */
+ mali_bool _mali_osk_timer_pending(_mali_osk_timer_t *tim);
+
++#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 14, 0)
+ /** @brief Set a timer's callback parameters.
+ *
+ * This must be called at least once before a timer is started/modified.
+@@ -1047,6 +1059,7 @@ mali_bool _mali_osk_timer_pending(_mali_osk_timer_t *tim);
+ * @param data Function-specific data to supply to the function on expiry.
+ */
+ void _mali_osk_timer_setcallback(_mali_osk_timer_t *tim, _mali_osk_timer_callback_t callback, void *data);
++#endif
+
+ /** @brief Terminate a timer, and deallocate resources.
+ *
+diff --git a/driver/src/devicedrv/mali/linux/mali_osk_timers.c b/driver/src/devicedrv/mali/linux/mali_osk_timers.c
+index e5d7238..f9b5a86 100644
+--- linux/mali_osk_timers.c
++++ b/linux/mali_osk_timers.c
+@@ -21,13 +21,24 @@
+ struct _mali_osk_timer_t_struct {
+ struct timer_list timer;
+ };
+-
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 14, 0)
++typedef void (*timer_timeout_function_t)(struct timer_list *);
++#else
+ typedef void (*timer_timeout_function_t)(unsigned long);
++#endif
+
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 14, 0)
++_mali_osk_timer_t *_mali_osk_timer_init(_mali_osk_timer_callback_t callback)
++#else
+ _mali_osk_timer_t *_mali_osk_timer_init(void)
++#endif
+ {
+ _mali_osk_timer_t *t = (_mali_osk_timer_t *)kmalloc(sizeof(_mali_osk_timer_t), GFP_KERNEL);
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 14, 0)
++ if (NULL != t) timer_setup(&t->timer, (timer_timeout_function_t)callback, 0);
++#else
+ if (NULL != t) init_timer(&t->timer);
++#endif
+ return t;
+ }
+
+@@ -62,12 +73,14 @@ mali_bool _mali_osk_timer_pending(_mali_osk_timer_t *tim)
+ return 1 == timer_pending(&(tim->timer));
+ }
+
++#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 14, 0)
+ void _mali_osk_timer_setcallback(_mali_osk_timer_t *tim, _mali_osk_timer_callback_t callback, void *data)
+ {
+ MALI_DEBUG_ASSERT_POINTER(tim);
+ tim->timer.data = (unsigned long)data;
+ tim->timer.function = (timer_timeout_function_t)callback;
+ }
++#endif
+
+ void _mali_osk_timer_term(_mali_osk_timer_t *tim)
+ {
+--
+2.7.4
+
diff --git a/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0015-fix-driver-failed-to-check-map-error.patch b/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0015-fix-driver-failed-to-check-map-error.patch
new file mode 100644
index 00000000..5363c37e
--- /dev/null
+++ b/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0015-fix-driver-failed-to-check-map-error.patch
@@ -0,0 +1,17 @@
+Index: mali/linux/mali_memory_os_alloc.c
+===================================================================
+--- mali.orig/linux/mali_memory_os_alloc.c
++++ mali/linux/mali_memory_os_alloc.c
+@@ -239,8 +239,10 @@ int mali_mem_os_alloc_pages(mali_mem_os_
+ /* Ensure page is flushed from CPU caches. */
+ dma_addr = dma_map_page(&mali_platform_device->dev, new_page,
+ 0, _MALI_OSK_MALI_PAGE_SIZE, DMA_BIDIRECTIONAL);
+- dma_unmap_page(&mali_platform_device->dev, dma_addr,
+- _MALI_OSK_MALI_PAGE_SIZE, DMA_BIDIRECTIONAL);
++ err = dma_mapping_error(&mali_platform_device->dev, dma_addr);
++ if (likely(!err))
++ dma_unmap_page(&mali_platform_device->dev, dma_addr,
++ _MALI_OSK_MALI_PAGE_SIZE, DMA_BIDIRECTIONAL);
+ dma_addr = dma_map_page(&mali_platform_device->dev, new_page,
+ 0, _MALI_OSK_MALI_PAGE_SIZE, DMA_BIDIRECTIONAL);
+
diff --git a/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0016-mali_memory_secure-Kernel-5.0-onwards-access_ok-API-.patch b/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0016-mali_memory_secure-Kernel-5.0-onwards-access_ok-API-.patch
new file mode 100644
index 00000000..dc8bbebf
--- /dev/null
+++ b/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0016-mali_memory_secure-Kernel-5.0-onwards-access_ok-API-.patch
@@ -0,0 +1,47 @@
+From 8cf1dd43f3f25cb4afb84dfc3b0e7c02bc8f7f0c Mon Sep 17 00:00:00 2001
+From: Madhurkiran Harikrishnan <madhurkiran.harikrishnan@xilinx.com>
+Date: Mon, 24 Feb 2020 18:19:37 -0800
+Subject: [LINUX][rel-v2020.1][PATCH v1 1/3] mali_memory_secure: Kernel 5.0
+ onwards 'access_ok' API does not take 'type' as input parameter
+
+'access_ok' no longer needs 'type' as input paramter from kernel 5.0
+onwards.
+
+Signed-off-by: Madhurkiran Harikrishnan <madhurkiran.harikrishnan@xilinx.com>
+---
+ driver/src/devicedrv/mali/linux/mali_ukk_mem.c | 9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+diff --git a/driver/src/devicedrv/mali/linux/mali_ukk_mem.c b/driver/src/devicedrv/mali/linux/mali_ukk_mem.c
+index 4ec57dc..270bb6d 100644
+--- linux/mali_ukk_mem.c
++++ b/linux/mali_ukk_mem.c
+@@ -207,8 +207,13 @@ int mem_write_safe_wrapper(struct mali_session_data *session_data, _mali_uk_mem_
+ kargs.ctx = (uintptr_t)session_data;
+
+ /* Check if we can access the buffers */
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 0, 0)
++ if (!access_ok((const void __user *)kargs.dest, kargs.size)
++ || !access_ok((const void __user *)kargs.src, kargs.size)) {
++#else
+ if (!access_ok(VERIFY_WRITE, kargs.dest, kargs.size)
+ || !access_ok(VERIFY_READ, kargs.src, kargs.size)) {
++#endif
+ return -EINVAL;
+ }
+
+@@ -266,7 +271,11 @@ int mem_dump_mmu_page_table_wrapper(struct mali_session_data *session_data, _mal
+ goto err_exit;
+
+ user_buffer = (void __user *)(uintptr_t)kargs.buffer;
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 0, 0)
++ if (!access_ok(user_buffer, kargs.size))
++#else
+ if (!access_ok(VERIFY_WRITE, user_buffer, kargs.size))
++#endif
+ goto err_exit;
+
+ /* allocate temporary buffer (kernel side) to store mmu page table info */
+--
+2.7.4
+
diff --git a/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0017-Support-for-vm_insert_pfn-deprecated-from-kernel-4.2.patch b/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0017-Support-for-vm_insert_pfn-deprecated-from-kernel-4.2.patch
new file mode 100644
index 00000000..9c4bbee9
--- /dev/null
+++ b/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0017-Support-for-vm_insert_pfn-deprecated-from-kernel-4.2.patch
@@ -0,0 +1,146 @@
+From 953cab73b8bc487da330aa454abd7f8c7466737e Mon Sep 17 00:00:00 2001
+From: Madhurkiran Harikrishnan <madhurkiran.harikrishnan@xilinx.com>
+Date: Mon, 24 Feb 2020 18:32:16 -0800
+Subject: [LINUX][rel-v2020.1][PATCH v1 2/3] Support for vm_insert_pfn
+ deprecated from kernel 4.20
+
+From kernel 4.20 onwards, support for vm_insert_pfn is deprecated.
+Hence, replace the same with vmf_insert_pfn.
+
+Signed-off-by: Madhurkiran Harikrishnan <madhurkiran.harikrishnan@xilinx.com>
+---
+ .../devicedrv/mali/linux/mali_memory_block_alloc.c | 6 +++++-
+ driver/src/devicedrv/mali/linux/mali_memory_cow.c | 14 ++++++++++++--
+ .../src/devicedrv/mali/linux/mali_memory_os_alloc.c | 20 +++++++++++++++++---
+ driver/src/devicedrv/mali/linux/mali_memory_secure.c | 7 ++++++-
+ 4 files changed, 40 insertions(+), 7 deletions(-)
+
+diff --git a/driver/src/devicedrv/mali/linux/mali_memory_block_alloc.c b/driver/src/devicedrv/mali/linux/mali_memory_block_alloc.c
+index 0c5b6c3..e528699 100644
+--- linux/mali_memory_block_alloc.c
++++ b/linux/mali_memory_block_alloc.c
+@@ -309,9 +309,13 @@ int mali_mem_block_cpu_map(mali_mem_backend *mem_bkend, struct vm_area_struct *v
+
+ list_for_each_entry(m_page, &block_mem->pfns, list) {
+ MALI_DEBUG_ASSERT(m_page->type == MALI_PAGE_NODE_BLOCK);
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 20, 0)
++ ret = vmf_insert_pfn(vma, addr, _mali_page_node_get_pfn(m_page));
++ if (unlikely(VM_FAULT_ERROR & ret)) {
++#else
+ ret = vm_insert_pfn(vma, addr, _mali_page_node_get_pfn(m_page));
+-
+ if (unlikely(0 != ret)) {
++#endif
+ return -EFAULT;
+ }
+ addr += _MALI_OSK_MALI_PAGE_SIZE;
+diff --git a/driver/src/devicedrv/mali/linux/mali_memory_cow.c b/driver/src/devicedrv/mali/linux/mali_memory_cow.c
+index f1d44fe..1dae1d6 100644
+--- linux/mali_memory_cow.c
++++ b/linux/mali_memory_cow.c
+@@ -532,9 +532,14 @@ int mali_mem_cow_cpu_map(mali_mem_backend *mem_bkend, struct vm_area_struct *vma
+ * flush which makes it way slower than remap_pfn_range or vm_insert_pfn.
+ ret = vm_insert_page(vma, addr, page);
+ */
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 20, 0)
++ ret = vmf_insert_pfn(vma, addr, _mali_page_node_get_pfn(m_page));
++ if (unlikely(VM_FAULT_ERROR & ret)) {
++#else
+ ret = vm_insert_pfn(vma, addr, _mali_page_node_get_pfn(m_page));
+-
+ if (unlikely(0 != ret)) {
++#endif
++
+ return ret;
+ }
+ addr += _MALI_OSK_MALI_PAGE_SIZE;
+@@ -569,9 +574,14 @@ _mali_osk_errcode_t mali_mem_cow_cpu_map_pages_locked(mali_mem_backend *mem_bken
+
+ list_for_each_entry(m_page, &cow->pages, list) {
+ if ((count >= offset) && (count < offset + num)) {
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 20, 0)
++ ret = vmf_insert_pfn(vma, vaddr, _mali_page_node_get_pfn(m_page));
++ if (unlikely(VM_FAULT_ERROR & ret)) {
++#else
+ ret = vm_insert_pfn(vma, vaddr, _mali_page_node_get_pfn(m_page));
+-
+ if (unlikely(0 != ret)) {
++#endif
++
+ if (count == offset) {
+ return _MALI_OSK_ERR_FAULT;
+ } else {
+diff --git a/driver/src/devicedrv/mali/linux/mali_memory_os_alloc.c b/driver/src/devicedrv/mali/linux/mali_memory_os_alloc.c
+index 3fb6f05..7de3920 100644
+--- linux/mali_memory_os_alloc.c
++++ b/linux/mali_memory_os_alloc.c
+@@ -378,9 +378,14 @@ int mali_mem_os_cpu_map(mali_mem_backend *mem_bkend, struct vm_area_struct *vma)
+ ret = vm_insert_page(vma, addr, page);
+ */
+ page = m_page->page;
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 20, 0)
++ ret = vmf_insert_pfn(vma, addr, page_to_pfn(page));
++ if (unlikely(VM_FAULT_ERROR & ret)) {
++#else
+ ret = vm_insert_pfn(vma, addr, page_to_pfn(page));
+-
+ if (unlikely(0 != ret)) {
++#endif
++
+ return -EFAULT;
+ }
+ addr += _MALI_OSK_MALI_PAGE_SIZE;
+@@ -416,9 +421,13 @@ _mali_osk_errcode_t mali_mem_os_resize_cpu_map_locked(mali_mem_backend *mem_bken
+
+ vm_end -= _MALI_OSK_MALI_PAGE_SIZE;
+ if (mapping_page_num > 0) {
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 20, 0)
++ ret = vmf_insert_pfn(vma, vm_end, page_to_pfn(m_page->page));
++ if (unlikely(VM_FAULT_ERROR & ret)) {
++#else
+ ret = vm_insert_pfn(vma, vm_end, page_to_pfn(m_page->page));
+-
+ if (unlikely(0 != ret)) {
++#endif
+ /*will return -EBUSY If the page has already been mapped into table, but it's OK*/
+ if (-EBUSY == ret) {
+ break;
+@@ -439,9 +448,14 @@ _mali_osk_errcode_t mali_mem_os_resize_cpu_map_locked(mali_mem_backend *mem_bken
+ list_for_each_entry(m_page, &os_mem->pages, list) {
+ if (count >= offset) {
+
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 20, 0)
++ ret = vmf_insert_pfn(vma, vstart, page_to_pfn(m_page->page));
++ if (unlikely(VM_FAULT_ERROR & ret)) {
++#else
+ ret = vm_insert_pfn(vma, vstart, page_to_pfn(m_page->page));
+-
+ if (unlikely(0 != ret)) {
++#endif
++
+ /*will return -EBUSY If the page has already been mapped into table, but it's OK*/
+ if (-EBUSY == ret) {
+ break;
+diff --git a/driver/src/devicedrv/mali/linux/mali_memory_secure.c b/driver/src/devicedrv/mali/linux/mali_memory_secure.c
+index 5546304..cebd1c8 100644
+--- linux/mali_memory_secure.c
++++ b/linux/mali_memory_secure.c
+@@ -132,9 +132,14 @@ int mali_mem_secure_cpu_map(mali_mem_backend *mem_bkend, struct vm_area_struct *
+ MALI_DEBUG_ASSERT(0 == size % _MALI_OSK_MALI_PAGE_SIZE);
+
+ for (j = 0; j < size / _MALI_OSK_MALI_PAGE_SIZE; j++) {
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 20, 0)
++ ret = vmf_insert_pfn(vma, addr, PFN_DOWN(phys));
++ if (unlikely(VM_FAULT_ERROR & ret)) {
++#else
+ ret = vm_insert_pfn(vma, addr, PFN_DOWN(phys));
+-
+ if (unlikely(0 != ret)) {
++#endif
++
+ return -EFAULT;
+ }
+ addr += _MALI_OSK_MALI_PAGE_SIZE;
+--
+2.7.4
+
diff --git a/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0018-Change-return-type-to-vm_fault_t-for-fault-handler.patch b/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0018-Change-return-type-to-vm_fault_t-for-fault-handler.patch
new file mode 100644
index 00000000..9797db62
--- /dev/null
+++ b/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0018-Change-return-type-to-vm_fault_t-for-fault-handler.patch
@@ -0,0 +1,32 @@
+From ad5c569f0cc40698699fc2f2c1db3ceb9f8b8f35 Mon Sep 17 00:00:00 2001
+From: Madhurkiran Harikrishnan <madhurkiran.harikrishnan@xilinx.com>
+Date: Tue, 25 Feb 2020 11:36:01 -0800
+Subject: [LINUX][rel-v2020.1][PATCH v1 3/3] Change return type to vm_fault_t
+ for fault handler
+
+From kernel 4.17 onwards the return type of fault handler for
+vm_operations is of type 'vm_fault_t'.
+
+Signed-off-by: Madhurkiran Harikrishnan <madhurkiran.harikrishnan@xilinx.com>
+---
+ driver/src/devicedrv/mali/linux/mali_memory.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/driver/src/devicedrv/mali/linux/mali_memory.c b/driver/src/devicedrv/mali/linux/mali_memory.c
+index c0f0982..2b2b209 100644
+--- linux/mali_memory.c
++++ b/linux/mali_memory.c
+@@ -70,7 +70,9 @@ static void mali_mem_vma_close(struct vm_area_struct *vma)
+ }
+ }
+
+-#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0)
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 17, 0)
++static vm_fault_t mali_mem_vma_fault(struct vm_fault *vmf)
++#elif LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0)
+ static int mali_mem_vma_fault(struct vm_fault *vmf)
+ #else
+ static int mali_mem_vma_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
+--
+2.7.4
+
diff --git a/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0019-get_monotonic_boottime-ts-deprecated-from-kernel-4.2.patch b/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0019-get_monotonic_boottime-ts-deprecated-from-kernel-4.2.patch
new file mode 100644
index 00000000..154bb673
--- /dev/null
+++ b/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0019-get_monotonic_boottime-ts-deprecated-from-kernel-4.2.patch
@@ -0,0 +1,36 @@
+From c6a6b39cea3fdfd91cae7f2a4ef6f36d2c55fdd6 Mon Sep 17 00:00:00 2001
+From: Madhurkiran Harikrishnan <madhurkiran.harikrishnan@xilinx.com>
+Date: Tue, 25 Feb 2020 15:17:17 -0800
+Subject: [LINUX][rel-v2020.1][PATCH v1] "get_monotonic_boottime(&ts)"
+ deprecated from kernel 4.20 onwards
+
+As "get_monotonic_boottime(&ts)" is deprecated, replace the same with
+"ktime_get_boottime_ts64(&ts)". Refer kernel commit ID
+976516404ff3fab2a8caa8bd6f5efc1437fed0b8
+
+Signed-off-by: Madhurkiran Harikrishnan <madhurkiran.harikrishnan@xilinx.com>
+---
+ driver/src/devicedrv/mali/linux/mali_osk_time.c | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/driver/src/devicedrv/mali/linux/mali_osk_time.c b/driver/src/devicedrv/mali/linux/mali_osk_time.c
+index 03046a5..bfcbf7f 100644
+--- linux/mali_osk_time.c
++++ b/linux/mali_osk_time.c
+@@ -53,7 +53,13 @@ u64 _mali_osk_time_get_ns(void)
+
+ u64 _mali_osk_boot_time_get_ns(void)
+ {
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 20, 0)
++ struct timespec64 tsval;
++ ktime_get_boottime_ts64(&tsval);
++ return (u64)timespec64_to_ns(&tsval);
++#else
+ struct timespec tsval;
+ get_monotonic_boottime(&tsval);
+ return (u64)timespec_to_ns(&tsval);
++#endif
+ }
+--
+2.7.4
+
diff --git a/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0020-Fix-ioremap_nocache-deprecation-in-kernel-5.6.patch b/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0020-Fix-ioremap_nocache-deprecation-in-kernel-5.6.patch
new file mode 100644
index 00000000..ff86091f
--- /dev/null
+++ b/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0020-Fix-ioremap_nocache-deprecation-in-kernel-5.6.patch
@@ -0,0 +1,92 @@
+From cbc2351e8acf7ed38f6d965e5ea21620e45eda30 Mon Sep 17 00:00:00 2001
+From: Dylan Yip <dylan.yip@xilinx.com>
+Date: Tue, 9 Feb 2021 10:05:41 -0800
+Subject: [PATCH 20/23] Fix ioremap_nocache() deprecation in kernel 5.6
+
+As of commit 4bdc0d676a643140 ("remove ioremap_nocache and
+devm_ioremap_nocache") from kernel 5.6, ioremap_nocache has been
+removed because ioremap is already non-cached by default. So replace all
+calls with ioremap.
+
+Signed-off-by: Dylan Yip <dylan.yip@xilinx.com>
+---
+ linux/mali_memory_cow.c | 4 ++++
+ linux/mali_osk_low_level_mem.c | 4 ++++
+ platform/arm/arm.c | 12 ++++++++++++
+ 3 files changed, 20 insertions(+)
+
+diff --git a/linux/mali_memory_cow.c b/linux/mali_memory_cow.c
+index 1dae1d6..6fadd42 100644
+--- a/linux/mali_memory_cow.c
++++ b/linux/mali_memory_cow.c
+@@ -693,7 +693,11 @@ void _mali_mem_cow_copy_page(mali_page_node *src_node, mali_page_node *dst_node)
+ /*
+ * use ioremap to map src for BLOCK memory
+ */
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 6, 0)
++ src = ioremap(_mali_page_node_get_dma_addr(src_node), _MALI_OSK_MALI_PAGE_SIZE);
++#else
+ src = ioremap_nocache(_mali_page_node_get_dma_addr(src_node), _MALI_OSK_MALI_PAGE_SIZE);
++#endif
+ memcpy(dst, src , _MALI_OSK_MALI_PAGE_SIZE);
+ iounmap(src);
+ }
+diff --git a/linux/mali_osk_low_level_mem.c b/linux/mali_osk_low_level_mem.c
+index 84f93d9..5a0a725 100644
+--- a/linux/mali_osk_low_level_mem.c
++++ b/linux/mali_osk_low_level_mem.c
+@@ -33,7 +33,11 @@ void _mali_osk_write_mem_barrier(void)
+
+ mali_io_address _mali_osk_mem_mapioregion(uintptr_t phys, u32 size, const char *description)
+ {
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 6, 0)
++ return (mali_io_address)ioremap(phys, size);
++#else
+ return (mali_io_address)ioremap_nocache(phys, size);
++#endif
+ }
+
+ void _mali_osk_mem_unmapioregion(uintptr_t phys, u32 size, mali_io_address virt)
+diff --git a/platform/arm/arm.c b/platform/arm/arm.c
+index b2fb746..e468263 100644
+--- a/platform/arm/arm.c
++++ b/platform/arm/arm.c
+@@ -98,7 +98,11 @@ static int mali_secure_mode_init_juno(void)
+
+ MALI_DEBUG_ASSERT(NULL == secure_mode_mapped_addr);
+
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 6, 0)
++ secure_mode_mapped_addr = ioremap(phys_addr_page, map_size);
++#else
+ secure_mode_mapped_addr = ioremap_nocache(phys_addr_page, map_size);
++#endif
+ if (NULL != secure_mode_mapped_addr) {
+ return mali_gpu_reset_and_secure_mode_disable_juno();
+ }
+@@ -588,7 +592,11 @@ static u32 mali_read_phys(u32 phys_addr)
+ u32 phys_offset = phys_addr & 0x00001FFF;
+ u32 map_size = phys_offset + sizeof(u32);
+ u32 ret = 0xDEADBEEF;
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 6, 0)
++ void *mem_mapped = ioremap(phys_addr_page, map_size);
++#else
+ void *mem_mapped = ioremap_nocache(phys_addr_page, map_size);
++#endif
+ if (NULL != mem_mapped) {
+ ret = (u32)ioread32(((u8 *)mem_mapped) + phys_offset);
+ iounmap(mem_mapped);
+@@ -604,7 +612,11 @@ static void mali_write_phys(u32 phys_addr, u32 value)
+ u32 phys_addr_page = phys_addr & 0xFFFFE000;
+ u32 phys_offset = phys_addr & 0x00001FFF;
+ u32 map_size = phys_offset + sizeof(u32);
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 6, 0)
++ void *mem_mapped = ioremap(phys_addr_page, map_size);
++#else
+ void *mem_mapped = ioremap_nocache(phys_addr_page, map_size);
++#endif
+ if (NULL != mem_mapped) {
+ iowrite32(value, ((u8 *)mem_mapped) + phys_offset);
+ iounmap(mem_mapped);
+--
+2.17.1
+
diff --git a/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0021-Use-updated-timekeeping-functions-in-kernel-5.6.patch b/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0021-Use-updated-timekeeping-functions-in-kernel-5.6.patch
new file mode 100644
index 00000000..adef8e18
--- /dev/null
+++ b/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0021-Use-updated-timekeeping-functions-in-kernel-5.6.patch
@@ -0,0 +1,37 @@
+From bc0f85271681532c7e394229f0155366d1de8779 Mon Sep 17 00:00:00 2001
+From: Dylan Yip <dylan.yip@xilinx.com>
+Date: Mon, 8 Feb 2021 23:47:01 -0800
+Subject: [PATCH 21/23] Use updated timekeeping functions in kernel 5.6
+
+As of commit 412c53a680a9 ("y2038: remove unused time32 interfaces"), 32
+bit timekeeping functions like getnstimeofday() have been removed. So
+use the 64 bit replacements.
+
+Signed-off-by: Dylan Yip <dylan.yip@xilinx.com>
+---
+ linux/mali_osk_time.c | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/linux/mali_osk_time.c b/linux/mali_osk_time.c
+index bfcbf7f..583d82b 100644
+--- a/linux/mali_osk_time.c
++++ b/linux/mali_osk_time.c
+@@ -46,9 +46,15 @@ void _mali_osk_time_ubusydelay(u32 usecs)
+
+ u64 _mali_osk_time_get_ns(void)
+ {
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 6, 0)
++ struct timespec64 tsval;
++ ktime_get_real_ts64(&tsval);
++ return (u64)timespec64_to_ns(&tsval);
++#else
+ struct timespec tsval;
+ getnstimeofday(&tsval);
+ return (u64)timespec_to_ns(&tsval);
++#endif
+ }
+
+ u64 _mali_osk_boot_time_get_ns(void)
+--
+2.17.1
+
diff --git a/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0022-Set-HAVE_UNLOCKED_IOCTL-default-to-true.patch b/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0022-Set-HAVE_UNLOCKED_IOCTL-default-to-true.patch
new file mode 100644
index 00000000..181df7b7
--- /dev/null
+++ b/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0022-Set-HAVE_UNLOCKED_IOCTL-default-to-true.patch
@@ -0,0 +1,38 @@
+From d17933b6909cc29103befc2ef4e6cf413d9e8fb6 Mon Sep 17 00:00:00 2001
+From: Dylan Yip <dylan.yip@xilinx.com>
+Date: Tue, 9 Feb 2021 08:58:44 -0800
+Subject: [PATCH 22/23] Set HAVE_UNLOCKED_IOCTL default to true
+
+As of commit b19dd42faf41 ("bkl: Remove locked .ioctl file operation")
+of kernel 2.6, the ioctl operation has been replaced with
+unlocked_ioctl. Since this change has been around for almost 10 years,
+go ahead and set the default HAVE_UNLOCKED_IOCTL to be true.
+
+Signed-off-by: Dylan Yip <dylan.yip@xilinx.com>
+---
+ Kbuild | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/Kbuild b/Kbuild
+index 02c3f3d..8c6e6e0 100644
+--- a/Kbuild
++++ b/Kbuild
+@@ -21,6 +21,7 @@ MALI_PP_SCHEDULER_KEEP_SUB_JOB_STARTS_ALIGNED ?= 0
+ MALI_PP_SCHEDULER_FORCE_NO_JOB_OVERLAP_BETWEEN_APPS ?= 0
+ MALI_UPPER_HALF_SCHEDULING ?= 1
+ MALI_ENABLE_CPU_CYCLES ?= 0
++HAVE_UNLOCKED_IOCTL ?= 1
+
+ # For customer releases the Linux Device Drivers will be provided as ARM proprietary and GPL releases:
+ # The ARM proprietary product will only include the license/proprietary directory
+@@ -179,6 +180,7 @@ ccflags-y += -DMALI_STATE_TRACKING=1
+ ccflags-y += -DMALI_OS_MEMORY_KERNEL_BUFFER_SIZE_IN_MB=$(OS_MEMORY_KERNEL_BUFFER_SIZE_IN_MB)
+ ccflags-y += -DUSING_GPU_UTILIZATION=$(USING_GPU_UTILIZATION)
+ ccflags-y += -DMALI_ENABLE_CPU_CYCLES=$(MALI_ENABLE_CPU_CYCLES)
++ccflags-y += -DHAVE_UNLOCKED_IOCTL=$(HAVE_UNLOCKED_IOCTL)
+
+ ifeq ($(MALI_UPPER_HALF_SCHEDULING),1)
+ ccflags-y += -DMALI_UPPER_HALF_SCHEDULING
+--
+2.17.1
+
diff --git a/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0023-Use-PTR_ERR_OR_ZERO-instead-of-PTR_RET.patch b/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0023-Use-PTR_ERR_OR_ZERO-instead-of-PTR_RET.patch
new file mode 100644
index 00000000..bab2bd37
--- /dev/null
+++ b/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0023-Use-PTR_ERR_OR_ZERO-instead-of-PTR_RET.patch
@@ -0,0 +1,33 @@
+From e2b52e358e0e030d3881ef80ef09de3662b41210 Mon Sep 17 00:00:00 2001
+From: Dylan Yip <dylan.yip@xilinx.com>
+Date: Tue, 9 Feb 2021 09:48:01 -0800
+Subject: [PATCH 23/23] Use PTR_ERR_OR_ZERO instead of PTR_RET
+
+As of commit fad7c9020948 ("err.h: remove deprecated PTR_RET for good")
+in kernel 5.7, PTR_RET has been removed and replaced with
+PTR_ERR_OR_ZERO. So use this API instead.
+
+Signed-off-by: Dylan Yip <dylan.yip@xilinx.com>
+---
+ linux/mali_memory_dma_buf.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/linux/mali_memory_dma_buf.c b/linux/mali_memory_dma_buf.c
+index 905cd8b..fcdcaac 100644
+--- a/linux/mali_memory_dma_buf.c
++++ b/linux/mali_memory_dma_buf.c
+@@ -281,7 +281,11 @@ int mali_dma_buf_get_size(struct mali_session_data *session, _mali_uk_dma_buf_ge
+ buf = dma_buf_get(fd);
+ if (IS_ERR_OR_NULL(buf)) {
+ MALI_DEBUG_PRINT_ERROR(("Failed to get dma-buf from fd: %d\n", fd));
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 7, 0)
++ return PTR_ERR_OR_ZERO(buf);
++#else
+ return PTR_RET(buf);
++#endif
+ }
+
+ if (0 != put_user(buf->size, &user_arg->size)) {
+--
+2.17.1
+
diff --git a/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0024-Use-community-device-tree-names.patch b/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0024-Use-community-device-tree-names.patch
new file mode 100644
index 00000000..5b3eeedc
--- /dev/null
+++ b/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0024-Use-community-device-tree-names.patch
@@ -0,0 +1,91 @@
+Use the community device-tree names
+
+The community LIMA driver uses a series of names that are different then
+the legacy Xilinx names. Moves from the legacy names to the more standard
+names.
+
+This will allow us to have a single device tree that works with both the
+mali driver, as well as the lima driver.
+
+Interrupt-names:
+ IRQGP -> gp
+ IRQGPMMU -> gpmmu
+ IRQPP0 -> pp0
+ IRQPPMMU0 -> ppmmu0
+ IRQPP1 -> pp1
+ IRQPPMMU1 -> ppmmu1
+ ...
+
+Clock-names:
+ gpu_pp0 -> core
+ gpu_pp1 -> bus
+
+Signed-off-by: Mark Hatle <mark.hatle@amd.com>
+
+diff -ur a/linux/mali_kernel_linux.c b/linux/mali_kernel_linux.c
+--- a/linux/mali_kernel_linux.c 2018-09-17 04:04:48.000000000 -0700
++++ b/linux/mali_kernel_linux.c 2022-10-24 14:01:54.614376177 -0700
+@@ -635,11 +635,11 @@
+ if (IS_ERR(clk_gpu))
+ return PTR_ERR(clk_gpu);
+
+- clk_gpu_pp0 = devm_clk_get(&pdev->dev, "gpu_pp0");
++ clk_gpu_pp0 = devm_clk_get(&pdev->dev, "core");
+ if (IS_ERR(clk_gpu_pp0))
+ return PTR_ERR(clk_gpu_pp0);
+
+- clk_gpu_pp1 = devm_clk_get(&pdev->dev, "gpu_pp1");
++ clk_gpu_pp1 = devm_clk_get(&pdev->dev, "bus");
+ if (IS_ERR(clk_gpu_pp1))
+ return PTR_ERR(clk_gpu_pp1);
+ #endif
+diff -ur a/linux/mali_osk_mali.c b/linux/mali_osk_mali.c
+--- a/linux/mali_osk_mali.c 2018-09-12 23:52:20.000000000 -0700
++++ b/linux/mali_osk_mali.c 2022-10-24 14:00:28.470380512 -0700
+@@ -72,26 +72,26 @@
+ #define MALI_OSK_RESOURCE_DMA_LOCATION 26
+
+ static _mali_osk_resource_t mali_osk_resource_bank[MALI_OSK_MAX_RESOURCE_NUMBER] = {
+- {.description = "Mali_GP", .base = MALI_OFFSET_GP, .irq_name = "IRQGP",},
+- {.description = "Mali_GP_MMU", .base = MALI_OFFSET_GP_MMU, .irq_name = "IRQGPMMU",},
+- {.description = "Mali_PP0", .base = MALI_OFFSET_PP0, .irq_name = "IRQPP0",},
+- {.description = "Mali_PP0_MMU", .base = MALI_OFFSET_PP0_MMU, .irq_name = "IRQPPMMU0",},
+- {.description = "Mali_PP1", .base = MALI_OFFSET_PP1, .irq_name = "IRQPP1",},
+- {.description = "Mali_PP1_MMU", .base = MALI_OFFSET_PP1_MMU, .irq_name = "IRQPPMMU1",},
+- {.description = "Mali_PP2", .base = MALI_OFFSET_PP2, .irq_name = "IRQPP2",},
+- {.description = "Mali_PP2_MMU", .base = MALI_OFFSET_PP2_MMU, .irq_name = "IRQPPMMU2",},
+- {.description = "Mali_PP3", .base = MALI_OFFSET_PP3, .irq_name = "IRQPP3",},
+- {.description = "Mali_PP3_MMU", .base = MALI_OFFSET_PP3_MMU, .irq_name = "IRQPPMMU3",},
+- {.description = "Mali_PP4", .base = MALI_OFFSET_PP4, .irq_name = "IRQPP4",},
+- {.description = "Mali_PP4_MMU", .base = MALI_OFFSET_PP4_MMU, .irq_name = "IRQPPMMU4",},
+- {.description = "Mali_PP5", .base = MALI_OFFSET_PP5, .irq_name = "IRQPP5",},
+- {.description = "Mali_PP5_MMU", .base = MALI_OFFSET_PP5_MMU, .irq_name = "IRQPPMMU5",},
+- {.description = "Mali_PP6", .base = MALI_OFFSET_PP6, .irq_name = "IRQPP6",},
+- {.description = "Mali_PP6_MMU", .base = MALI_OFFSET_PP6_MMU, .irq_name = "IRQPPMMU6",},
+- {.description = "Mali_PP7", .base = MALI_OFFSET_PP7, .irq_name = "IRQPP7",},
+- {.description = "Mali_PP7_MMU", .base = MALI_OFFSET_PP7_MMU, .irq_name = "IRQPPMMU",},
+- {.description = "Mali_PP_Broadcast", .base = MALI_OFFSET_PP_BCAST, .irq_name = "IRQPP",},
+- {.description = "Mali_PMU", .base = MALI_OFFSET_PMU, .irq_name = "IRQPMU",},
++ {.description = "Mali_GP", .base = MALI_OFFSET_GP, .irq_name = "gp",},
++ {.description = "Mali_GP_MMU", .base = MALI_OFFSET_GP_MMU, .irq_name = "gpmmu",},
++ {.description = "Mali_PP0", .base = MALI_OFFSET_PP0, .irq_name = "pp0",},
++ {.description = "Mali_PP0_MMU", .base = MALI_OFFSET_PP0_MMU, .irq_name = "ppmmu0",},
++ {.description = "Mali_PP1", .base = MALI_OFFSET_PP1, .irq_name = "pp1",},
++ {.description = "Mali_PP1_MMU", .base = MALI_OFFSET_PP1_MMU, .irq_name = "ppmmu1",},
++ {.description = "Mali_PP2", .base = MALI_OFFSET_PP2, .irq_name = "pp2",},
++ {.description = "Mali_PP2_MMU", .base = MALI_OFFSET_PP2_MMU, .irq_name = "ppmmu2",},
++ {.description = "Mali_PP3", .base = MALI_OFFSET_PP3, .irq_name = "pp3",},
++ {.description = "Mali_PP3_MMU", .base = MALI_OFFSET_PP3_MMU, .irq_name = "ppmmu3",},
++ {.description = "Mali_PP4", .base = MALI_OFFSET_PP4, .irq_name = "pp4",},
++ {.description = "Mali_PP4_MMU", .base = MALI_OFFSET_PP4_MMU, .irq_name = "ppmmu4",},
++ {.description = "Mali_PP5", .base = MALI_OFFSET_PP5, .irq_name = "pp5",},
++ {.description = "Mali_PP5_MMU", .base = MALI_OFFSET_PP5_MMU, .irq_name = "ppmmu5",},
++ {.description = "Mali_PP6", .base = MALI_OFFSET_PP6, .irq_name = "pp6",},
++ {.description = "Mali_PP6_MMU", .base = MALI_OFFSET_PP6_MMU, .irq_name = "ppmmu6",},
++ {.description = "Mali_PP7", .base = MALI_OFFSET_PP7, .irq_name = "pp7",},
++ {.description = "Mali_PP7_MMU", .base = MALI_OFFSET_PP7_MMU, .irq_name = "ppmmu",},
++ {.description = "Mali_PP_Broadcast", .base = MALI_OFFSET_PP_BCAST, .irq_name = "pp",},
++ {.description = "Mali_PMU", .base = MALI_OFFSET_PMU, .irq_name = "pmu",},
+ {.description = "Mali_L2", .base = MALI_OFFSET_L2_RESOURCE0,},
+ {.description = "Mali_L2", .base = MALI_OFFSET_L2_RESOURCE1,},
+ {.description = "Mali_L2", .base = MALI_OFFSET_L2_RESOURCE2,},
diff --git a/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0025-Import-DMA_BUF-module-and-update-register_shrinker-f.patch b/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0025-Import-DMA_BUF-module-and-update-register_shrinker-f.patch
new file mode 100644
index 00000000..f3bcd4f1
--- /dev/null
+++ b/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0025-Import-DMA_BUF-module-and-update-register_shrinker-f.patch
@@ -0,0 +1,67 @@
+From d4fcb32f8dc85d01c6e0dc8e5d85c7ed43f0866c Mon Sep 17 00:00:00 2001
+From: Yash Ladani <yash.ladani@amd.com>
+Date: Tue, 6 Dec 2022 00:52:53 -0800
+Subject: [PATCH] Import DMA_BUF module and update register_shrinker function
+ for kernel 5.16 or higher
+
+Added MODULE_IMPORT_NS(DMA_BUF) for kernel version 5.16 or higher.
+register_shrinker function call now requires two arguments
+for kernel 5.16 or higher updated this function call.
+
+Signed-off-by: Yash Ladani <yash.ladani@amd.com>
+---
+ linux/mali_memory_dma_buf.c | 4 ++++
+ linux/mali_memory_os_alloc.c | 5 ++++-
+ linux/mali_memory_secure.c | 4 ++++
+ 3 files changed, 12 insertions(+), 1 deletion(-)
+
+diff --git a/linux/mali_memory_dma_buf.c b/linux/mali_memory_dma_buf.c
+index fcdcaac..72e28a8 100644
+--- a/linux/mali_memory_dma_buf.c
++++ b/linux/mali_memory_dma_buf.c
+@@ -34,6 +34,10 @@
+ #include "mali_memory_virtual.h"
+ #include "mali_pp_job.h"
+
++#if LINUX_VERSION_CODE > KERNEL_VERSION(5, 15, 0)
++MODULE_IMPORT_NS(DMA_BUF);
++#endif
++
+ /*
+ * Map DMA buf attachment \a mem into \a session at virtual address \a virt.
+ */
+diff --git a/linux/mali_memory_os_alloc.c b/linux/mali_memory_os_alloc.c
+index 7de3920..5bf08f8 100644
+--- a/linux/mali_memory_os_alloc.c
++++ b/linux/mali_memory_os_alloc.c
+@@ -801,8 +801,11 @@ _mali_osk_errcode_t mali_mem_os_init(void)
+ dma_set_attr(DMA_ATTR_WRITE_COMBINE, &dma_attrs_wc);
+ #endif
+
++#if LINUX_VERSION_CODE > KERNEL_VERSION(5, 15, 0)
++ register_shrinker(&mali_mem_os_allocator.shrinker, "mali");
++#else
+ register_shrinker(&mali_mem_os_allocator.shrinker);
+-
++#endif
+ return _MALI_OSK_ERR_OK;
+ }
+
+diff --git a/linux/mali_memory_secure.c b/linux/mali_memory_secure.c
+index cebd1c8..a9d932f 100644
+--- a/linux/mali_memory_secure.c
++++ b/linux/mali_memory_secure.c
+@@ -20,6 +20,10 @@
+ #endif
+ #include <linux/dma-buf.h>
+
++#if LINUX_VERSION_CODE > KERNEL_VERSION(5, 15, 0)
++MODULE_IMPORT_NS(DMA_BUF);
++#endif
++
+ _mali_osk_errcode_t mali_mem_secure_attach_dma_buf(mali_mem_secure *secure_mem, u32 size, int mem_fd)
+ {
+ struct dma_buf *buf;
+--
+2.17.1
+
diff --git a/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0026-Fix-gpu-driver-probe-failure.patch b/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0026-Fix-gpu-driver-probe-failure.patch
new file mode 100644
index 00000000..247c92ff
--- /dev/null
+++ b/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0026-Fix-gpu-driver-probe-failure.patch
@@ -0,0 +1,46 @@
+From d7a56b7bdf1ea34194fe86639cc318d7a33b9abb Mon Sep 17 00:00:00 2001
+From: Parth Gajjar <parth.gajjar@xilinx.com>
+Date: Thu, 12 Jan 2023 06:00:20 -0800
+Subject: [PATCH] Fix gpu driver probe failure
+
+In patch a1a2b7125e1079cfcc13a116aa3af3df2f9e002b
+(Drop static setup of IRQ resource from DT core) platform_get_resource()
+stopped from returning the IRQ, as all drivers were supposed to have
+switched to platform_get_irq().
+Using platform_get_irq_optional() to avoid printing error messages
+for interrupts not found.
+
+Signed-off-by: Parth Gajjar <parth.gajjar@xilinx.com>
+---
+ linux/mali_osk_mali.c | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/linux/mali_osk_mali.c b/linux/mali_osk_mali.c
+index c22758d..3f66132 100644
+--- a/linux/mali_osk_mali.c
++++ b/linux/mali_osk_mali.c
+@@ -113,7 +113,7 @@ static int _mali_osk_get_compatible_name(const char **out_string)
+ _mali_osk_errcode_t _mali_osk_resource_initialize(void)
+ {
+ mali_bool mali_is_450 = MALI_FALSE, mali_is_470 = MALI_FALSE;
+- int i, pp_core_num = 0, l2_core_num = 0;
++ int i, pp_core_num = 0, l2_core_num = 0, irq = 0;
+ struct resource *res;
+ const char *compatible_name = NULL;
+
+@@ -128,9 +128,9 @@ _mali_osk_errcode_t _mali_osk_resource_initialize(void)
+ }
+
+ for (i = 0; i < MALI_OSK_RESOURCE_WITH_IRQ_NUMBER; i++) {
+- res = platform_get_resource_byname(mali_platform_device, IORESOURCE_IRQ, mali_osk_resource_bank[i].irq_name);
+- if (res) {
+- mali_osk_resource_bank[i].irq = res->start;
++ irq = platform_get_irq_byname_optional(mali_platform_device, mali_osk_resource_bank[i].irq_name);
++ if (irq > 0) {
++ mali_osk_resource_bank[i].irq = irq;
+ } else {
+ mali_osk_resource_bank[i].base = MALI_OSK_INVALID_RESOURCE_ADDRESS;
+ }
+--
+2.17.1
+
diff --git a/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0027-Updated-clock-name-and-structure-to-match-LIMA-drive.patch b/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0027-Updated-clock-name-and-structure-to-match-LIMA-drive.patch
new file mode 100644
index 00000000..18081dc3
--- /dev/null
+++ b/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali/0027-Updated-clock-name-and-structure-to-match-LIMA-drive.patch
@@ -0,0 +1,95 @@
+From a64707b7fea40d326c5b18636a41a5994f60048d Mon Sep 17 00:00:00 2001
+From: Parth Gajjar <parth.gajjar@amd.com>
+Date: Fri, 24 Feb 2023 05:11:38 -0800
+Subject: [PATCH] Updated clock name and structure to match LIMA driver
+
+Clock-names:
+ gpu -> bus
+ gpu_pp0,gpu_pp1 -> core
+
+This will allow us to have a single device tree that works with both the
+mali driver, as well as the lima driver.
+
+Signed-off-by: Parth Gajjar <parth.gajjar@amd.com>
+---
+ linux/mali_kernel_linux.c | 37 +++++++------------
+ 1 file changed, 13 insertions(+), 24 deletions(-)
+
+diff --git a/linux/mali_kernel_linux.c b/linux/mali_kernel_linux.c
+index ad450b4..050af67 100644
+--- a/linux/mali_kernel_linux.c
++++ b/linux/mali_kernel_linux.c
+@@ -48,9 +48,8 @@
+
+ #if defined(CONFIG_ARCH_ZYNQMP)
+ /* Initialize variables for clocks */
+-struct clk *clk_gpu;
+-struct clk *clk_gpu_pp0;
+-struct clk *clk_gpu_pp1;
++struct clk *clk_bus;
++struct clk *clk_core;
+ mali_bool clk_enabled;
+ #endif
+
+@@ -291,19 +290,14 @@ static int mali_enable_clk(void)
+ return 0;
+
+ clk_enabled = MALI_TRUE;
+- err = clk_prepare_enable(clk_gpu);
++ err = clk_prepare_enable(clk_bus);
+ if (err) {
+ MALI_PRINT_ERROR(("Could not enable clock for GP\n\r"));
+ return err;
+ }
+- err = clk_prepare_enable(clk_gpu_pp0);
++ err = clk_prepare_enable(clk_core);
+ if (err) {
+- MALI_PRINT_ERROR(("Could not enable clock for PP0\n\r"));
+- return err;
+- }
+- err = clk_prepare_enable(clk_gpu_pp1);
+- if (err) {
+- MALI_PRINT_ERROR(("Could not enable clock for PP1\n\r"));
++ MALI_PRINT_ERROR(("Could not enable clock for PP\n\r"));
+ return err;
+ }
+ #endif
+@@ -315,9 +309,8 @@ static void mali_disable_clk(void)
+ #if defined(CONFIG_ARCH_ZYNQMP)
+ if (clk_enabled) {
+ clk_enabled = MALI_FALSE;
+- clk_disable_unprepare(clk_gpu);
+- clk_disable_unprepare(clk_gpu_pp0);
+- clk_disable_unprepare(clk_gpu_pp1);
++ clk_disable_unprepare(clk_bus);
++ clk_disable_unprepare(clk_core);
+ }
+ #endif
+ }
+@@ -631,17 +624,13 @@ static int mali_probe(struct platform_device *pdev)
+
+ #if defined(CONFIG_ARCH_ZYNQMP)
+ /* Initialize clocks for GPU and PP */
+- clk_gpu = devm_clk_get(&pdev->dev, "gpu");
+- if (IS_ERR(clk_gpu))
+- return PTR_ERR(clk_gpu);
+-
+- clk_gpu_pp0 = devm_clk_get(&pdev->dev, "core");
+- if (IS_ERR(clk_gpu_pp0))
+- return PTR_ERR(clk_gpu_pp0);
++ clk_bus = devm_clk_get(&pdev->dev, "bus");
++ if (IS_ERR(clk_bus))
++ return PTR_ERR(clk_bus);
+
+- clk_gpu_pp1 = devm_clk_get(&pdev->dev, "bus");
+- if (IS_ERR(clk_gpu_pp1))
+- return PTR_ERR(clk_gpu_pp1);
++ clk_core = devm_clk_get(&pdev->dev, "core");
++ if (IS_ERR(clk_core))
++ return PTR_ERR(clk_core);
+ #endif
+
+ err = mali_enable_clk();
+--
+2.25.1
+
diff --git a/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali_2022.1.bb b/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali_2022.1.bb
new file mode 100644
index 00000000..56431a7f
--- /dev/null
+++ b/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali_2022.1.bb
@@ -0,0 +1,58 @@
+SUMMARY = "A Mali 400 Linux Kernel module"
+SECTION = "kernel/modules"
+
+LICENSE = "GPL-2.0-only"
+LIC_FILES_CHKSUM = " \
+ file://linux/license/gpl/mali_kernel_license.h;md5=f5af2d61f4c1eb262cb6a557aaa1070a \
+ "
+
+MALI_VERSION = "r9p0-01rel0"
+PV =. "${MALI_VERSION}-v"
+
+SRC_URI = " \
+ https://developer.arm.com/-/media/Files/downloads/mali-drivers/kernel/mali-utgard-gpu/DX910-SW-99002-${MALI_VERSION}.tgz \
+ file://0001-Change-Makefile-to-be-compatible-with-Yocto.patch \
+ file://0002-staging-mali-r8p0-01rel0-Add-the-ZYNQ-ZYNQMP-platfor.patch \
+ file://0003-staging-mali-r8p0-01rel0-Remove-unused-trace-macros.patch \
+ file://0004-staging-mali-r8p0-01rel0-Don-t-include-mali_read_phy.patch \
+ file://0005-linux-mali_kernel_linux.c-Handle-clock-when-probed-a.patch \
+ file://0006-arm.c-global-variable-dma_ops-is-removed-from-the-ke.patch \
+ file://0010-common-mali_pm.c-Add-PM-runtime-barrier-after-removi.patch \
+ file://0011-linux-mali_kernel_linux.c-Enable-disable-clock-for-r.patch\
+ file://0012-linux-mali_memory_os_alloc-Remove-__GFP_COLD.patch\
+ file://0013-linux-mali_memory_secure-Add-header-file-dma-direct..patch\
+ file://0014-linux-mali_-timer-Get-rid-of-init_timer.patch\
+ file://0015-fix-driver-failed-to-check-map-error.patch \
+ file://0016-mali_memory_secure-Kernel-5.0-onwards-access_ok-API-.patch \
+ file://0017-Support-for-vm_insert_pfn-deprecated-from-kernel-4.2.patch \
+ file://0018-Change-return-type-to-vm_fault_t-for-fault-handler.patch \
+ file://0019-get_monotonic_boottime-ts-deprecated-from-kernel-4.2.patch \
+ file://0020-Fix-ioremap_nocache-deprecation-in-kernel-5.6.patch \
+ file://0021-Use-updated-timekeeping-functions-in-kernel-5.6.patch \
+ file://0022-Set-HAVE_UNLOCKED_IOCTL-default-to-true.patch \
+ file://0023-Use-PTR_ERR_OR_ZERO-instead-of-PTR_RET.patch \
+ file://0024-Use-community-device-tree-names.patch \
+ file://0025-Import-DMA_BUF-module-and-update-register_shrinker-f.patch \
+ file://0026-Fix-gpu-driver-probe-failure.patch \
+ file://0027-Updated-clock-name-and-structure-to-match-LIMA-drive.patch \
+ "
+SRC_URI[md5sum] = "85ea110dd6675c70b7d01af87ec9633c"
+SRC_URI[sha256sum] = "7a67127341d17640c1fff5dad80258fb2a37c8a2121b81525fe2327e4532ce2b"
+
+inherit features_check module
+
+PARALLEL_MAKE = "-j 1"
+
+S = "${WORKDIR}/DX910-SW-99002-${MALI_VERSION}/driver/src/devicedrv/mali"
+
+REQUIRED_MACHINE_FEATURES = "mali400"
+
+EXTRA_OEMAKE = 'KDIR="${STAGING_KERNEL_DIR}" \
+ ARCH="${ARCH}" \
+ BUILD=release \
+ MALI_PLATFORM="arm" \
+ USING_DT=1 \
+ MALI_SHARED_INTERRUPTS=1 \
+ CROSS_COMPILE="${TARGET_PREFIX}" \
+ MALI_QUIET=1 \
+ '
diff --git a/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali_2022.2.bb b/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali_2022.2.bb
new file mode 100644
index 00000000..e8e46543
--- /dev/null
+++ b/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali_2022.2.bb
@@ -0,0 +1,54 @@
+SUMMARY = "A Mali 400 Linux Kernel module"
+SECTION = "kernel/modules"
+
+LICENSE = "GPL-2.0-only"
+LIC_FILES_CHKSUM = " \
+ file://linux/license/gpl/mali_kernel_license.h;md5=f5af2d61f4c1eb262cb6a557aaa1070a \
+ "
+
+MALI_VERSION = "r9p0-01rel0"
+PV =. "${MALI_VERSION}-v"
+
+SRC_URI = " \
+ https://developer.arm.com/-/media/Files/downloads/mali-drivers/kernel/mali-utgard-gpu/DX910-SW-99002-${MALI_VERSION}.tgz \
+ file://0001-Change-Makefile-to-be-compatible-with-Yocto.patch \
+ file://0002-staging-mali-r8p0-01rel0-Add-the-ZYNQ-ZYNQMP-platfor.patch \
+ file://0003-staging-mali-r8p0-01rel0-Remove-unused-trace-macros.patch \
+ file://0004-staging-mali-r8p0-01rel0-Don-t-include-mali_read_phy.patch \
+ file://0005-linux-mali_kernel_linux.c-Handle-clock-when-probed-a.patch \
+ file://0006-arm.c-global-variable-dma_ops-is-removed-from-the-ke.patch \
+ file://0010-common-mali_pm.c-Add-PM-runtime-barrier-after-removi.patch \
+ file://0011-linux-mali_kernel_linux.c-Enable-disable-clock-for-r.patch\
+ file://0012-linux-mali_memory_os_alloc-Remove-__GFP_COLD.patch\
+ file://0013-linux-mali_memory_secure-Add-header-file-dma-direct..patch\
+ file://0014-linux-mali_-timer-Get-rid-of-init_timer.patch\
+ file://0015-fix-driver-failed-to-check-map-error.patch \
+ file://0016-mali_memory_secure-Kernel-5.0-onwards-access_ok-API-.patch \
+ file://0017-Support-for-vm_insert_pfn-deprecated-from-kernel-4.2.patch \
+ file://0018-Change-return-type-to-vm_fault_t-for-fault-handler.patch \
+ file://0019-get_monotonic_boottime-ts-deprecated-from-kernel-4.2.patch \
+ file://0020-Fix-ioremap_nocache-deprecation-in-kernel-5.6.patch \
+ file://0021-Use-updated-timekeeping-functions-in-kernel-5.6.patch \
+ file://0022-Set-HAVE_UNLOCKED_IOCTL-default-to-true.patch \
+ file://0023-Use-PTR_ERR_OR_ZERO-instead-of-PTR_RET.patch \
+ "
+SRC_URI[md5sum] = "85ea110dd6675c70b7d01af87ec9633c"
+SRC_URI[sha256sum] = "7a67127341d17640c1fff5dad80258fb2a37c8a2121b81525fe2327e4532ce2b"
+
+inherit features_check module
+
+PARALLEL_MAKE = "-j 1"
+
+S = "${WORKDIR}/DX910-SW-99002-${MALI_VERSION}/driver/src/devicedrv/mali"
+
+REQUIRED_MACHINE_FEATURES = "mali400"
+
+EXTRA_OEMAKE = 'KDIR="${STAGING_KERNEL_DIR}" \
+ ARCH="${ARCH}" \
+ BUILD=release \
+ MALI_PLATFORM="arm" \
+ USING_DT=1 \
+ MALI_SHARED_INTERRUPTS=1 \
+ CROSS_COMPILE="${TARGET_PREFIX}" \
+ MALI_QUIET=1 \
+ '
diff --git a/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali_2023.1.bb b/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali_2023.1.bb
new file mode 100644
index 00000000..56431a7f
--- /dev/null
+++ b/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali_2023.1.bb
@@ -0,0 +1,58 @@
+SUMMARY = "A Mali 400 Linux Kernel module"
+SECTION = "kernel/modules"
+
+LICENSE = "GPL-2.0-only"
+LIC_FILES_CHKSUM = " \
+ file://linux/license/gpl/mali_kernel_license.h;md5=f5af2d61f4c1eb262cb6a557aaa1070a \
+ "
+
+MALI_VERSION = "r9p0-01rel0"
+PV =. "${MALI_VERSION}-v"
+
+SRC_URI = " \
+ https://developer.arm.com/-/media/Files/downloads/mali-drivers/kernel/mali-utgard-gpu/DX910-SW-99002-${MALI_VERSION}.tgz \
+ file://0001-Change-Makefile-to-be-compatible-with-Yocto.patch \
+ file://0002-staging-mali-r8p0-01rel0-Add-the-ZYNQ-ZYNQMP-platfor.patch \
+ file://0003-staging-mali-r8p0-01rel0-Remove-unused-trace-macros.patch \
+ file://0004-staging-mali-r8p0-01rel0-Don-t-include-mali_read_phy.patch \
+ file://0005-linux-mali_kernel_linux.c-Handle-clock-when-probed-a.patch \
+ file://0006-arm.c-global-variable-dma_ops-is-removed-from-the-ke.patch \
+ file://0010-common-mali_pm.c-Add-PM-runtime-barrier-after-removi.patch \
+ file://0011-linux-mali_kernel_linux.c-Enable-disable-clock-for-r.patch\
+ file://0012-linux-mali_memory_os_alloc-Remove-__GFP_COLD.patch\
+ file://0013-linux-mali_memory_secure-Add-header-file-dma-direct..patch\
+ file://0014-linux-mali_-timer-Get-rid-of-init_timer.patch\
+ file://0015-fix-driver-failed-to-check-map-error.patch \
+ file://0016-mali_memory_secure-Kernel-5.0-onwards-access_ok-API-.patch \
+ file://0017-Support-for-vm_insert_pfn-deprecated-from-kernel-4.2.patch \
+ file://0018-Change-return-type-to-vm_fault_t-for-fault-handler.patch \
+ file://0019-get_monotonic_boottime-ts-deprecated-from-kernel-4.2.patch \
+ file://0020-Fix-ioremap_nocache-deprecation-in-kernel-5.6.patch \
+ file://0021-Use-updated-timekeeping-functions-in-kernel-5.6.patch \
+ file://0022-Set-HAVE_UNLOCKED_IOCTL-default-to-true.patch \
+ file://0023-Use-PTR_ERR_OR_ZERO-instead-of-PTR_RET.patch \
+ file://0024-Use-community-device-tree-names.patch \
+ file://0025-Import-DMA_BUF-module-and-update-register_shrinker-f.patch \
+ file://0026-Fix-gpu-driver-probe-failure.patch \
+ file://0027-Updated-clock-name-and-structure-to-match-LIMA-drive.patch \
+ "
+SRC_URI[md5sum] = "85ea110dd6675c70b7d01af87ec9633c"
+SRC_URI[sha256sum] = "7a67127341d17640c1fff5dad80258fb2a37c8a2121b81525fe2327e4532ce2b"
+
+inherit features_check module
+
+PARALLEL_MAKE = "-j 1"
+
+S = "${WORKDIR}/DX910-SW-99002-${MALI_VERSION}/driver/src/devicedrv/mali"
+
+REQUIRED_MACHINE_FEATURES = "mali400"
+
+EXTRA_OEMAKE = 'KDIR="${STAGING_KERNEL_DIR}" \
+ ARCH="${ARCH}" \
+ BUILD=release \
+ MALI_PLATFORM="arm" \
+ USING_DT=1 \
+ MALI_SHARED_INTERRUPTS=1 \
+ CROSS_COMPILE="${TARGET_PREFIX}" \
+ MALI_QUIET=1 \
+ '
diff --git a/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali_2023.2.bb b/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali_2023.2.bb
new file mode 100644
index 00000000..56431a7f
--- /dev/null
+++ b/meta-xilinx-core/recipes-graphics/mali/kernel-module-mali_2023.2.bb
@@ -0,0 +1,58 @@
+SUMMARY = "A Mali 400 Linux Kernel module"
+SECTION = "kernel/modules"
+
+LICENSE = "GPL-2.0-only"
+LIC_FILES_CHKSUM = " \
+ file://linux/license/gpl/mali_kernel_license.h;md5=f5af2d61f4c1eb262cb6a557aaa1070a \
+ "
+
+MALI_VERSION = "r9p0-01rel0"
+PV =. "${MALI_VERSION}-v"
+
+SRC_URI = " \
+ https://developer.arm.com/-/media/Files/downloads/mali-drivers/kernel/mali-utgard-gpu/DX910-SW-99002-${MALI_VERSION}.tgz \
+ file://0001-Change-Makefile-to-be-compatible-with-Yocto.patch \
+ file://0002-staging-mali-r8p0-01rel0-Add-the-ZYNQ-ZYNQMP-platfor.patch \
+ file://0003-staging-mali-r8p0-01rel0-Remove-unused-trace-macros.patch \
+ file://0004-staging-mali-r8p0-01rel0-Don-t-include-mali_read_phy.patch \
+ file://0005-linux-mali_kernel_linux.c-Handle-clock-when-probed-a.patch \
+ file://0006-arm.c-global-variable-dma_ops-is-removed-from-the-ke.patch \
+ file://0010-common-mali_pm.c-Add-PM-runtime-barrier-after-removi.patch \
+ file://0011-linux-mali_kernel_linux.c-Enable-disable-clock-for-r.patch\
+ file://0012-linux-mali_memory_os_alloc-Remove-__GFP_COLD.patch\
+ file://0013-linux-mali_memory_secure-Add-header-file-dma-direct..patch\
+ file://0014-linux-mali_-timer-Get-rid-of-init_timer.patch\
+ file://0015-fix-driver-failed-to-check-map-error.patch \
+ file://0016-mali_memory_secure-Kernel-5.0-onwards-access_ok-API-.patch \
+ file://0017-Support-for-vm_insert_pfn-deprecated-from-kernel-4.2.patch \
+ file://0018-Change-return-type-to-vm_fault_t-for-fault-handler.patch \
+ file://0019-get_monotonic_boottime-ts-deprecated-from-kernel-4.2.patch \
+ file://0020-Fix-ioremap_nocache-deprecation-in-kernel-5.6.patch \
+ file://0021-Use-updated-timekeeping-functions-in-kernel-5.6.patch \
+ file://0022-Set-HAVE_UNLOCKED_IOCTL-default-to-true.patch \
+ file://0023-Use-PTR_ERR_OR_ZERO-instead-of-PTR_RET.patch \
+ file://0024-Use-community-device-tree-names.patch \
+ file://0025-Import-DMA_BUF-module-and-update-register_shrinker-f.patch \
+ file://0026-Fix-gpu-driver-probe-failure.patch \
+ file://0027-Updated-clock-name-and-structure-to-match-LIMA-drive.patch \
+ "
+SRC_URI[md5sum] = "85ea110dd6675c70b7d01af87ec9633c"
+SRC_URI[sha256sum] = "7a67127341d17640c1fff5dad80258fb2a37c8a2121b81525fe2327e4532ce2b"
+
+inherit features_check module
+
+PARALLEL_MAKE = "-j 1"
+
+S = "${WORKDIR}/DX910-SW-99002-${MALI_VERSION}/driver/src/devicedrv/mali"
+
+REQUIRED_MACHINE_FEATURES = "mali400"
+
+EXTRA_OEMAKE = 'KDIR="${STAGING_KERNEL_DIR}" \
+ ARCH="${ARCH}" \
+ BUILD=release \
+ MALI_PLATFORM="arm" \
+ USING_DT=1 \
+ MALI_SHARED_INTERRUPTS=1 \
+ CROSS_COMPILE="${TARGET_PREFIX}" \
+ MALI_QUIET=1 \
+ '
diff --git a/meta-xilinx-core/recipes-graphics/mesa/files/0001-DRI_Add_xlnx_dri.patch b/meta-xilinx-core/recipes-graphics/mesa/files/0001-DRI_Add_xlnx_dri.patch
new file mode 100644
index 00000000..f77f1939
--- /dev/null
+++ b/meta-xilinx-core/recipes-graphics/mesa/files/0001-DRI_Add_xlnx_dri.patch
@@ -0,0 +1,32 @@
+DRI: Add xlnx dri
+
+Add the Xilinx dri target
+
+Upstream-Status: Pending
+
+Signed-off-by: Mark Hatle <mark.hatle@amd.com>
+
+Index: mesa-24.0.1/src/gallium/targets/dri/meson.build
+===================================================================
+--- mesa-24.0.1.orig/src/gallium/targets/dri/meson.build
++++ mesa-24.0.1/src/gallium/targets/dri/meson.build
+@@ -101,6 +101,7 @@ foreach d : [[with_gallium_kmsro, [
+ 'stm_dri.so',
+ 'sun4i-drm_dri.so',
+ 'udl_dri.so',
++ 'xlnx_dri.so',
+ ]],
+ [with_gallium_radeonsi, 'radeonsi_dri.so'],
+ [with_gallium_nouveau, 'nouveau_dri.so'],
+Index: mesa-24.0.1/src/gallium/targets/dri/target.c
+===================================================================
+--- mesa-24.0.1.orig/src/gallium/targets/dri/target.c
++++ mesa-24.0.1/src/gallium/targets/dri/target.c
+@@ -129,6 +129,7 @@ DEFINE_LOADER_DRM_ENTRYPOINT(sti)
+ DEFINE_LOADER_DRM_ENTRYPOINT(stm)
+ DEFINE_LOADER_DRM_ENTRYPOINT(sun4i_drm)
+ DEFINE_LOADER_DRM_ENTRYPOINT(udl)
++DEFINE_LOADER_DRM_ENTRYPOINT(xlnx)
+ #endif
+
+ #if defined(GALLIUM_LIMA)
diff --git a/meta-xilinx-core/recipes-graphics/mesa/mesa-demos/0001-src-egl-eglinfo-Align-EXT_platform_device-extension-.patch b/meta-xilinx-core/recipes-graphics/mesa/mesa-demos/0001-src-egl-eglinfo-Align-EXT_platform_device-extension-.patch
new file mode 100644
index 00000000..fdb30564
--- /dev/null
+++ b/meta-xilinx-core/recipes-graphics/mesa/mesa-demos/0001-src-egl-eglinfo-Align-EXT_platform_device-extension-.patch
@@ -0,0 +1,44 @@
+From 9470d00850e8b622d963d4d9c61ad1e59972310a Mon Sep 17 00:00:00 2001
+From: Madhurkiran Harikrishnan <madhurkiran.harikrishnan@xilinx.com>
+Date: Tue, 28 Jan 2020 16:10:54 -0800
+Subject: [PATCH 1/2] src: egl: eglinfo: Align EXT_platform_device extension
+ macros with khronos
+
+Although the macro definitions are consistent, using the macros name
+defined under khronos makes it backward compatible with older eglext.h
+
+Signed-off-by: Madhurkiran Harikrishnan <madhurkiran.harikrishnan@xilinx.com>
+Upstream-Status: Inappropriate [Xilinx specific]
+Signed-off-by: Mark Hatle <mark.hatle@amd.com>
+---
+ src/egl/opengl/eglinfo.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/src/egl/opengl/eglinfo.c b/src/egl/opengl/eglinfo.c
+index 72fe45a..e8a0225 100644
+--- a/src/egl/opengl/eglinfo.c
++++ b/src/egl/opengl/eglinfo.c
+@@ -305,17 +305,17 @@ main(int argc, char *argv[])
+ NULL), "Android platform");
+ if (strstr(clientext, "EGL_MESA_platform_gbm") ||
+ strstr(clientext, "EGL_KHR_platform_gbm"))
+- ret += doOneDisplay(getPlatformDisplay(EGL_PLATFORM_GBM_MESA,
++ ret += doOneDisplay(getPlatformDisplay(EGL_PLATFORM_GBM_KHR,
+ EGL_DEFAULT_DISPLAY,
+ NULL), "GBM platform");
+ if (strstr(clientext, "EGL_EXT_platform_wayland") ||
+ strstr(clientext, "EGL_KHR_platform_wayland"))
+- ret += doOneDisplay(getPlatformDisplay(EGL_PLATFORM_WAYLAND_EXT,
++ ret += doOneDisplay(getPlatformDisplay(EGL_PLATFORM_WAYLAND_KHR,
+ EGL_DEFAULT_DISPLAY,
+ NULL), "Wayland platform");
+ if (strstr(clientext, "EGL_EXT_platform_x11") ||
+ strstr(clientext, "EGL_KHR_platform_x11"))
+- ret += doOneDisplay(getPlatformDisplay(EGL_PLATFORM_X11_EXT,
++ ret += doOneDisplay(getPlatformDisplay(EGL_PLATFORM_X11_KHR,
+ EGL_DEFAULT_DISPLAY,
+ NULL), "X11 platform");
+ if (strstr(clientext, "EGL_MESA_platform_surfaceless"))
+--
+2.17.1
+
diff --git a/meta-xilinx-core/recipes-graphics/mesa/mesa-demos/0002-src-egl-eglinfo-Use-EGL_PLATFORM_DEVICE_EXT-only-if-.patch b/meta-xilinx-core/recipes-graphics/mesa/mesa-demos/0002-src-egl-eglinfo-Use-EGL_PLATFORM_DEVICE_EXT-only-if-.patch
new file mode 100644
index 00000000..7212ef27
--- /dev/null
+++ b/meta-xilinx-core/recipes-graphics/mesa/mesa-demos/0002-src-egl-eglinfo-Use-EGL_PLATFORM_DEVICE_EXT-only-if-.patch
@@ -0,0 +1,41 @@
+From 040b0b79a8e73a3348ab2e95f817636a7d479f18 Mon Sep 17 00:00:00 2001
+From: Madhurkiran Harikrishnan <madhurkiran.harikrishnan@xilinx.com>
+Date: Tue, 28 Jan 2020 16:17:46 -0800
+Subject: [PATCH 2/2] src: egl: eglinfo: Use EGL_PLATFORM_DEVICE_EXT only if
+ the EGL provider supports it
+
+Compiling against the other EGL provider like mali fails, as they dont
+support this macro as one of thier supported platforms
+
+Signed-off-by: Madhurkiran Harikrishnan <madhurkiran.harikrishnan@xilinx.com>
+Upstream-Status: Inappropriate [Xilinx specific]
+Signed-off-by: Mark Hatle <mark.hatle@amd.com>
+---
+ src/egl/opengl/eglinfo.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/src/egl/opengl/eglinfo.c b/src/egl/opengl/eglinfo.c
+index e8a0225..bc0e869 100644
+--- a/src/egl/opengl/eglinfo.c
++++ b/src/egl/opengl/eglinfo.c
+@@ -243,6 +243,7 @@ doOneDisplay(EGLDisplay d, const char *name)
+ static int
+ doOneDevice(EGLDeviceEXT d, int i)
+ {
++#ifdef EGL_PLATFORM_DEVICE_EXT
+ PFNEGLGETPLATFORMDISPLAYEXTPROC getPlatformDisplay =
+ (PFNEGLGETPLATFORMDISPLAYEXTPROC)
+ eglGetProcAddress("eglGetPlatformDisplayEXT");
+@@ -253,6 +254,9 @@ doOneDevice(EGLDeviceEXT d, int i)
+
+ return doOneDisplay(getPlatformDisplay(EGL_PLATFORM_DEVICE_EXT, d, NULL),
+ "Platform Device");
++#else
++ return 0;
++#endif
+ }
+
+
+--
+2.17.1
+
diff --git a/meta-xilinx-core/recipes-graphics/mesa/mesa-demos/libmali-egl-workaround.patch b/meta-xilinx-core/recipes-graphics/mesa/mesa-demos/libmali-egl-workaround.patch
new file mode 100644
index 00000000..6cfecb38
--- /dev/null
+++ b/meta-xilinx-core/recipes-graphics/mesa/mesa-demos/libmali-egl-workaround.patch
@@ -0,0 +1,69 @@
+Upstream-Status: Inappropriate [libmali specific]
+
+Index: mesa-demos-8.5.0/src/egl/opengl/eglinfo.c
+===================================================================
+--- mesa-demos-8.5.0.orig/src/egl/opengl/eglinfo.c
++++ mesa-demos-8.5.0/src/egl/opengl/eglinfo.c
+@@ -195,6 +195,7 @@ PrintDisplayExtensions(EGLDisplay d)
+ }
+
+
++#ifdef EGL_EXT_device_base
+ static const char *
+ PrintDeviceExtensions(EGLDeviceEXT d)
+ {
+@@ -211,7 +212,7 @@ PrintDeviceExtensions(EGLDeviceEXT d)
+
+ return PrintExtensions(extensions);
+ }
+-
++#endif
+
+ static int
+ doOneDisplay(EGLDisplay d, const char *name)
+@@ -240,6 +241,7 @@ doOneDisplay(EGLDisplay d, const char *n
+ }
+
+
++#ifdef EGL_EXT_device_base
+ static int
+ doOneDevice(EGLDeviceEXT d, int i)
+ {
+@@ -258,8 +260,9 @@ doOneDevice(EGLDeviceEXT d, int i)
+ return 0;
+ #endif
+ }
++#endif
+
+-
++#ifdef EGL_EXT_device_base
+ static int
+ doDevices(const char *name)
+ {
+@@ -288,7 +291,7 @@ doDevices(const char *name)
+
+ return ret;
+ }
+-
++#endif
+
+ int
+ main(int argc, char *argv[])
+@@ -322,13 +325,17 @@ main(int argc, char *argv[])
+ ret += doOneDisplay(getPlatformDisplay(EGL_PLATFORM_X11_KHR,
+ EGL_DEFAULT_DISPLAY,
+ NULL), "X11 platform");
++#ifdef EGL_PLATFORM_SURFACELESS_MESA
+ if (strstr(clientext, "EGL_MESA_platform_surfaceless"))
+ ret += doOneDisplay(getPlatformDisplay(EGL_PLATFORM_SURFACELESS_MESA,
+ EGL_DEFAULT_DISPLAY,
+ NULL), "Surfaceless platform");
++#endif
++#ifdef EGL_EXT_device_base
+ if (strstr(clientext, "EGL_EXT_device_enumeration") &&
+ strstr(clientext, "EGL_EXT_platform_device"))
+ ret += doDevices("Device platform");
++#endif
+ }
+ else {
+ ret = doOneDisplay(eglGetDisplay(EGL_DEFAULT_DISPLAY), "Default display");
diff --git a/meta-xilinx-core/recipes-graphics/mesa/mesa-demos_%.bbappend b/meta-xilinx-core/recipes-graphics/mesa/mesa-demos_%.bbappend
new file mode 100644
index 00000000..5c84f56e
--- /dev/null
+++ b/meta-xilinx-core/recipes-graphics/mesa/mesa-demos_%.bbappend
@@ -0,0 +1,16 @@
+FILESEXTRAPATHS:prepend := "${THISDIR}/mesa-demos:"
+
+SRC_URI += " \
+ file://0001-src-egl-eglinfo-Align-EXT_platform_device-extension-.patch \
+ file://0002-src-egl-eglinfo-Use-EGL_PLATFORM_DEVICE_EXT-only-if-.patch \
+ file://libmali-egl-workaround.patch \
+"
+
+DEPENDS += "wayland-protocols"
+
+# Links to libmali-xlnx, so it becomes MACHINE_ARCH specific
+DEFAULT_PACKAGE_ARCH := "${PACKAGE_ARCH}"
+MALI_PACKAGE_ARCH[vardepsexclude] = "MACHINE_ARCH"
+MALI_PACKAGE_ARCH = "${@'${MACHINE_ARCH}' if d.getVar('PREFERRED_PROVIDER_virtual/libgles1') == 'libmali-xlnx' else '${DEFAULT_PACKAGE_ARCH}'}"
+PACKAGE_ARCH[vardepsexclude] = "MALI_PACKAGE_ARCH"
+PACKAGE_ARCH = "${@bb.utils.contains_any('DEPENDS', 'virtual/libgles1 virtual/libgles2 virtual/egl virtual/libgbm', '${MALI_PACKAGE_ARCH}', '${DEFAULT_PACKAGE_ARCH}', d)}"
diff --git a/meta-xilinx-core/recipes-graphics/mesa/mesa-gl_%.bbappend b/meta-xilinx-core/recipes-graphics/mesa/mesa-gl_%.bbappend
new file mode 100644
index 00000000..a8e18a57
--- /dev/null
+++ b/meta-xilinx-core/recipes-graphics/mesa/mesa-gl_%.bbappend
@@ -0,0 +1,18 @@
+PACKAGECONFIG:append = " dri3 gallium"
+
+# If we're using libmali-xlnx, then we need to bring it in for the KHR/khrplatform.h file
+DEPENDS .= "${@' libmali-xlnx' if d.getVar('PREFERRED_PROVIDER_virtual/libgles1') == 'libmali-xlnx' else ''}"
+RDEPENDS:libgl-mesa-dev .= "${@' libmali-xlnx-dev' if d.getVar('PREFERRED_PROVIDER_virtual/libgles1') == 'libmali-xlnx' else ''}"
+
+do_install:append () {
+ if ${@'true' if d.getVar('PREFERRED_PROVIDER_virtual/libgles1') == 'libmali-xlnx' else 'false'} ; then
+ rm -rf ${D}${includedir}/KHR/*
+ fi
+}
+
+# If we require libmali-xlnx, this becomes MACHINE_ARCH specific
+DEFAULT_PACKAGE_ARCH := "${PACKAGE_ARCH}"
+MALI_PACKAGE_ARCH[vardepsexclude] = "MACHINE_ARCH"
+MALI_PACKAGE_ARCH = "${MACHINE_ARCH}"
+PACKAGE_ARCH[vardepsexclude] = "MALI_PACKAGE_ARCH"
+PACKAGE_ARCH = "${@'${MALI_PACKAGE_ARCH}' if d.getVar('PREFERRED_PROVIDER_virtual/libgles1') == 'libmali-xlnx' else '${DEFAULT_PACKAGE_ARCH}'}"
diff --git a/meta-xilinx-core/recipes-graphics/mesa/mesa_%.bbappend b/meta-xilinx-core/recipes-graphics/mesa/mesa_%.bbappend
new file mode 100644
index 00000000..86183f54
--- /dev/null
+++ b/meta-xilinx-core/recipes-graphics/mesa/mesa_%.bbappend
@@ -0,0 +1,15 @@
+FILESEXTRAPATHS:prepend := "${THISDIR}/files:"
+SRC_URI:append:class-target = " file://0001-DRI_Add_xlnx_dri.patch"
+
+# This is not compatible with the mali400 driver, use mesa-gl instead
+CONFLICT_DISTRO_FEATURES:class-target = "${@bb.utils.contains('MACHINE_FEATURES', 'mali400', bb.utils.contains('DISTRO_FEATURES', 'libmali', 'libmali', '', d), '', d)}"
+
+# Enable lima if not using libmali
+PACKAGECONFIG_MALI = "${@bb.utils.contains('DISTRO_FEATURES', 'libmali', '', 'lima', d)}"
+PACKAGECONFIG:append:class-target = "${@bb.utils.contains('MACHINE_FEATURES', 'mali400', '${PACKAGECONFIG_MALI}', '', d)}"
+
+PACKAGE_ARCH_DEFAULT := "${PACKAGE_ARCH}"
+MALI_PACKAGE_ARCH[vardepsexclude] = "MACHINE_ARCH"
+MALI_PACKAGE_ARCH = "${MACHINE_ARCH}"
+PACKAGE_ARCH[vardepsexclude] = "MALI_PACKAGE_ARCH"
+PACKAGE_ARCH = "${@bb.utils.contains('MACHINE_FEATURES', 'mali400', '${MALI_PACKAGE_ARCH}', '${PACKAGE_ARCH_DEFAULT}', d)}"
diff --git a/meta-xilinx-core/recipes-graphics/virglrenderer/virglrenderer_%.bbappend b/meta-xilinx-core/recipes-graphics/virglrenderer/virglrenderer_%.bbappend
new file mode 100644
index 00000000..03823f6e
--- /dev/null
+++ b/meta-xilinx-core/recipes-graphics/virglrenderer/virglrenderer_%.bbappend
@@ -0,0 +1,6 @@
+# Links to libmali-xlnx, so it becomes MACHINE_ARCH specific
+DEFAULT_PACKAGE_ARCH := "${PACKAGE_ARCH}"
+MALI_PACKAGE_ARCH[vardepsexclude] = "MACHINE_ARCH"
+MALI_PACKAGE_ARCH = "${@'${MACHINE_ARCH}' if d.getVar('PREFERRED_PROVIDER_virtual/libgles1') == 'libmali-xlnx' else '${DEFAULT_PACKAGE_ARCH}'}"
+PACKAGE_ARCH[vardepsexclude] = "MALI_PACKAGE_ARCH"
+PACKAGE_ARCH = "${@bb.utils.contains_any('DEPENDS', 'virtual/libgles1 virtual/libgles2 virtual/egl virtual/libgbm', '${MALI_PACKAGE_ARCH}', '${DEFAULT_PACKAGE_ARCH}', d)}"
diff --git a/meta-xilinx-core/recipes-graphics/wayland/files/0001-libweston-Remove-substitute-format-for-ARGB8888.patch b/meta-xilinx-core/recipes-graphics/wayland/files/0001-libweston-Remove-substitute-format-for-ARGB8888.patch
new file mode 100644
index 00000000..de1f3719
--- /dev/null
+++ b/meta-xilinx-core/recipes-graphics/wayland/files/0001-libweston-Remove-substitute-format-for-ARGB8888.patch
@@ -0,0 +1,30 @@
+From 3fbb596e53524e78703b76c4fdc33cd6ac62f777 Mon Sep 17 00:00:00 2001
+From: Madhurkiran Harikrishnan <madhurkiran.harikrishnan@xilinx.com>
+Date: Fri, 11 Dec 2020 16:21:38 -0800
+Subject: [PATCH] libweston: Remove substitute format for ARGB8888
+
+Xilinx DP gfx layer does not support XRGB8888. Hence, remove the same
+as opaque substitute.
+
+Signed-off-by: Madhurkiran Harikrishnan <madhurkiran.harikrishnan@xilinx.com>
+Upstream-Status: Inappropriate [Xilinx specific]
+
+Reworked the patch for the newer weston
+
+Signed-off-by: Mark Hatle <mark.hatle@amd.com>
+---
+ libweston/pixel-formats.c | 1 -
+ 1 file changed, 1 deletion(-)
+
+Index: weston-13.0.0/libweston/pixel-formats.c
+===================================================================
+--- weston-13.0.0.orig/libweston/pixel-formats.c
++++ weston-13.0.0/libweston/pixel-formats.c
+@@ -251,7 +251,6 @@ static const struct pixel_format_info pi
+ {
+ DRM_FORMAT(ARGB8888),
+ BITS_RGBA_FIXED(8, 8, 8, 8),
+- .opaque_substitute = DRM_FORMAT_XRGB8888,
+ .addfb_legacy_depth = 32,
+ .bpp = 32,
+ GL_INTERNALFORMAT(GL_RGBA8),
diff --git a/meta-xilinx-core/recipes-graphics/wayland/files/9.0.0/0001-libweston-Remove-substitute-format-for-ARGB8888.patch b/meta-xilinx-core/recipes-graphics/wayland/files/9.0.0/0001-libweston-Remove-substitute-format-for-ARGB8888.patch
new file mode 100644
index 00000000..6b5f53b0
--- /dev/null
+++ b/meta-xilinx-core/recipes-graphics/wayland/files/9.0.0/0001-libweston-Remove-substitute-format-for-ARGB8888.patch
@@ -0,0 +1,29 @@
+From 3fbb596e53524e78703b76c4fdc33cd6ac62f777 Mon Sep 17 00:00:00 2001
+From: Madhurkiran Harikrishnan <madhurkiran.harikrishnan@xilinx.com>
+Date: Fri, 11 Dec 2020 16:21:38 -0800
+Subject: [PATCH] libweston: Remove substitute format for ARGB8888
+
+Xilinx DP gfx layer does not support XRGB8888. Hence, remove the same
+as opaque substitute.
+
+Signed-off-by: Madhurkiran Harikrishnan <madhurkiran.harikrishnan@xilinx.com>
+Upstream-Status: Inappropriate [Xilinx specific]
+---
+ libweston/pixel-formats.c | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/libweston/pixel-formats.c b/libweston/pixel-formats.c
+index 79dc709..ec2d3b7 100644
+--- a/libweston/pixel-formats.c
++++ b/libweston/pixel-formats.c
+@@ -193,7 +193,6 @@ static const struct pixel_format_info pixel_format_table[] = {
+ {
+ DRM_FORMAT(ARGB8888),
+ BITS_RGBA_FIXED(8, 8, 8, 8),
+- .opaque_substitute = DRM_FORMAT_XRGB8888,
+ .depth = 32,
+ .bpp = 32,
+ GL_FORMAT(GL_BGRA_EXT),
+--
+2.17.1
+
diff --git a/meta-xilinx-core/recipes-graphics/wayland/files/init b/meta-xilinx-core/recipes-graphics/wayland/files/init
new file mode 100644
index 00000000..f74ac8b1
--- /dev/null
+++ b/meta-xilinx-core/recipes-graphics/wayland/files/init
@@ -0,0 +1,54 @@
+#!/bin/sh
+#
+### BEGIN INIT INFO
+# Provides: weston
+# Required-Start: $local_fs $remote_fs
+# Required-Stop: $local_fs $remote_fs
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+### END INIT INFO
+
+if test -e /etc/default/weston ; then
+ . /etc/default/weston
+fi
+
+killproc() {
+ pid=`/bin/pidof $1`
+ [ "$pid" != "" ] && kill $pid
+}
+
+read CMDLINE < /proc/cmdline
+for x in $CMDLINE; do
+ case $x in
+ weston=false)
+ echo "Weston disabled"
+ exit 0;
+ ;;
+ esac
+done
+
+case "$1" in
+ start)
+ . /etc/profile
+ export HOME=ROOTHOME
+
+ weston-start -- --continue-without-input $OPTARGS
+ ;;
+
+ stop)
+ echo "Stopping Weston"
+ killproc weston
+ ;;
+
+ restart)
+ $0 stop
+ sleep 1
+ $0 start
+ ;;
+
+ *)
+ echo "usage: $0 { start | stop | restart }"
+ ;;
+esac
+
+exit 0
diff --git a/meta-xilinx-core/recipes-graphics/wayland/files/weston.service b/meta-xilinx-core/recipes-graphics/wayland/files/weston.service
new file mode 100644
index 00000000..c7583e92
--- /dev/null
+++ b/meta-xilinx-core/recipes-graphics/wayland/files/weston.service
@@ -0,0 +1,71 @@
+# This is a system unit for launching Weston with auto-login as the
+# user configured here.
+#
+# Weston must be built with systemd support, and your weston.ini must load
+# the plugin systemd-notify.so.
+[Unit]
+Description=Weston, a Wayland compositor, as a system service
+Documentation=man:weston(1) man:weston.ini(5)
+Documentation=http://wayland.freedesktop.org/
+
+# Make sure we are started after logins are permitted.
+Requires=systemd-user-sessions.service
+After=systemd-user-sessions.service
+
+# If Plymouth is used, we want to start when it is on its way out.
+After=plymouth-quit-wait.service
+
+# D-Bus is necessary for contacting logind. Logind is required.
+Wants=dbus.socket
+After=dbus.socket
+
+# Ensure the socket is present
+Requires=weston.socket
+
+# Since we are part of the graphical session, make sure we are started before
+# it is complete.
+Before=graphical.target
+
+# Prevent starting on systems without virtual consoles, Weston requires one
+# for now.
+ConditionPathExists=/dev/tty0
+
+[Service]
+# Requires systemd-notify.so Weston plugin.
+Type=notify
+EnvironmentFile=/etc/default/weston
+ExecStart=/usr/bin/weston --continue-without-input --modules=systemd-notify.so
+
+# Optional watchdog setup
+TimeoutStartSec=60
+WatchdogSec=20
+
+# The user to run Weston as.
+User=weston
+Group=weston
+
+# Make sure the working directory is the users home directory
+WorkingDirectory=/home/weston
+
+# Set up a full user session for the user, required by Weston.
+PAMName=weston-autologin
+
+# A virtual terminal is needed.
+TTYPath=/dev/tty7
+TTYReset=yes
+TTYVHangup=yes
+TTYVTDisallocate=yes
+
+# Fail to start if not controlling the tty.
+StandardInput=tty-fail
+StandardOutput=journal
+StandardError=journal
+
+# Log this user with utmp, letting it show up with commands 'w' and 'who'.
+UtmpIdentifier=tty7
+UtmpMode=user
+
+[Install]
+# Note: If you only want weston to start on-demand, remove this line with a
+# service drop file
+WantedBy=graphical.target
diff --git a/meta-xilinx-core/recipes-graphics/wayland/weston-init.bbappend b/meta-xilinx-core/recipes-graphics/wayland/weston-init.bbappend
new file mode 100644
index 00000000..f0d64e27
--- /dev/null
+++ b/meta-xilinx-core/recipes-graphics/wayland/weston-init.bbappend
@@ -0,0 +1,5 @@
+PACKAGECONFIG += "no-idle-timeout"
+
+do_install:append:zynqmp() {
+ sed -i -e "/^\[core\]/a gbm-format=rgb565" ${D}${sysconfdir}/xdg/weston/weston.ini
+}
diff --git a/meta-xilinx-core/recipes-graphics/wayland/weston.inc b/meta-xilinx-core/recipes-graphics/wayland/weston.inc
new file mode 100644
index 00000000..fadc9486
--- /dev/null
+++ b/meta-xilinx-core/recipes-graphics/wayland/weston.inc
@@ -0,0 +1,15 @@
+SRC_URI:append:zynqmp = " file://0001-libweston-Remove-substitute-format-for-ARGB8888.patch"
+
+# Due to the SRC_URI zynqmp specific change, this needs to be SOC_FAMILY_ARCH specific
+SOC_FAMILY_ARCH ??= "${TUNE_PKGARCH}"
+DEFAULT_PACKAGE_ARCH := "${PACKAGE_ARCH}"
+DEFAULT_PACKAGE_ARCH:zynqmp = "${SOC_FAMILY_ARCH}"
+PACKAGE_ARCH = "${DEFAULT_PACKAGE_ARCH}"
+
+
+# Links to libmali-xlnx, so it becomes MACHINE_ARCH specific
+DEFAULT_PACKAGE_ARCH := "${PACKAGE_ARCH}"
+MALI_PACKAGE_ARCH[vardepsexclude] = "MACHINE_ARCH"
+MALI_PACKAGE_ARCH = "${@'${MACHINE_ARCH}' if d.getVar('PREFERRED_PROVIDER_virtual/libgles1') == 'libmali-xlnx' else '${DEFAULT_PACKAGE_ARCH}'}"
+PACKAGE_ARCH[vardepsexclude] = "MALI_PACKAGE_ARCH"
+PACKAGE_ARCH = "${@bb.utils.contains_any('DEPENDS', 'virtual/libgles1 virtual/libgles2 virtual/egl virtual/libgbm', '${MALI_PACKAGE_ARCH}', '${DEFAULT_PACKAGE_ARCH}', d)}"
diff --git a/meta-xilinx-core/recipes-graphics/wayland/weston/0001-libweston-backend-drm-Re-order-gbm-destruction-at-DR.patch b/meta-xilinx-core/recipes-graphics/wayland/weston/0001-libweston-backend-drm-Re-order-gbm-destruction-at-DR.patch
new file mode 100644
index 00000000..f8f75894
--- /dev/null
+++ b/meta-xilinx-core/recipes-graphics/wayland/weston/0001-libweston-backend-drm-Re-order-gbm-destruction-at-DR.patch
@@ -0,0 +1,50 @@
+From c8bfa1f8d576cdc6d515dbbac36c48c6166be0d5 Mon Sep 17 00:00:00 2001
+From: Marius Vlad <marius.vlad@collabora.com>
+Date: Thu, 1 Apr 2021 00:12:00 +0300
+Subject: [PATCH] libweston/backend-drm: Re-order gbm destruction at DRM-backend tear down
+
+Tearing down the drm-backend when there are no input devices, would call
+for the gbm device destruction before compositor shutdown. The latter
+would call into the renderer detroy function and assume that the
+EGLDisplay, which was created using the before-mentioned gbm device, is
+still available. This patch re-orders the gbm destruction after the
+compositor shutdown when no one would make use of it.
+
+Fixes: #314
+
+Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
+Suggested-by: Daniel Stone <daniel.stone@collabora.com>
+
+Upstream-Status: Backport [https://gitlab.freedesktop.org/wayland/weston/-/commit/d171c7b3ba346c4d0bd6494f45ebf0be3c3cc5fb]
+---
+ libweston/backend-drm/drm.c | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/libweston/backend-drm/drm.c b/libweston/backend-drm/drm.c
+index 2780f3b..fbcfeca 100644
+--- a/libweston/backend-drm/drm.c
++++ b/libweston/backend-drm/drm.c
+@@ -3025,10 +3025,6 @@ err_drm_source:
+ err_udev_input:
+ udev_input_destroy(&b->input);
+ err_sprite:
+-#ifdef BUILD_DRM_GBM
+- if (b->gbm)
+- gbm_device_destroy(b->gbm);
+-#endif
+ destroy_sprites(b);
+ err_udev_dev:
+ udev_device_unref(drm_device);
+@@ -3038,6 +3034,10 @@ err_launcher:
+ weston_launcher_destroy(compositor->launcher);
+ err_compositor:
+ weston_compositor_shutdown(compositor);
++#ifdef BUILD_DRM_GBM
++ if (b->gbm)
++ gbm_device_destroy(b->gbm);
++#endif
+ free(b);
+ return NULL;
+ }
+--
+2.33.0
diff --git a/meta-xilinx-core/recipes-graphics/wayland/weston/0001-meson.build-fix-incorrect-header.patch b/meta-xilinx-core/recipes-graphics/wayland/weston/0001-meson.build-fix-incorrect-header.patch
new file mode 100644
index 00000000..06e0f7ba
--- /dev/null
+++ b/meta-xilinx-core/recipes-graphics/wayland/weston/0001-meson.build-fix-incorrect-header.patch
@@ -0,0 +1,32 @@
+From a2ba4714a6872e547621d29d9ddcb0f374b88cf6 Mon Sep 17 00:00:00 2001
+From: Chen Qi <Qi.Chen@windriver.com>
+Date: Tue, 20 Apr 2021 20:42:18 -0700
+Subject: [PATCH] meson.build: fix incorrect header
+
+The wayland.c actually include 'xdg-shell-client-protocol.h' instead of
+the server one, so fix it. Otherwise, it's possible to get build failure
+due to race condition.
+
+Upstream-Status: Pending
+
+Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
+---
+ libweston/backend-wayland/meson.build | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/libweston/backend-wayland/meson.build b/libweston/backend-wayland/meson.build
+index 7e82513..29270b5 100644
+--- a/libweston/backend-wayland/meson.build
++++ b/libweston/backend-wayland/meson.build
+@@ -10,7 +10,7 @@ srcs_wlwl = [
+ fullscreen_shell_unstable_v1_protocol_c,
+ presentation_time_protocol_c,
+ presentation_time_server_protocol_h,
+- xdg_shell_server_protocol_h,
++ xdg_shell_client_protocol_h,
+ xdg_shell_protocol_c,
+ ]
+
+--
+2.30.2
+
diff --git a/meta-xilinx-core/recipes-graphics/wayland/weston/0001-tests-include-fcntl.h-for-open-O_RDWR-O_CLOEXEC-and-.patch b/meta-xilinx-core/recipes-graphics/wayland/weston/0001-tests-include-fcntl.h-for-open-O_RDWR-O_CLOEXEC-and-.patch
new file mode 100644
index 00000000..6fe86ff3
--- /dev/null
+++ b/meta-xilinx-core/recipes-graphics/wayland/weston/0001-tests-include-fcntl.h-for-open-O_RDWR-O_CLOEXEC-and-.patch
@@ -0,0 +1,47 @@
+From 58760e09eed662a72da939ff4802d605489cff8e Mon Sep 17 00:00:00 2001
+From: Denys Dmytriyenko <denys@ti.com>
+Date: Tue, 8 Sep 2020 19:37:42 -0400
+Subject: [PATCH] tests: include fcntl.h for open(), O_RDWR, O_CLOEXEC and
+ O_CREAT
+
+musl libc (unlike glibc) requires explicitly incuding fcntl.h to define open(),
+O_RDWR, O_CLOEXEC and O_CREAT. Otherwise the build fails with the errors:
+
+| ../weston-9.0.0/tests/weston-test-fixture-compositor.c: In function 'wait_for_lock':
+| ../weston-9.0.0/tests/weston-test-fixture-compositor.c:135:7: warning: implicit declaration of function 'open'; did you mean 'popen'? [-Wimplicit-function-declaration]
+| 135 | fd = open(lock_path, O_RDWR | O_CLOEXEC | O_CREAT, 00700);
+| | ^~~~
+| | popen
+| ../weston-9.0.0/tests/weston-test-fixture-compositor.c:135:23: error: 'O_RDWR' undeclared (first use in this function)
+| 135 | fd = open(lock_path, O_RDWR | O_CLOEXEC | O_CREAT, 00700);
+| | ^~~~~~
+| ../weston-9.0.0/tests/weston-test-fixture-compositor.c:135:23: note: each undeclared identifier is reported only once for each function it appears in
+| ../weston-9.0.0/tests/weston-test-fixture-compositor.c:135:32: error: 'O_CLOEXEC' undeclared (first use in this function)
+| 135 | fd = open(lock_path, O_RDWR | O_CLOEXEC | O_CREAT, 00700);
+| | ^~~~~~~~~
+| ../weston-9.0.0/tests/weston-test-fixture-compositor.c:135:44: error: 'O_CREAT' undeclared (first use in this function)
+| 135 | fd = open(lock_path, O_RDWR | O_CLOEXEC | O_CREAT, 00700);
+| | ^~~~~~~
+
+Upstream-Status: Submitted [https://gitlab.freedesktop.org/wayland/weston/-/merge_requests/493/diffs?commit_id=b10c0e843dcb8148bbe869bb15261955b94ac98c]
+
+Signed-off-by: Denys Dmytriyenko <denys@ti.com>
+---
+ tests/weston-test-fixture-compositor.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/tests/weston-test-fixture-compositor.c b/tests/weston-test-fixture-compositor.c
+index 0c9855f..e0e32c9 100644
+--- a/tests/weston-test-fixture-compositor.c
++++ b/tests/weston-test-fixture-compositor.c
+@@ -31,6 +31,7 @@
+ #include <unistd.h>
+ #include <sys/file.h>
+ #include <errno.h>
++#include <fcntl.h>
+
+ #include "shared/helpers.h"
+ #include "weston-test-fixture-compositor.h"
+--
+2.7.4
+
diff --git a/meta-xilinx-core/recipes-graphics/wayland/weston/0001-weston-launch-Provide-a-default-version-that-doesn-t.patch b/meta-xilinx-core/recipes-graphics/wayland/weston/0001-weston-launch-Provide-a-default-version-that-doesn-t.patch
new file mode 100644
index 00000000..f6ebfd8f
--- /dev/null
+++ b/meta-xilinx-core/recipes-graphics/wayland/weston/0001-weston-launch-Provide-a-default-version-that-doesn-t.patch
@@ -0,0 +1,199 @@
+From a1548c742bf2dedbb47282d8a00407b60bbab669 Mon Sep 17 00:00:00 2001
+From: Tom Hochstein <tom.hochstein@nxp.com>
+Date: Wed, 22 Feb 2017 15:53:30 +0200
+Subject: [PATCH] weston-launch: Provide a default version that doesn't require
+
+ PAM
+
+weston-launch requires PAM for starting weston as a non-root user.
+
+Since starting weston as root is a valid use case by itself, if
+PAM is not available, provide a default version of weston-launch
+without non-root-user support.
+
+Upstream-Status: Denied [https://gitlab.freedesktop.org/wayland/weston/-/merge_requests/725]
+
+Signed-off-by: Tom Hochstein <tom.hochstein@nxp.com>
+Signed-off-by: Jussi Kukkonen <jussi.kukkonen@intel.com>
+Signed-off-by: Denys Dmytriyenko <denys@ti.com>
+Signed-off-by: Ming Liu <ming.liu@toradex.com>
+
+---
+ libweston/meson.build | 16 ++++++++++++----
+ libweston/weston-launch.c | 21 +++++++++++++++++++++
+ meson_options.txt | 7 +++++++
+ 3 files changed, 40 insertions(+), 4 deletions(-)
+
+diff --git a/libweston/meson.build b/libweston/meson.build
+index 08d23ec..cb9fd3f 100644
+--- a/libweston/meson.build
++++ b/libweston/meson.build
+@@ -216,16 +216,24 @@ dep_vertex_clipping = declare_dependency(
+ )
+
+ if get_option('weston-launch')
+- dep_pam = cc.find_library('pam')
++ deps_weston_launch = [systemd_dep, dep_libdrm]
+
+- if not cc.has_function('pam_open_session', dependencies: dep_pam)
+- error('pam_open_session not found for weston-launch')
++ if get_option('pam')
++ dep_pam = cc.find_library('pam')
++ if not cc.has_function('pam_open_session', dependencies: dep_pam)
++ error('pam_open_session not found for weston-launch')
++ endif
++
++ if dep_pam.found()
++ deps_weston_launch += dep_pam
++ config_h.set('HAVE_PAM', '1')
++ endif
+ endif
+
+ executable(
+ 'weston-launch',
+ 'weston-launch.c',
+- dependencies: [dep_pam, systemd_dep, dep_libdrm],
++ dependencies: deps_weston_launch,
+ include_directories: common_inc,
+ install: true
+ )
+diff --git a/libweston/weston-launch.c b/libweston/weston-launch.c
+index 521cb2c..2d42d33 100644
+--- a/libweston/weston-launch.c
++++ b/libweston/weston-launch.c
+@@ -51,7 +51,9 @@
+
+ #include <pwd.h>
+ #include <grp.h>
++#ifdef HAVE_PAM
+ #include <security/pam_appl.h>
++#endif
+
+ #ifdef HAVE_SYSTEMD_LOGIN
+ #include <systemd/sd-login.h>
+@@ -100,8 +102,10 @@ drmSetMaster(int drm_fd)
+ #endif
+
+ struct weston_launch {
++#ifdef HAVE_PAM
+ struct pam_conv pc;
+ pam_handle_t *ph;
++#endif
+ int tty;
+ int ttynr;
+ int sock[2];
+@@ -192,6 +196,7 @@ weston_launch_allowed(struct weston_launch *wl)
+ return false;
+ }
+
++#ifdef HAVE_PAM
+ static int
+ pam_conversation_fn(int msg_count,
+ const struct pam_message **messages,
+@@ -232,6 +237,7 @@ setup_pam(struct weston_launch *wl)
+
+ return 0;
+ }
++#endif
+
+ static int
+ setup_launcher_socket(struct weston_launch *wl)
+@@ -466,6 +472,7 @@ quit(struct weston_launch *wl, int status)
+ close(wl->signalfd);
+ close(wl->sock[0]);
+
++#ifdef HAVE_PAM
+ if (wl->new_user) {
+ err = pam_close_session(wl->ph, 0);
+ if (err)
+@@ -473,6 +480,7 @@ quit(struct weston_launch *wl, int status)
+ err, pam_strerror(wl->ph, err));
+ pam_end(wl->ph, err);
+ }
++#endif
+
+ /*
+ * Get a fresh handle to the tty as the previous one is in
+@@ -710,6 +718,7 @@ setup_session(struct weston_launch *wl, char **child_argv)
+ setenv("HOME", wl->pw->pw_dir, 1);
+ setenv("SHELL", wl->pw->pw_shell, 1);
+
++#ifdef HAVE_PAM
+ env = pam_getenvlist(wl->ph);
+ if (env) {
+ for (i = 0; env[i]; ++i) {
+@@ -718,6 +727,7 @@ setup_session(struct weston_launch *wl, char **child_argv)
+ }
+ free(env);
+ }
++#endif
+
+ /*
+ * We open a new session, so it makes sense
+@@ -789,8 +799,10 @@ static void
+ help(const char *name)
+ {
+ fprintf(stderr, "Usage: %s [args...] [-- [weston args..]]\n", name);
++#ifdef HAVE_PAM
+ fprintf(stderr, " -u, --user Start session as specified username,\n"
+ " e.g. -u joe, requires root.\n");
++#endif
+ fprintf(stderr, " -t, --tty Start session on alternative tty,\n"
+ " e.g. -t /dev/tty4, requires -u option.\n");
+ fprintf(stderr, " -v, --verbose Be verbose\n");
+@@ -804,7 +816,9 @@ main(int argc, char *argv[])
+ int i, c;
+ char *tty = NULL;
+ struct option opts[] = {
++#ifdef HAVE_PAM
+ { "user", required_argument, NULL, 'u' },
++#endif
+ { "tty", required_argument, NULL, 't' },
+ { "verbose", no_argument, NULL, 'v' },
+ { "help", no_argument, NULL, 'h' },
+@@ -816,11 +830,16 @@ main(int argc, char *argv[])
+ while ((c = getopt_long(argc, argv, "u:t:vh", opts, &i)) != -1) {
+ switch (c) {
+ case 'u':
++#ifdef HAVE_PAM
+ wl.new_user = optarg;
+ if (getuid() != 0) {
+ fprintf(stderr, "weston: Permission denied. -u allowed for root only\n");
+ exit(EXIT_FAILURE);
+ }
++#else
++ fprintf(stderr, "weston: -u is unsupported in this weston-launch build\n");
++ exit(EXIT_FAILURE);
++#endif
+ break;
+ case 't':
+ tty = optarg;
+@@ -872,8 +891,10 @@ main(int argc, char *argv[])
+ if (setup_tty(&wl, tty) < 0)
+ exit(EXIT_FAILURE);
+
++#ifdef HAVE_PAM
+ if (wl.new_user && setup_pam(&wl) < 0)
+ exit(EXIT_FAILURE);
++#endif
+
+ if (setup_launcher_socket(&wl) < 0)
+ exit(EXIT_FAILURE);
+diff --git a/meson_options.txt b/meson_options.txt
+index 239bd2d..99e4ec3 100644
+--- a/meson_options.txt
++++ b/meson_options.txt
+@@ -73,6 +73,13 @@ option(
+ )
+
+ option(
++ 'pam',
++ type: 'boolean',
++ value: true,
++ description: 'Define if PAM is available'
++)
++
++option(
+ 'xwayland',
+ type: 'boolean',
+ value: true,
diff --git a/meta-xilinx-core/recipes-graphics/wayland/weston/dont-use-plane-add-prop.patch b/meta-xilinx-core/recipes-graphics/wayland/weston/dont-use-plane-add-prop.patch
new file mode 100644
index 00000000..a4444e5d
--- /dev/null
+++ b/meta-xilinx-core/recipes-graphics/wayland/weston/dont-use-plane-add-prop.patch
@@ -0,0 +1,23 @@
+Fix atomic modesetting with musl
+
+atomic modesetting seems to fail with drm weston backend and this patch fixes
+it, below errors are seen before weston exits
+
+atomic: couldn't commit new state: Invalid argument
+
+Upstream-Status: Submitted [https://gitlab.freedesktop.org/wayland/weston/-/issues/158]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+--- a/libweston/backend-drm/kms.c
++++ b/libweston/backend-drm/kms.c
+@@ -1168,8 +1168,8 @@ drm_pending_state_apply_atomic(struct dr
+ wl_list_for_each(plane, &b->plane_list, link) {
+ drm_debug(b, "\t\t[atomic] starting with plane %lu disabled\n",
+ (unsigned long) plane->plane_id);
+- plane_add_prop(req, plane, WDRM_PLANE_CRTC_ID, 0);
+- plane_add_prop(req, plane, WDRM_PLANE_FB_ID, 0);
++ //plane_add_prop(req, plane, WDRM_PLANE_CRTC_ID, 0);
++ //plane_add_prop(req, plane, WDRM_PLANE_FB_ID, 0);
+ }
+
+ flags |= DRM_MODE_ATOMIC_ALLOW_MODESET;
diff --git a/meta-xilinx-core/recipes-graphics/wayland/weston/systemd-notify.weston-start b/meta-xilinx-core/recipes-graphics/wayland/weston/systemd-notify.weston-start
new file mode 100644
index 00000000..a97e7b38
--- /dev/null
+++ b/meta-xilinx-core/recipes-graphics/wayland/weston/systemd-notify.weston-start
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+# SPDX-FileCopyrightText: Huawei Inc.
+# SPDX-License-Identifier: Apache-2.0
+
+
+if [[ -x "/usr/lib/weston/systemd-notify.so" ]]; then
+ add_weston_module "systemd-notify.so"
+fi
diff --git a/meta-xilinx-core/recipes-graphics/wayland/weston/weston.desktop b/meta-xilinx-core/recipes-graphics/wayland/weston/weston.desktop
new file mode 100644
index 00000000..1086ae8b
--- /dev/null
+++ b/meta-xilinx-core/recipes-graphics/wayland/weston/weston.desktop
@@ -0,0 +1,9 @@
+[Desktop Entry]
+Encoding=UTF-8
+Type=Application
+Name=Weston
+Comment=Wayland Compostitor
+Exec=weston
+Icon=weston
+Terminal=false
+Categories=Utility;
diff --git a/meta-xilinx-core/recipes-graphics/wayland/weston/weston.png b/meta-xilinx-core/recipes-graphics/wayland/weston/weston.png
new file mode 100644
index 00000000..ea8b7e0e
--- /dev/null
+++ b/meta-xilinx-core/recipes-graphics/wayland/weston/weston.png
Binary files differ
diff --git a/meta-xilinx-core/recipes-graphics/wayland/weston/xwayland.weston-start b/meta-xilinx-core/recipes-graphics/wayland/weston/xwayland.weston-start
new file mode 100644
index 00000000..db384b1a
--- /dev/null
+++ b/meta-xilinx-core/recipes-graphics/wayland/weston/xwayland.weston-start
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+if type Xwayland >/dev/null 2>/dev/null; then
+ mkdir -p /tmp/.X11-unix
+fi
diff --git a/meta-xilinx-core/recipes-graphics/wayland/weston_13.%.bbappend b/meta-xilinx-core/recipes-graphics/wayland/weston_13.%.bbappend
new file mode 100644
index 00000000..3ee9cafa
--- /dev/null
+++ b/meta-xilinx-core/recipes-graphics/wayland/weston_13.%.bbappend
@@ -0,0 +1,12 @@
+FILESEXTRAPATHS:prepend:zynqmp := "${THISDIR}/files:"
+
+require weston.inc
+
+ZYNQMP_WARN_DEFAULT = "0"
+ZYNQMP_WARN_DEFAULT:zynqmp = "${@bb.utils.contains('DISTRO_FEATURES', 'libmali', '1', '0', d)}"
+ZYNQMP_WARN = "${@bb.utils.contains('MACHINE_FEATURES', 'mali400', '${ZYNQMP_WARN_DEFAULT}', '0', d)}"
+
+python() {
+ if d.getVar('ZYNQMP_WARN') == "1":
+ raise bb.parse.SkipRecipe("Weston %s requires GLES 3 interfaces which are not available when libmali enabled. Use Weston 9.0.0.0 instead." % (d.getVar('PV')))
+}
diff --git a/meta-xilinx-core/recipes-graphics/wayland/weston_9.0.0.bb b/meta-xilinx-core/recipes-graphics/wayland/weston_9.0.0.bb
new file mode 100644
index 00000000..a534b1b7
--- /dev/null
+++ b/meta-xilinx-core/recipes-graphics/wayland/weston_9.0.0.bb
@@ -0,0 +1,148 @@
+SUMMARY = "Weston, a Wayland compositor"
+DESCRIPTION = "Weston is the reference implementation of a Wayland compositor"
+HOMEPAGE = "http://wayland.freedesktop.org"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d79ee9e66bb0f95d3386a7acae780b70 \
+ file://libweston/compositor.c;endline=27;md5=6c53bbbd99273f4f7c4affa855c33c0a"
+
+# We want this version to be "newer" then 10, only if libmali and mali400 are both enabled
+ORIG_PE := "${PE}"
+MALI_PE = "${@bb.utils.contains('DISTRO_FEATURES', 'libmali', '1', '${ORIG_PE}', d)}"
+PE = "${@bb.utils.contains('MACHINE_FEATURES', 'mali400', '${MALI_PE}', '${ORIG_PE}', d)}"
+
+SRC_URI = "https://wayland.freedesktop.org/releases/${BPN}-${PV}.tar.xz \
+ file://weston.png \
+ file://weston.desktop \
+ file://xwayland.weston-start \
+ file://systemd-notify.weston-start \
+ file://0001-weston-launch-Provide-a-default-version-that-doesn-t.patch \
+ file://0001-tests-include-fcntl.h-for-open-O_RDWR-O_CLOEXEC-and-.patch \
+ file://0001-meson.build-fix-incorrect-header.patch \
+ file://0001-libweston-backend-drm-Re-order-gbm-destruction-at-DR.patch \
+"
+
+SRC_URI:append:libc-musl = " file://dont-use-plane-add-prop.patch "
+
+SRC_URI[sha256sum] = "5cf5d6ce192e0eb15c1fc861a436bf21b5bb3b91dbdabbdebe83e1f83aa098fe"
+
+UPSTREAM_CHECK_URI = "https://wayland.freedesktop.org/releases.html"
+
+inherit meson pkgconfig useradd features_check
+# depends on virtual/egl
+# weston-init requires pam enabled if started via systemd
+REQUIRED_DISTRO_FEATURES = "opengl ${@oe.utils.conditional('VIRTUAL-RUNTIME_init_manager', 'systemd', 'pam', '', d)}"
+
+DEPENDS = "libxkbcommon gdk-pixbuf pixman cairo glib-2.0"
+DEPENDS += "wayland wayland-protocols libinput virtual/egl pango wayland-native"
+
+LDFLAGS += "${@bb.utils.contains('DISTRO_FEATURES', 'lto', '-Wl,-z,undefs', '', d)}"
+
+WESTON_MAJOR_VERSION = "${@'.'.join(d.getVar('PV').split('.')[0:1])}"
+
+EXTRA_OEMESON += "-Dbackend-default=auto -Dpipewire=false"
+
+PACKAGECONFIG ??= "${@bb.utils.contains('DISTRO_FEATURES', 'wayland', 'kms fbdev wayland egl clients', '', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'x11 wayland', 'xwayland', '', d)} \
+ ${@bb.utils.filter('DISTRO_FEATURES', 'pam systemd x11', d)} \
+ ${@bb.utils.contains_any('DISTRO_FEATURES', 'wayland x11', '', 'headless', d)} \
+ launch \
+ image-jpeg \
+ screenshare \
+ shell-desktop \
+ shell-fullscreen \
+ shell-ivi"
+
+#
+# Compositor choices
+#
+# Weston on KMS
+PACKAGECONFIG[kms] = "-Dbackend-drm=true,-Dbackend-drm=false,drm udev virtual/egl virtual/libgles2 virtual/libgbm mtdev"
+# Weston on Wayland (nested Weston)
+PACKAGECONFIG[wayland] = "-Dbackend-wayland=true,-Dbackend-wayland=false,virtual/egl virtual/libgles2"
+# Weston on X11
+PACKAGECONFIG[x11] = "-Dbackend-x11=true,-Dbackend-x11=false,virtual/libx11 libxcb libxcb libxcursor cairo"
+# Headless Weston
+PACKAGECONFIG[headless] = "-Dbackend-headless=true,-Dbackend-headless=false"
+# Weston on framebuffer
+PACKAGECONFIG[fbdev] = "-Dbackend-fbdev=true,-Dbackend-fbdev=false,udev mtdev"
+# Weston on RDP
+PACKAGECONFIG[rdp] = "-Dbackend-rdp=true,-Dbackend-rdp=false,freerdp"
+# weston-launch
+PACKAGECONFIG[launch] = "-Dweston-launch=true,-Dweston-launch=false,drm"
+# VA-API desktop recorder
+PACKAGECONFIG[vaapi] = "-Dbackend-drm-screencast-vaapi=true,-Dbackend-drm-screencast-vaapi=false,libva"
+# Weston with EGL support
+PACKAGECONFIG[egl] = "-Drenderer-gl=true,-Drenderer-gl=false,virtual/egl"
+# Weston with lcms support
+PACKAGECONFIG[lcms] = "-Dcolor-management-lcms=true,-Dcolor-management-lcms=false,lcms"
+# Weston with webp support
+PACKAGECONFIG[webp] = "-Dimage-webp=true,-Dimage-webp=false,libwebp"
+# Weston with systemd-login support
+PACKAGECONFIG[systemd] = "-Dsystemd=true -Dlauncher-logind=true,-Dsystemd=false -Dlauncher-logind=false,systemd dbus"
+# Weston with Xwayland support (requires X11 and Wayland)
+PACKAGECONFIG[xwayland] = "-Dxwayland=true,-Dxwayland=false"
+# colord CMS support
+PACKAGECONFIG[colord] = "-Dcolor-management-colord=true,-Dcolor-management-colord=false,colord"
+# Clients support
+PACKAGECONFIG[clients] = "-Dsimple-clients=all -Ddemo-clients=true,-Dsimple-clients= -Ddemo-clients=false"
+# Virtual remote output with GStreamer on DRM backend
+PACKAGECONFIG[remoting] = "-Dremoting=true,-Dremoting=false,gstreamer1.0 gstreamer1.0-plugins-base"
+# Weston with PAM support
+PACKAGECONFIG[pam] = "-Dpam=true,-Dpam=false,libpam"
+# Weston with screen-share support
+PACKAGECONFIG[screenshare] = "-Dscreenshare=true,-Dscreenshare=false"
+# Traditional desktop shell
+PACKAGECONFIG[shell-desktop] = "-Dshell-desktop=true,-Dshell-desktop=false"
+# Fullscreen shell
+PACKAGECONFIG[shell-fullscreen] = "-Dshell-fullscreen=true,-Dshell-fullscreen=false"
+# In-Vehicle Infotainment (IVI) shell
+PACKAGECONFIG[shell-ivi] = "-Dshell-ivi=true,-Dshell-ivi=false"
+# JPEG image loading support
+PACKAGECONFIG[image-jpeg] = "-Dimage-jpeg=true,-Dimage-jpeg=false, jpeg"
+
+do_install:append() {
+ # Weston doesn't need the .la files to load modules, so wipe them
+ rm -f ${D}/${libdir}/libweston-${WESTON_MAJOR_VERSION}/*.la
+
+ # If X11, ship a desktop file to launch it
+ if [ "${@bb.utils.filter('DISTRO_FEATURES', 'x11', d)}" ]; then
+ install -d ${D}${datadir}/applications
+ install ${WORKDIR}/weston.desktop ${D}${datadir}/applications
+
+ install -d ${D}${datadir}/icons/hicolor/48x48/apps
+ install ${WORKDIR}/weston.png ${D}${datadir}/icons/hicolor/48x48/apps
+ fi
+
+ if [ "${@bb.utils.contains('PACKAGECONFIG', 'xwayland', 'yes', 'no', d)}" = "yes" ]; then
+ install -Dm 644 ${WORKDIR}/xwayland.weston-start ${D}${datadir}/weston-start/xwayland
+ fi
+
+ if [ "${@bb.utils.contains('PACKAGECONFIG', 'systemd', 'yes', 'no', d)}" = "yes" ]; then
+ install -Dm 644 ${WORKDIR}/systemd-notify.weston-start ${D}${datadir}/weston-start/systemd-notify
+ fi
+
+ if [ "${@bb.utils.contains('PACKAGECONFIG', 'launch', 'yes', 'no', d)}" = "yes" ]; then
+ chmod u+s ${D}${bindir}/weston-launch
+ fi
+}
+
+PACKAGES += "${@bb.utils.contains('PACKAGECONFIG', 'xwayland', '${PN}-xwayland', '', d)} \
+ libweston-${WESTON_MAJOR_VERSION} ${PN}-examples"
+
+FILES:${PN}-dev += "${libdir}/${BPN}/libexec_weston.so"
+FILES:${PN} = "${bindir}/weston ${bindir}/weston-terminal ${bindir}/weston-info ${bindir}/weston-launch ${bindir}/wcap-decode ${libexecdir} ${libdir}/${BPN}/*.so* ${datadir}"
+
+FILES:libweston-${WESTON_MAJOR_VERSION} = "${libdir}/lib*${SOLIBS} ${libdir}/libweston-${WESTON_MAJOR_VERSION}/*.so"
+SUMMARY:libweston-${WESTON_MAJOR_VERSION} = "Helper library for implementing 'wayland window managers'."
+
+FILES:${PN}-examples = "${bindir}/*"
+
+FILES:${PN}-xwayland = "${libdir}/libweston-${WESTON_MAJOR_VERSION}/xwayland.so"
+RDEPENDS:${PN}-xwayland += "xwayland"
+
+RDEPENDS:${PN} += "xkeyboard-config"
+RRECOMMENDS:${PN} = "weston-init liberation-fonts"
+RRECOMMENDS:${PN}-dev += "wayland-protocols"
+
+USERADD_PACKAGES = "${PN}"
+GROUPADD_PARAM:${PN} = "--system weston-launch"
diff --git a/meta-xilinx-core/recipes-graphics/wayland/weston_9.0.0.bbappend b/meta-xilinx-core/recipes-graphics/wayland/weston_9.0.0.bbappend
new file mode 100644
index 00000000..80512ac3
--- /dev/null
+++ b/meta-xilinx-core/recipes-graphics/wayland/weston_9.0.0.bbappend
@@ -0,0 +1,3 @@
+FILESEXTRAPATHS:prepend:zynqmp := "${THISDIR}/files/9.0.0:${THISDIR}/files:"
+
+require weston.inc
diff --git a/meta-xilinx-core/recipes-graphics/x11-common/xserver-nodm-init/xserver-nodm.service.in b/meta-xilinx-core/recipes-graphics/x11-common/xserver-nodm-init/xserver-nodm.service.in
new file mode 100644
index 00000000..5a4a6a05
--- /dev/null
+++ b/meta-xilinx-core/recipes-graphics/x11-common/xserver-nodm-init/xserver-nodm.service.in
@@ -0,0 +1,13 @@
+[Unit]
+Description=Xserver startup without a display manager
+StartLimitBurst=5
+StartLimitIntervalSec=100
+
+[Service]
+EnvironmentFile=/etc/default/xserver-nodm
+User=@USER@
+ExecStart=/etc/xserver-nodm/Xserver
+Restart=always
+
+[Install]
+Alias=display-manager.service
diff --git a/meta-xilinx-core/recipes-graphics/x11-common/xserver-nodm-init_%.bbappend b/meta-xilinx-core/recipes-graphics/x11-common/xserver-nodm-init_%.bbappend
new file mode 100644
index 00000000..0a789a20
--- /dev/null
+++ b/meta-xilinx-core/recipes-graphics/x11-common/xserver-nodm-init_%.bbappend
@@ -0,0 +1 @@
+FILESEXTRAPATHS:append := ":${THISDIR}/${PN}"
diff --git a/meta-xilinx-core/recipes-graphics/xorg-xserver/xserver-xf86-config/zynqmp/xorg.conf b/meta-xilinx-core/recipes-graphics/xorg-xserver/xserver-xf86-config/zynqmp/xorg.conf
new file mode 100644
index 00000000..0e2988de
--- /dev/null
+++ b/meta-xilinx-core/recipes-graphics/xorg-xserver/xserver-xf86-config/zynqmp/xorg.conf
@@ -0,0 +1,28 @@
+Section "InputDevice"
+ Identifier "System Mouse"
+ Driver "mouse"
+ Option "Device" "/dev/input/mouse0"
+EndSection
+
+Section "InputDevice"
+ Identifier "System Keyboard"
+ Driver "kbd"
+ Option "Device" "/dev/input/event0"
+EndSection
+
+Section "Device"
+ Identifier "ZynqMP"
+ Driver "armsoc"
+ Option "BusId" "fd4a0000.display"
+ Option "DRI2" "true"
+ Option "DRI2_PAGE_FLIP" "false"
+ Option "DRI2_WAIT_VSYNC" "true"
+ Option "SWcursorLCD" "false"
+ Option "DEBUG" "false"
+EndSection
+
+Section "Screen"
+ Identifier "DefaultScreen"
+ Device "ZynqMP"
+ DefaultDepth 16
+EndSection
diff --git a/meta-xilinx-core/recipes-graphics/xorg-xserver/xserver-xf86-config_%.bbappend b/meta-xilinx-core/recipes-graphics/xorg-xserver/xserver-xf86-config_%.bbappend
new file mode 100644
index 00000000..4fc41d05
--- /dev/null
+++ b/meta-xilinx-core/recipes-graphics/xorg-xserver/xserver-xf86-config_%.bbappend
@@ -0,0 +1 @@
+FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
diff --git a/meta-xilinx-core/recipes-graphics/xorg-xserver/xserver-xorg/99-monitor-hotplug.rules b/meta-xilinx-core/recipes-graphics/xorg-xserver/xserver-xorg/99-monitor-hotplug.rules
new file mode 100644
index 00000000..eeb7d671
--- /dev/null
+++ b/meta-xilinx-core/recipes-graphics/xorg-xserver/xserver-xorg/99-monitor-hotplug.rules
@@ -0,0 +1 @@
+ACTION=="change", SUBSYSTEM=="drm", ENV{HOTPLUG}=="1", RUN+="/usr/bin/monitor-hotplug.sh"
diff --git a/meta-xilinx-core/recipes-graphics/xorg-xserver/xserver-xorg/monitor-hotplug.sh b/meta-xilinx-core/recipes-graphics/xorg-xserver/xserver-xorg/monitor-hotplug.sh
new file mode 100755
index 00000000..bceb5607
--- /dev/null
+++ b/meta-xilinx-core/recipes-graphics/xorg-xserver/xserver-xorg/monitor-hotplug.sh
@@ -0,0 +1,65 @@
+#! /bin/sh
+
+# Copyright (C) 2018 Xilinx, Inc. All rights reserved.
+# Copyright (C) 2023 Advanced Micro Devices, Inc. All rights reserved.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+# Adapt this script to your needs.
+
+DEVICES=$(find /sys/class/drm/*/status)
+
+# inspired by /etc/acpd/lid.sh and the function it sources.
+
+# Read first X display number from the list.
+displaynum=`ls /tmp/.X11-unix/* | sed s#/tmp/.X11-unix/X## | head -n 1`
+displaynum=${displaynum%% *}
+
+display=":$displaynum.0"
+export DISPLAY=":$displaynum.0"
+
+# from https://wiki.archlinux.org/index.php/Acpid#Laptop_Monitor_Power_Off
+
+# Clear XAUTHORITY by default in case X session is not using display manager.
+unset XAUTHORITY
+
+# Detect X session command line started for the display $displaynum and extract
+# -auth argument if any.
+ps -eo args | grep -e "Xorg\W*:$displaynum" | grep -e -auth | while read -r line
+do
+ if [[ "${line%% *}" == *Xorg ]]; then
+ export XAUTHORITY=`echo $line | sed -n 's/.*-auth //; s/ -[^ ].*//; p'`
+ break
+ fi
+done
+
+for i in /sys/class/drm/*/*/status ;
+do
+ status=$(cat $i);
+ connector=${i%/status*};
+ connector=${connector#*-};
+ if [ "$status" == "disconnected" ]; then
+ xset dpms force off
+ elif [ "$status" == "connected" ]; then
+ xset dpms force on
+ if [ "$(xrandr | grep '\*')" = "" ]; then
+ xrandr --output $connector --auto
+ fi
+ fi
+done
diff --git a/meta-xilinx-core/recipes-graphics/xorg-xserver/xserver-xorg_%.bbappend b/meta-xilinx-core/recipes-graphics/xorg-xserver/xserver-xorg_%.bbappend
new file mode 100644
index 00000000..460ff581
--- /dev/null
+++ b/meta-xilinx-core/recipes-graphics/xorg-xserver/xserver-xorg_%.bbappend
@@ -0,0 +1,23 @@
+# Links to libmali-xlnx, so it becomes MACHINE_ARCH specific
+DEFAULT_PACKAGE_ARCH := "${PACKAGE_ARCH}"
+MALI_PACKAGE_ARCH[vardepsexclude] = "MACHINE_ARCH"
+MALI_PACKAGE_ARCH = "${@'${MACHINE_ARCH}' if d.getVar('PREFERRED_PROVIDER_virtual/libgles1') == 'libmali-xlnx' else '${DEFAULT_PACKAGE_ARCH}'}"
+PACKAGE_ARCH[vardepsexclude] = "MALI_PACKAGE_ARCH"
+PACKAGE_ARCH = "${@bb.utils.contains_any('DEPENDS', 'virtual/libgles1 virtual/libgles2 virtual/egl virtual/libgbm', '${MALI_PACKAGE_ARCH}', '${DEFAULT_PACKAGE_ARCH}', d)}"
+
+FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
+
+SRC_URI += " \
+ file://monitor-hotplug.sh \
+ file://99-monitor-hotplug.rules \
+ "
+
+do_install:append() {
+ install -d ${D}${bindir}
+ install -m 0755 ${WORKDIR}/monitor-hotplug.sh ${D}${bindir}
+
+ install -d ${D}${sysconfdir}/udev/rules.d
+ install -m 0644 ${WORKDIR}/99-monitor-hotplug.rules ${D}${sysconfdir}/udev/rules.d/99-monitor-hotplug.rules
+}
+
+FILES:${PN} += "${sysconfdir}/udev/rules.d/*"
diff --git a/meta-xilinx-core/recipes-graphics/xwayland/xwayland_%.bbappend b/meta-xilinx-core/recipes-graphics/xwayland/xwayland_%.bbappend
new file mode 100644
index 00000000..c1005f11
--- /dev/null
+++ b/meta-xilinx-core/recipes-graphics/xwayland/xwayland_%.bbappend
@@ -0,0 +1,7 @@
+# Links to libmali-xlnx, so it becomes MACHINE_ARCH specific
+DEFAULT_PACKAGE_ARCH := "${PACKAGE_ARCH}"
+MALI_PACKAGE_ARCH[vardepsexclude] = "MACHINE_ARCH"
+MALI_PACKAGE_ARCH = "${@'${MACHINE_ARCH}' if d.getVar('PREFERRED_PROVIDER_virtual/libgles1') == 'libmali-xlnx' else '${DEFAULT_PACKAGE_ARCH}'}"
+PACKAGE_ARCH[vardepsexclude] = "MALI_PACKAGE_ARCH"
+PACKAGE_ARCH = "${@bb.utils.contains_any('DEPENDS', 'virtual/libgles1 virtual/libgles2 virtual/egl virtual/libgbm', '${MALI_PACKAGE_ARCH}', '${DEFAULT_PACKAGE_ARCH}', d)}"
+