Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .kres.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ spec:
- kernel
- drbd-pkg
- gasket-driver-pkg
- nvidia-l4t-pkg
- nvidia-open-gpu-kernel-modules-lts-pkg
- nvidia-open-gpu-kernel-modules-production-pkg
- zfs-pkg
Expand Down
5 changes: 4 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ COMMON_ARGS += --build-arg=SOURCE_DATE_EPOCH=$(SOURCE_DATE_EPOCH)
# targets defines all the available targets

TARGETS = apparmor
TARGETS += base
TARGETS += ca-certificates
TARGETS += cni
TARGETS += containerd
Expand Down Expand Up @@ -98,9 +99,11 @@ TARGETS += zstd
TARGETS += kernel
TARGETS += drbd-pkg
TARGETS += gasket-driver-pkg
TARGETS += nvidia-l4t-pkg
TARGETS += nvidia-open-gpu-kernel-modules-lts-pkg
TARGETS += nvidia-open-gpu-kernel-modules-production-pkg
TARGETS += zfs-pkg

NONFREE_TARGETS = nonfree-kmod-nvidia-lts-pkg
NONFREE_TARGETS += nonfree-kmod-nvidia-production-pkg

Expand Down Expand Up @@ -187,7 +190,7 @@ nonfree: $(NONFREE_TARGETS) ## Builds all nonfree targets defined.

.PHONY: $(TARGETS) $(NONFREE_TARGETS)
$(TARGETS) $(NONFREE_TARGETS):
@$(MAKE) docker-$@ TARGET_ARGS="--tag=$(REGISTRY_AND_USERNAME)/$@:$(TAG) --push=$(PUSH)"
@$(MAKE) docker-$@ TARGET_ARGS="--tag=$(REGISTRY_AND_USERNAME)/$@:$(IMAGE_TAG) --push=$(PUSH)"

.PHONY: deps.png
deps.png: ## Generates a dependency graph of the Pkgfile.
Expand Down
5 changes: 5 additions & 0 deletions Pkgfile
Original file line number Diff line number Diff line change
Expand Up @@ -185,6 +185,11 @@ vars:
nvidia_driver_production_amd64_sha256: f822150666707ed3c383889e0e68d24e8ceb4033eebd19737f9b405069e89beb
nvidia_driver_production_amd64_sha512: 548afbaf726b69fc001de5c4964a6b57f06dc0aba29bf7e1b4345e0176c7c438b2fe972de83ee917ee187836fc005e76fe998c3dada34929bcdea0929a35fb26

nvidia_l4t_version: r36_release_v4.3
nvidia_l4t_version_sha256: 2c177804679e3ed650dabec6fa958388579896f170570c6171a1b6c386669216
nvidia_l4t_version_sha512: 31e3d67c46edc6f6b8fc243d314e3859b685e2e928bf95b71200776f689a8ee9d5a64ec44c361f6dac702ba7d285c5595b306e315fbaa1e11e54adf4888ce446


# renovate: datasource=github-tags depName=madler/pigz
pigz_version: 2.8
pigz_sha256: eb872b4f0e1f0ebe59c9f7bd8c506c4204893ba6a8492de31df416f0d5170fd0
Expand Down
12 changes: 12 additions & 0 deletions nvidia-l4t/patches/hwpm/001-manual.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
diff --git a/hwpm/drivers/tegra/hwpm/Makefile.t234.sources b/hwpm/drivers/tegra/hwpm/Makefile.t234.sources
--- a/hwpm/drivers/tegra/hwpm/Makefile.t234.sources
+++ b/hwpm/drivers/tegra/hwpm/Makefile.t234.sources
@@ -4,6 +4,8 @@

# SPDX-License-Identifier: GPL-2.0

