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