1
0
mirror of https://git.yoctoproject.org/meta-ti synced 2026-06-04 18:00:36 +00:00

ti-sgx-ddk-um: use udev for userspace initialization

The ti-sgx-ddk driver requires an additional userspace initialization
step after the kernel module has probed the device. Without this
initialization, no EGL context can be created and Weston etc. will fail to
start.

The driver package contains an init script, but this does not work on pure
systemd-based systems without sysvinit compat support (as provided by the
systemd-compat-units package). Introduce an enabled-by-default
PACKAGECONFIG that installs a udev rule instead to run the init command
automatically when the driver is loaded, solving the issue without
depending on a specific init system. On builds without udev, this
PACKAGECONFIG can be disabled, reverting to the old init script-based
solution.

udev reports several events when the pvrsrvkm module is loaded:

- add event for the kernel module
- add events for two DRM devices
- bind event for the GPU platform device

The DRM devices aren't nice to match on, and the kernel module add is
too early to run `pvrsrvctl --start`, so we trigger on the platform
device bind.

Tested with Weston 9.0.0 on the AM65x-based TQ-Systems MBa65xx.

Signed-off-by: Matthias Schiffer <matthias.schiffer@ew.tq-group.com>
Signed-off-by: Ryan Eatmon <reatmon@ti.com>
This commit is contained in:
Matthias Schiffer
2023-01-19 11:29:52 +01:00
committed by Ryan Eatmon
parent 649a0357d5
commit 0b3fa09a5f
2 changed files with 23 additions and 1 deletions
@@ -0,0 +1 @@
SUBSYSTEM=="platform", ACTION=="bind", ENV{DRIVER}=="pvrsrvkm", RUN+="/usr/bin/pvrsrvctl --start --no-module"
@@ -14,7 +14,10 @@ PR = "r38"
BRANCH = "ti-img-sgx/kirkstone/${PV}"
SRC_URI = "git://git.ti.com/git/graphics/omap5-sgx-ddk-um-linux.git;protocol=https;branch=${BRANCH}"
SRC_URI = " \
git://git.ti.com/git/graphics/omap5-sgx-ddk-um-linux.git;protocol=https;branch=${BRANCH} \
file://pvrsrvkm.rules \
"
SRCREV = "905809029b877fea42e91b9738825a6294ff1775"
TARGET_PRODUCT:ti33x = "ti335x"
@@ -27,6 +30,9 @@ INITSCRIPT_PARAMS = "defaults 8"
inherit update-rc.d
PACKAGECONFIG ??= "udev"
PACKAGECONFIG[udev] = ",,,udev"
PROVIDES += "virtual/egl virtual/libgles1 virtual/libgles2 virtual/libgbm"
DEPENDS += "libdrm udev wayland wayland-protocols libffi expat"
@@ -56,6 +62,20 @@ do_install () {
oe_runmake install DESTDIR=${D} TARGET_PRODUCT=${TARGET_PRODUCT}
ln -sf libGLESv2.so.2 ${D}${libdir}/libGLESv2.so.1
without_sysvinit=${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit', 'false', 'true', d)}
with_udev=${@bb.utils.contains('PACKAGECONFIG', 'udev', 'true', 'false', d)}
# Delete initscript if it is not needed or would conflict with the udev rules
if $without_sysvinit || $with_udev; then
rm -rf ${D}${sysconfdir}/init.d
rmdir --ignore-fail-on-non-empty ${D}${sysconfdir}
fi
if $with_udev; then
install -m644 -D ${WORKDIR}/pvrsrvkm.rules \
${D}${nonarch_base_libdir}/udev/rules.d/80-pvrsrvkm.rules
fi
chown -R root:root ${D}
}
@@ -64,6 +84,7 @@ FILES:${PN} += " ${libdir}/*"
FILES:${PN} += "${includedir}/*"
FILES:${PN} += "${sysconfdir}/*"
FILES:${PN} += "${datadir}/*"
FILES:${PN} += "${nonarch_base_libdir}/udev/rules.d"
INSANE_SKIP:${PN} += "dev-so ldflags useless-rpaths"
INSANE_SKIP:${PN} += "already-stripped dev-deps"