+ccflags-y += -DNV_PLATFORM_DRIVER_STRUCT_REMOVE_RETURNS_VOID
+
ifeq ($(CONFIG_TEGRA_T234_HWPM),y)
nvhwpm-t234-objs += hal/t234/t234_aperture.o
nvhwpm-t234-objs += hal/t234/t234_interface.o
69 changes: 69 additions & 0 deletions nvidia-l4t/patches/nvdisplay/001-nvidia-drm-drv.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
diff --git a/kernel-open/conftest.sh b/kernel-open/conftest.sh
--- a/kernel-open/conftest.sh
+++ b/kernel-open/conftest.sh
@@ -6631,6 +6631,29 @@ compile_test() {
compile_check_conftest "$CODE" "NV_DRM_FBDEV_TTM_SETUP_PRESENT" "" "functions"
;;

+ drm_output_poll_changed)
+ #
+ # Determine whether drm_mode_config_funcs.output_poll_changed
+ # callback is present
+ #
+ # Removed by commit 446d0f4849b1 ("drm: Remove struct
+ # drm_mode_config_funcs.output_poll_changed") in v6.12. Hotplug
+ # event support is handled through the fbdev emulation interface
+ # going forward.
+ #
+ CODE="
+ #if defined(NV_DRM_DRM_MODE_CONFIG_H_PRESENT)
+ #include <drm/drm_mode_config.h>
+ #else
+ #include <drm/drm_crtc.h>
+ #endif
+ int conftest_drm_output_poll_changed_available(void) {
+ return offsetof(struct drm_mode_config_funcs, output_poll_changed);
+ }"
+
+ compile_check_conftest "$CODE" "NV_DRM_OUTPUT_POLL_CHANGED_PRESENT" "" "types"
+ ;;
+
drm_aperture_remove_conflicting_pci_framebuffers)
#
# Determine whether drm_aperture_remove_conflicting_pci_framebuffers is present.
diff --git a/kernel-open/nvidia-drm/nvidia-drm-drv.c b/kernel-open/nvidia-drm/nvidia-drm-drv.c
--- a/kernel-open/nvidia-drm/nvidia-drm-drv.c
+++ b/kernel-open/nvidia-drm/nvidia-drm-drv.c
@@ -126,6 +126,7 @@ static const char* nv_get_input_colorspace_name(

#if defined(NV_DRM_ATOMIC_MODESET_AVAILABLE)

+#if defined(NV_DRM_OUTPUT_POLL_CHANGED_PRESENT)
static void nv_drm_output_poll_changed(struct drm_device *dev)
{
struct drm_connector *connector = NULL;
@@ -169,6 +170,7 @@ static void nv_drm_output_poll_changed(struct drm_device *dev)
nv_drm_connector_list_iter_end(&conn_iter);
#endif
}
+#endif /* NV_DRM_OUTPUT_POLL_CHANGED_PRESENT */

static struct drm_framebuffer *nv_drm_framebuffer_create(
struct drm_device *dev,
@@ -206,7 +208,9 @@ static const struct drm_mode_config_funcs nv_mode_config_funcs = {
.atomic_check = nv_drm_atomic_check,
.atomic_commit = nv_drm_atomic_commit,

+ #if defined(NV_DRM_OUTPUT_POLL_CHANGED_PRESENT)
.output_poll_changed = nv_drm_output_poll_changed,
+ #endif
};

static void nv_drm_event_callback(const struct NvKmsKapiEvent *event)
--- a/kernel-open/nvidia-drm/nvidia-drm.Kbuild 2025-01-08 02:09:37.000000000 +0100
+++ b/kernel-open/nvidia-drm/nvidia-drm.Kbuild 2025-02-26 10:20:39.983937089 +0100
@@ -146,3 +147,4 @@ NV_CONFTEST_TYPE_COMPILE_TESTS += drm_un
NV_CONFTEST_TYPE_COMPILE_TESTS += drm_aperture_remove_conflicting_framebuffers_has_driver_arg
NV_CONFTEST_TYPE_COMPILE_TESTS += drm_aperture_remove_conflicting_framebuffers_has_no_primary_arg
NV_CONFTEST_TYPE_COMPILE_TESTS += drm_aperture_remove_conflicting_pci_framebuffers_has_driver_arg
+NV_CONFTEST_TYPE_COMPILE_TESTS += drm_output_poll_changed
15 changes: 15 additions & 0 deletions nvidia-l4t/patches/nvdisplay/002-nvidia-drm-gem.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
--- a/kernel-open/conftest.sh
+++ b/kernel-open/conftest.sh
@@ -5071,6 +5071,11 @@
CODE="
#include <drm/drm_gem.h>
+ #if defined(NV_LINUX_IOSYS_MAP_H_PRESENT)
+ typedef struct iosys_map nv_sysio_map_t;
+ #else
+ typedef struct dma_buf_map nv_sysio_map_t;
+ #endif
int conftest_drm_gem_object_vmap_has_map_arg(
- struct drm_gem_object *obj, struct dma_buf_map *map) {
+ struct drm_gem_object *obj, nv_sysio_map_t *map) {
return obj->funcs->vmap(obj, map);
}"
111 changes: 111 additions & 0 deletions nvidia-l4t/patches/nvdisplay/003-fbdev_linux_611.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
From 08ff2fc141df99bb279ce872bb390dff22633a8f Mon Sep 17 00:00:00 2001
From: Leigh Scott <leigh123linux@gmail.com>
Date: Sat, 17 Aug 2024 17:59:50 +0100
Subject: [PATCH] Fix 6.11 drm_fbdev_generic.h rename to drm_fbdev_ttm.h

---
kernel-open/conftest.sh | 19 +++++++++++++++++++
kernel-open/header-presence-tests.mk | 1 +
kernel-open/nvidia-drm/nvidia-drm-drv.c | 8 ++++++++
.../nvidia-drm/nvidia-drm-os-interface.h | 5 ++++-
kernel-open/nvidia-drm/nvidia-drm-sources.mk | 1 +
5 files changed, 33 insertions(+), 1 deletion(-)

diff --git a/kernel-open/conftest.sh b/kernel-open/conftest.sh
index 1226cea2b..4398e435f 100755
--- a/kernel-open/conftest.sh
+++ b/kernel-open/conftest.sh
@@ -6610,6 +6610,25 @@ compile_test() {
compile_check_conftest "$CODE" "NV_DRM_FBDEV_GENERIC_SETUP_PRESENT" "" "functions"
;;

+ drm_fbdev_ttm_setup)
+ #
+ # Determine whether drm_fbdev_ttm_setup is present.
+ #
+ # Added by commit 9060d7f49376 ("drm/fb-helper: Finish the
+ # generic fbdev emulation") in v4.19.
+ #
+ CODE="
+ #include <drm/drm_fb_helper.h>
+ #if defined(NV_DRM_DRM_FBDEV_TTM_H_PRESENT)
+ #include <drm/drm_fbdev_ttm.h>
+ #endif
+ void conftest_drm_fbdev_ttm_setup(void) {
+ drm_fbdev_ttm_setup();
+ }"
+
+ compile_check_conftest "$CODE" "NV_DRM_FBDEV_TTM_SETUP_PRESENT" "" "functions"
+ ;;
+
drm_aperture_remove_conflicting_pci_framebuffers)
#
# Determine whether drm_aperture_remove_conflicting_pci_framebuffers is present.
diff --git a/kernel-open/Kbuild b/kernel-open/Kbuild
index e8d2e02b3..40204ae48 100644
--- a/kernel-open/Kbuild
+++ b/kernel-open/Kbuild
@@ -225,6 +225,7 @@ NV_HEADER_PRESENCE_TESTS = \
drm/drm_atomic_uapi.h \
drm/drm_drv.h \
drm/drm_fbdev_generic.h \
+ drm/drm_fbdev_ttm.h \
drm/drm_framebuffer.h \
drm/drm_connector.h \
drm/drm_probe_helper.h \
diff --git a/kernel-open/nvidia-drm/nvidia-drm-drv.c b/kernel-open/nvidia-drm/nvidia-drm-drv.c
index 359ff0c47..c80d2d76c 100644
--- a/kernel-open/nvidia-drm/nvidia-drm-drv.c
+++ b/kernel-open/nvidia-drm/nvidia-drm-drv.c
@@ -73,6 +73,10 @@
#include <drm/drm_fbdev_generic.h>
#endif

+#if defined(NV_DRM_DRM_FBDEV_TTM_H_PRESENT)
+#include <drm/drm_fbdev_ttm.h>
+#endif
+
#include <linux/pci.h>
#include <linux/workqueue.h>

@@ -1851,7 +1855,11 @@ void nv_drm_register_drm_device(const nv_gpu_info_t *gpu_info)
drm_aperture_remove_conflicting_pci_framebuffers(pdev, nv_drm_driver.name);
#endif
}
+#if defined(NV_DRM_FBDEV_TTM_AVAILABLE)
+ drm_fbdev_ttm_setup(dev, 32);
+#else
drm_fbdev_generic_setup(dev, 32);
+#endif
}
#endif /* defined(NV_DRM_FBDEV_GENERIC_AVAILABLE) */

