git: f4e907a49258 - main - x11/nvidia-driver: Split kmod into x11/nvidia-kmod

From: Kevin Bowling <kbowling_at_FreeBSD.org>
Date: Wed, 01 Oct 2025 06:08:36 UTC
The branch main has been updated by kbowling:

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

commit f4e907a492584bc31f9f3aa100a98a4e918dc7f4
Author:     Tomoaki AOKI <junchoon@dec.sakura.ne.jp>
AuthorDate: 2025-10-01 06:04:33 +0000
Commit:     Kevin Bowling <kbowling@FreeBSD.org>
CommitDate: 2025-10-01 06:07:31 +0000

    x11/nvidia-driver: Split kmod into x11/nvidia-kmod
    
    Split out kmod part of x11/nvidia-driver into x11/nvidia-kmod,
    including slave ports, to allow FreeBSD-kmods repo builders building
    nvidia-related kmod ports.
    
    In this update,
    
    * split out *.ko from x11/nvidia-driver[-304|-340|-390|470|-devel]
      into corresponding x11/nvidia-kmod[-304|-340|-390|470|-devel],
    
    * switch dependency of graphics/nvidia-drm-*-kmod upon
      x11/nvidia-driver[-devel] to newly introduced
      x11/nvidia-kmod[-devel],
    
    * make x11/nvidia-driver[-304|-340|-390|470|-devel] depend upon
      newly introduced x11/nvidia-kmod[-304|-340|-390|470|-devel],
    
    * bump consumers directly depending upon x11/nvidia-driver*
      as of dependency switches,
    
    * and hook x11/nvidia-kmod[-304|-340|-390|470|-devel] to build.
    
    Note that upgrading x11/nvidia-driver* from monolithic version
    requires deinstallation of x11/nvidia-driver* before starting,
    as both previous version of x11/nvidia-driver* and newly introduced
    x11/nvidia-kmod* installs *.ko into same place.
    
    PR:             288314
    Approved by:    bapt (kmod repo)
    Differential Revision:  https://reviews.freebsd.org/D52178
---
 UPDATING                                    |  10 ++
 graphics/nvidia-drm-510-kmod-devel/Makefile |   2 +-
 graphics/nvidia-drm-510-kmod/Makefile       |   2 +-
 graphics/nvidia-drm-515-kmod-devel/Makefile |   2 +-
 graphics/nvidia-drm-515-kmod/Makefile       |   2 +-
 graphics/nvidia-drm-61-kmod-devel/Makefile  |   2 +-
 graphics/nvidia-drm-61-kmod/Makefile        |   2 +-
 graphics/nvidia-drm-66-kmod-devel/Makefile  |   2 +-
 graphics/nvidia-drm-66-kmod/Makefile        |   2 +-
 graphics/nvidia-drm-kmod-devel/Makefile     |   2 +-
 graphics/nvidia-drm-kmod/Makefile           |   3 +
 graphics/nvidia-drm-kmod/Makefile.common    |   2 +-
 x11/Makefile                                |   6 +
 x11/nvidia-driver-304/Makefile              |   2 +-
 x11/nvidia-driver-340/Makefile              |   2 +-
 x11/nvidia-driver-390/Makefile              |   2 +-
 x11/nvidia-driver-470/Makefile              |   2 +-
 x11/nvidia-driver-devel/Makefile            |   2 +-
 x11/nvidia-driver/Makefile                  | 177 ++------------------
 x11/nvidia-driver/pkg-plist                 |   4 -
 x11/nvidia-kmod-304/Makefile                |   8 +
 x11/nvidia-kmod-340/Makefile                |   8 +
 x11/nvidia-kmod-390/Makefile                |   8 +
 x11/nvidia-kmod-470/Makefile                |   8 +
 x11/nvidia-kmod-devel/Makefile              |   8 +
 x11/nvidia-kmod/Makefile                    | 243 ++++++++++++++++++++++++++++
 x11/nvidia-kmod/pkg-descr                   |   3 +
 x11/nvidia-kmod/pkg-plist                   |   4 +
 28 files changed, 336 insertions(+), 184 deletions(-)

diff --git a/UPDATING b/UPDATING
index 4d6900e24ef2..b86738dabde7 100644
--- a/UPDATING
+++ b/UPDATING
@@ -5,6 +5,16 @@ they are unavoidable.
 You should get into the habit of checking this file for changes each time
 you update your ports collection, before attempting any port upgrades.
 
+20250930:
+  AFFECTS: users of x11/nvidia-driver*
+  AUTHOR: junchoon@dec.sakura.ne.jp
+
+  Because of splitting out kernel modules (kmod) part from x11/nvidia-driver*
+  into newly introduced x11/nvidia-kmod*, you need to deinstall currently
+  installed x11/nvidia-driver* and freshly install it again with new version.
+  This would pull in corresponding x11/nvidia-kmod* because x11/nvidia-driver*
+  explicitly depends on corresponding x11/nvidia-kmod*.
+
 20250918:
   AFFECTS: users of sysutils/py-mitogen
   AUTHOR: dch@FreeBSD.org
diff --git a/graphics/nvidia-drm-510-kmod-devel/Makefile b/graphics/nvidia-drm-510-kmod-devel/Makefile
index f97a3010b82f..cd3742e2b20f 100644
--- a/graphics/nvidia-drm-510-kmod-devel/Makefile
+++ b/graphics/nvidia-drm-510-kmod-devel/Makefile
@@ -1,6 +1,6 @@
 NVIDIA_DISTVERSION?=	580.82.07
 # Explicitly set PORTREVISION as it can be overridden by the master port
-PORTREVISION=	0
+PORTREVISION=	1
 MASTERDIR=	${.CURDIR}/../nvidia-drm-510-kmod
 PKGNAMESUFFIX=	-devel
 
diff --git a/graphics/nvidia-drm-510-kmod/Makefile b/graphics/nvidia-drm-510-kmod/Makefile
index 8ac628c6b799..ef6b0443c59f 100644
--- a/graphics/nvidia-drm-510-kmod/Makefile
+++ b/graphics/nvidia-drm-510-kmod/Makefile
@@ -1,5 +1,5 @@
 PORTNAME=	nvidia-drm-510-kmod
-PORTREVISION=	1
+PORTREVISION=	2
 CATEGORIES=	graphics
 
 BUILD_DEPENDS+=	${KMODDIR}/drm.ko:graphics/drm-510-kmod
