From f4685689585585dea3cf6d193754de92f9f9eb2f Mon Sep 17 00:00:00 2001 From: Bernhard Stoeckner Date: Thu, 17 Apr 2025 17:45:32 +0200 Subject: [PATCH] 535.247.01 --- README.md | 8 +- kernel-open/Kbuild | 7 +- kernel-open/common/inc/nvmisc.h | 36 +++ kernel-open/conftest.sh | 220 +++++++++++++++++- kernel-open/nvidia-drm/nvidia-drm-drv.c | 3 + kernel-open/nvidia-drm/nvidia-drm.Kbuild | 1 + .../nvidia-modeset/nvidia-modeset-linux.c | 5 + .../nvidia-modeset/nvidia-modeset.Kbuild | 1 + kernel-open/nvidia-uvm/uvm_linux.h | 2 +- kernel-open/nvidia-uvm/uvm_va_space_mm.c | 6 +- kernel-open/nvidia/internal_crypt_lib.h | 4 +- kernel-open/nvidia/libspdm_ecc.c | 136 ++++++++--- kernel-open/nvidia/nv-mmap.c | 4 + kernel-open/nvidia/nvidia.Kbuild | 6 + kernel-open/nvidia/os-mlock.c | 56 ++++- src/common/inc/nvBldVer.h | 20 +- src/common/inc/nvUnixVersion.h | 2 +- src/common/inc/nvVer.h | 2 +- .../nvidia/inc/ctrl/ctrl2080/ctrl2080ecc.h | 43 +--- .../nvidia/inc/ctrl/ctrl2080/ctrl2080gpu.h | 25 ++ .../sdk/nvidia/inc/ctrl/ctrl2080/ctrl2080gr.h | 26 +++ src/common/sdk/nvidia/inc/ctrl/ctrl90e7.h | 2 +- src/common/sdk/nvidia/inc/nverror.h | 4 +- src/common/sdk/nvidia/inc/nvmisc.h | 36 +++ .../nvalloc/common/inc/inforom/ifrstruct.h | 2 +- src/nvidia/arch/nvalloc/common/inc/nvpcie.h | 27 +-- src/nvidia/generated/g_subdevice_nvoc.c | 79 +++---- src/nvidia/generated/g_subdevice_nvoc.h | 8 - .../gpu/subdevice/subdevice_ctrl_gpu_kernel.c | 41 ++++ src/nvidia/src/kernel/mem_mgr/mem.c | 2 +- .../kernel/platform/chipset/chipset_pcie.c | 22 +- .../virtualization/kernel_hostvgpudeviceapi.c | 2 +- version.mk | 2 +- 33 files changed, 641 insertions(+), 199 deletions(-) diff --git a/README.md b/README.md index 62b972368..0fb2aea38 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # NVIDIA Linux Open GPU Kernel Module Source This is the source release of the NVIDIA Linux open GPU kernel modules, -version 535.230.02. +version 535.247.01. ## How to Build @@ -17,7 +17,7 @@ as root: Note that the kernel modules built here must be used with GSP firmware and user-space NVIDIA GPU driver components from a corresponding -535.230.02 driver release. This can be achieved by installing +535.247.01 driver release. This can be achieved by installing the NVIDIA GPU driver from the .run file using the `--no-kernel-modules` option. E.g., @@ -180,7 +180,7 @@ software applications. ## Compatible GPUs The open-gpu-kernel-modules can be used on any Turing or later GPU -(see the table below). However, in the 535.230.02 release, +(see the table below). However, in the 535.247.01 release, GeForce and Workstation support is still considered alpha-quality. To enable use of the open kernel modules on GeForce and Workstation GPUs, @@ -188,7 +188,7 @@ set the "NVreg_OpenRmEnableUnsupportedGpus" nvidia.ko kernel module parameter to 1. For more details, see the NVIDIA GPU driver end user README here: -https://us.download.nvidia.com/XFree86/Linux-x86_64/535.230.02/README/kernel_open.html +https://us.download.nvidia.com/XFree86/Linux-x86_64/535.247.01/README/kernel_open.html In the below table, if three IDs are listed, the first is the PCI Device ID, the second is the PCI Subsystem Vendor ID, and the third is the PCI diff --git a/kernel-open/Kbuild b/kernel-open/Kbuild index f30933a88..21d339c83 100644 --- a/kernel-open/Kbuild +++ b/kernel-open/Kbuild @@ -86,7 +86,7 @@ EXTRA_CFLAGS += -I$(src)/common/inc EXTRA_CFLAGS += -I$(src) EXTRA_CFLAGS += -Wall $(DEFINES) $(INCLUDES) -Wno-cast-qual -Wno-error -Wno-format-extra-args EXTRA_CFLAGS += -D__KERNEL__ -DMODULE -DNVRM -EXTRA_CFLAGS += -DNV_VERSION_STRING=\"535.230.02\" +EXTRA_CFLAGS += -DNV_VERSION_STRING=\"535.247.01\" ifneq ($(SYSSRCHOST1X),) EXTRA_CFLAGS += -I$(SYSSRCHOST1X) @@ -256,10 +256,12 @@ NV_HEADER_PRESENCE_TESTS = \ drm/drm_device.h \ drm/drm_mode_config.h \ drm/drm_modeset_lock.h \ + drm/drm_client_setup.h \ dt-bindings/interconnect/tegra_icc_id.h \ generated/autoconf.h \ generated/compile.h \ generated/utsrelease.h \ + linux/aperture.h \ linux/efi.h \ linux/kconfig.h \ linux/platform/tegra/mc_utils.h \ @@ -322,7 +324,8 @@ NV_HEADER_PRESENCE_TESTS = \ soc/tegra/bpmp-abi.h \ soc/tegra/bpmp.h \ linux/cc_platform.h \ - asm/cpufeature.h + asm/cpufeature.h \ + crypto/sig.h # Filename to store the define for the header in $(1); this is only consumed by # the rule below that concatenates all of these together. diff --git a/kernel-open/common/inc/nvmisc.h b/kernel-open/common/inc/nvmisc.h index fa33a9ffd..09e584d3b 100644 --- a/kernel-open/common/inc/nvmisc.h +++ b/kernel-open/common/inc/nvmisc.h @@ -694,6 +694,42 @@ nvPrevPow2_U64(const NvU64 x ) } \ } +// +// Bug 4851259: Newly added functions must be hidden from certain HS-signed +// ucode compilers to avoid signature mismatch. +// +#ifndef NVDEC_1_0 +/*! + * Returns the position of nth set bit in the given mask. + * + * Returns -1 if mask has fewer than n bits set. + * + * n is 0 indexed and has valid values 0..31 inclusive, so "zeroth" set bit is + * the first set LSB. + * + * Example, if mask = 0x000000F0u and n = 1, the return value will be 5. + * Example, if mask = 0x000000F0u and n = 4, the return value will be -1. + */ +static NV_FORCEINLINE NvS32 +nvGetNthSetBitIndex32(NvU32 mask, NvU32 n) +{ + NvU32 seenSetBitsCount = 0; + NvS32 index; + FOR_EACH_INDEX_IN_MASK(32, index, mask) + { + if (seenSetBitsCount == n) + { + return index; + } + ++seenSetBitsCount; + } + FOR_EACH_INDEX_IN_MASK_END; + + return -1; +} + +#endif // NVDEC_1_0 + // // Size to use when declaring variable-sized arrays // diff --git a/kernel-open/conftest.sh b/kernel-open/conftest.sh index 7f1870c32..60277da83 100755 --- a/kernel-open/conftest.sh +++ b/kernel-open/conftest.sh @@ -5231,6 +5231,45 @@ compile_test() { compile_check_conftest "$CODE" "NV_FOLLOW_PFN_PRESENT" "" "functions" ;; + + follow_pte_arg_vma) + # + # Determine if the first argument of follow_pte is + # mm_struct or vm_area_struct. + # + # The first argument was changed from mm_struct to vm_area_struct by + # commit 29ae7d96d166 ("mm: pass VMA instead of MM to follow_pte()") + # + CODE=" + #include + + typeof(follow_pte) conftest_follow_pte_has_vma_arg; + int conftest_follow_pte_has_vma_arg(struct vm_area_struct *vma, + unsigned long address, + pte_t **ptep, + spinlock_t **ptl) { + return 0; + }" + + compile_check_conftest "$CODE" "NV_FOLLOW_PTE_ARG1_VMA" "" "types" + ;; + + ptep_get) + # + # Determine if ptep_get() is present. + # + # ptep_get() was added by commit 481e980a7c19 + # ("mm: Allow arches to provide ptep_get()") + # + CODE=" + #include + void conftest_ptep_get(void) { + ptep_get(); + }" + + compile_check_conftest "$CODE" "NV_PTEP_GET_PRESENT" "" "functions" + ;; + drm_plane_atomic_check_has_atomic_state_arg) # # Determine if drm_plane_helper_funcs::atomic_check takes 'state' @@ -6125,6 +6164,32 @@ compile_test() { compile_check_conftest "$CODE" "NV_NUM_REGISTERED_FB_PRESENT" "" "types" ;; + acpi_video_register_backlight) + # + # Determine if acpi_video_register_backlight() function is present + # + # acpi_video_register_backlight was added by commit 3dbc80a3e4c55c + # (ACPI: video: Make backlight class device registration a separate + # step (v2)) for v6.0 (2022-09-02). + # Note: the include directive for in this conftest is + # necessary in order to support kernels between commit 0b9f7d93ca61 + # ("ACPI / i915: ignore firmware requests backlight change") for + # v3.16 (2014-07-07) and commit 3bd6bce369f5 ("ACPI / video: Port + # to new backlight interface selection API") for v4.2 (2015-07-16). + # Kernels within this range use the 'bool' type and the related + # 'false' value in without first including the + # definitions of that type and value. + # + CODE=" + #include + #include + void conftest_acpi_video_register_backlight(void) { + acpi_video_register_backlight(0); + }" + + compile_check_conftest "$CODE" "NV_ACPI_VIDEO_REGISTER_BACKLIGHT" "" "functions" + ;; + acpi_video_backlight_use_native) # # Determine if acpi_video_backlight_use_native() function is present @@ -6378,6 +6443,25 @@ compile_test() { compile_check_conftest "$CODE" "NV_MEMORY_FAILURE_MF_SW_SIMULATED_DEFINED" "" "types" ;; + drm_client_setup) + # + # Determine whether drm_client_setup is present. + # + # Added by commit d07fdf922592 ("drm/fbdev-ttm: + # Convert to client-setup") in v6.13. + # + CODE=" + #include + #if defined(NV_DRM_DRM_CLIENT_SETUP_H_PRESENT) + #include + #endif + void conftest_drm_client_setup(void) { + drm_client_setup(); + }" + + compile_check_conftest "$CODE" "NV_DRM_CLIENT_SETUP_PRESENT" "" "functions" + ;; + drm_output_poll_changed) # # Determine whether drm_mode_config_funcs.output_poll_changed @@ -6401,6 +6485,38 @@ compile_test() { compile_check_conftest "$CODE" "NV_DRM_OUTPUT_POLL_CHANGED_PRESENT" "" "types" ;; + aperture_remove_conflicting_devices) + # + # Determine whether aperture_remove_conflicting_devices is present. + # + # Added by commit 7283f862bd991 ("drm: Implement DRM aperture + # helpers under video/") in v6.0 + CODE=" + #if defined(NV_LINUX_APERTURE_H_PRESENT) + #include + #endif + void conftest_aperture_remove_conflicting_devices(void) { + aperture_remove_conflicting_devices(); + }" + compile_check_conftest "$CODE" "NV_APERTURE_REMOVE_CONFLICTING_DEVICES_PRESENT" "" "functions" + ;; + + aperture_remove_conflicting_pci_devices) + # + # Determine whether aperture_remove_conflicting_pci_devices is present. + # + # Added by commit 7283f862bd991 ("drm: Implement DRM aperture + # helpers under video/") in v6.0 + CODE=" + #if defined(NV_LINUX_APERTURE_H_PRESENT) + #include + #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" + ;; + crypto_tfm_ctx_aligned) # Determine if 'crypto_tfm_ctx_aligned' is defined. # @@ -6422,17 +6538,17 @@ compile_test() { # This test is not complete and may return false positive. # CODE=" - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include void conftest_crypto(void) { struct shash_desc sd; struct crypto_shash cs; @@ -6442,6 +6558,47 @@ compile_test() { compile_check_conftest "$CODE" "NV_CRYPTO_PRESENT" "" "symbols" ;; + crypto_akcipher_verify) + # + # Determine whether the crypto_akcipher_verify API is still present. + # It was removed by commit 6b34562 ('crypto: akcipher - Drop sign/verify operations') + # in v6.13-rc1 (2024-10-04). + # + # This test is dependent on the crypto conftest to determine whether crypto should be + # enabled at all. That means that if the kernel is old enough such that crypto_akcipher_verify + # + # The test merely checks for the presence of the API, as it assumes that if the API + # is no longer present, the new API to replace it (crypto_sig_verify) must be present. + # If the kernel version is too old to have crypto_akcipher_verify, it will fail the crypto + # conftest above and all crypto code will be compiled out. + # + CODE=" + #include + #include + void conftest_crypto_akcipher_verify(void) { + (void)crypto_akcipher_verify; + }" + + compile_check_conftest "$CODE" "NV_CRYPTO_AKCIPHER_VERIFY_PRESENT" "" "symbols" + ;; + + ecc_digits_from_bytes) + # + # Determine whether ecc_digits_from_bytes is present. + # It was added in commit c6ab5c915da4 ('crypto: ecc - Prevent ecc_digits_from_bytes from + # reading too many bytes') in v6.10. + # + # This functionality is needed when crypto_akcipher_verify is not present. + # + CODE=" + #include + void conftest_ecc_digits_from_bytes(void) { + (void)ecc_digits_from_bytes; + }" + + compile_check_conftest "$CODE" "NV_ECC_DIGITS_FROM_BYTES_PRESENT" "" "symbols" + ;; + mempolicy_has_unified_nodes) # # Determine if the 'mempolicy' structure has @@ -6546,6 +6703,47 @@ compile_test() { compile_check_conftest "$CODE" "NV_FOLIO_TEST_SWAPCACHE_PRESENT" "" "functions" ;; + module_import_ns_takes_constant) + # + # Determine if the MODULE_IMPORT_NS macro takes a string literal + # or constant. + # + # Commit cdd30ebb1b9f ("module: Convert symbol namespace to + # string literal") changed MODULE_IMPORT_NS to take a string + # literal in Linux kernel v6.13. + # + CODE=" + #include + + MODULE_IMPORT_NS(DMA_BUF);" + + compile_check_conftest "$CODE" "NV_MODULE_IMPORT_NS_TAKES_CONSTANT" "" "generic" + ;; + + drm_driver_has_date) + # + # Determine if the 'drm_driver' structure has a 'date' field. + # + # Removed by commit cb2e1c2136f7 ("drm: remove driver date from + # struct drm_driver and all drivers") in linux-next, expected in + # v6.14. + # + CODE=" + #if defined(NV_DRM_DRMP_H_PRESENT) + #include + #endif + + #if defined(NV_DRM_DRM_DRV_H_PRESENT) + #include + #endif + + int conftest_drm_driver_has_date(void) { + return offsetof(struct drm_driver, date); + }" + + compile_check_conftest "$CODE" "NV_DRM_DRIVER_HAS_DATE" "" "types" + ;; + # When adding a new conftest entry, please use the correct format for # specifying the relevant upstream Linux kernel commit. # diff --git a/kernel-open/nvidia-drm/nvidia-drm-drv.c b/kernel-open/nvidia-drm/nvidia-drm-drv.c index e5c7d9b46..0f0f1286f 100644 --- a/kernel-open/nvidia-drm/nvidia-drm-drv.c +++ b/kernel-open/nvidia-drm/nvidia-drm-drv.c @@ -1439,7 +1439,10 @@ static struct drm_driver nv_drm_driver = { .name = "nvidia-drm", .desc = "NVIDIA DRM driver", + +#if defined(NV_DRM_DRIVER_HAS_DATE) .date = "20160202", +#endif #if defined(NV_DRM_DRIVER_HAS_DEVICE_LIST) .device_list = LIST_HEAD_INIT(nv_drm_driver.device_list), diff --git a/kernel-open/nvidia-drm/nvidia-drm.Kbuild b/kernel-open/nvidia-drm/nvidia-drm.Kbuild index 905922306..9cd7134f6 100644 --- a/kernel-open/nvidia-drm/nvidia-drm.Kbuild +++ b/kernel-open/nvidia-drm/nvidia-drm.Kbuild @@ -135,4 +135,5 @@ NV_CONFTEST_TYPE_COMPILE_TESTS += vm_area_struct_has_const_vm_flags NV_CONFTEST_TYPE_COMPILE_TESTS += drm_driver_has_dumb_destroy NV_CONFTEST_TYPE_COMPILE_TESTS += drm_unlocked_ioctl_flag_present NV_CONFTEST_TYPE_COMPILE_TESTS += drm_output_poll_changed +NV_CONFTEST_TYPE_COMPILE_TESTS += drm_driver_has_date NV_CONFTEST_TYPE_COMPILE_TESTS += file_operations_fop_unsigned_offset_present diff --git a/kernel-open/nvidia-modeset/nvidia-modeset-linux.c b/kernel-open/nvidia-modeset/nvidia-modeset-linux.c index 2097f6498..356b2a7a2 100644 --- a/kernel-open/nvidia-modeset/nvidia-modeset-linux.c +++ b/kernel-open/nvidia-modeset/nvidia-modeset-linux.c @@ -1007,6 +1007,11 @@ nvkms_register_backlight(NvU32 gpu_id, NvU32 display_id, void *drv_priv, #if defined(NV_ACPI_VIDEO_BACKLIGHT_USE_NATIVE) if (!acpi_video_backlight_use_native()) { +#if defined(NV_ACPI_VIDEO_REGISTER_BACKLIGHT) + nvkms_log(NVKMS_LOG_LEVEL_INFO, NVKMS_LOG_PREFIX, + "ACPI reported no NVIDIA native backlight available; attempting to use ACPI backlight."); + acpi_video_register_backlight(); +#endif return NULL; } #endif diff --git a/kernel-open/nvidia-modeset/nvidia-modeset.Kbuild b/kernel-open/nvidia-modeset/nvidia-modeset.Kbuild index 4e328bae1..05070595c 100644 --- a/kernel-open/nvidia-modeset/nvidia-modeset.Kbuild +++ b/kernel-open/nvidia-modeset/nvidia-modeset.Kbuild @@ -90,3 +90,4 @@ NV_CONFTEST_FUNCTION_COMPILE_TESTS += list_is_first NV_CONFTEST_FUNCTION_COMPILE_TESTS += ktime_get_real_ts64 NV_CONFTEST_FUNCTION_COMPILE_TESTS += ktime_get_raw_ts64 NV_CONFTEST_FUNCTION_COMPILE_TESTS += acpi_video_backlight_use_native +NV_CONFTEST_FUNCTION_COMPILE_TESTS += acpi_video_register_backlight diff --git a/kernel-open/nvidia-uvm/uvm_linux.h b/kernel-open/nvidia-uvm/uvm_linux.h index 95571a586..befc93823 100644 --- a/kernel-open/nvidia-uvm/uvm_linux.h +++ b/kernel-open/nvidia-uvm/uvm_linux.h @@ -226,7 +226,7 @@ static inline const struct cpumask *uvm_cpumask_of_node(int node) #define __GFP_NORETRY 0 #endif -#define NV_UVM_GFP_FLAGS (GFP_KERNEL) +#define NV_UVM_GFP_FLAGS (GFP_KERNEL | __GFP_NOMEMALLOC) // Develop builds define DEBUG but enable optimization #if defined(DEBUG) && !defined(NVIDIA_UVM_DEVELOP) diff --git a/kernel-open/nvidia-uvm/uvm_va_space_mm.c b/kernel-open/nvidia-uvm/uvm_va_space_mm.c index c3ea41286..95e34838c 100644 --- a/kernel-open/nvidia-uvm/uvm_va_space_mm.c +++ b/kernel-open/nvidia-uvm/uvm_va_space_mm.c @@ -291,8 +291,12 @@ NV_STATUS uvm_va_space_mm_register(uvm_va_space_t *va_space) // allocates memory which is attached to the mm_struct and freed // when the mm_struct is freed. ret = __mmu_notifier_register(NULL, current->mm); - if (ret) + if (ret) { + // Inform uvm_va_space_mm_unregister() that it has nothing to do. + uvm_mmdrop(va_space_mm->mm); + va_space_mm->mm = NULL; return errno_to_nv_status(ret); + } #else UVM_ASSERT(0); #endif diff --git a/kernel-open/nvidia/internal_crypt_lib.h b/kernel-open/nvidia/internal_crypt_lib.h index 8b46cf7cd..c8438544b 100644 --- a/kernel-open/nvidia/internal_crypt_lib.h +++ b/kernel-open/nvidia/internal_crypt_lib.h @@ -63,7 +63,9 @@ * old or even just user disabled. If we should use LKCA, include headers, else * define stubs to return errors. */ -#if defined(NV_CRYPTO_PRESENT) && defined (NV_CONFIG_CRYPTO_PRESENT) +#if defined(NV_CRYPTO_PRESENT) && defined (NV_CONFIG_CRYPTO_PRESENT) && \ + (defined(NV_CRYPTO_AKCIPHER_VERIFY_PRESENT) || \ + (defined(NV_CRYPTO_SIG_H_PRESENT) && defined(NV_ECC_DIGITS_FROM_BYTES_PRESENT))) #define USE_LKCA 1 #endif diff --git a/kernel-open/nvidia/libspdm_ecc.c b/kernel-open/nvidia/libspdm_ecc.c index 1f8f0100f..3c0d5c8a8 100644 --- a/kernel-open/nvidia/libspdm_ecc.c +++ b/kernel-open/nvidia/libspdm_ecc.c @@ -1,5 +1,5 @@ /* -* SPDX-FileCopyrightText: Copyright (c) 2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +* SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. * SPDX-License-Identifier: MIT * * Permission is hereby granted, free of charge, to any person obtaining a @@ -30,14 +30,26 @@ MODULE_SOFTDEP("pre: ecdh_generic,ecdsa_generic"); #include #include #include +#ifndef NV_CRYPTO_AKCIPHER_VERIFY_PRESENT +#include + +struct signature +{ + u64 r[ECC_MAX_DIGITS]; + u64 s[ECC_MAX_DIGITS]; +}; +#endif // NV_CRYPTO_AKCIPHER_VERIFY_PRESENT + +#define ECDSA_PUBKEY_HEADER_XY_PRESENT (0x4) struct ecc_ctx { unsigned int curve_id; u64 priv_key[ECC_MAX_DIGITS]; // In big endian struct { - // ecdsa wants byte preceding pub_key to be set to '4' - u64 pub_key_prefix; + // ecdsa pubkey has header indicating length of pubkey + u8 padding[7]; + u8 pub_key_prefix; u64 pub_key[2 * ECC_MAX_DIGITS]; }; @@ -46,7 +58,7 @@ struct ecc_ctx { char const *name; int size; }; -#endif +#endif // USE_LKCA void *libspdm_ec_new_by_nid(size_t nid) { @@ -77,7 +89,7 @@ void *libspdm_ec_new_by_nid(size_t nid) ctx->priv_key_set = false; return ctx; -#endif +#endif // USE_LKCA } void libspdm_ec_free(void *ec_context) @@ -109,7 +121,7 @@ bool lkca_ecdsa_set_priv_key(void *context, uint8_t *key, size_t key_size) ctx->pub_key_set = true; ctx->priv_key_set = true; return true; -#endif +#endif // USE_LKCA } bool lkca_ec_set_pub_key(void *ec_context, const uint8_t *public_key, @@ -139,7 +151,7 @@ bool lkca_ec_set_pub_key(void *ec_context, const uint8_t *public_key, memcpy(ctx->pub_key, public_key, public_key_size); ctx->pub_key_set = true; return true; -#endif +#endif // USE_LKCA } bool lkca_ec_get_pub_key(void *ec_context, uint8_t *public_key, @@ -158,7 +170,7 @@ bool lkca_ec_get_pub_key(void *ec_context, uint8_t *public_key, memcpy(public_key, ctx->pub_key, ctx->size); return true; -#endif +#endif // USE_LKCA } bool lkca_ec_generate_key(void *ec_context, uint8_t *public_data, @@ -185,7 +197,7 @@ bool lkca_ec_generate_key(void *ec_context, uint8_t *public_data, ctx->pub_key_set = true; return true; -#endif +#endif // USE_LKCA } bool lkca_ec_compute_key(void *ec_context, const uint8_t *peer_public, @@ -218,28 +230,87 @@ bool lkca_ec_compute_key(void *ec_context, const uint8_t *peer_public, *key_size = ctx->size / 2; return true; -#endif +#endif // USE_LKCA } -bool lkca_ecdsa_verify(void *ec_context, size_t hash_nid, - const uint8_t *message_hash, size_t hash_size, - const uint8_t *signature, size_t sig_size) +#ifndef NV_CRYPTO_AKCIPHER_VERIFY_PRESENT +static bool lkca_ecdsa_verify_crypto_sig(void *ec_context, size_t hash_nid, + const uint8_t *message_hash, size_t hash_size, + const uint8_t *signature, size_t sig_size) { #ifndef USE_LKCA return false; -#else +#else // USE_LKCA struct ecc_ctx *ctx = ec_context; + u8 *pub_key; + int err; + DECLARE_CRYPTO_WAIT(wait); + struct crypto_sig * tfm = NULL; + struct signature sig; + + if (sig_size != ctx->size || !ctx->pub_key_set) + { + return false; + } + + tfm = crypto_alloc_sig(ctx->name, CRYPTO_ALG_TYPE_SIG, 0); + if (IS_ERR(tfm)) { + pr_info("crypto_alloc_sig failed in lkca_ecdsa_verify\n"); + return false; + } + + // modify header of pubkey to indicate size + pub_key = (u8 *) &(ctx->pub_key_prefix); + *pub_key = ECDSA_PUBKEY_HEADER_XY_PRESENT; + err = crypto_sig_set_pubkey(tfm, pub_key, ctx->size + 1); + if (err != 0) + { + pr_info("crypto_sig_set_pubkey failed in lkca_ecdsa_verify: %d", -err); + goto failTfm; + } + + // + // Compared to the way we receive the signature, we need to: + // - swap order of all digits + // - swap endianness for each digit + // + memset(&sig, 0, sizeof(sig)); + ecc_digits_from_bytes(signature, ctx->size/2, sig.r, ECC_MAX_DIGITS); + ecc_digits_from_bytes(signature + ctx->size/2, ctx->size/2, sig.s, ECC_MAX_DIGITS); + + err = crypto_sig_verify(tfm, (void *)&sig, sizeof(sig), message_hash, hash_size); + if (err != 0) + { + pr_info("crypto_sig_verify failed in lkca_ecdsa_verify %d\n", -err); + } + +failTfm: + crypto_free_sig(tfm); + + return err == 0; +#endif // USE_LKCA +} + +#else // NV_CRYPTO_AKCIPHER_VERIFY_PRESENT +static bool lkca_ecdsa_verify_akcipher(void *ec_context, size_t hash_nid, + const uint8_t *message_hash, size_t hash_size, + const uint8_t *signature, size_t sig_size) +{ +#ifndef USE_LKCA + return false; +#else // USE_LKCA + struct ecc_ctx *ctx = ec_context; + u8 *pub_key; + int err; + DECLARE_CRYPTO_WAIT(wait); // Roundabout way u64 ber_max_len = 3 + 2 * (4 + (ECC_MAX_BYTES)); u64 ber_len = 0; u8 *ber = NULL; - u8 *pub_key; struct akcipher_request *req = NULL; struct crypto_akcipher *tfm = NULL; struct scatterlist sg; - DECLARE_CRYPTO_WAIT(wait); - int err; if (sig_size != ctx->size) { return false; @@ -251,21 +322,21 @@ bool lkca_ecdsa_verify(void *ec_context, size_t hash_nid, tfm = crypto_alloc_akcipher(ctx->name, CRYPTO_ALG_TYPE_AKCIPHER, 0); if (IS_ERR(tfm)) { - pr_info("ALLOC FAILED\n"); + pr_info("crypto_alloc_akcipher failed in lkca_ecdsa_verify\n"); return false; } - pub_key = (u8 *) ctx->pub_key; - pub_key--; // Go back into byte of pub_key_prefix - *pub_key = 4; // And set it to 4 to placate kernel + // modify header of pubkey to indicate size + pub_key = (u8 *) &(ctx->pub_key_prefix); + *pub_key = ECDSA_PUBKEY_HEADER_XY_PRESENT; if ((err = crypto_akcipher_set_pub_key(tfm, pub_key, ctx->size + 1)) != 0) { - pr_info("SET PUB KEY FAILED: %d\n", -err); + pr_info("crypto_akcipher_set_pub_key failed in lkca_ecdsa_verify: %d\n", -err); goto failTfm; } req = akcipher_request_alloc(tfm, GFP_KERNEL); if (IS_ERR(req)) { - pr_info("REQUEST ALLOC FAILED\n"); + pr_info("akcipher_request_alloc failed in lkca_ecdsa_verify\n"); goto failTfm; } @@ -310,9 +381,8 @@ bool lkca_ecdsa_verify(void *ec_context, size_t hash_nid, CRYPTO_TFM_REQ_MAY_SLEEP, crypto_req_done, &wait); akcipher_request_set_crypt(req, &sg, NULL, ber_len, hash_size); err = crypto_wait_req(crypto_akcipher_verify(req), &wait); - if (err != 0){ - pr_info("Verify FAILED %d\n", -err); + pr_info("crypto_akcipher_verify failed in lkca_ecdsa_verify %d\n", -err); } kfree(ber); @@ -322,5 +392,19 @@ failTfm: crypto_free_akcipher(tfm); return err == 0; -#endif +#endif // USE_LKCA +} +#endif // NV_CRYPTO_AKCIPHER_VERIFY_PRESENT + +bool lkca_ecdsa_verify(void *ec_context, size_t hash_nid, + const uint8_t *message_hash, size_t hash_size, + const uint8_t *signature, size_t sig_size) +{ +#ifndef NV_CRYPTO_AKCIPHER_VERIFY_PRESENT + return lkca_ecdsa_verify_crypto_sig(ec_context, hash_nid, message_hash, hash_size, + signature, sig_size); +#else // NV_CRYPTO_AKCIPHER_VERIFY_PRESENT + return lkca_ecdsa_verify_akcipher(ec_context, hash_nid, message_hash, hash_size, + signature, sig_size); +#endif // NV_CRYPTO_AKCIPHER_VERIFY_PRESENT } diff --git a/kernel-open/nvidia/nv-mmap.c b/kernel-open/nvidia/nv-mmap.c index 522fc6890..5b386df6f 100644 --- a/kernel-open/nvidia/nv-mmap.c +++ b/kernel-open/nvidia/nv-mmap.c @@ -143,6 +143,10 @@ nvidia_vma_access( return -EINVAL; } + if (write && !(mmap_context->prot & NV_PROTECT_WRITEABLE)) + { + return -EACCES; + } offset = mmap_context->mmap_start; if (nv->flags & NV_FLAG_CONTROL) diff --git a/kernel-open/nvidia/nvidia.Kbuild b/kernel-open/nvidia/nvidia.Kbuild index f2eabd446..c88538fd3 100644 --- a/kernel-open/nvidia/nvidia.Kbuild +++ b/kernel-open/nvidia/nvidia.Kbuild @@ -159,6 +159,7 @@ NV_CONFTEST_FUNCTION_COMPILE_TESTS += vga_tryget NV_CONFTEST_FUNCTION_COMPILE_TESTS += cc_platform_has NV_CONFTEST_FUNCTION_COMPILE_TESTS += seq_read_iter NV_CONFTEST_FUNCTION_COMPILE_TESTS += follow_pfn +NV_CONFTEST_FUNCTION_COMPILE_TESTS += ptep_get NV_CONFTEST_FUNCTION_COMPILE_TESTS += drm_gem_object_get NV_CONFTEST_FUNCTION_COMPILE_TESTS += drm_gem_object_put_unlocked NV_CONFTEST_FUNCTION_COMPILE_TESTS += add_memory_driver_managed @@ -225,7 +226,11 @@ NV_CONFTEST_SYMBOL_COMPILE_TESTS += is_export_symbol_present_tsec_comms_alloc_me NV_CONFTEST_SYMBOL_COMPILE_TESTS += is_export_symbol_present_tsec_comms_free_gscco_mem NV_CONFTEST_SYMBOL_COMPILE_TESTS += is_export_symbol_present_memory_block_size_bytes NV_CONFTEST_SYMBOL_COMPILE_TESTS += crypto +NV_CONFTEST_SYMBOL_COMPILE_TESTS += crypto_akcipher_verify NV_CONFTEST_SYMBOL_COMPILE_TESTS += is_export_symbol_present_follow_pte +NV_CONFTEST_SYMBOL_COMPILE_TESTS += follow_pte_arg_vma +NV_CONFTEST_SYMBOL_COMPILE_TESTS += is_export_symbol_present_follow_pfnmap_start +NV_CONFTEST_SYMBOL_COMPILE_TESTS += ecc_digits_from_bytes NV_CONFTEST_TYPE_COMPILE_TESTS += dma_ops NV_CONFTEST_TYPE_COMPILE_TESTS += swiotlb_dma_ops @@ -268,3 +273,4 @@ NV_CONFTEST_GENERIC_COMPILE_TESTS += mdev_available NV_CONFTEST_GENERIC_COMPILE_TESTS += cmd_uphy_display_port_init NV_CONFTEST_GENERIC_COMPILE_TESTS += cmd_uphy_display_port_off NV_CONFTEST_GENERIC_COMPILE_TESTS += memory_failure_mf_sw_simulated_defined +NV_CONFTEST_GENERIC_COMPILE_TESTS += module_import_ns_takes_constant diff --git a/kernel-open/nvidia/os-mlock.c b/kernel-open/nvidia/os-mlock.c index 300c3afb6..3d1cee729 100644 --- a/kernel-open/nvidia/os-mlock.c +++ b/kernel-open/nvidia/os-mlock.c @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 1999-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-FileCopyrightText: Copyright (c) 1999-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. * SPDX-License-Identifier: MIT * * Permission is hereby granted, free of charge, to any person obtaining a @@ -32,14 +32,27 @@ #define NV_NUM_PIN_PAGES_PER_ITERATION 0x80000 #endif -static inline int nv_follow_pfn(struct vm_area_struct *vma, - unsigned long address, - unsigned long *pfn) +static inline int nv_follow_flavors(struct vm_area_struct *vma, + unsigned long address, + unsigned long *pfn) { -#if defined(NV_FOLLOW_PFN_PRESENT) - return follow_pfn(vma, address, pfn); -#else -#if NV_IS_EXPORT_SYMBOL_PRESENT_follow_pte +#if NV_IS_EXPORT_SYMBOL_PRESENT_follow_pfnmap_start + struct follow_pfnmap_args args = {}; + int rc; + + args.address = address; + args.vma = vma; + + rc = follow_pfnmap_start(&args); + if (rc) + return rc; + + *pfn = args.pfn; + + follow_pfnmap_end(&args); + + return 0; +#elif NV_IS_EXPORT_SYMBOL_PRESENT_follow_pte int status = 0; spinlock_t *ptl; pte_t *ptep; @@ -47,17 +60,40 @@ static inline int nv_follow_pfn(struct vm_area_struct *vma, if (!(vma->vm_flags & (VM_IO | VM_PFNMAP))) return status; + // + // The first argument of follow_pte() was changed from + // mm_struct to vm_area_struct in kernel 6.10. + // +#if defined(NV_FOLLOW_PTE_ARG1_VMA) status = follow_pte(vma, address, &ptep, &ptl); +#else + status = follow_pte(vma->vm_mm, address, &ptep, &ptl); +#endif if (status) return status; + +#if defined(NV_PTEP_GET_PRESENT) *pfn = pte_pfn(ptep_get(ptep)); +#else + *pfn = pte_pfn(READ_ONCE(*ptep)); +#endif // The lock is acquired inside follow_pte() pte_unmap_unlock(ptep, ptl); return 0; -#else // NV_IS_EXPORT_SYMBOL_PRESENT_follow_pte +#else return -1; -#endif // NV_IS_EXPORT_SYMBOL_PRESENT_follow_pte +#endif // NV_IS_EXPORT_SYMBOL_PRESENT_follow_pfnmap_start +} + +static inline int nv_follow_pfn(struct vm_area_struct *vma, + unsigned long address, + unsigned long *pfn) +{ +#if defined(NV_FOLLOW_PFN_PRESENT) + return follow_pfn(vma, address, pfn); +#else + return nv_follow_flavors(vma, address, pfn); #endif } diff --git a/src/common/inc/nvBldVer.h b/src/common/inc/nvBldVer.h index 6976f9be3..76f0cfece 100644 --- a/src/common/inc/nvBldVer.h +++ b/src/common/inc/nvBldVer.h @@ -36,25 +36,25 @@ // and then checked back in. You cannot make changes to these sections without // corresponding changes to the buildmeister script #ifndef NV_BUILD_BRANCH - #define NV_BUILD_BRANCH r539_11 + #define NV_BUILD_BRANCH r539_28 #endif #ifndef NV_PUBLIC_BRANCH - #define NV_PUBLIC_BRANCH r539_11 + #define NV_PUBLIC_BRANCH r539_28 #endif #if defined(NV_LINUX) || defined(NV_BSD) || defined(NV_SUNOS) -#define NV_BUILD_BRANCH_VERSION "rel/gpu_drv/r535/r539_11-770" -#define NV_BUILD_CHANGELIST_NUM (35309837) +#define NV_BUILD_BRANCH_VERSION "rel/gpu_drv/r535/r539_28-859" +#define NV_BUILD_CHANGELIST_NUM (35750789) #define NV_BUILD_TYPE "Official" -#define NV_BUILD_NAME "rel/gpu_drv/r535/r539_11-770" -#define NV_LAST_OFFICIAL_CHANGELIST_NUM (35309837) +#define NV_BUILD_NAME "rel/gpu_drv/r535/r539_28-859" +#define NV_LAST_OFFICIAL_CHANGELIST_NUM (35750789) #else /* Windows builds */ -#define NV_BUILD_BRANCH_VERSION "r539_11-2" -#define NV_BUILD_CHANGELIST_NUM (35309837) +#define NV_BUILD_BRANCH_VERSION "r539_28-1" +#define NV_BUILD_CHANGELIST_NUM (35750715) #define NV_BUILD_TYPE "Official" -#define NV_BUILD_NAME "539.14" -#define NV_LAST_OFFICIAL_CHANGELIST_NUM (35309837) +#define NV_BUILD_NAME "539.29" +#define NV_LAST_OFFICIAL_CHANGELIST_NUM (35750715) #define NV_BUILD_BRANCH_BASE_VERSION R535 #endif // End buildmeister python edited section diff --git a/src/common/inc/nvUnixVersion.h b/src/common/inc/nvUnixVersion.h index 33349946d..e69b045ae 100644 --- a/src/common/inc/nvUnixVersion.h +++ b/src/common/inc/nvUnixVersion.h @@ -4,7 +4,7 @@ #if defined(NV_LINUX) || defined(NV_BSD) || defined(NV_SUNOS) || defined(NV_VMWARE) || defined(NV_QNX) || defined(NV_INTEGRITY) || \ (defined(RMCFG_FEATURE_PLATFORM_GSP) && RMCFG_FEATURE_PLATFORM_GSP == 1) -#define NV_VERSION_STRING "535.230.02" +#define NV_VERSION_STRING "535.247.01" #else diff --git a/src/common/inc/nvVer.h b/src/common/inc/nvVer.h index c8113d618..569f51ad3 100644 --- a/src/common/inc/nvVer.h +++ b/src/common/inc/nvVer.h @@ -3,7 +3,7 @@ #define NV_COMPANY_NAME_STRING_SHORT "NVIDIA" #define NV_COMPANY_NAME_STRING_FULL "NVIDIA Corporation" #define NV_COMPANY_NAME_STRING NV_COMPANY_NAME_STRING_FULL -#define NV_COPYRIGHT_YEAR "2024" +#define NV_COPYRIGHT_YEAR "2025" #define NV_COPYRIGHT "(C) " NV_COPYRIGHT_YEAR " NVIDIA Corporation. All rights reserved." // Please do not use the non-ascii copyright symbol for (C). #if defined(NV_LINUX) || defined(NV_BSD) || defined(NV_SUNOS) || defined(NV_VMWARE) || defined(NV_QNX) || defined(NV_INTEGRITY) || \ diff --git a/src/common/sdk/nvidia/inc/ctrl/ctrl2080/ctrl2080ecc.h b/src/common/sdk/nvidia/inc/ctrl/ctrl2080/ctrl2080ecc.h index d8905557d..8f38b227c 100644 --- a/src/common/sdk/nvidia/inc/ctrl/ctrl2080/ctrl2080ecc.h +++ b/src/common/sdk/nvidia/inc/ctrl/ctrl2080/ctrl2080ecc.h @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2017-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-FileCopyrightText: Copyright (c) 2017-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. * SPDX-License-Identifier: MIT * * Permission is hereby granted, free of charge, to any person obtaining a @@ -39,36 +39,9 @@ /* * NV2080_CTRL_ECC_GET_CLIENT_EXPOSED_COUNTERS_PARAMS * - * sramLastClearedTimestamp [out] - * dramLastClearedTimestamp [out] - * unix-epoch based timestamp. These fields indicate when the error counters - * were last cleared by the user. - * - * sramErrorCounts [out] - * dramErrorCounts [out] - * Aggregate error counts for SRAM and DRAM - */ - -#define NV2080_CTRL_ECC_GET_CLIENT_EXPOSED_COUNTERS_PARAMS_MESSAGE_ID (0x0U) - -typedef struct NV2080_CTRL_ECC_GET_CLIENT_EXPOSED_COUNTERS_PARAMS { - NvU32 sramLastClearedTimestamp; - NvU32 dramLastClearedTimestamp; - - NV_DECLARE_ALIGNED(NvU64 sramCorrectedTotalCounts, 8); - NV_DECLARE_ALIGNED(NvU64 sramUncorrectedTotalCounts, 8); - NV_DECLARE_ALIGNED(NvU64 dramCorrectedTotalCounts, 8); - NV_DECLARE_ALIGNED(NvU64 dramUncorrectedTotalCounts, 8); -} NV2080_CTRL_ECC_GET_CLIENT_EXPOSED_COUNTERS_PARAMS; - -#define NV2080_CTRL_CMD_ECC_GET_ECI_COUNTERS (0x20803401U) /* finn: Evaluated from "(FINN_NV20_SUBDEVICE_0_ECC_INTERFACE_ID << 8) | NV2080_CTRL_ECC_GET_ECI_COUNTERS_PARAMS_MESSAGE_ID" */ - -/* - * NV2080_CTRL_ECC_GET_ECI_COUNTERS_PARAMS - * * sramParityUncorrectedUnique [out] * sramSecDedUncorrectedUnique [out] - * sramCorrectedTotal [out] + * sramCorrectedUnique [out] * dramUncorrectedTotal [out] * dramCorrectedTotal [out] * Aggregate error counts for SRAM and DRAM. @@ -88,12 +61,12 @@ typedef struct NV2080_CTRL_ECC_GET_CLIENT_EXPOSED_COUNTERS_PARAMS { * Boolean flag which is set if SRAM error threshold was exceeded */ -#define NV2080_CTRL_ECC_GET_ECI_COUNTERS_PARAMS_MESSAGE_ID (0x1U) +#define NV2080_CTRL_ECC_GET_CLIENT_EXPOSED_COUNTERS_PARAMS_MESSAGE_ID (0x0U) -typedef struct NV2080_CTRL_ECC_GET_ECI_COUNTERS_PARAMS { +typedef struct NV2080_CTRL_ECC_GET_CLIENT_EXPOSED_COUNTERS_PARAMS { NV_DECLARE_ALIGNED(NvU64 sramParityUncorrectedUnique, 8); NV_DECLARE_ALIGNED(NvU64 sramSecDedUncorrectedUnique, 8); - NV_DECLARE_ALIGNED(NvU64 sramCorrectedTotal, 8); + NV_DECLARE_ALIGNED(NvU64 sramCorrectedUnique, 8); NV_DECLARE_ALIGNED(NvU64 dramUncorrectedTotal, 8); NV_DECLARE_ALIGNED(NvU64 dramCorrectedTotal, 8); @@ -106,7 +79,7 @@ typedef struct NV2080_CTRL_ECC_GET_ECI_COUNTERS_PARAMS { NV_DECLARE_ALIGNED(NvU64 sramBucketOther, 8); NvBool sramErrorThresholdExceeded; -} NV2080_CTRL_ECC_GET_ECI_COUNTERS_PARAMS; +} NV2080_CTRL_ECC_GET_CLIENT_EXPOSED_COUNTERS_PARAMS; /* * NV2080_CTRL_ECC_GET_VOLATILE_COUNTS_PARAMS @@ -124,9 +97,9 @@ typedef struct NV2080_CTRL_ECC_GET_ECI_COUNTERS_PARAMS { * dramUncTot [out]: * total uncorrectable DRAM error count */ -#define NV2080_CTRL_CMD_ECC_GET_VOLATILE_COUNTS (0x20803402U) /* finn: Evaluated from "(FINN_NV20_SUBDEVICE_0_ECC_INTERFACE_ID << 8) | NV2080_CTRL_ECC_GET_VOLATILE_COUNTS_PARAMS_MESSAGE_ID" */ +#define NV2080_CTRL_CMD_ECC_GET_VOLATILE_COUNTS (0x20803401U) /* finn: Evaluated from "(FINN_NV20_SUBDEVICE_0_ECC_INTERFACE_ID << 8) | NV2080_CTRL_ECC_GET_VOLATILE_COUNTS_PARAMS_MESSAGE_ID" */ -#define NV2080_CTRL_ECC_GET_VOLATILE_COUNTS_PARAMS_MESSAGE_ID (0x2U) +#define NV2080_CTRL_ECC_GET_VOLATILE_COUNTS_PARAMS_MESSAGE_ID (0x1U) typedef struct NV2080_CTRL_ECC_GET_VOLATILE_COUNTS_PARAMS { NV_DECLARE_ALIGNED(NvU64 sramCorUni, 8); diff --git a/src/common/sdk/nvidia/inc/ctrl/ctrl2080/ctrl2080gpu.h b/src/common/sdk/nvidia/inc/ctrl/ctrl2080/ctrl2080gpu.h index a56b72c7b..2c1a55581 100644 --- a/src/common/sdk/nvidia/inc/ctrl/ctrl2080/ctrl2080gpu.h +++ b/src/common/sdk/nvidia/inc/ctrl/ctrl2080/ctrl2080gpu.h @@ -4284,4 +4284,29 @@ typedef struct NV2080_CTRL_GPU_GET_NVENC_SW_SESSION_INFO_V2_PARAMS { #define NV2080_CTRL_GPU_GET_NVENC_SW_SESSION_INFO_V2 (0x208001afU) /* finn: Evaluated from "(FINN_NV20_SUBDEVICE_0_GPU_INTERFACE_ID << 8) | NV2080_CTRL_GPU_GET_NVENC_SW_SESSION_INFO_V2_PARAMS_MESSAGE_ID" */ +/* + * NV2080_CTRL_CMD_GPU_GET_TPC_RECONFIG_MASK + * + * This command returns the TPC reconfig mask for a specific GPC + * + * gpc[IN] + * The GPC for which the TPC reconfig mask needs to be queried. + * The GPC should be specified as a logical index. + * + * tpcReconfigMask[OUT] + * Mask of reconfigurable TPCs in the specified GPC + * + * Possible status values returned are: + * NV_OK + * NV_ERR_NOT_SUPPORTED + */ +#define NV2080_CTRL_CMD_GPU_GET_TPC_RECONFIG_MASK (0x208001e7U) /* finn: Evaluated from "(FINN_NV20_SUBDEVICE_0_GPU_INTERFACE_ID << 8) | NV2080_CTRL_GPU_GET_TPC_RECONFIG_MASK_PARAMS_MESSAGE_ID" */ + +#define NV2080_CTRL_GPU_GET_TPC_RECONFIG_MASK_PARAMS_MESSAGE_ID (0xe7U) + +typedef struct NV2080_CTRL_GPU_GET_TPC_RECONFIG_MASK_PARAMS { + NvU32 gpc; + NvU32 tpcReconfigMask; +} NV2080_CTRL_GPU_GET_TPC_RECONFIG_MASK_PARAMS; + /* _ctrl2080gpu_h_ */ diff --git a/src/common/sdk/nvidia/inc/ctrl/ctrl2080/ctrl2080gr.h b/src/common/sdk/nvidia/inc/ctrl/ctrl2080/ctrl2080gr.h index 86ec9b479..89e2c7d20 100644 --- a/src/common/sdk/nvidia/inc/ctrl/ctrl2080/ctrl2080gr.h +++ b/src/common/sdk/nvidia/inc/ctrl/ctrl2080/ctrl2080gr.h @@ -1851,4 +1851,30 @@ typedef struct NV2080_CTRL_GR_GET_GFX_GPC_AND_TPC_INFO_PARAMS { NvU32 numGfxTpc; } NV2080_CTRL_GR_GET_GFX_GPC_AND_TPC_INFO_PARAMS; +/* + * NV2080_CTRL_CMD_GR_GET_TPC_RECONFIG_MASK + * + * This command returns the TPC reconfig mask for a specific GPC + * + * gpc[IN] + * The GPC for which the TPC reconfig mask needs to be queried. + * The GPC should be specified as a logical index. + * + * tpcReconfigMask[OUT] + * Mask of reconfigurable TPCs in the specified GPC + * + * grRouteInfo[IN] + * This parameter specifies the routing information used to + * disambiguate the target GR engine. + */ +#define NV2080_CTRL_CMD_GR_GET_TPC_RECONFIG_MASK (0x2080123bU) /* finn: Evaluated from "(FINN_NV20_SUBDEVICE_0_GR_INTERFACE_ID << 8) | NV2080_CTRL_GR_GET_TPC_RECONFIG_MASK_PARAMS_MESSAGE_ID" */ + +#define NV2080_CTRL_GR_GET_TPC_RECONFIG_MASK_PARAMS_MESSAGE_ID (0x3bU) + +typedef struct NV2080_CTRL_GR_GET_TPC_RECONFIG_MASK_PARAMS { + NvU32 gpc; + NvU32 tpcReconfigMask; + NV_DECLARE_ALIGNED(NV2080_CTRL_GR_ROUTE_INFO grRouteInfo, 8); +} NV2080_CTRL_GR_GET_TPC_RECONFIG_MASK_PARAMS; + /* _ctrl2080gr_h_ */ diff --git a/src/common/sdk/nvidia/inc/ctrl/ctrl90e7.h b/src/common/sdk/nvidia/inc/ctrl/ctrl90e7.h index f3ea79e77..337aa402c 100644 --- a/src/common/sdk/nvidia/inc/ctrl/ctrl90e7.h +++ b/src/common/sdk/nvidia/inc/ctrl/ctrl90e7.h @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2013-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-FileCopyrightText: Copyright (c) 2013-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. * SPDX-License-Identifier: MIT * * Permission is hereby granted, free of charge, to any person obtaining a diff --git a/src/common/sdk/nvidia/inc/nverror.h b/src/common/sdk/nvidia/inc/nverror.h index ed4d63072..2da85eec8 100644 --- a/src/common/sdk/nvidia/inc/nverror.h +++ b/src/common/sdk/nvidia/inc/nverror.h @@ -123,7 +123,9 @@ #define ROBUST_CHANNEL_FAST_PATH_ERROR (139) #define UNRECOVERABLE_ECC_ERROR_ESCAPE (140) #define GPU_INIT_ERROR (143) -#define ROBUST_CHANNEL_LAST_ERROR (GPU_INIT_ERROR) +#define RESOURCE_RETIREMENT_EVENT (156) +#define RESOURCE_RETIREMENT_FAILURE (157) +#define ROBUST_CHANNEL_LAST_ERROR (RESOURCE_RETIREMENT_FAILURE) // Indexed CE reference diff --git a/src/common/sdk/nvidia/inc/nvmisc.h b/src/common/sdk/nvidia/inc/nvmisc.h index fa33a9ffd..09e584d3b 100644 --- a/src/common/sdk/nvidia/inc/nvmisc.h +++ b/src/common/sdk/nvidia/inc/nvmisc.h @@ -694,6 +694,42 @@ nvPrevPow2_U64(const NvU64 x ) } \ } +// +// Bug 4851259: Newly added functions must be hidden from certain HS-signed +// ucode compilers to avoid signature mismatch. +// +#ifndef NVDEC_1_0 +/*! + * Returns the position of nth set bit in the given mask. + * + * Returns -1 if mask has fewer than n bits set. + * + * n is 0 indexed and has valid values 0..31 inclusive, so "zeroth" set bit is + * the first set LSB. + * + * Example, if mask = 0x000000F0u and n = 1, the return value will be 5. + * Example, if mask = 0x000000F0u and n = 4, the return value will be -1. + */ +static NV_FORCEINLINE NvS32 +nvGetNthSetBitIndex32(NvU32 mask, NvU32 n) +{ + NvU32 seenSetBitsCount = 0; + NvS32 index; + FOR_EACH_INDEX_IN_MASK(32, index, mask) + { + if (seenSetBitsCount == n) + { + return index; + } + ++seenSetBitsCount; + } + FOR_EACH_INDEX_IN_MASK_END; + + return -1; +} + +#endif // NVDEC_1_0 + // // Size to use when declaring variable-sized arrays // diff --git a/src/nvidia/arch/nvalloc/common/inc/inforom/ifrstruct.h b/src/nvidia/arch/nvalloc/common/inc/inforom/ifrstruct.h index 2079cfa2f..395d6067c 100644 --- a/src/nvidia/arch/nvalloc/common/inc/inforom/ifrstruct.h +++ b/src/nvidia/arch/nvalloc/common/inc/inforom/ifrstruct.h @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 1999-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-FileCopyrightText: Copyright (c) 1999-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. * SPDX-License-Identifier: MIT * * Permission is hereby granted, free of charge, to any person obtaining a diff --git a/src/nvidia/arch/nvalloc/common/inc/nvpcie.h b/src/nvidia/arch/nvalloc/common/inc/nvpcie.h index f76f23b1d..fb72df42b 100644 --- a/src/nvidia/arch/nvalloc/common/inc/nvpcie.h +++ b/src/nvidia/arch/nvalloc/common/inc/nvpcie.h @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2000-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-FileCopyrightText: Copyright (c) 2000-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. * SPDX-License-Identifier: MIT * * Permission is hereby granted, free of charge, to any person obtaining a @@ -211,21 +211,18 @@ // to any specific hardware. // // -#define NV_PCI_VIRTUAL_P2P_APPROVAL_CAP_0 0x000000C8 -#define NV_PCI_VIRTUAL_P2P_APPROVAL_CAP_0_ID 7:0 -#define NV_PCI_VIRTUAL_P2P_APPROVAL_CAP_0_NEXT 15:8 -#define NV_PCI_VIRTUAL_P2P_APPROVAL_CAP_0_LENGTH 23:16 -#define NV_PCI_VIRTUAL_P2P_APPROVAL_CAP_0_SIG_LO 31:24 -#define NV_PCI_VIRTUAL_P2P_APPROVAL_CAP_1 0x000000CC -#define NV_PCI_VIRTUAL_P2P_APPROVAL_CAP_1_SIG_HI 15:0 -#define NV_PCI_VIRTUAL_P2P_APPROVAL_CAP_1_VERSION 18:16 -#define NV_PCI_VIRTUAL_P2P_APPROVAL_CAP_1_PEER_CLIQUE_ID 22:19 -#define NV_PCI_VIRTUAL_P2P_APPROVAL_CAP_1_RELAXED_ORDERING 23:23 -#define NV_PCI_VIRTUAL_P2P_APPROVAL_CAP_1_RELAXED_ORDERING_DEFAULT 0x00000000 -#define NV_PCI_VIRTUAL_P2P_APPROVAL_CAP_1_RELAXED_ORDERING_DISABLE 0x00000001 -#define NV_PCI_VIRTUAL_P2P_APPROVAL_CAP_1_RSVD 31:24 +#define NV_PCI_VIRTUAL_P2P_APPROVAL_CAP_0 0x000000C8 +#define NV_PCI_VIRTUAL_P2P_APPROVAL_CAP_0_ID 7:0 +#define NV_PCI_VIRTUAL_P2P_APPROVAL_CAP_0_NEXT 15:8 +#define NV_PCI_VIRTUAL_P2P_APPROVAL_CAP_0_LENGTH 23:16 +#define NV_PCI_VIRTUAL_P2P_APPROVAL_CAP_0_SIG_LO 31:24 +#define NV_PCI_VIRTUAL_P2P_APPROVAL_CAP_1 0x000000CC +#define NV_PCI_VIRTUAL_P2P_APPROVAL_CAP_1_SIG_HI 15:0 +#define NV_PCI_VIRTUAL_P2P_APPROVAL_CAP_1_VERSION 18:16 +#define NV_PCI_VIRTUAL_P2P_APPROVAL_CAP_1_PEER_CLIQUE_ID 22:19 +#define NV_PCI_VIRTUAL_P2P_APPROVAL_CAP_1_RSVD 31:23 -#define NV_PCI_VIRTUAL_P2P_APPROVAL_SIGNATURE 0x00503250 +#define NV_PCI_VIRTUAL_P2P_APPROVAL_SIGNATURE 0x00503250 // Chipset-specific definitions. // Intel SantaRosa definitions diff --git a/src/nvidia/generated/g_subdevice_nvoc.c b/src/nvidia/generated/g_subdevice_nvoc.c index 9aa3c49b1..092488c69 100644 --- a/src/nvidia/generated/g_subdevice_nvoc.c +++ b/src/nvidia/generated/g_subdevice_nvoc.c @@ -7410,34 +7410,19 @@ static const struct NVOC_EXPORTED_METHOD_DEF __nvoc_exported_method_def_Subdevic { /* [478] */ #if NVOC_EXPORTED_METHOD_DISABLED_BY_FLAG(0x210u) /*pFunc=*/ (void (*)(void)) NULL, -#else - /*pFunc=*/ (void (*)(void)) subdeviceCtrlCmdEccGetEciCounters_IMPL, -#endif // NVOC_EXPORTED_METHOD_DISABLED_BY_FLAG(0x210u) - /*flags=*/ 0x210u, - /*accessRight=*/0x0u, - /*methodId=*/ 0x20803401u, - /*paramSize=*/ sizeof(NV2080_CTRL_ECC_GET_ECI_COUNTERS_PARAMS), - /*pClassInfo=*/ &(__nvoc_class_def_Subdevice.classInfo), -#if NV_PRINTF_STRINGS_ALLOWED - /*func=*/ "subdeviceCtrlCmdEccGetEciCounters" -#endif - }, - { /* [479] */ -#if NVOC_EXPORTED_METHOD_DISABLED_BY_FLAG(0x210u) - /*pFunc=*/ (void (*)(void)) NULL, #else /*pFunc=*/ (void (*)(void)) subdeviceCtrlCmdEccGetVolatileCounts_IMPL, #endif // NVOC_EXPORTED_METHOD_DISABLED_BY_FLAG(0x210u) /*flags=*/ 0x210u, /*accessRight=*/0x0u, - /*methodId=*/ 0x20803402u, + /*methodId=*/ 0x20803401u, /*paramSize=*/ sizeof(NV2080_CTRL_ECC_GET_VOLATILE_COUNTS_PARAMS), /*pClassInfo=*/ &(__nvoc_class_def_Subdevice.classInfo), #if NV_PRINTF_STRINGS_ALLOWED /*func=*/ "subdeviceCtrlCmdEccGetVolatileCounts" #endif }, - { /* [480] */ + { /* [479] */ #if NVOC_EXPORTED_METHOD_DISABLED_BY_FLAG(0x810u) /*pFunc=*/ (void (*)(void)) NULL, #else @@ -7452,7 +7437,7 @@ static const struct NVOC_EXPORTED_METHOD_DEF __nvoc_exported_method_def_Subdevic /*func=*/ "subdeviceCtrlCmdFlaRange" #endif }, - { /* [481] */ + { /* [480] */ #if NVOC_EXPORTED_METHOD_DISABLED_BY_FLAG(0x102204u) /*pFunc=*/ (void (*)(void)) NULL, #else @@ -7467,7 +7452,7 @@ static const struct NVOC_EXPORTED_METHOD_DEF __nvoc_exported_method_def_Subdevic /*func=*/ "subdeviceCtrlCmdFlaSetupInstanceMemBlock" #endif }, - { /* [482] */ + { /* [481] */ #if NVOC_EXPORTED_METHOD_DISABLED_BY_FLAG(0x100004u) /*pFunc=*/ (void (*)(void)) NULL, #else @@ -7482,7 +7467,7 @@ static const struct NVOC_EXPORTED_METHOD_DEF __nvoc_exported_method_def_Subdevic /*func=*/ "subdeviceCtrlCmdFlaGetRange" #endif }, - { /* [483] */ + { /* [482] */ #if NVOC_EXPORTED_METHOD_DISABLED_BY_FLAG(0x1810u) /*pFunc=*/ (void (*)(void)) NULL, #else @@ -7497,7 +7482,7 @@ static const struct NVOC_EXPORTED_METHOD_DEF __nvoc_exported_method_def_Subdevic /*func=*/ "subdeviceCtrlCmdFlaGetFabricMemStats" #endif }, - { /* [484] */ + { /* [483] */ #if NVOC_EXPORTED_METHOD_DISABLED_BY_FLAG(0x4211u) /*pFunc=*/ (void (*)(void)) NULL, #else @@ -7512,7 +7497,7 @@ static const struct NVOC_EXPORTED_METHOD_DEF __nvoc_exported_method_def_Subdevic /*func=*/ "subdeviceCtrlCmdGspGetFeatures" #endif }, - { /* [485] */ + { /* [484] */ #if NVOC_EXPORTED_METHOD_DISABLED_BY_FLAG(0x210u) /*pFunc=*/ (void (*)(void)) NULL, #else @@ -7527,7 +7512,7 @@ static const struct NVOC_EXPORTED_METHOD_DEF __nvoc_exported_method_def_Subdevic /*func=*/ "subdeviceCtrlCmdGspGetRmHeapStats" #endif }, - { /* [486] */ + { /* [485] */ #if NVOC_EXPORTED_METHOD_DISABLED_BY_FLAG(0x2210u) /*pFunc=*/ (void (*)(void)) NULL, #else @@ -7542,7 +7527,7 @@ static const struct NVOC_EXPORTED_METHOD_DEF __nvoc_exported_method_def_Subdevic /*func=*/ "subdeviceCtrlCmdGrmgrGetGrFsInfo" #endif }, - { /* [487] */ + { /* [486] */ #if NVOC_EXPORTED_METHOD_DISABLED_BY_FLAG(0x3u) /*pFunc=*/ (void (*)(void)) NULL, #else @@ -7557,7 +7542,7 @@ static const struct NVOC_EXPORTED_METHOD_DEF __nvoc_exported_method_def_Subdevic /*func=*/ "subdeviceCtrlCmdOsUnixGc6BlockerRefCnt" #endif }, - { /* [488] */ + { /* [487] */ #if NVOC_EXPORTED_METHOD_DISABLED_BY_FLAG(0x11u) /*pFunc=*/ (void (*)(void)) NULL, #else @@ -7572,7 +7557,7 @@ static const struct NVOC_EXPORTED_METHOD_DEF __nvoc_exported_method_def_Subdevic /*func=*/ "subdeviceCtrlCmdOsUnixAllowDisallowGcoff" #endif }, - { /* [489] */ + { /* [488] */ #if NVOC_EXPORTED_METHOD_DISABLED_BY_FLAG(0x1u) /*pFunc=*/ (void (*)(void)) NULL, #else @@ -7587,7 +7572,7 @@ static const struct NVOC_EXPORTED_METHOD_DEF __nvoc_exported_method_def_Subdevic /*func=*/ "subdeviceCtrlCmdOsUnixAudioDynamicPower" #endif }, - { /* [490] */ + { /* [489] */ #if NVOC_EXPORTED_METHOD_DISABLED_BY_FLAG(0x13u) /*pFunc=*/ (void (*)(void)) NULL, #else @@ -7602,7 +7587,7 @@ static const struct NVOC_EXPORTED_METHOD_DEF __nvoc_exported_method_def_Subdevic /*func=*/ "subdeviceCtrlCmdOsUnixVidmemPersistenceStatus" #endif }, - { /* [491] */ + { /* [490] */ #if NVOC_EXPORTED_METHOD_DISABLED_BY_FLAG(0x7u) /*pFunc=*/ (void (*)(void)) NULL, #else @@ -7617,7 +7602,7 @@ static const struct NVOC_EXPORTED_METHOD_DEF __nvoc_exported_method_def_Subdevic /*func=*/ "subdeviceCtrlCmdOsUnixUpdateTgpStatus" #endif }, - { /* [492] */ + { /* [491] */ #if NVOC_EXPORTED_METHOD_DISABLED_BY_FLAG(0x600u) /*pFunc=*/ (void (*)(void)) NULL, #else @@ -7632,7 +7617,7 @@ static const struct NVOC_EXPORTED_METHOD_DEF __nvoc_exported_method_def_Subdevic /*func=*/ "subdeviceCtrlCmdVgpuMgrInternalBootloadGspVgpuPluginTask" #endif }, - { /* [493] */ + { /* [492] */ #if NVOC_EXPORTED_METHOD_DISABLED_BY_FLAG(0x600u) /*pFunc=*/ (void (*)(void)) NULL, #else @@ -7647,7 +7632,7 @@ static const struct NVOC_EXPORTED_METHOD_DEF __nvoc_exported_method_def_Subdevic /*func=*/ "subdeviceCtrlCmdVgpuMgrInternalShutdownGspVgpuPluginTask" #endif }, - { /* [494] */ + { /* [493] */ #if NVOC_EXPORTED_METHOD_DISABLED_BY_FLAG(0x600u) /*pFunc=*/ (void (*)(void)) NULL, #else @@ -7662,7 +7647,7 @@ static const struct NVOC_EXPORTED_METHOD_DEF __nvoc_exported_method_def_Subdevic /*func=*/ "subdeviceCtrlCmdVgpuMgrInternalPgpuAddVgpuType" #endif }, - { /* [495] */ + { /* [494] */ #if NVOC_EXPORTED_METHOD_DISABLED_BY_FLAG(0x600u) /*pFunc=*/ (void (*)(void)) NULL, #else @@ -7677,7 +7662,7 @@ static const struct NVOC_EXPORTED_METHOD_DEF __nvoc_exported_method_def_Subdevic /*func=*/ "subdeviceCtrlCmdVgpuMgrInternalEnumerateVgpuPerPgpu" #endif }, - { /* [496] */ + { /* [495] */ #if NVOC_EXPORTED_METHOD_DISABLED_BY_FLAG(0x600u) /*pFunc=*/ (void (*)(void)) NULL, #else @@ -7692,7 +7677,7 @@ static const struct NVOC_EXPORTED_METHOD_DEF __nvoc_exported_method_def_Subdevic /*func=*/ "subdeviceCtrlCmdVgpuMgrInternalClearGuestVmInfo" #endif }, - { /* [497] */ + { /* [496] */ #if NVOC_EXPORTED_METHOD_DISABLED_BY_FLAG(0x600u) /*pFunc=*/ (void (*)(void)) NULL, #else @@ -7707,7 +7692,7 @@ static const struct NVOC_EXPORTED_METHOD_DEF __nvoc_exported_method_def_Subdevic /*func=*/ "subdeviceCtrlCmdVgpuMgrInternalGetVgpuFbUsage" #endif }, - { /* [498] */ + { /* [497] */ #if NVOC_EXPORTED_METHOD_DISABLED_BY_FLAG(0x600u) /*pFunc=*/ (void (*)(void)) NULL, #else @@ -7722,7 +7707,7 @@ static const struct NVOC_EXPORTED_METHOD_DEF __nvoc_exported_method_def_Subdevic /*func=*/ "subdeviceCtrlCmdVgpuMgrInternalSetVgpuEncoderCapacity" #endif }, - { /* [499] */ + { /* [498] */ #if NVOC_EXPORTED_METHOD_DISABLED_BY_FLAG(0x600u) /*pFunc=*/ (void (*)(void)) NULL, #else @@ -7737,7 +7722,7 @@ static const struct NVOC_EXPORTED_METHOD_DEF __nvoc_exported_method_def_Subdevic /*func=*/ "subdeviceCtrlCmdVgpuMgrInternalCleanupGspVgpuPluginResources" #endif }, - { /* [500] */ + { /* [499] */ #if NVOC_EXPORTED_METHOD_DISABLED_BY_FLAG(0x600u) /*pFunc=*/ (void (*)(void)) NULL, #else @@ -7752,7 +7737,7 @@ static const struct NVOC_EXPORTED_METHOD_DEF __nvoc_exported_method_def_Subdevic /*func=*/ "subdeviceCtrlCmdVgpuMgrInternalGetPgpuFsEncoding" #endif }, - { /* [501] */ + { /* [500] */ #if NVOC_EXPORTED_METHOD_DISABLED_BY_FLAG(0x600u) /*pFunc=*/ (void (*)(void)) NULL, #else @@ -7767,7 +7752,7 @@ static const struct NVOC_EXPORTED_METHOD_DEF __nvoc_exported_method_def_Subdevic /*func=*/ "subdeviceCtrlCmdVgpuMgrInternalGetPgpuMigrationSupport" #endif }, - { /* [502] */ + { /* [501] */ #if NVOC_EXPORTED_METHOD_DISABLED_BY_FLAG(0x600u) /*pFunc=*/ (void (*)(void)) NULL, #else @@ -7782,7 +7767,7 @@ static const struct NVOC_EXPORTED_METHOD_DEF __nvoc_exported_method_def_Subdevic /*func=*/ "subdeviceCtrlCmdVgpuMgrInternalSetVgpuMgrConfig" #endif }, - { /* [503] */ + { /* [502] */ #if NVOC_EXPORTED_METHOD_DISABLED_BY_FLAG(0xa50u) /*pFunc=*/ (void (*)(void)) NULL, #else @@ -7797,7 +7782,7 @@ static const struct NVOC_EXPORTED_METHOD_DEF __nvoc_exported_method_def_Subdevic /*func=*/ "subdeviceCtrlCmdGetAvailableHshubMask" #endif }, - { /* [504] */ + { /* [503] */ #if NVOC_EXPORTED_METHOD_DISABLED_BY_FLAG(0x210u) /*pFunc=*/ (void (*)(void)) NULL, #else @@ -7812,7 +7797,7 @@ static const struct NVOC_EXPORTED_METHOD_DEF __nvoc_exported_method_def_Subdevic /*func=*/ "subdeviceCtrlCmdPerfGetGpumonPerfmonUtilSamples" #endif }, - { /* [505] */ + { /* [504] */ #if NVOC_EXPORTED_METHOD_DISABLED_BY_FLAG(0x600u) /*pFunc=*/ (void (*)(void)) NULL, #else @@ -7832,7 +7817,7 @@ static const struct NVOC_EXPORTED_METHOD_DEF __nvoc_exported_method_def_Subdevic const struct NVOC_EXPORT_INFO __nvoc_export_info_Subdevice = { - /*numEntries=*/ 506, + /*numEntries=*/ 505, /*pExportEntries=*/ __nvoc_exported_method_def_Subdevice }; @@ -9295,10 +9280,6 @@ static void __nvoc_init_funcTable_Subdevice_2(Subdevice *pThis, RmHalspecOwner * pThis->__subdeviceCtrlCmdEccGetClientExposedCounters__ = &subdeviceCtrlCmdEccGetClientExposedCounters_IMPL; #endif -#if !NVOC_EXPORTED_METHOD_DISABLED_BY_FLAG(0x210u) - pThis->__subdeviceCtrlCmdEccGetEciCounters__ = &subdeviceCtrlCmdEccGetEciCounters_IMPL; -#endif - #if !NVOC_EXPORTED_METHOD_DISABLED_BY_FLAG(0x210u) pThis->__subdeviceCtrlCmdEccGetVolatileCounts__ = &subdeviceCtrlCmdEccGetVolatileCounts_IMPL; #endif @@ -9956,6 +9937,8 @@ static void __nvoc_init_funcTable_Subdevice_2(Subdevice *pThis, RmHalspecOwner * pThis->__subdeviceControl__ = &__nvoc_thunk_GpuResource_subdeviceControl; pThis->__subdeviceUnmap__ = &__nvoc_thunk_GpuResource_subdeviceUnmap; + + pThis->__subdeviceGetMemInterMapParams__ = &__nvoc_thunk_RmResource_subdeviceGetMemInterMapParams; } static void __nvoc_init_funcTable_Subdevice_3(Subdevice *pThis, RmHalspecOwner *pRmhalspecowner) { @@ -9966,8 +9949,6 @@ static void __nvoc_init_funcTable_Subdevice_3(Subdevice *pThis, RmHalspecOwner * PORT_UNREFERENCED_VARIABLE(rmVariantHal); PORT_UNREFERENCED_VARIABLE(rmVariantHal_HalVarIdx); - pThis->__subdeviceGetMemInterMapParams__ = &__nvoc_thunk_RmResource_subdeviceGetMemInterMapParams; - pThis->__subdeviceGetMemoryMappingDescriptor__ = &__nvoc_thunk_RmResource_subdeviceGetMemoryMappingDescriptor; pThis->__subdeviceUnregisterEvent__ = &__nvoc_thunk_Notifier_subdeviceUnregisterEvent; diff --git a/src/nvidia/generated/g_subdevice_nvoc.h b/src/nvidia/generated/g_subdevice_nvoc.h index f2a5066bd..469446672 100644 --- a/src/nvidia/generated/g_subdevice_nvoc.h +++ b/src/nvidia/generated/g_subdevice_nvoc.h @@ -469,7 +469,6 @@ struct Subdevice { NV_STATUS (*__subdeviceCtrlCmdFlcnGetCtxBufferInfo__)(struct Subdevice *, NV2080_CTRL_FLCN_GET_CTX_BUFFER_INFO_PARAMS *); NV_STATUS (*__subdeviceCtrlCmdFlcnGetCtxBufferSize__)(struct Subdevice *, NV2080_CTRL_FLCN_GET_CTX_BUFFER_SIZE_PARAMS *); NV_STATUS (*__subdeviceCtrlCmdEccGetClientExposedCounters__)(struct Subdevice *, NV2080_CTRL_ECC_GET_CLIENT_EXPOSED_COUNTERS_PARAMS *); - NV_STATUS (*__subdeviceCtrlCmdEccGetEciCounters__)(struct Subdevice *, NV2080_CTRL_ECC_GET_ECI_COUNTERS_PARAMS *); NV_STATUS (*__subdeviceCtrlCmdEccGetVolatileCounts__)(struct Subdevice *, NV2080_CTRL_ECC_GET_VOLATILE_COUNTS_PARAMS *); NV_STATUS (*__subdeviceCtrlCmdGpuQueryEccConfiguration__)(struct Subdevice *, NV2080_CTRL_GPU_QUERY_ECC_CONFIGURATION_PARAMS *); NV_STATUS (*__subdeviceCtrlCmdGpuSetEccConfiguration__)(struct Subdevice *, NV2080_CTRL_GPU_SET_ECC_CONFIGURATION_PARAMS *); @@ -1070,7 +1069,6 @@ NV_STATUS __nvoc_objCreate_Subdevice(Subdevice**, Dynamic*, NvU32, struct CALL_C #define subdeviceCtrlCmdFlcnGetCtxBufferInfo(pSubdevice, pParams) subdeviceCtrlCmdFlcnGetCtxBufferInfo_DISPATCH(pSubdevice, pParams) #define subdeviceCtrlCmdFlcnGetCtxBufferSize(pSubdevice, pParams) subdeviceCtrlCmdFlcnGetCtxBufferSize_DISPATCH(pSubdevice, pParams) #define subdeviceCtrlCmdEccGetClientExposedCounters(pSubdevice, pParams) subdeviceCtrlCmdEccGetClientExposedCounters_DISPATCH(pSubdevice, pParams) -#define subdeviceCtrlCmdEccGetEciCounters(pSubdevice, pParams) subdeviceCtrlCmdEccGetEciCounters_DISPATCH(pSubdevice, pParams) #define subdeviceCtrlCmdEccGetVolatileCounts(pSubdevice, pParams) subdeviceCtrlCmdEccGetVolatileCounts_DISPATCH(pSubdevice, pParams) #define subdeviceCtrlCmdGpuQueryEccConfiguration(pSubdevice, pConfig) subdeviceCtrlCmdGpuQueryEccConfiguration_DISPATCH(pSubdevice, pConfig) #define subdeviceCtrlCmdGpuSetEccConfiguration(pSubdevice, pConfig) subdeviceCtrlCmdGpuSetEccConfiguration_DISPATCH(pSubdevice, pConfig) @@ -3378,12 +3376,6 @@ static inline NV_STATUS subdeviceCtrlCmdEccGetClientExposedCounters_DISPATCH(str return pSubdevice->__subdeviceCtrlCmdEccGetClientExposedCounters__(pSubdevice, pParams); } -NV_STATUS subdeviceCtrlCmdEccGetEciCounters_IMPL(struct Subdevice *pSubdevice, NV2080_CTRL_ECC_GET_ECI_COUNTERS_PARAMS *pParams); - -static inline NV_STATUS subdeviceCtrlCmdEccGetEciCounters_DISPATCH(struct Subdevice *pSubdevice, NV2080_CTRL_ECC_GET_ECI_COUNTERS_PARAMS *pParams) { - return pSubdevice->__subdeviceCtrlCmdEccGetEciCounters__(pSubdevice, pParams); -} - NV_STATUS subdeviceCtrlCmdEccGetVolatileCounts_IMPL(struct Subdevice *pSubdevice, NV2080_CTRL_ECC_GET_VOLATILE_COUNTS_PARAMS *pParams); static inline NV_STATUS subdeviceCtrlCmdEccGetVolatileCounts_DISPATCH(struct Subdevice *pSubdevice, NV2080_CTRL_ECC_GET_VOLATILE_COUNTS_PARAMS *pParams) { diff --git a/src/nvidia/src/kernel/gpu/subdevice/subdevice_ctrl_gpu_kernel.c b/src/nvidia/src/kernel/gpu/subdevice/subdevice_ctrl_gpu_kernel.c index 913b1d77e..b8e5ec408 100644 --- a/src/nvidia/src/kernel/gpu/subdevice/subdevice_ctrl_gpu_kernel.c +++ b/src/nvidia/src/kernel/gpu/subdevice/subdevice_ctrl_gpu_kernel.c @@ -1355,6 +1355,47 @@ subdeviceCtrlCmdGpuGetFermiTpcInfo_IMPL return NV_OK; } +#if (defined(DEBUG) || defined(DEVELOP)) +// +// subdeviceCtrlCmdGpuGetTpcReconfigMask +// +// Lock Requirements: +// Assert that API lock and GPUs lock held on entry +// +NV_STATUS +subdeviceCtrlCmdGpuGetTpcReconfigMask_IMPL +( + Subdevice *pSubdevice, + NV2080_CTRL_GPU_GET_TPC_RECONFIG_MASK_PARAMS *pParams +) +{ + OBJGPU *pGpu = GPU_RES_GET_GPU(pSubdevice); + RM_API *pRmApi = GPU_GET_PHYSICAL_RMAPI(pGpu); + NvHandle hClient = RES_GET_CLIENT_HANDLE(pSubdevice); + NvHandle hSubdevice = RES_GET_HANDLE(pSubdevice); + + NV2080_CTRL_GR_GET_TPC_RECONFIG_MASK_PARAMS tpcReconfigMaskParams; + + NV_ASSERT_OR_RETURN(rmapiLockIsOwner() && rmDeviceGpuLockIsOwner(GPU_RES_GET_GPU(pSubdevice)->gpuInstance), + NV_ERR_INVALID_LOCK_STATE); + + portMemSet(&tpcReconfigMaskParams, 0, sizeof(tpcReconfigMaskParams)); + tpcReconfigMaskParams.gpc = pParams->gpc; + + NV_CHECK_OK_OR_RETURN( + LEVEL_ERROR, + pRmApi->Control(pRmApi, + hClient, + hSubdevice, + NV2080_CTRL_CMD_GR_GET_TPC_RECONFIG_MASK, + &tpcReconfigMaskParams, + sizeof(tpcReconfigMaskParams))); + + pParams->tpcReconfigMask = tpcReconfigMaskParams.tpcReconfigMask; + return NV_OK; +} +#endif // defined(DEBUG) || defined(DEVELOP) + // // subdeviceCtrlCmdGpuGetFermiZcullInfo // diff --git a/src/nvidia/src/kernel/mem_mgr/mem.c b/src/nvidia/src/kernel/mem_mgr/mem.c index 6c6af7be9..a696f2ab5 100644 --- a/src/nvidia/src/kernel/mem_mgr/mem.c +++ b/src/nvidia/src/kernel/mem_mgr/mem.c @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2018-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-FileCopyrightText: Copyright (c) 2018-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. * SPDX-License-Identifier: MIT * * Permission is hereby granted, free of charge, to any person obtaining a diff --git a/src/nvidia/src/kernel/platform/chipset/chipset_pcie.c b/src/nvidia/src/kernel/platform/chipset/chipset_pcie.c index 50c317465..6da4f2a90 100644 --- a/src/nvidia/src/kernel/platform/chipset/chipset_pcie.c +++ b/src/nvidia/src/kernel/platform/chipset/chipset_pcie.c @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2000-2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-FileCopyrightText: Copyright (c) 2000-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. * SPDX-License-Identifier: MIT * * Permission is hereby granted, free of charge, to any person obtaining a @@ -72,7 +72,7 @@ static void objClGpuUnmapRootPort(OBJGPU *); static void objClGpuMapEnhCfgSpace(OBJGPU *, OBJCL *); static void objClGpuUnmapEnhCfgSpace(OBJGPU *); static NV_STATUS objClGpuIs3DController(OBJGPU *); -static void objClLoadPcieVirtualP2PApproval(OBJGPU *, OBJCL *); +static void objClLoadPcieVirtualP2PApproval(OBJGPU *); static void objClCheckForExternalGpu(OBJGPU *, OBJCL *); static void _objClAdjustTcVcMap(OBJGPU *, OBJCL *, PORTDATA *); static void _objClGetDownstreamAtomicsEnabledMask(void *, NvU32, NvU32 *); @@ -951,7 +951,7 @@ clUpdatePcieConfig_IMPL(OBJGPU *pGpu, OBJCL *pCl) } // Load PCI Express virtual P2P approval config - objClLoadPcieVirtualP2PApproval(pGpu, pCl); + objClLoadPcieVirtualP2PApproval(pGpu); // // Disable NOSNOOP bit for Passthrough. @@ -4259,13 +4259,12 @@ clFreePcieConfigSpaceBase_IMPL(OBJCL *pCl) // other. // static void -objClLoadPcieVirtualP2PApproval(OBJGPU *pGpu, OBJCL *pCl) +objClLoadPcieVirtualP2PApproval(OBJGPU *pGpu) { void *handle; NvU32 data32; NvU8 version; NvU8 cap; - NvU8 rlxdOrderingCfg = 0; NvU8 bus = gpuGetBus(pGpu); NvU8 device = gpuGetDevice(pGpu); NvU32 domain = gpuGetDomain(pGpu); @@ -4325,19 +4324,6 @@ objClLoadPcieVirtualP2PApproval(OBJGPU *pGpu, OBJCL *pCl) _PEER_CLIQUE_ID, data32); pGpu->pciePeerClique.bValid = NV_TRUE; - rlxdOrderingCfg = (NvU8)DRF_VAL(_PCI, _VIRTUAL_P2P_APPROVAL_CAP_1, - _RELAXED_ORDERING, data32); - - if (rlxdOrderingCfg == NV_PCI_VIRTUAL_P2P_APPROVAL_CAP_1_RELAXED_ORDERING_DISABLE) - { - // Unset relaxed ordering based on hypervisor's request - pCl->setProperty(pCl, PDB_PROP_CL_RELAXED_ORDERING_NOT_CAPABLE, NV_TRUE); - - NV_PRINTF(LEVEL_INFO, - "Hypervisor has disabled relaxed ordering on GPU%u\n", - gpuGetInstance(pGpu)); - } - NV_PRINTF(LEVEL_INFO, "Hypervisor has assigned GPU%u to peer clique %u\n", gpuGetInstance(pGpu), pGpu->pciePeerClique.id); diff --git a/src/nvidia/src/kernel/virtualization/kernel_hostvgpudeviceapi.c b/src/nvidia/src/kernel/virtualization/kernel_hostvgpudeviceapi.c index 05e4c8f3c..e797e9944 100644 --- a/src/nvidia/src/kernel/virtualization/kernel_hostvgpudeviceapi.c +++ b/src/nvidia/src/kernel/virtualization/kernel_hostvgpudeviceapi.c @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2021-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-FileCopyrightText: Copyright (c) 2021-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. * SPDX-License-Identifier: MIT * * Permission is hereby granted, free of charge, to any person obtaining a diff --git a/version.mk b/version.mk index 6c8b3cc27..2d17c794f 100644 --- a/version.mk +++ b/version.mk @@ -1,4 +1,4 @@ -NVIDIA_VERSION = 535.230.02 +NVIDIA_VERSION = 535.247.01 # This file. VERSION_MK_FILE := $(lastword $(MAKEFILE_LIST))