diff --git a/kernel-open/nvidia-drm/nvidia-drm-os-interface.h b/kernel-open/nvidia-drm/nvidia-drm-os-interface.h
index 6f8cfea91..55ea8a2f9 100644
--- a/kernel-open/nvidia-drm/nvidia-drm-os-interface.h
+++ b/kernel-open/nvidia-drm/nvidia-drm-os-interface.h
@@ -58,8 +58,11 @@ typedef struct nv_timer nv_drm_timer;
#error "Need to define kernel timer callback primitives for this OS"
#endif

-#if defined(NV_DRM_FBDEV_GENERIC_SETUP_PRESENT) && defined(NV_DRM_APERTURE_REMOVE_CONFLICTING_PCI_FRAMEBUFFERS_PRESENT)
+#if defined(NV_DRM_FBDEV_GENERIC_SETUP_PRESENT) || defined(NV_DRM_FBDEV_TTM_SETUP_PRESENT) && defined(NV_DRM_APERTURE_REMOVE_CONFLICTING_PCI_FRAMEBUFFERS_PRESENT)
#define NV_DRM_FBDEV_GENERIC_AVAILABLE
+#if defined(NV_DRM_FBDEV_TTM_SETUP_PRESENT)
+#define NV_DRM_FBDEV_TTM_AVAILABLE
+#endif
#endif