diff --git a/graphics/nvidia-drm-515-kmod-devel/Makefile b/graphics/nvidia-drm-515-kmod-devel/Makefile
index b49f7994584c..0709ce73e273 100644
--- a/graphics/nvidia-drm-515-kmod-devel/Makefile
+++ b/graphics/nvidia-drm-515-kmod-devel/Makefile
@@ -1,6 +1,6 @@
 NVIDIA_DISTVERSION?=	580.82.07
 # Explicitly set PORTREVISION as it can be overridden by the master port
-PORTREVISION=	0
+PORTREVISION=	1
 MASTERDIR=	${.CURDIR}/../nvidia-drm-515-kmod
 PKGNAMESUFFIX=	-devel
 
diff --git a/graphics/nvidia-drm-515-kmod/Makefile b/graphics/nvidia-drm-515-kmod/Makefile
index 2c0ad686c426..57a3031df4c4 100644
--- a/graphics/nvidia-drm-515-kmod/Makefile
+++ b/graphics/nvidia-drm-515-kmod/Makefile
@@ -1,5 +1,5 @@
 PORTNAME=	nvidia-drm-515-kmod
-PORTREVISION=	3
+PORTREVISION=	4
 CATEGORIES=	graphics
 
 BUILD_DEPENDS+=	${KMODDIR}/drm.ko:graphics/drm-515-kmod
diff --git a/graphics/nvidia-drm-61-kmod-devel/Makefile b/graphics/nvidia-drm-61-kmod-devel/Makefile
index 96d0c7d006d9..d1984728ec65 100644
--- a/graphics/nvidia-drm-61-kmod-devel/Makefile
+++ b/graphics/nvidia-drm-61-kmod-devel/Makefile
@@ -1,6 +1,6 @@
 NVIDIA_DISTVERSION?=	580.82.07
 # Explicitly set PORTREVISION as it can be overridden by the master port
-PORTREVISION=	2
+PORTREVISION=	3
 MASTERDIR=	${.CURDIR}/../nvidia-drm-61-kmod
 PKGNAMESUFFIX=	-devel
 
diff --git a/graphics/nvidia-drm-61-kmod/Makefile b/graphics/nvidia-drm-61-kmod/Makefile
index 7e5747d7622d..88e1760a6398 100644
--- a/graphics/nvidia-drm-61-kmod/Makefile
+++ b/graphics/nvidia-drm-61-kmod/Makefile
@@ -1,5 +1,5 @@
 PORTNAME=	nvidia-drm-61-kmod
-PORTREVISION=	4
+PORTREVISION=	5
 CATEGORIES=	graphics
 
 BUILD_DEPENDS+=	${KMODDIR}/drm.ko:graphics/drm-61-kmod
diff --git a/graphics/nvidia-drm-66-kmod-devel/Makefile b/graphics/nvidia-drm-66-kmod-devel/Makefile
index 7941985a9c4b..3680a9932b36 100644
--- a/graphics/nvidia-drm-66-kmod-devel/Makefile
+++ b/graphics/nvidia-drm-66-kmod-devel/Makefile
@@ -1,6 +1,6 @@
 NVIDIA_DISTVERSION?=	580.82.07
 # Explicitly set PORTREVISION as it can be overridden by the master port
-PORTREVISION=	2
+PORTREVISION=	3
 MASTERDIR=	${.CURDIR}/../nvidia-drm-66-kmod
 PKGNAMESUFFIX=	-devel
 
diff --git a/graphics/nvidia-drm-66-kmod/Makefile b/graphics/nvidia-drm-66-kmod/Makefile
index 19636dc722bc..b3bc019d6b4c 100644
--- a/graphics/nvidia-drm-66-kmod/Makefile
+++ b/graphics/nvidia-drm-66-kmod/Makefile
@@ -1,5 +1,5 @@
 PORTNAME=	nvidia-drm-66-kmod
-PORTREVISION=	4
+PORTREVISION=	5
 CATEGORIES=	graphics
 
 BUILD_DEPENDS+=	${KMODDIR}/drm.ko:graphics/drm-66-kmod
diff --git a/graphics/nvidia-drm-kmod-devel/Makefile b/graphics/nvidia-drm-kmod-devel/Makefile
index f458869fe4c6..95842efea536 100644
--- a/graphics/nvidia-drm-kmod-devel/Makefile
+++ b/graphics/nvidia-drm-kmod-devel/Makefile
@@ -1,6 +1,6 @@
 DISTVERSION?=	580.82.07
 # Explicitly set PORTREVISION as it can be overridden by the master port
-PORTREVISION=	0
+PORTREVISION=	1
 
 MASTERDIR=	${.CURDIR}/../nvidia-drm-kmod
 PKGNAMESUFFIX=	-devel
diff --git a/graphics/nvidia-drm-kmod/Makefile b/graphics/nvidia-drm-kmod/Makefile
index 128dad89c6be..bce69261c6ed 100644
--- a/graphics/nvidia-drm-kmod/Makefile
+++ b/graphics/nvidia-drm-kmod/Makefile
@@ -1,5 +1,6 @@
 PORTNAME=	nvidia-drm-kmod
 DISTVERSION?=	${NVIDIA_DISTVERSION}
+PORTREVISION?=	1
 CATEGORIES=	graphics kld
 
 MAINTAINER=	x11@FreeBSD.org
