git: 637e9e68f1a2 - main - x11/nvidia-driver: Fix too aggressive disabling of GSP firmware

From: Austin Shafer <ashafer_at_FreeBSD.org>
Date: Mon, 05 May 2025 13:36:16 UTC
The branch main has been updated by ashafer:

URL: https://cgit.FreeBSD.org/ports/commit/?id=637e9e68f1a2ce587e5107b0fd296abd16f061a0

commit 637e9e68f1a2ce587e5107b0fd296abd16f061a0
Author:     Tomoaki AOKI <junchoon@dec.sakura.ne.jp>
AuthorDate: 2025-05-05 13:31:25 +0000
Commit:     Austin Shafer <ashafer@FreeBSD.org>
CommitDate: 2025-05-05 13:34:16 +0000

    x11/nvidia-driver: Fix too aggressive disabling of GSP firmware
    
    Currently, GSP on recent (Turing and later) nvidia GPU is disabled
    as of suspend/resume issues (Differential Revision: D49828).
    
    After D49828 lands, in Forums thread "Xorg won't start with officially
    supported NVIDIA 5070 GPU?" [1], x11/nvidia-driver doesn't work but
    building directly from upstream tarball (570.133 and 570.144) is
    reported to work for the reporter.
    
    After some testing on reporter's side with our request, reverting
    back D49828 is reported to make x11/nvidia-driver working again.
    
    This update changes the way disabling GSP firmware by default to allow overriding via tunable hw.nvidia.registry.EnableGpuFirmware.
    
    [1] https://forums.freebsd.org/threads/xorg-wont-start-with-officially-supported-nvidia-5070-gpu.97659/
    
    Reported by: foacs (displayed name on forums.freebsd.org)
    Approved by:    ashafer, kbowling (mentor)
    Differential Revision:  https://reviews.freebsd.org/D50053
---
 x11/nvidia-driver/Makefile                                    |  4 ++--
 .../extra-gsp-patch-src-common-inc-nv_firmware_registry.h.in  | 11 +++++++++++
 x11/nvidia-driver/files/extra-gsp-patch-src-nvidia_subr.c.in  | 11 -----------
 x11/nvidia-driver/files/pkg-message.in                        |  9 ++++++---
 4 files changed, 19 insertions(+), 16 deletions(-)

diff --git a/x11/nvidia-driver/Makefile b/x11/nvidia-driver/Makefile
index 2f19923c04e8..787e9ec80534 100644
--- a/x11/nvidia-driver/Makefile
+++ b/x11/nvidia-driver/Makefile
@@ -14,7 +14,7 @@
 PORTNAME?=	nvidia-driver
 DISTVERSION?=	${NVIDIA_DISTVERSION}
 # Always try to set PORTREVISION as it can be overridden by the slave ports
-PORTREVISION?=	3
+PORTREVISION?=	4
 CATEGORIES=	x11
 MASTER_SITES=	NVIDIA/XFree86/FreeBSD-${ARCH_SUFX}/${DISTVERSION}
 DISTNAME=	NVIDIA-FreeBSD-${ARCH_SUFX}-${DISTVERSION}
@@ -83,7 +83,7 @@ SUB_PATCHES+=	extra-patch-src-nvidia_subr.c
 # Temporarily disable GSP firmware as it is known to cause
 # issues with suspend/resume
 .if ${NVVERSION} >= 565.00000
-SUB_PATCHES+=	extra-gsp-patch-src-nvidia_subr.c
+SUB_PATCHES+=	extra-gsp-patch-src-common-inc-nv_firmware_registry.h
 .endif
 
 DOCSDIR=	${PREFIX}/share/doc/NVIDIA_GLX-1.0
diff --git a/x11/nvidia-driver/files/extra-gsp-patch-src-common-inc-nv_firmware_registry.h.in b/x11/nvidia-driver/files/extra-gsp-patch-src-common-inc-nv_firmware_registry.h.in
new file mode 100644
index 000000000000..923d326df49a
--- /dev/null
+++ b/x11/nvidia-driver/files/extra-gsp-patch-src-common-inc-nv_firmware_registry.h.in
@@ -0,0 +1,11 @@
+--- src/common/inc/nv-firmware-registry.h.orig
++++ src/common/inc/nv-firmware-registry.h
+@@ -62,7 +62,7 @@
+ #define NV_REG_ENABLE_GPU_FIRMWARE_POLICY_MASK            0x000000F0
+ #define NV_REG_ENABLE_GPU_FIRMWARE_POLICY_ALLOW_FALLBACK  0x00000010
+ 
+-#define NV_REG_ENABLE_GPU_FIRMWARE_DEFAULT_VALUE          0x00000012
++#define NV_REG_ENABLE_GPU_FIRMWARE_DEFAULT_VALUE          0x00000000
+ 
+ //
+ // Registry key that when enabled,  will send GPU firmware logs
diff --git a/x11/nvidia-driver/files/extra-gsp-patch-src-nvidia_subr.c.in b/x11/nvidia-driver/files/extra-gsp-patch-src-nvidia_subr.c.in
deleted file mode 100644
index 1f09b6c683a3..000000000000
--- a/x11/nvidia-driver/files/extra-gsp-patch-src-nvidia_subr.c.in
+++ /dev/null
@@ -1,11 +0,0 @@
---- src/nvidia/nvidia_subr.c.orig	2025-04-14 16:14:13 UTC
-+++ src/nvidia/nvidia_subr.c
-@@ -32,7 +32,7 @@ nv_cap_t *nvidia_caps_root = NULL;
- nv_state_t nvidia_ctl_state;
- nv_cap_t *nvidia_caps_root = NULL;
- 
--const NvBool nv_is_rm_firmware_supported_os = NV_TRUE;
-+const NvBool nv_is_rm_firmware_supported_os = NV_FALSE;
- 
- static struct callout snapshot_timer;
- static struct mtx snapshot_timer_mutex;
diff --git a/x11/nvidia-driver/files/pkg-message.in b/x11/nvidia-driver/files/pkg-message.in
index d73c5f09d6a9..ae2810196b97 100644
--- a/x11/nvidia-driver/files/pkg-message.in
+++ b/x11/nvidia-driver/files/pkg-message.in
@@ -32,9 +32,12 @@ If X.org cannot start and reports
 in /var/log/Xorg.0.log while actually you have ``options SYSVSHM''
 enabled in kernel, the sysctl ``kern.ipc.shmall'' should be increased.
 
-In certain 570 versions GSP firmware is known to cause issues with
-suspend/resume. To disable GSP firmware add
-hw.nvidia.registry.EnableGpuFirmware=0 to your loader.conf.
+Because in certain 570 versions GSP firmware is known to cause issues
+with suspend/resume, thus, disabled by default for now.
+On the other hand, some GPUs are known NOT to work without GSP
+firmware support.
+To enable GSP firmware add hw.nvidia.registry.EnableGpuFirmware=1
+to your loader.conf.
 
 https://download.nvidia.com/XFree86/FreeBSD-x86_64/560.31.02/README/gsp.html