struct page;
diff --git a/kernel-open/nvidia-drm/nvidia-drm.Kbuild b/kernel-open/nvidia-drm/nvidia-drm.Kbuild
index 7ef0c5b8f..247096b70 100644
--- a/kernel-open/nvidia-drm/nvidia-drm.Kbuild
+++ b/kernel-open/nvidia-drm/nvidia-drm.Kbuild
@@ -87,6 +87,7 @@ NV_CONFTEST_FUNCTION_COMPILE_TESTS += sy
NV_CONFTEST_FUNCTION_COMPILE_TESTS += drm_aperture_remove_conflicting_framebuffers
NV_CONFTEST_FUNCTION_COMPILE_TESTS += drm_aperture_remove_conflicting_pci_framebuffers
NV_CONFTEST_FUNCTION_COMPILE_TESTS += drm_fbdev_generic_setup
+NV_CONFTEST_FUNCTION_COMPILE_TESTS += drm_fbdev_ttm_setup

NV_CONFTEST_TYPE_COMPILE_TESTS += drm_bus_present
NV_CONFTEST_TYPE_COMPILE_TESTS += drm_bus_has_bus_type
92 changes: 92 additions & 0 deletions nvidia-l4t/patches/nvdisplay/004-drm_fop_flags_linux_612.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
From 8ac26d3c66ea88b0f80504bdd1e907658b41609d Mon Sep 17 00:00:00 2001
From: Rahul Rameshbabu <rrameshbabu@nvidia.com>
Date: Tue, 12 Nov 2024 15:01:16 -0800
Subject: [PATCH] nvidia-drm: Set FOP_UNSIGNED_OFFSET for nv_drm_fops.fop_flags
if present