@@ -23,6 +24,8 @@ RUN_DEPENDS+=  ${KMODDIR}/nvidia-drm.ko:graphics/nvidia-drm-61-kmod${PKGNAMESUFF
 .  endif
 .endif
 
+RUN_DEPENDS+=  nvidia-driver${PKGNAMESUFFIX}>0:x11/nvidia-driver${PKGNAMESUFFIX}
+
 CONFLICTS_INSTALL=	nvidia-drm-kmod*
 
 .include <bsd.port.post.mk>
diff --git a/graphics/nvidia-drm-kmod/Makefile.common b/graphics/nvidia-drm-kmod/Makefile.common
index 9ef819ba40da..016558cb30ac 100644
--- a/graphics/nvidia-drm-kmod/Makefile.common
+++ b/graphics/nvidia-drm-kmod/Makefile.common
@@ -20,7 +20,7 @@ USES=		kmod uidfix tar:xz
 
 SUB_FILES=	20-nvidia-drm-outputclass.conf
 
-RUN_DEPENDS+=	${KMODDIR}/nvidia.ko:x11/nvidia-driver${PKGNAMESUFFIX}
+RUN_DEPENDS+=	${KMODDIR}/nvidia.ko:x11/nvidia-kmod${PKGNAMESUFFIX}
 
 .include "${.CURDIR}/../../x11/nvidia-driver/Makefile.version"
 .include "${.CURDIR}/../../x11/nvidia-driver/Makefile.common"
diff --git a/x11/Makefile b/x11/Makefile
index d0d0600e56db..0addc97e569f 100644
--- a/x11/Makefile
+++ b/x11/Makefile
@@ -302,6 +302,12 @@
     SUBDIR += nvidia-driver-390
     SUBDIR += nvidia-driver-470
     SUBDIR += nvidia-driver-devel
+    SUBDIR += nvidia-kmod
+    SUBDIR += nvidia-kmod-304
+    SUBDIR += nvidia-kmod-340
+    SUBDIR += nvidia-kmod-390
+    SUBDIR += nvidia-kmod-470
+    SUBDIR += nvidia-kmod-devel
     SUBDIR += nvidia-settings
     SUBDIR += nvidia-xconfig
     SUBDIR += nwg-bar
diff --git a/x11/nvidia-driver-304/Makefile b/x11/nvidia-driver-304/Makefile
index 737adc80c52f..c1119a49d546 100644
--- a/x11/nvidia-driver-304/Makefile
+++ b/x11/nvidia-driver-304/Makefile
@@ -1,6 +1,6 @@
 DISTVERSION=	304.137
 # Explicitly set PORTREVISION as it can be overridden by the master port
-PORTREVISION=	10
+PORTREVISION=	11
 
 MASTERDIR=	${.CURDIR}/../nvidia-driver
 PKGNAMESUFFIX=	-304
diff --git a/x11/nvidia-driver-340/Makefile b/x11/nvidia-driver-340/Makefile
index adeee49ab528..3ea1d49eea69 100644
--- a/x11/nvidia-driver-340/Makefile
+++ b/x11/nvidia-driver-340/Makefile
@@ -1,6 +1,6 @@
 DISTVERSION=	340.108
 # Explicitly set PORTREVISION as it can be overridden by the master port
-PORTREVISION=	4
+PORTREVISION=	5
 
 MASTERDIR=	${.CURDIR}/../nvidia-driver
 PKGNAMESUFFIX=	-340
diff --git a/x11/nvidia-driver-390/Makefile b/x11/nvidia-driver-390/Makefile
index b3fa58bc3212..eadfa4276cf4 100644
--- a/x11/nvidia-driver-390/Makefile
+++ b/x11/nvidia-driver-390/Makefile
@@ -1,6 +1,6 @@
 DISTVERSION=	390.157
 # Explicitly set PORTREVISION as it can be overridden by the master port
-PORTREVISION=	0
+PORTREVISION=	1
 
 MASTERDIR=	${.CURDIR}/../nvidia-driver
 PKGNAMESUFFIX=	-390
diff --git a/x11/nvidia-driver-470/Makefile b/x11/nvidia-driver-470/Makefile
index 6f1f8c865b7d..d49b3e056507 100644
--- a/x11/nvidia-driver-470/Makefile
+++ b/x11/nvidia-driver-470/Makefile
@@ -1,6 +1,6 @@
 DISTVERSION=	470.256.02
 # Explicitly set PORTREVISION as it can be overridden by the master port
-PORTREVISION=	1
+PORTREVISION=	2
 
 MASTERDIR=	${.CURDIR}/../nvidia-driver
 PKGNAMESUFFIX=	-470
diff --git a/x11/nvidia-driver-devel/Makefile b/x11/nvidia-driver-devel/Makefile
index 71f2eab631d2..3577eb57d30d 100644
--- a/x11/nvidia-driver-devel/Makefile
+++ b/x11/nvidia-driver-devel/Makefile
@@ -1,6 +1,6 @@
 DISTVERSION?=	580.82.07
 # Explicitly set PORTREVISION as it can be overridden by the master port
-PORTREVISION=	0
+PORTREVISION=	1
 
 MASTERDIR=	${.CURDIR}/../nvidia-driver
 PKGNAMESUFFIX=	-devel
diff --git a/x11/nvidia-driver/Makefile b/x11/nvidia-driver/Makefile
index ad87c00eb3fd..8255931553fd 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?=	0
+PORTREVISION?=	1
 CATEGORIES=	x11
 MASTER_SITES=	NVIDIA/XFree86/FreeBSD-${ARCH_SUFX}/${DISTVERSION}
 DISTNAME=	NVIDIA-FreeBSD-${ARCH_SUFX}-${DISTVERSION}
@@ -46,11 +46,14 @@ PATCH_DEPENDS=	gsed:textproc/gsed
 BUILD_DEPENDS=	pkg-config:devel/pkgconf
 LIB_DEPENDS=	libOpenGL.so:graphics/libglvnd
 .endif
+
+RUN_DEPENDS=	${KMODDIR}/nvidia.ko:x11/nvidia-kmod${PKGNAMESUFFIX}
+
 .if ${NVVERSION} >= 415.013
 LIB_DEPENDS+=	libnvidia-egl-wayland.so:graphics/egl-wayland
 .endif
 
-USES=		kmod uidfix xorg
+USES=		uidfix xorg
 .if ${NVVERSION} >= 470.04201
 USES+=		tar:xz
 .endif
@@ -76,21 +79,6 @@ SUB_FILES=	pkg-message
 .if !defined(LIBGLDIR)
 SUB_FILES+=	nvidia.conf
 .endif
-SUB_PATCHES=	extra-patch-src-Makefile \
-		extra-patch-src-nv-freebsd.h
-.if ${NVVERSION} < 510.03901
-SUB_PATCHES+=	extra-patch-src-nvidia_dev.c \
-		extra-patch-src-nvidia_pci.c
-.endif
-.if ${NVVERSION} < 470.25602 || ${NVVERSION} >= 480.00000 && ${NVVERSION} < 530.03002
-SUB_PATCHES+=	extra-patch-src-nvidia_subr.c
-.endif
-
-# Temporarily disable GSP firmware as it is known to cause
-# issues with suspend/resume
-.if ${NVVERSION} >= 565.00000
-SUB_PATCHES+=	extra-gsp-patch-src-common-inc-nv_firmware_registry.h
-.endif
 
 DOCSDIR=	${PREFIX}/share/doc/NVIDIA_GLX-1.0
 MODULESDIR=	lib/xorg/modules
@@ -103,49 +91,7 @@ SUB_LIST+=	NVGL=""
 SUB_LIST+=	NVGL="\# "
 .endif
 
-.if ${NVVERSION} < 355.006
-NVSRC=		.
-.else
-NVSRC=		nvidia
-.endif
-
-.if ${NVVERSION} < 358.009
-SUB_LIST+=	KLDNAME=nvidia
-.else
-SUB_LIST+=	KLDNAME=nvidia-modeset
-.endif
-
-.if ${NVVERSION} >= 530.03002 && ${NVVERSION} < 545.00
-SUB_PATCHES += extra-patch-src_nvidia-modeset_nvidia-modeset-freebsd.c
-.endif
-.if ${NVVERSION} < 460.039
-.  if ${NVVERSION} >= 358.009
-EXTRA_PATCHES+=	${FILESDIR}/extra-patch-src_nvidia-modeset_nvidia-modeset-freebsd.c
-.  endif
-SUB_PATCHES+=	extra-patch-src-nvidia_ctl.c \
-		extra-patch-src-nvidia_linux.c
-.elif ${NVVERSION} < 510.03901
-EXTRA_PATCHES+=	${FILESDIR}/460-patch-src-nvidia-nvidia_ctl.c \
-		${FILESDIR}/460-patch-src-nvidia-nvidia_linux.c \
-		${FILESDIR}/460-patch-src_nvidia-modeset_nvidia-modeset-freebsd.c
-.endif
-.if ${NVVERSION} < 470.04201
-SUB_PATCHES+=	extra-patch-src-nv-misc.h
-.endif
-
-OPTIONS_DEFINE=	ACPI_PM LINUX WBINVD DOCS
-OPTIONS_DEFINE_i386=	PAE
-OPTIONS_DEFAULT=	ACPI_PM LINUX
-
-ACPI_PM_DESC=		ACPI Power Management support
-LINUX_DESC=		Linux compatibility support
-PAE_DESC=		Physical Address Extensions support
-WBINVD_DESC=		Flush CPU caches directly with WBINVD
-
-.if ${NVVERSION} < 310.014
-OPTIONS_DEFINE+=	FREEBSD_AGP
-FREEBSD_AGP_DESC=	Use FreeBSD AGP GART driver
-.endif
+OPTIONS_DEFINE=	DOCS
 
 PLIST_SUB+=	MODULESDIR=${MODULESDIR}
 .if ${NVVERSION} < 410.057
@@ -160,9 +106,6 @@ PLIST_FILES+=	lib/libnvidia-wayland-client.so.${DISTVERSION}
 .endif
 
 CONFLICTS_INSTALL+=	nvidia-driver*
-.if ${PORTNAME} != nvidia-secondary-driver
-CONFLICTS_INSTALL+=	nvidia-secondary-driver
-.endif
 
 .include <bsd.port.pre.mk>
 
@@ -175,46 +118,15 @@ EXTRA_PATCHES+=	${WRKDIR}/${p}
 .endfor
 
 post-patch: .SILENT
+# Patch only needed for non-kmod
+	${REINPLACE_CMD} -e '/SUBDIR=\tsrc \\/d' -e 's/\tlib/SUBDIR=\tlib/' \
+		${WRKSRC}/Makefile
+	${REINPLACE_CMD} -e '/\.if exists(firmware)/,/\.endif/d' \
+		${WRKSRC}/Makefile
+
 .if ${NVVERSION} >= 390
 	${REINPLACE_CMD} -e 's|/man/man1|/share/man/man1|' ${WRKSRC}/nvml/man/Makefile
 .endif
-# We should support -CURRENT: kill the check (first #if __FreeBSD_version)
-	linenum=$$(${SED} -ne '/^#if __FreeBSD_version/ { = ; q ; }' \
-		${WRKSRC}/src/${NVSRC}/nv-freebsd.h) ; ${REINPLACE_CMD} \
-		-e "$$linenum,+2d" ${WRKSRC}/src/${NVSRC}/nv-freebsd.h
-# Adjust Linux headers #include's after FreeBSD src r246085
-	${REINPLACE_CMD} -E '/#include "machine\/\.\.\/linux(32)?\/linux.h"/ \
-		{ x ; s/.*/#include "machine\/..\/..\/compat\/linux\/linux_ioctl.h"/ ; H ; x ; }' \
-			${WRKSRC}/src/${NVSRC}/nvidia_linux.c
-# Fix bogus memset() call
-	${REINPLACE_CMD} -e '/memset/s/sizeof(ci/sizeof(*ci/' \
-		${WRKSRC}/src/${NVSRC}/nvidia_subr.c
-# Chase `sys/capability.h' rename to `sys/capsicum.h' in FreeBSD src r263232
-	${REINPLACE_CMD} -e 's:sys/capability\.h:sys/capsicum.h:' \
-		${WRKSRC}/src/${NVSRC}/nv-freebsd.h
-.if ${NVVERSION} >= 358.009
-	${REINPLACE_CMD} -e 's:sys/capability\.h:sys/capsicum.h:' \
-		${WRKSRC}/src/nvidia-modeset/nvidia-modeset-freebsd.c
-.endif
-# KPI of kmem_alloc_contig(),kmem_free() changed in FreeBSD src r338143,r338318
-.if ${NVVERSION} < 530.03002
-	${REINPLACE_CMD} \
-	    -e 's/kmem_alloc_contig(kmem_arena, /kmem_alloc_contig(/' \
-	    -e 's/kmem_free(kmem_arena, /kmem_free(/' \
-		${WRKSRC}/src/${NVSRC}/nvidia_subr.c
-.endif
-# Pull the right header after FreeBSD src r347984
-.if ${NVVERSION} >= 358.009
-	${REINPLACE_CMD} -e '/^#include/s:lock\.h:mutex.h:' \
-		${WRKSRC}/src/nvidia-modeset/nvidia-modeset-freebsd.c
-.endif
-# After src df38ada2931f, `sys/module.h' must be included after `sys/param.h'
-.if ${NVVERSION} >= 358.009
-	@${REINPLACE_CMD} -e '/^#include <sys\/param\.h>/d; \
-		/^#include <sys\/module\.h>/ { x; \
-		s:^:#include <sys/param.h>:; G; }' \
-		${WRKSRC}/src/nvidia-modeset/nvidia-modeset-freebsd.c
-.endif
 # Disable installation of Linux libraries (provided by the corresponding
 # `x11/linux-nvidia-libs' port or its slaves)
 	${REINPLACE_CMD} -e 's/exists(\/.*/& \&\& 0/' \
@@ -262,74 +174,16 @@ post-patch: .SILENT
 	gsed ${REINPLACE_ARGS} -E "s,/etc/egl/egl_external_platform\.d.{$$padding},${EGL_JSON_PATH}\x00," \
 		${WRKSRC}/obj/libEGL_nvidia.so.0
 .endif
-# Unbreak the build against -Werror,-Wunused-but-set-variable CFLAGS
-.if ${NVVERSION} < 450.51
-	${REINPLACE_CMD} -e '/void nvidia_dev_dtor/,+8s,.*status.*,,' \
-		${WRKSRC}/src/${NVSRC}/nvidia_dev.c
-.endif
 # Move symlinks under PREFIX
 .if ${NVVERSION} >= 525.08902
 	${REINPLACE_CMD} -e '/ln/s/$${LOCALBASE}\/lib/../' \
 		-e '/LIBDIR/!s/$${LOCALBASE}/$${DESTDIR}$${PREFIX}/' \
 		${WRKSRC}/lib/libnvidia-allocator/Makefile
 .endif
-# After src 2a99dd30dfaa, DRIVER_MODULE should not include nvidia_devclass
-.if ${OSVERSION} >= 1400058
-	${REINPLACE_CMD} -e '/^DRIVER_MODULE/s/, nvidia_devclass//' \
-		${WRKSRC}/src/${NVSRC}/nvidia_pci.c
-.endif
-# Catch up with pmap_unmapdev() and kmem_*() changes in 14-CURRENT
-.if ${OSVERSION} >= 1400070 && (${NVVERSION} < 470.25602  || ${NVVERSION} >= 480.00000 && ${NVVERSION} < 530.03002)
-	${REINPLACE_CMD} -e '/pmap_unmapdev/s,(vm_offset_t),,' \
-		${WRKSRC}/src/${NVSRC}/nvidia_os.c
-	${REINPLACE_CMD} -e '/vm_offset_t virtual_address/s,vm_offset_t ,char *,' \
-		${WRKSRC}/src/${NVSRC}/nv-freebsd.h
-	${REINPLACE_CMD} -e '/vm_offset_t address;/s,vm_offset_t ,void *,' \
-		${WRKSRC}/src/${NVSRC}/nvidia_subr.c
-.endif
-# Fix a K&R prototype
-.if ${NVVERSION:R} >= 390
-	${REINPLACE_CMD} -e '/nvlink_allocLock/s,(),(void),' \
-		${WRKSRC}/src/${NVSRC}/nvlink_freebsd.c
-.endif
-# Finally, process OPTIONS
-.if ${PORT_OPTIONS:MFREEBSD_AGP}
-	${REINPLACE_CMD} -E 's/undef (NV_SUPPORT_OS_AGP)/define \1/' \
-		${WRKSRC}/src/${NVSRC}/nv-freebsd.h
-.endif
-.if ${PORT_OPTIONS:MACPI_PM}
-	${REINPLACE_CMD} -E 's/undef (NV_SUPPORT_ACPI_PM)/define \1/' \
-		${WRKSRC}/src/${NVSRC}/nv-freebsd.h
-.endif
-.if ! ${PORT_OPTIONS:MLINUX}
-	${REINPLACE_CMD} -E 's/define (NV_SUPPORT_LINUX_COMPAT)/undef \1/' \
-		${WRKSRC}/src/${NVSRC}/nv-freebsd.h
-.  if ${NVVERSION} >= 358.009
-	${REINPLACE_CMD} -E 's/define (NVKMS_SUPPORT_LINUX_COMPAT)/undef \1/' \
-		${WRKSRC}/src/nvidia-modeset/nvidia-modeset-freebsd.c
-.  endif
-.endif
-.if ${PORT_OPTIONS:MPAE}
-	${REINPLACE_CMD} -E 's/undef (NV_SUPPORT_PAE)/define \1/' \
-		${WRKSRC}/src/${NVSRC}/nv-freebsd.h
-.endif
-.if ${PORT_OPTIONS:MWBINVD}
-	${REINPLACE_CMD} -E 's/undef (NV_USE_WBINVD)/define \1/' \
-		${WRKSRC}/src/${NVSRC}/nv-freebsd.h
-.endif
 # Conditionally install documentation (but you generally want it)
 .if ! ${PORT_OPTIONS:MDOCS}
 	${REINPLACE_CMD} -E 's/(x11).*/\1/ ; /doc/d' ${WRKSRC}/Makefile
 .endif
-# DMAP_MIN_ADDRESS and DMAP_MAX_ADDRESS is deleted from src at commit
-# 4dd828c80828637452a8a4e07a64e294c82e5d8b on main branch.
-# Note that there are about 10 days of broken window, as the commit
-# does not have corresponding version bump.
-.if ${OSVERSION} >= 1500051
-	${REINPLACE_CMD} -e 's/DMAP_MIN_ADDRESS/kva_layout.dmap_low/' \
-		-e 's/DMAP_MAX_ADDRESS/kva_layout.dmap_high/' \
-		${WRKSRC}/src/${NVSRC}/nvidia_subr.c
-.endif
 
 pre-install:
 	@${MKDIR} ${STAGEDIR}${PREFIX}/${MODULESDIR}/drivers \
@@ -359,9 +213,6 @@ post-install: .SILENT
 .if ${NVVERSION} < 352.009
 	${REINPLACE_CMD} -E '/(lib)?nvidia-(debugdump|smi|ml)/d' ${TMPPLIST}
 .endif
-.if ${NVVERSION} < 358.009
-	${REINPLACE_CMD} -e '/nvidia-modeset\.ko/d' ${TMPPLIST}
-.endif
 .if ${NVVERSION} < 410.057
 	${REINPLACE_CMD} -E '/lib(EGL|GLESv[12].*)_nvidia/d ; \
 		/lib(GLX|GLdispatch|OpenGL)/d ; \
@@ -393,10 +244,6 @@ post-install: .SILENT
 .if ${NVVERSION} < 545.000
 	${REINPLACE_CMD} -e '/libnvidia-gpucomp\.so/d' ${TMPPLIST}
 .endif
-.if ${NVVERSION} < 560.02803
-	${REINPLACE_CMD} -e '/nvidia_gsp_ga10x_fw\.ko/d' ${TMPPLIST}
-	${REINPLACE_CMD} -e '/nvidia_gsp_tu10x_fw\.ko/d' ${TMPPLIST}
-.endif
 
 .if ${NVVERSION} < 410.057
 # Rename some libraries and install a libmap file to resolve conflict with
diff --git a/x11/nvidia-driver/pkg-plist b/x11/nvidia-driver/pkg-plist
index 4c244c172570..d2b2e337a6f4 100644
--- a/x11/nvidia-driver/pkg-plist
+++ b/x11/nvidia-driver/pkg-plist
@@ -100,7 +100,3 @@ share/vulkan/implicit_layer.d/nvidia_layers.json
 %%EXTENSIONSDIR%%/libglx.so.1
 %%MODULESDIR%%/extensions/libglxserver_nvidia.so
 %%MODULESDIR%%/extensions/libglxserver_nvidia.so.1
-/%%KMODDIR%%/nvidia.ko
-/%%KMODDIR%%/nvidia-modeset.ko
-/%%KMODDIR%%/nvidia_gsp_ga10x_fw.ko
-/%%KMODDIR%%/nvidia_gsp_tu10x_fw.ko
diff --git a/x11/nvidia-kmod-304/Makefile b/x11/nvidia-kmod-304/Makefile
new file mode 100644
index 000000000000..76f6b4bc4af5
--- /dev/null
+++ b/x11/nvidia-kmod-304/Makefile
@@ -0,0 +1,8 @@
+DISTVERSION=	304.137
+# Explicitly set PORTREVISION as it can be overridden by the master port
+PORTREVISION=	0
+
+MASTERDIR=	${.CURDIR}/../nvidia-kmod
+PKGNAMESUFFIX=	-304
+
+.include "${MASTERDIR}/Makefile"
diff --git a/x11/nvidia-kmod-340/Makefile b/x11/nvidia-kmod-340/Makefile
new file mode 100644
index 000000000000..874e5e234d03
--- /dev/null
+++ b/x11/nvidia-kmod-340/Makefile
@@ -0,0 +1,8 @@
+DISTVERSION=	340.108
+# Explicitly set PORTREVISION as it can be overridden by the master port
+PORTREVISION=	0
+
+MASTERDIR=	${.CURDIR}/../nvidia-kmod
+PKGNAMESUFFIX=	-340
+
+.include "${MASTERDIR}/Makefile"
diff --git a/x11/nvidia-kmod-390/Makefile b/x11/nvidia-kmod-390/Makefile
new file mode 100644
index 000000000000..2e4db1f9b735
--- /dev/null
+++ b/x11/nvidia-kmod-390/Makefile
@@ -0,0 +1,8 @@
+DISTVERSION=	390.157
+# Explicitly set PORTREVISION as it can be overridden by the master port
+PORTREVISION=	0
+
+MASTERDIR=	${.CURDIR}/../nvidia-kmod
+PKGNAMESUFFIX=	-390
+
+.include "${MASTERDIR}/Makefile"
diff --git a/x11/nvidia-kmod-470/Makefile b/x11/nvidia-kmod-470/Makefile
new file mode 100644
index 000000000000..fa5651187a45
--- /dev/null
+++ b/x11/nvidia-kmod-470/Makefile
@@ -0,0 +1,8 @@
+DISTVERSION=	470.256.02
+# Explicitly set PORTREVISION as it can be overridden by the master port
+PORTREVISION=	0
+
+MASTERDIR=	${.CURDIR}/../nvidia-kmod
+PKGNAMESUFFIX=	-470
+
+.include "${MASTERDIR}/Makefile"
diff --git a/x11/nvidia-kmod-devel/Makefile b/x11/nvidia-kmod-devel/Makefile
new file mode 100644
index 000000000000..7798cba99767
--- /dev/null
+++ b/x11/nvidia-kmod-devel/Makefile
@@ -0,0 +1,8 @@
+DISTVERSION?=	580.82.07
+# Explicitly set PORTREVISION as it can be overridden by the master port
+PORTREVISION=	0
+
+MASTERDIR=	${.CURDIR}/../nvidia-kmod
+PKGNAMESUFFIX=	-devel
+
+.include "${MASTERDIR}/Makefile"
diff --git a/x11/nvidia-kmod/Makefile b/x11/nvidia-kmod/Makefile
new file mode 100644
index 000000000000..983ec63c0c2f
--- /dev/null
+++ b/x11/nvidia-kmod/Makefile
@@ -0,0 +1,243 @@
+# For those wondering why this port is not under `x11-drivers' category,
+# have a look at https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=121930.
+#
+# Starting with version 1.0-7667, NVidia has dropped support for numerous
+# "legacy" GPUs.  Consult NVidia README (the Appendix) to find out whether
+# you need to use legacy driver version and install one of corresponding
+# slave ports instead (`x11/nvidia-driver-470', `x11/nvidia-driver-390',
+# `x11/nvidia-driver-340', or `x11/nvidia-driver-304').
+#
+# To simplify testing of new feature branches and beta driver versions,
+# the port aims to support building against arbitrary DISTVERSION, i.e.
+# ``make DISTVERSION=xxx.yy.zz -DNO_CHECKSUM'' should typically work.
+
+PORTNAME?=	nvidia-kmod
+DISTVERSION?=	${NVIDIA_DISTVERSION}
+# Always try to set PORTREVISION as it can be overridden by the slave ports
+PORTREVISION?=	0
+CATEGORIES=	x11
+MASTER_SITES=	NVIDIA/XFree86/FreeBSD-${ARCH_SUFX}/${DISTVERSION}
+DISTNAME=	NVIDIA-FreeBSD-${ARCH_SUFX}-${DISTVERSION}
+DISTFILES=	${DISTNAME}${EXTRACT_SUFX}
+
+MAINTAINER?=	x11@FreeBSD.org
+COMMENT?=	kmod part of NVidia graphics card binary drivers for hardware OpenGL rendering
+WWW=		https://www.nvidia.com/object/unix.html
+
+LICENSE_FILE=	${WRKSRC}/doc/license.txt
+.include "${.CURDIR}/../nvidia-driver/Makefile.version"
+.include "${.CURDIR}/../nvidia-driver/Makefile.common"
+
+# the package provides lib32 versions of the libraries, which then depends
+# themselves in non existing lib32 libraries, so we don't want the package
+# to end up depending on non existing libraries
+NO_SHLIB_REQUIRES_GLOB=*:32
+
+# Choose proper distinfo file using PKGNAMESUFFIX for slave ports.
+DISTINFO_FILE=	${.CURDIR}/../nvidia-driver${PKGNAMESUFFIX}/distinfo
+
+# Share patches with main part of ports
+FILESDIR=	${.CURDIR}/../nvidia-driver/files
+PATCHDIR=	${FILESDIR}
+
+USES=		kmod uidfix
+.if ${NVVERSION} >= 470.04201
+USES+=		tar:xz
+.endif
+USE_LDCONFIG=	yes
+
+PIE_UNSAFE=	yes
+
+MAKE_ENV=	DEBUG_FLAGS=${DEBUG_FLAGS}
+SUB_FILES=	pkg-message
+SUB_PATCHES=	extra-patch-src-Makefile \
+		extra-patch-src-nv-freebsd.h
+.if ${NVVERSION} < 510.03901
+SUB_PATCHES+=	extra-patch-src-nvidia_dev.c \
+		extra-patch-src-nvidia_pci.c
+.endif
+.if ${NVVERSION} < 470.25602 || ${NVVERSION} >= 480.00000 && ${NVVERSION} < 530.03002
+SUB_PATCHES+=	extra-patch-src-nvidia_subr.c
+.endif
+
+# Temporarily disable GSP firmware as it is known to cause
+# issues with suspend/resume
+.if ${NVVERSION} >= 565.00000
+SUB_PATCHES+=	extra-gsp-patch-src-common-inc-nv_firmware_registry.h
+.endif
+
+.if ${NVVERSION} < 355.006
+NVSRC=		.
+.else
+NVSRC=		nvidia
+.endif
+
+.if ${NVVERSION} < 358.009
+SUB_LIST+=	KLDNAME=nvidia
+.else
+SUB_LIST+=	KLDNAME=nvidia-modeset
+.endif
+
+.if ${NVVERSION} >= 530.03002 && ${NVVERSION} < 545.00
+SUB_PATCHES += extra-patch-src_nvidia-modeset_nvidia-modeset-freebsd.c
+.endif
+.if ${NVVERSION} < 460.039
+.  if ${NVVERSION} >= 358.009
+EXTRA_PATCHES+=	${FILESDIR}/extra-patch-src_nvidia-modeset_nvidia-modeset-freebsd.c
+.  endif
+SUB_PATCHES+=	extra-patch-src-nvidia_ctl.c \
+		extra-patch-src-nvidia_linux.c
+.elif ${NVVERSION} < 510.03901
+EXTRA_PATCHES+=	${FILESDIR}/460-patch-src-nvidia-nvidia_ctl.c \
+		${FILESDIR}/460-patch-src-nvidia-nvidia_linux.c \
+		${FILESDIR}/460-patch-src_nvidia-modeset_nvidia-modeset-freebsd.c
+.endif
+.if ${NVVERSION} < 470.04201
+SUB_PATCHES+=	extra-patch-src-nv-misc.h
+.endif
+
+OPTIONS_DEFINE=	ACPI_PM LINUX WBINVD
+OPTIONS_DEFINE_i386=	PAE
+OPTIONS_DEFAULT=	ACPI_PM LINUX
+
+ACPI_PM_DESC=		ACPI Power Management support
+LINUX_DESC=		Linux compatibility support
+PAE_DESC=		Physical Address Extensions support
+WBINVD_DESC=		Flush CPU caches directly with WBINVD
+
+.if ${NVVERSION} < 310.014
+OPTIONS_DEFINE+=	FREEBSD_AGP
+FREEBSD_AGP_DESC=	Use FreeBSD AGP GART driver
+.endif
+
+CONFLICTS_INSTALL+=	nvidia-kmod*
+
+.include <bsd.port.pre.mk>
+
+pre-patch:
+.for p in ${SUB_PATCHES}
+	@${SED} 's/%%NVSRC%%/${NVSRC}/g' ${PATCHDIR}/${p}.in > ${WRKDIR}/${p}
+.endfor
+.for p in ${SUB_PATCHES}
+EXTRA_PATCHES+=	${WRKDIR}/${p}
+.endfor
+
+post-patch: .SILENT
+# Patch only needed for kmod
+	${REINPLACE_CMD} -e 's/SUBDIR=\tsrc \\/SUBDIR=\tsrc/' -e '/lib/,/doc/d' \
+		${WRKSRC}/Makefile
+	${REINPLACE_CMD} -e '/\.if exists(nvml)/,/\.endif/d' \
+		${WRKSRC}/Makefile
+
+# We should support -CURRENT: kill the check (first #if __FreeBSD_version)
+	linenum=$$(${SED} -ne '/^#if __FreeBSD_version/ { = ; q ; }' \
+		${WRKSRC}/src/${NVSRC}/nv-freebsd.h) ; ${REINPLACE_CMD} \
+		-e "$$linenum,+2d" ${WRKSRC}/src/${NVSRC}/nv-freebsd.h
+# Adjust Linux headers #include's after FreeBSD src r246085
+	${REINPLACE_CMD} -E '/#include "machine\/\.\.\/linux(32)?\/linux.h"/ \
+		{ x ; s/.*/#include "machine\/..\/..\/compat\/linux\/linux_ioctl.h"/ ; H ; x ; }' \
+			${WRKSRC}/src/${NVSRC}/nvidia_linux.c
+# Fix bogus memset() call
+	${REINPLACE_CMD} -e '/memset/s/sizeof(ci/sizeof(*ci/' \
+		${WRKSRC}/src/${NVSRC}/nvidia_subr.c
+# Chase `sys/capability.h' rename to `sys/capsicum.h' in FreeBSD src r263232
+	${REINPLACE_CMD} -e 's:sys/capability\.h:sys/capsicum.h:' \
+		${WRKSRC}/src/${NVSRC}/nv-freebsd.h
+.if ${NVVERSION} >= 358.009
+	${REINPLACE_CMD} -e 's:sys/capability\.h:sys/capsicum.h:' \
+		${WRKSRC}/src/nvidia-modeset/nvidia-modeset-freebsd.c
+.endif
+# KPI of kmem_alloc_contig(),kmem_free() changed in FreeBSD src r338143,r338318
+.if ${NVVERSION} < 530.03002
+	${REINPLACE_CMD} \
+	    -e 's/kmem_alloc_contig(kmem_arena, /kmem_alloc_contig(/' \
+	    -e 's/kmem_free(kmem_arena, /kmem_free(/' \
+		${WRKSRC}/src/${NVSRC}/nvidia_subr.c
+.endif
+# Pull the right header after FreeBSD src r347984
+.if ${NVVERSION} >= 358.009
+	${REINPLACE_CMD} -e '/^#include/s:lock\.h:mutex.h:' \
+		${WRKSRC}/src/nvidia-modeset/nvidia-modeset-freebsd.c
+.endif
+# After src df38ada2931f, `sys/module.h' must be included after `sys/param.h'
+.if ${NVVERSION} >= 358.009
+	@${REINPLACE_CMD} -e '/^#include <sys\/param\.h>/d; \
+		/^#include <sys\/module\.h>/ { x; \
+		s:^:#include <sys/param.h>:; G; }' \
+		${WRKSRC}/src/nvidia-modeset/nvidia-modeset-freebsd.c
+.endif
+# Do not execute afterinstall target (prevent automatic module registration
+# and "smart" installation of conflicting files heuristics)
+	${REINPLACE_CMD} -e 's/afterinstall/&_dontexecute/' ${WRKSRC}/Makefile
+	${REINPLACE_CMD} -e 's/beforeinstall/&_dontexecute/' \
+		${WRKSRC}/lib/Makefile ${WRKSRC}/src/${NVSRC}/Makefile
+# Unbreak the build against -Werror,-Wunused-but-set-variable CFLAGS
+.if ${NVVERSION} < 450.51
+	${REINPLACE_CMD} -e '/void nvidia_dev_dtor/,+8s,.*status.*,,' \
+		${WRKSRC}/src/${NVSRC}/nvidia_dev.c
+.endif
+# After src 2a99dd30dfaa, DRIVER_MODULE should not include nvidia_devclass
+.if ${OSVERSION} >= 1400058
+	${REINPLACE_CMD} -e '/^DRIVER_MODULE/s/, nvidia_devclass//' \
+		${WRKSRC}/src/${NVSRC}/nvidia_pci.c
+.endif
+# Catch up with pmap_unmapdev() and kmem_*() changes in 14-CURRENT
+.if ${OSVERSION} >= 1400070 && (${NVVERSION} < 470.25602  || ${NVVERSION} >= 480.00000 && ${NVVERSION} < 530.03002)
+	${REINPLACE_CMD} -e '/pmap_unmapdev/s,(vm_offset_t),,' \
+		${WRKSRC}/src/${NVSRC}/nvidia_os.c
+	${REINPLACE_CMD} -e '/vm_offset_t virtual_address/s,vm_offset_t ,char *,' \
+		${WRKSRC}/src/${NVSRC}/nv-freebsd.h
+	${REINPLACE_CMD} -e '/vm_offset_t address;/s,vm_offset_t ,void *,' \
+		${WRKSRC}/src/${NVSRC}/nvidia_subr.c
+.endif
+# Fix a K&R prototype
+.if ${NVVERSION:R} >= 390
+	${REINPLACE_CMD} -e '/nvlink_allocLock/s,(),(void),' \
+		${WRKSRC}/src/${NVSRC}/nvlink_freebsd.c
+.endif
+# Finally, process OPTIONS
+.if ${PORT_OPTIONS:MFREEBSD_AGP}
+	${REINPLACE_CMD} -E 's/undef (NV_SUPPORT_OS_AGP)/define \1/' \
+		${WRKSRC}/src/${NVSRC}/nv-freebsd.h
+.endif
+.if ${PORT_OPTIONS:MACPI_PM}
+	${REINPLACE_CMD} -E 's/undef (NV_SUPPORT_ACPI_PM)/define \1/' \
+		${WRKSRC}/src/${NVSRC}/nv-freebsd.h
+.endif
+.if ! ${PORT_OPTIONS:MLINUX}
+	${REINPLACE_CMD} -E 's/define (NV_SUPPORT_LINUX_COMPAT)/undef \1/' \
+		${WRKSRC}/src/${NVSRC}/nv-freebsd.h
+.  if ${NVVERSION} >= 358.009
+	${REINPLACE_CMD} -E 's/define (NVKMS_SUPPORT_LINUX_COMPAT)/undef \1/' \
+		${WRKSRC}/src/nvidia-modeset/nvidia-modeset-freebsd.c
+.  endif
+.endif
+.if ${PORT_OPTIONS:MPAE}
+	${REINPLACE_CMD} -E 's/undef (NV_SUPPORT_PAE)/define \1/' \
+		${WRKSRC}/src/${NVSRC}/nv-freebsd.h
+.endif
+.if ${PORT_OPTIONS:MWBINVD}
+	${REINPLACE_CMD} -E 's/undef (NV_USE_WBINVD)/define \1/' \
+		${WRKSRC}/src/${NVSRC}/nv-freebsd.h
+.endif
+# DMAP_MIN_ADDRESS and DMAP_MAX_ADDRESS is deleted from src at commit
+# 4dd828c80828637452a8a4e07a64e294c82e5d8b on main branch.
+# Note that there are about 10 days of broken window, as the commit
+# does not have corresponding version bump.
+.if ${OSVERSION} >= 1500051
+	${REINPLACE_CMD} -e 's/DMAP_MIN_ADDRESS/kva_layout.dmap_low/' \
+		-e 's/DMAP_MAX_ADDRESS/kva_layout.dmap_high/' \
+		${WRKSRC}/src/${NVSRC}/nvidia_subr.c
+.endif
+
+post-install: .SILENT
+# pkg-plist is already overbloated, so use these hacks instead of PLIST_SUB's
+.if ${NVVERSION} < 358.009
+	${REINPLACE_CMD} -e '/nvidia-modeset\.ko/d' ${TMPPLIST}
+.endif
+.if ${NVVERSION} < 560.02803
+	${REINPLACE_CMD} -e '/nvidia_gsp_ga10x_fw\.ko/d' ${TMPPLIST}
+	${REINPLACE_CMD} -e '/nvidia_gsp_tu10x_fw\.ko/d' ${TMPPLIST}
+.endif
+
+.include <bsd.port.post.mk>
diff --git a/x11/nvidia-kmod/pkg-descr b/x11/nvidia-kmod/pkg-descr
new file mode 100644
index 000000000000..82219fab2cae
--- /dev/null
+++ b/x11/nvidia-kmod/pkg-descr
@@ -0,0 +1,3 @@
+These are the official NVidia binary drivers for hardware OpenGL rendering
+in X11, using the GLX extensions.
+This port is the kmods-only part.
diff --git a/x11/nvidia-kmod/pkg-plist b/x11/nvidia-kmod/pkg-plist
new file mode 100644
index 000000000000..f48a97e7c1f3
--- /dev/null
+++ b/x11/nvidia-kmod/pkg-plist
@@ -0,0 +1,4 @@
+/%%KMODDIR%%/nvidia.ko
+/%%KMODDIR%%/nvidia-modeset.ko
+/%%KMODDIR%%/nvidia_gsp_ga10x_fw.ko
+/%%KMODDIR%%/nvidia_gsp_tu10x_fw.ko