From d1fd3bcac1ef7da7cd9624f87d8d6ab2768880f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joan=20Bruguera=20Mic=C3=B3?= Date: Sun, 15 Feb 2026 11:31:28 +0000 Subject: [PATCH] Tentative fix for NVIDIA 470.256.02 driver for Linux 7.0-rc1 --- common/inc/nv-linux.h | 3 +++ nvidia-drm/nvidia-dma-fence-helper.h | 7 ++++--- nvidia/nv.c | 23 +++++++++++++++-------- 3 files changed, 22 insertions(+), 11 deletions(-) diff --git a/common/inc/nv-linux.h b/common/inc/nv-linux.h index e095a89..2ab5074 100644 --- a/common/inc/nv-linux.h +++ b/common/inc/nv-linux.h @@ -223,6 +223,9 @@ static inline uid_t __kuid_val(uid_t uid) #include /* fb_info struct */ #include /* screen_info */ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 20, 0) +#include /* sysfb_primary_display */ +#endif #if !defined(CONFIG_PCI) #warning "Attempting to build driver for a platform with no PCI support!" diff --git a/nvidia-drm/nvidia-dma-fence-helper.h b/nvidia-drm/nvidia-dma-fence-helper.h index a09ab76..6221bf2 100644 --- a/nvidia-drm/nvidia-dma-fence-helper.h +++ b/nvidia-drm/nvidia-dma-fence-helper.h @@ -89,11 +89,12 @@ nv_dma_fence_default_wait(nv_dma_fence_t *fence, #endif } -static inline int nv_dma_fence_signal(nv_dma_fence_t *fence) { +// Rel. commit "dma-buf/dma-fence: Remove return code of signaling-functions" (Philipp Stanner, 1 Dec 2025) +static inline void nv_dma_fence_signal(nv_dma_fence_t *fence) { #if defined(NV_LINUX_FENCE_H_PRESENT) - return fence_signal(fence); + fence_signal(fence); #else - return dma_fence_signal(fence); + dma_fence_signal(fence); #endif } diff --git a/nvidia/nv.c b/nvidia/nv.c index 57b5024..ef7dde6 100644 --- a/nvidia/nv.c +++ b/nvidia/nv.c @@ -5639,8 +5639,15 @@ void NV_API_CALL nv_get_screen_info( * After commit b8466fe82b79 ("efi: move screen_info into efi init code") * in v6.7, 'screen_info' is exported as GPL licensed symbol for ARM64. */ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 20, 0) + // Rel. commit "sysfb: Replace screen_info with sysfb_primary_display" (Thomas Zimmermann, 26 Nov 2025) + const struct screen_info *si = &sysfb_primary_display.screen; +#elif NV_CHECK_EXPORT_SYMBOL(screen_info) + const struct screen_info *si = &screen_info; +#endif -#if NV_CHECK_EXPORT_SYMBOL(screen_info) +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 20, 0)) || \ + NV_CHECK_EXPORT_SYMBOL(screen_info) /* * If there is not a framebuffer console, return 0 size. * @@ -5648,21 +5655,21 @@ void NV_API_CALL nv_get_screen_info( * initialization, and then will be set to a value, such as * VIDEO_TYPE_VLFB or VIDEO_TYPE_EFI if an fbdev console is used. */ - if (screen_info.orig_video_isVGA > 1) + if (si->orig_video_isVGA > 1) { - NvU64 physAddr = screen_info.lfb_base; + NvU64 physAddr = si->lfb_base; #if defined(VIDEO_CAPABILITY_64BIT_BASE) - physAddr |= (NvU64)screen_info.ext_lfb_base << 32; + physAddr |= (NvU64)si->ext_lfb_base << 32; #endif /* Make sure base address is mapped to GPU BAR */ if (NV_IS_CONSOLE_MAPPED(nv, physAddr)) { *pPhysicalAddress = physAddr; - *pFbWidth = screen_info.lfb_width; - *pFbHeight = screen_info.lfb_height; - *pFbDepth = screen_info.lfb_depth; - *pFbPitch = screen_info.lfb_linelength; + *pFbWidth = si->lfb_width; + *pFbHeight = si->lfb_height; + *pFbDepth = si->lfb_depth; + *pFbPitch = si->lfb_linelength; *pFbSize = (NvU64)(*pFbHeight) * (NvU64)(*pFbPitch); } } -- 2.53.0