Linux kernel commit 641bb4394f40 ("fs: move FMODE_UNSIGNED_OFFSET to
fop_flags") introduced a new .fop_flags define, FOP_UNSIGNED_OFFSET, for
struct file_operations. A check in drm_open_helper was added to ensure DRM
device drivers mark that all file offsets passed for working with DRM fs
nodes are unsigned values. If a DRM device driver fails to set this static
member, opening DRM device nodes (/dev/dri/card*) will fail. This commit
will land in Linux kernel v6.12.

To ensure DRM clients will continue to function with kernel v6.12 and
above, set FOP_UNSIGNED_OFFSET for nv_drm_fops.fop_flags if
FOP_UNSIGNED_OFFSET is present in the linux kernel headers being built
against. Without doing so, userspace DRM clients will fail to function. An
example is being unable to launch Wayland compositors.

KWin logs without this change:
kwin_core: Failed to open /dev/dri/card1 device (Invalid argument)
kwin_wayland_drm: failed to open drm device at "/dev/dri/card1"
kwin_core: Failed to open /dev/dri/card0 device (Invalid argument)
kwin_wayland_drm: failed to open drm device at "/dev/dri/card0"
kwin_wayland_drm: No suitable DRM devices have been found

Linux kernel warning generated without this change:
[Oct 2 02:15] ------------[ cut here ]------------
[ +0.000009] WARNING: CPU: 2 PID: 464 at drivers/gpu/drm/drm_file.c:312 drm_open_helper+0x134/0x150
<snip>
[ +0.000108] Unloaded tainted modules: nvidia(OE):1 nvidia_modeset(OE):1 nvidia_drm(OE):1 [last unloaded: ttm]
[ +0.000024] CPU: 2 UID: 0 PID: 464 Comm: systemd-logind Tainted: G OE 6.12.0-rc1-next-20241001-sound+ #10 c8090f98b0209abebde89ba1e4c08c75331eef4d
[ +0.000016] Tainted: [O]=OOT_MODULE, [E]=UNSIGNED_MODULE
[ +0.000004] Hardware name: System manufacturer PRIME Z390-A/PRIME Z390-A, BIOS 0224 08/14/2018
[ +0.000005] RIP: 0010:drm_open_helper+0x134/0x150
<snip>
[ +0.000005] Call Trace:
[ +0.000006] <TASK>
[ +0.000004] ? drm_open_helper+0x134/0x150
[ +0.000008] ? __warn.cold+0x93/0xf6
[ +0.000011] ? drm_open_helper+0x134/0x150
[ +0.000009] ? report_bug+0xff/0x140
[ +0.000009] ? handle_bug+0x58/0x90
[ +0.000010] ? exc_invalid_op+0x17/0x70
[ +0.000010] ? asm_exc_invalid_op+0x1a/0x20
[ +0.000018] ? drm_open_helper+0x134/0x150
[ +0.000008] drm_open+0x73/0x110
[ +0.000007] drm_stub_open+0x9b/0xd0
[ +0.000009] chrdev_open+0xb0/0x230
[ +0.000014] ? __pfx_chrdev_open+0x10/0x10
[ +0.000011] do_dentry_open+0x14c/0x4a0
[ +0.000013] vfs_open+0x2e/0xe0
[ +0.000009] path_openat+0x82f/0x13f0
[ +0.000016] do_filp_open+0xc4/0x170
[ +0.000020] do_sys_openat2+0xae/0xe0
[ +0.000010] __x64_sys_openat+0x55/0xa0
[ +0.000009] do_syscall_64+0x82/0x190
[ +0.000008] ? do_readlinkat+0xc5/0x180
[ +0.000008] ? syscall_exit_to_user_mode+0x37/0x1c0
[ +0.000010] ? do_syscall_64+0x8e/0x190
[ +0.000007] ? do_sys_openat2+0x9c/0xe0
[ +0.000009] ? syscall_exit_to_user_mode+0x37/0x1c0
[ +0.000008] ? do_syscall_64+0x8e/0x190
[ +0.000007] ? syscall_exit_to_user_mode+0x37/0x1c0
[ +0.000007] ? do_syscall_64+0x8e/0x190
[ +0.000006] ? do_syscall_64+0x8e/0x190
[ +0.000007] entry_SYSCALL_64_after_hwframe+0x76/0x7e
[ +0.000012] RIP: 0033:0x7f90c1cec2e3
<snip>
[ +0.000004] ---[ end trace 0000000000000000 ]---

Signed-off-by: Rahul Rameshbabu <rrameshbabu@nvidia.com>
---
kernel-open/nvidia-drm/nvidia-drm-drv.c | 4 ++++
1 file changed, 4 insertions(+)

diff --git a/kernel-open/nvidia-drm/nvidia-drm-drv.c b/kernel-open/nvidia-drm/nvidia-drm-drv.c
index 8cb942193..16f0d13e1 100644
--- a/kernel-open/nvidia-drm/nvidia-drm-drv.c
+++ b/kernel-open/nvidia-drm/nvidia-drm-drv.c
@@ -1711,6 +1711,10 @@ static const struct file_operations nv_drm_fops = {
.read = drm_read,

.llseek = noop_llseek,
+
+#if defined(FOP_UNSIGNED_OFFSET)
+ .fop_flags = FOP_UNSIGNED_OFFSET,
+#endif
};

static const struct drm_ioctl_desc nv_drm_ioctls[] = {
Loading