Skip to content

Commit

Permalink
nvidia: fix for 6.13
Browse files Browse the repository at this point in the history
  • Loading branch information
pongo1231 committed Dec 19, 2024
1 parent ddc5496 commit 49fe01a
Show file tree
Hide file tree
Showing 7 changed files with 507 additions and 21 deletions.
2 changes: 1 addition & 1 deletion configs/victus/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
{
imports = [
(module /amdcpu.nix)
#(import (module /nvidia.nix) { platform = "amd"; })
(import (module /nvidia.nix) { platform = "amd"; })
(module /power.nix)
(module /libvirt.nix)
(import (module /samba.nix) { sharePath = "/home/pongo/Public"; })
Expand Down
51 changes: 31 additions & 20 deletions modules/nvidia.nix
Original file line number Diff line number Diff line change
Expand Up @@ -19,25 +19,43 @@
let generic = args: finalAttrs.callPackage (import "${inputs.nixpkgs}/pkgs/os-specific/linux/nvidia-x11/generic.nix" args) { };
in {
nvidiaPackages.production = (generic {
version = "565.57.01";
sha256_64bit = "sha256-buvpTlheOF6IBPWnQVLfQUiHv4GcwhvZW3Ks0PsYLHo=";
openSha256 = "sha256-/tM3n9huz1MTE6KKtTCBglBMBGGL/GOHi5ZSUag4zXA=";
settingsSha256 = "sha256-H7uEe34LdmUFcMcS6bz7sbpYhg9zPCb/5AmZZFTx1QA=";
version = "565.77";
sha256_64bit = "sha256-CnqnQsRrzzTXZpgkAtF7PbH9s7wbiTRNcM0SPByzFHw=";
openSha256 = "sha256-Fxo0t61KQDs71YA8u7arY+503wkAc1foaa51vi2Pl5I=";
settingsSha256 = "sha256-VUetj3LlOSz/LB+DDfMCN34uA4bNTTpjDrb6C6Iwukk=";
persistencedSha256 = "";
#patches = [ (patch /nvidia/0006-Fix-for-6.12.0-rc1-drm_mode_config_funcs.output_poll.patch) ];
}).overrideAttrs (prevAttrs': {

patches = [
(patch /nvidia/6.13/0001-KBuild-changes.patch)
(patch /nvidia/6.13/0002-FROM-AOSC-Use-linux-aperture.c-for-removing-conflict.patch)
(patch /nvidia/6.13/0003-FROM-AOSC-TTM-fbdev-emulation-for-Linux-6.13.patch)
];
}).overrideAttrs (finalAttrs': prevAttrs': {
# patched builder.sh to not include some egl libraries to prevent apps from blocking nvidia_drm unloading
#builder = (patch /nvidia/builder.sh);

patches = prevAttrs'.patches ++ [

makeFlags = [
"IGNORE_PREEMPT_RT_PRESENCE=1"
"NV_BUILD_SUPPORTS_HMM=1"
"SYSSRC=${finalAttrs.kernel.dev}/lib/modules/${finalAttrs.kernel.modDirVersion}/source"
"SYSOUT=${finalAttrs.kernel.dev}/lib/modules/${finalAttrs.kernel.modDirVersion}/build"
];

passthru = prevAttrs'.passthru // {
open = prevAttrs'.passthru.open.overrideAttrs (prevAttrs'': {
open = prevAttrs'.passthru.open.overrideAttrs (finalAttrs'': prevAttrs'': {
patches = prevAttrs''.patches ++ [
#(patch /nvidia/open/0006-Fix-for-6.12.0-rc1-drm_mode_config_funcs.output_poll.patch)
#(patch /nvidia/open/0007-Replace-PageSwapCache-for-6.12-kernel.patch)
(patch /nvidia/6.13/0004-OPEN-Fix-MODULE_IMPORT_NS.patch)
(patch /nvidia/6.13/0005-OPEN-disable-LKCA.patch)
];

makeFlags = [
"SYSSRC=${finalAttrs.kernel.dev}/lib/modules/${finalAttrs.kernel.modDirVersion}/source"
"SYSOUT=${finalAttrs.kernel.dev}/lib/modules/${finalAttrs.kernel.modDirVersion}/build"
"MODLIB=$(out)/lib/modules/${finalAttrs.kernel.modDirVersion}"
{
aarch64-linux = "TARGET_ARCH=aarch64";
x86_64-linux = "TARGET_ARCH=x86_64";
}.${finalAttrs.stdenv.hostPlatform.system}
];
});

Expand All @@ -51,15 +69,8 @@
prime = {
offload.enable = true;
nvidiaBusId = "PCI:1:0:0";
} // lib.optionalAttrs
(platform == "intel")
{
intelBusId = "PCI:0:2:0";
} // lib.optionalAttrs
(platform == "amd")
{
amdgpuBusId = "PCI:5:0:0";
};
} // lib.optionalAttrs (platform == "intel") { intelBusId = "PCI:0:2:0"; }
// lib.optionalAttrs (platform == "amd") { amdgpuBusId = "PCI:5:0:0"; };
powerManagement = {
enable = true;
finegrained = true;
Expand Down
61 changes: 61 additions & 0 deletions patches/nvidia/6.13/0001-KBuild-changes.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
From 74962a62abfc350c26d1cf7cc066ef7113a30108 Mon Sep 17 00:00:00 2001
From: xtex <[email protected]>
Date: Sat, 14 Dec 2024 12:39:40 +0800
Subject: [PATCH] Fix symbolic links for Linux kernel 6.13-rc1

Cherry-pick of abc88d52ee5e86decd5e98b3223d3feec0dd66bc from nvidia-driver tracking repo.

Link: https://gist.github.com/joanbm/d1f89391a4b20f4b56ba931ef6ca62da
Link: https://github.com/NVIDIA/open-gpu-kernel-modules/issues/747
Author: Joan Bruguera <[email protected]>
---
kernel/nvidia-modeset/nvidia-modeset.Kbuild | 8 +++++---
kernel/nvidia/nvidia.Kbuild | 8 +++++---
2 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/kernel/nvidia-modeset/nvidia-modeset.Kbuild b/kernel/nvidia-modeset/nvidia-modeset.Kbuild
index 9698b59e2..d0c244f62 100644
--- a/kernel/nvidia-modeset/nvidia-modeset.Kbuild
+++ b/kernel/nvidia-modeset/nvidia-modeset.Kbuild
@@ -40,13 +40,15 @@ NV_KERNEL_MODULE_TARGETS += $(NVIDIA_MODESET_KO)
NVIDIA_MODESET_BINARY_OBJECT := $(src)/nvidia-modeset/nv-modeset-kernel.o_binary
NVIDIA_MODESET_BINARY_OBJECT_O := nvidia-modeset/nv-modeset-kernel.o

-quiet_cmd_symlink = SYMLINK $@
-cmd_symlink = ln -sf $< $@
+# Rel. commit 80f289101690 "kbuild: change working directory to external module directory with M=" (Masahiro Yamada, 10 Nov 2024)
+# Ensure `$<` is absolute, since the link target is resolved relative to its path, not from where `ln` is run from.
+quiet_cmd_symlinkabs = SYMLINK $@
+cmd_symlinkabs = ln -sf $(abspath $<) $@

targets += $(NVIDIA_MODESET_BINARY_OBJECT_O)

$(obj)/$(NVIDIA_MODESET_BINARY_OBJECT_O): $(NVIDIA_MODESET_BINARY_OBJECT) FORCE
- $(call if_changed,symlink)
+ $(call if_changed,symlinkabs)

nvidia-modeset-y += $(NVIDIA_MODESET_BINARY_OBJECT_O)

diff --git a/kernel/nvidia/nvidia.Kbuild b/kernel/nvidia/nvidia.Kbuild
index ea4ef5bad..4262c6f35 100644
--- a/kernel/nvidia/nvidia.Kbuild
+++ b/kernel/nvidia/nvidia.Kbuild
@@ -40,13 +40,15 @@ NVIDIA_KO = nvidia/nvidia.ko
NVIDIA_BINARY_OBJECT := $(src)/nvidia/nv-kernel.o_binary
NVIDIA_BINARY_OBJECT_O := nvidia/nv-kernel.o

-quiet_cmd_symlink = SYMLINK $@
- cmd_symlink = ln -sf $< $@
+# Rel. commit 80f289101690 "kbuild: change working directory to external module directory with M=" (Masahiro Yamada, 10 Nov 2024)
+# Ensure `$<` is absolute, since the link target is resolved relative to its path, not from where `ln` is run from.
+quiet_cmd_symlinkabs = SYMLINK $@
+ cmd_symlinkabs = ln -sf $(abspath $<) $@

targets += $(NVIDIA_BINARY_OBJECT_O)

$(obj)/$(NVIDIA_BINARY_OBJECT_O): $(NVIDIA_BINARY_OBJECT) FORCE
- $(call if_changed,symlink)
+ $(call if_changed,symlinkabs)

nvidia-y += $(NVIDIA_BINARY_OBJECT_O)

Original file line number Diff line number Diff line change
@@ -0,0 +1,153 @@
From 8113cd50461f05da52b66934237415dd303ec55c Mon Sep 17 00:00:00 2001
From: Bingwu Zhang <[email protected]>
Date: Sat, 7 Dec 2024 23:01:26 +0800
Subject: [PATCH 2/3] FROM AOSC: Use linux/aperture.c for removing conflicting
PCI devices on Linux 6.13.0-rc1+
X-Developer-Signature: v=1; a=openpgp-sha256; l=6111; [email protected];
h=from:subject; bh=hS408kVBp8zz0JO5do1a5Ut1vawCN67uYWAOfNTDy/w=;
b=owGbwMvMwCW2U4Ij7wZL9ETG02pJDOkhRf8j7mS/f32ZLdl9b2TWxCs3m5lyr+aoKs8zKJFn7
/OcNSmho5SFQYyLQVZMkaXIsMGbVSedX3RZuSzMHFYmkCEMXJwCMBHD1YwMhyfeyKryPeXAv2pm
q5nasVPaO/YZnf4Q8X6PiPPvW3+PcDIy3HF1/3BpUxDXm5sWDPxPGJp/l2X9OHr21zPZv7ZrCmd
M5AEA
X-Developer-Key: [email protected]; a=openpgp;
fpr=7231804B052C670F15A6771DB918086ED8045B91

Link: https://github.com/torvalds/linux/commit/689274a56c0c088796d359f6c6267323931a2429
Link: https://github.com/torvalds/linux/commit/7283f862bd991c8657e9bf1c02db772fcf018f13
Link: https://github.com/NVIDIA/open-gpu-kernel-modules/issues/749
---
conftest.sh | 19 +++++++++++++++++++
header-presence-tests.mk | 1 +
nvidia-drm/nvidia-drm-drv.c | 15 +++++++++++++++
nvidia-drm/nvidia-drm-os-interface.h | 10 ++++++++++
nvidia-drm/nvidia-drm-sources.mk | 1 +
5 files changed, 46 insertions(+)

diff --git a/kernel/conftest.sh b/kernel/conftest.sh
index fdceda72da33..5a0f39e0b2a7 100755
--- a/kernel/conftest.sh
+++ b/kernel/conftest.sh
@@ -6615,6 +6615,8 @@ compile_test() {
# Added by commit 2916059147ea ("drm/aperture: Add infrastructure
# for aperture ownership") in v5.14.
#
+ # Removed by commit 689274a56c0c ("drm: Remove DRM aperture helpers") in v6.13.
+ #
CODE="
#if defined(NV_DRM_DRM_APERTURE_H_PRESENT)
#include <drm/drm_aperture.h>
@@ -6626,6 +6628,23 @@ compile_test() {
compile_check_conftest "$CODE" "NV_DRM_APERTURE_REMOVE_CONFLICTING_PCI_FRAMEBUFFERS_PRESENT" "" "functions"
;;

+ aperture_remove_conflicting_pci_devices)
+ #
+ # Determine whether aperture_remove_conflicting_pci_devices is present.
+ #
+ # Added by commit 7283f862bd99 ("drm: Implement DRM aperture helpers under video/") in v6.0.
+ #
+ CODE="
+ #if defined(NV_LINUX_APERTURE_H_PRESENT)
+ #include <linux/aperture.h>
+ #endif
+ void conftest_aperture_remove_conflicting_pci_devices(void) {
+ aperture_remove_conflicting_pci_devices();
+ }"
+
+ compile_check_conftest "$CODE" "NV_APERTURE_REMOVE_CONFLICTING_PCI_DEVICES_PRESENT" "" "functions"
+ ;;
+
drm_aperture_remove_conflicting_pci_framebuffers_has_driver_arg)
#
# Determine whether drm_aperture_remove_conflicting_pci_framebuffers
diff --git a/kernel/header-presence-tests.mk b/kernel/header-presence-tests.mk
index 9d5217a9f8b9..b02685418629 100644
--- a/kernel/header-presence-tests.mk
+++ b/kernel/header-presence-tests.mk
@@ -34,6 +34,7 @@ NV_HEADER_PRESENCE_TESTS = \
generated/autoconf.h \
generated/compile.h \
generated/utsrelease.h \
+ linux/aperture.h \
linux/efi.h \
linux/kconfig.h \
linux/platform/tegra/mc_utils.h \
diff --git a/kernel/nvidia-drm/nvidia-drm-drv.c b/kernel/nvidia-drm/nvidia-drm-drv.c
index 8f905f821444..57a4ab82b3fc 100644
--- a/kernel/nvidia-drm/nvidia-drm-drv.c
+++ b/kernel/nvidia-drm/nvidia-drm-drv.c
@@ -65,7 +65,16 @@
#endif

#if defined(NV_DRM_FBDEV_AVAILABLE)
+// Commit 7283f862bd99 ("drm: Implement DRM aperture helpers under video/")
+// moved implementation of drm_aperture_... to linux/aperture.c.
+// Commit 689274a56c0c ("drm: Remove DRM aperture helpers")
+// removed drm/drm_aperture.h.
+#if defined(NV_DRM_APERTURE_REMOVE_CONFLICTING_PCI_FRAMEBUFFERS_PRESENT)
#include <drm/drm_aperture.h>
+#endif
+#if defined(NV_APERTURE_REMOVE_CONFLICTING_PCI_DEVICES_PRESENT)
+#include <linux/aperture.h>
+#endif
#include <drm/drm_fb_helper.h>
#endif

@@ -2013,10 +2022,16 @@ void nv_drm_register_drm_device(const nv_gpu_info_t *gpu_info)
if (bus_is_pci) {
struct pci_dev *pdev = to_pci_dev(device);

+#if defined(NV_DRM_APERTURE_REMOVE_CONFLICTING_PCI_FRAMEBUFFERS_PRESENT)
+ printk(KERN_INFO "AOSC OS: %s: using drm_aperture for old kernels\n", nv_drm_driver.name);
#if defined(NV_DRM_APERTURE_REMOVE_CONFLICTING_PCI_FRAMEBUFFERS_HAS_DRIVER_ARG)
drm_aperture_remove_conflicting_pci_framebuffers(pdev, &nv_drm_driver);
#else
drm_aperture_remove_conflicting_pci_framebuffers(pdev, nv_drm_driver.name);
+#endif
+#elif defined(NV_APERTURE_REMOVE_CONFLICTING_PCI_DEVICES_PRESENT)
+ printk(KERN_INFO "AOSC OS: %s: using linux/aperture workaround for Linux 6.13+\n", nv_drm_driver.name);
+ aperture_remove_conflicting_pci_devices(pdev, nv_drm_driver.name);
#endif
nvKms->framebufferConsoleDisabled(nv_dev->pDevice);
}
diff --git a/kernel/nvidia-drm/nvidia-drm-os-interface.h b/kernel/nvidia-drm/nvidia-drm-os-interface.h
index a6b0f947e0ab..71ca5f226ad7 100644
--- a/kernel/nvidia-drm/nvidia-drm-os-interface.h
+++ b/kernel/nvidia-drm/nvidia-drm-os-interface.h
@@ -63,11 +63,21 @@ typedef struct nv_timer nv_drm_timer;
#define NV_DRM_FBDEV_GENERIC_AVAILABLE
#endif

+#if defined(NV_DRM_FBDEV_GENERIC_SETUP_PRESENT) && defined(NV_APERTURE_REMOVE_CONFLICTING_PCI_DEVICES_PRESENT)
+#define NV_DRM_FBDEV_AVAILABLE
+#define NV_DRM_FBDEV_GENERIC_AVAILABLE
+#endif
+
#if defined(NV_DRM_FBDEV_TTM_SETUP_PRESENT) && defined(NV_DRM_APERTURE_REMOVE_CONFLICTING_PCI_FRAMEBUFFERS_PRESENT)
#define NV_DRM_FBDEV_AVAILABLE
#define NV_DRM_FBDEV_TTM_AVAILABLE
#endif

+#if defined(NV_DRM_FBDEV_TTM_SETUP_PRESENT) && defined(NV_APERTURE_REMOVE_CONFLICTING_PCI_DEVICES_PRESENT)
+#define NV_DRM_FBDEV_AVAILABLE
+#define NV_DRM_FBDEV_TTM_AVAILABLE
+#endif
+
struct page;

/* Set to true when the atomic modeset feature is enabled. */
diff --git a/kernel/nvidia-drm/nvidia-drm-sources.mk b/kernel/nvidia-drm/nvidia-drm-sources.mk
index 9aaebd04ace2..a4dcad6de609 100644
--- a/kernel/nvidia-drm/nvidia-drm-sources.mk
+++ b/kernel/nvidia-drm/nvidia-drm-sources.mk
@@ -66,6 +66,7 @@ NV_CONFTEST_FUNCTION_COMPILE_TESTS += dma_fence_set_error
NV_CONFTEST_FUNCTION_COMPILE_TESTS += fence_set_error
NV_CONFTEST_FUNCTION_COMPILE_TESTS += sync_file_get_fence
NV_CONFTEST_FUNCTION_COMPILE_TESTS += drm_aperture_remove_conflicting_pci_framebuffers
+NV_CONFTEST_FUNCTION_COMPILE_TESTS += aperture_remove_conflicting_pci_devices
NV_CONFTEST_FUNCTION_COMPILE_TESTS += drm_fbdev_generic_setup
NV_CONFTEST_FUNCTION_COMPILE_TESTS += drm_fbdev_ttm_setup
NV_CONFTEST_FUNCTION_COMPILE_TESTS += drm_connector_attach_hdr_output_metadata_property
--
2.47.1

Loading

0 comments on commit 49fe01a

Please sign in to comment.