Merge pull request #601 from jdvmi00/spark/nvidia-dp-detach
Carry NVIDIA DisplayPort detach fix for aarch64
This commit is contained in:
6 files changed
+165
No files matched your search
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"source": "local",
|
||||
"channels": [
|
||||
"edge"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
From bd5d6119ca1ed030ad26d06d1b3e980873ff0336 Mon Sep 17 00:00:00 2001
|
||||
From: Martin Stark <901824+martinstark@users.noreply.github.com>
|
||||
Date: Sun, 13 Sep 2026 22:32:38 +0200
|
||||
Subject: [PATCH 1/2] fix(displayport): allow detach when sink is unplugged
|
||||
|
||||
The HPD check in dpPreModeset() rejects detach-only requests after unplug. This skips DP library cleanup while NVKMS advances its head bookkeeping, leaving stale attached groups that can block subsequent link training.
|
||||
|
||||
Allow detach-only requests when HPD is low. Reject requests with an attachment target on any selected head, preserving the connector/discovery guards and forced-connected and dynamic-mux exceptions.
|
||||
---
|
||||
src/common/displayport/src/dp_connectorimpl.cpp | 12 +++++++++---
|
||||
1 file changed, 9 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/src/common/displayport/src/dp_connectorimpl.cpp b/src/common/displayport/src/dp_connectorimpl.cpp
|
||||
index 99e0e97..7451e6c 100644
|
||||
--- a/src/common/displayport/src/dp_connectorimpl.cpp
|
||||
+++ b/src/common/displayport/src/dp_connectorimpl.cpp
|
||||
@@ -3861,11 +3861,17 @@ void ConnectorImpl::dpPreModeset(const DpPreModesetParams ¶ms)
|
||||
return;
|
||||
}
|
||||
|
||||
- // Skip gating modeset on HPD for DDS panels
|
||||
+ // Allow detach bookkeeping even when HPD is low.
|
||||
if(!previousPlugged && !bClientForcedConnected && !main->isInternalPanelDynamicMuxCapable())
|
||||
{
|
||||
- DP_ASSERT(0 && "DPCONN> dpPreModeset called when Plugged State is false!");
|
||||
- return;
|
||||
+ for (NvU32 i = 0; i < NV_MAX_HEADS; i++)
|
||||
+ {
|
||||
+ if ((params.headMask & NVBIT(i)) && params.head[i].pTarget != NULL)
|
||||
+ {
|
||||
+ DP_ASSERT(0 && "DPCONN> dpPreModeset attach called when Plugged State is false!");
|
||||
+ return;
|
||||
+ }
|
||||
+ }
|
||||
}
|
||||
|
||||
this->bFECEnable |= this->needToEnableFEC(params);
|
||||
@@ -0,0 +1,23 @@
|
||||
From a2e8b26b20dfb6f2fa3cb8985e3f1126cba38aae Mon Sep 17 00:00:00 2001
|
||||
From: Martin Stark <901824+martinstark@users.noreply.github.com>
|
||||
Date: Mon, 14 Sep 2026 10:43:16 +0200
|
||||
Subject: [PATCH 2/2] Clarify DDS exception and unplugged detach bookkeeping
|
||||
|
||||
---
|
||||
src/common/displayport/src/dp_connectorimpl.cpp | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/common/displayport/src/dp_connectorimpl.cpp b/src/common/displayport/src/dp_connectorimpl.cpp
|
||||
index 7451e6c..0e81070 100644
|
||||
--- a/src/common/displayport/src/dp_connectorimpl.cpp
|
||||
+++ b/src/common/displayport/src/dp_connectorimpl.cpp
|
||||
@@ -3861,7 +3861,8 @@ void ConnectorImpl::dpPreModeset(const DpPreModesetParams ¶ms)
|
||||
return;
|
||||
}
|
||||
|
||||
- // Allow detach bookkeeping even when HPD is low.
|
||||
+ // Skip gating modeset on HPD for DDS panels.
|
||||
+ // Allow HPD-low detach bookkeeping; notifyLongPulse() permits detach.
|
||||
if(!previousPlugged && !bClientForcedConnected && !main->isInternalPanelDynamicMuxCapable())
|
||||
{
|
||||
for (NvU32 i = 0; i < NV_MAX_HEADS; i++)
|
||||
@@ -0,0 +1,12 @@
|
||||
Copyright Arch Linux Contributors
|
||||
|
||||
Permission to use, copy, modify, and/or distribute this software for
|
||||
any purpose with or without fee is hereby granted.
|
||||
|
||||
THE SOFTWARE IS PROVIDED “AS IS” AND THE AUTHOR DISCLAIMS ALL
|
||||
WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
|
||||
OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE
|
||||
FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY
|
||||
DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
|
||||
AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
|
||||
OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
@@ -0,0 +1,74 @@
|
||||
# Maintainer: Sven-Hendrik Haase <svenstaro@archlinux.org>
|
||||
# Maintainer: Peter Jung <ptr1337@archlinux.org>
|
||||
# Contributor: James Rayner <iphitus@gmail.com>
|
||||
# Contributor: Vasiliy Stelmachenok <ventureo@yandex.ru>
|
||||
# Contributor: Thomas Baechler <thomas@archlinux.org>
|
||||
|
||||
# ARM-only carry of NVIDIA/open-gpu-kernel-modules#1359 by Martin Stark.
|
||||
# Remove this overlay after a fixed Arch Linux ARM driver is validated.
|
||||
pkgname=nvidia-open-dkms
|
||||
pkgver=615.71.09
|
||||
pkgrel=1.2
|
||||
pkgdesc="NVIDIA open kernel modules - module sources"
|
||||
arch=('aarch64')
|
||||
url="https://www.nvidia.com/"
|
||||
license=('MIT AND GPL-2.0-only')
|
||||
depends=('dkms' "nvidia-utils=$pkgver")
|
||||
conflicts=('nvidia-open' 'NVIDIA-MODULE')
|
||||
provides=('nvidia-open' 'NVIDIA-MODULE' 'nvidia-dkms')
|
||||
replaces=('nvidia-dkms')
|
||||
options=('!strip')
|
||||
_pkg_open="NVIDIA-kernel-module-source-${pkgver}"
|
||||
source=("https://download.nvidia.com/XFree86/NVIDIA-kernel-module-source/${_pkg_open}.tar.xz"
|
||||
'0001-allow-unplugged-dp-detach.patch'
|
||||
'0002-clarify-unplugged-dp-detach.patch')
|
||||
sha512sums=('0b32c1aaa5ed261bdee7232d5e5d293e53c42ac9896f49c4be4e6b9b6bce1370cb69a7f7fde5531a7537d5e925d651c36bcb512a2f827c2d2cb26ede33f7c057'
|
||||
'48f802423399ce84a430b7accf10ea50847ea3fafcfe251e3bad2f741af9ca2162408a3109eb3c9fcdbe35ec35154a3dbcc8fe457ed617487c009abf2c9fc89a'
|
||||
'a3ff65cb58d72815b272726c38d45148dfba73ea2a0d88672960d8f706c74e7c2b40ec599783acec46ba18433af45f38547a09b2caa985bd71895a64780c00da')
|
||||
|
||||
prepare() {
|
||||
# Attempt to make builds reproducible
|
||||
sed -i "s/^ HOSTNAME.*/ HOSTNAME = echo archlinux/" "${srcdir}/${_pkg_open}/utils.mk"
|
||||
sed -i "s/^WHOAMI.*/WHOAMI = echo archlinux-builder/" "${srcdir}/${_pkg_open}/utils.mk"
|
||||
sed -i "s/^DATE.*/DATE = date -r version.mk/" "${srcdir}/${_pkg_open}/utils.mk"
|
||||
|
||||
for conf in "${srcdir}/${_pkg_open}/kernel-open/dkms.conf"; do
|
||||
sed -i "s/__VERSION_STRING/${pkgver}/" "$conf"
|
||||
sed -i 's/__JOBS/`nproc`/' "$conf"
|
||||
sed -i 's/__EXCLUDE_MODULES//' "$conf"
|
||||
sed -i 's/__DKMS_MODULES//' "$conf"
|
||||
sed -i 's/NV_EXCLUDE_BUILD_MODULES/IGNORE_PREEMPT_RT_PRESENCE=1 NV_EXCLUDE_BUILD_MODULES/' "$conf"
|
||||
sed -i '$i\
|
||||
BUILT_MODULE_NAME[0]="nvidia"\
|
||||
DEST_MODULE_LOCATION[0]="/kernel/drivers/video"\
|
||||
BUILT_MODULE_NAME[1]="nvidia-uvm"\
|
||||
DEST_MODULE_LOCATION[1]="/kernel/drivers/video"\
|
||||
BUILT_MODULE_NAME[2]="nvidia-modeset"\
|
||||
DEST_MODULE_LOCATION[2]="/kernel/drivers/video"\
|
||||
BUILT_MODULE_NAME[3]="nvidia-drm"\
|
||||
DEST_MODULE_LOCATION[3]="/kernel/drivers/video"\
|
||||
BUILT_MODULE_NAME[4]="nvidia-peermem"\
|
||||
DEST_MODULE_LOCATION[4]="/kernel/drivers/video"' "$conf"
|
||||
done
|
||||
|
||||
# Additional parameters for open kernel modules
|
||||
cat <<EOF >>"${srcdir}/${_pkg_open}/kernel-open/dkms.conf"
|
||||
BUILT_MODULE_LOCATION[0]="kernel-open"
|
||||
BUILT_MODULE_LOCATION[1]="kernel-open"
|
||||
BUILT_MODULE_LOCATION[2]="kernel-open"
|
||||
BUILT_MODULE_LOCATION[3]="kernel-open"
|
||||
BUILT_MODULE_LOCATION[4]="kernel-open"
|
||||
EOF
|
||||
|
||||
# Exact PR head a2e8b26b20dfb6f2fa3cb8985e3f1126cba38aae.
|
||||
cd "${srcdir}/${_pkg_open}"
|
||||
patch --batch --fuzz=0 -p1 < "$srcdir/0001-allow-unplugged-dp-detach.patch"
|
||||
patch --batch --fuzz=0 -p1 < "$srcdir/0002-clarify-unplugged-dp-detach.patch"
|
||||
}
|
||||
|
||||
package() {
|
||||
install -dm755 "$pkgdir/usr/src"
|
||||
cp -dr --no-preserve=ownership "$srcdir/$_pkg_open" "$pkgdir/usr/src/nvidia-$pkgver"
|
||||
mv "$pkgdir/usr/src/nvidia-$pkgver/kernel-open/dkms.conf" "$pkgdir/usr/src/nvidia-$pkgver/dkms.conf"
|
||||
install -Dm644 "$srcdir/$_pkg_open/COPYING" "$pkgdir/usr/share/licenses/$pkgname/LICENSE"
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
# NVIDIA ARM DisplayPort detach fix
|
||||
|
||||
ARM-only edge package carrying Martin Stark's pending
|
||||
[NVIDIA PR #1359](https://github.com/NVIDIA/open-gpu-kernel-modules/pull/1359)
|
||||
to fix DisplayPort disconnect cleanup in 615.71.09. Based on
|
||||
[Arch's DKMS recipe](https://gitlab.archlinux.org/archlinux/packaging/packages/nvidia-utils/-/commit/f9ae10b379f8b1d0832ec92bca1c12072aa123e9).
|
||||
|
||||
Requires `[omarchy]` before `[extra]` and matching `nvidia-utils=615.71.09`.
|
||||
Update both NVIDIA packages together; automatic version tracking is disabled.
|
||||
|
||||
Remove this recipe and the published package/database entry once a fixed
|
||||
Arch Linux ARM driver is validated. A stale package in the earlier repository
|
||||
can block driver updates.
|
||||
Reference in new issue
Block a user