From 29f830f1bbac5114f77d682f4a4ce5b3420b733b Mon Sep 17 00:00:00 2001 From: Bernhard Stoeckner Date: Mon, 31 Jul 2023 18:16:23 +0200 Subject: [PATCH] 535.86.10 --- CHANGELOG.md | 2 + README.md | 8 +- kernel-open/Kbuild | 2 +- kernel-open/nvidia-uvm/uvm_channel.c | 10 +- kernel-open/nvidia/nvlink_export.h | 5 - src/common/inc/nvBldVer.h | 8 +- src/common/inc/nvUnixVersion.h | 2 +- src/common/nvlink/interface/nvlink.h | 5 - src/common/nvlink/interface/nvlink_export.h | 5 - .../nvlink/kernel/nvlink/nvlink_lib_mgmt.c | 54 +-------- src/common/nvswitch/kernel/inc/lr10/lr10.h | 5 +- src/common/nvswitch/kernel/lr10/link_lr10.c | 112 ++++++------------ src/nvidia/generated/g_gpu_nvoc.h | 16 --- version.mk | 2 +- 14 files changed, 61 insertions(+), 175 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 596ed2ea3..90e60166d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ ## Release 535 Entries +### [535.86.10] 2023-07-31 + ### [535.86.05] 2023-07-18 ### [535.54.03] 2023-06-14 diff --git a/README.md b/README.md index 247967ac1..6db6ffe0a 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.86.05. +version 535.86.10. ## 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.86.05 driver release. This can be achieved by installing +535.86.10 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.86.05 release, +(see the table below). However, in the 535.86.10 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.86.05/README/kernel_open.html +https://us.download.nvidia.com/XFree86/Linux-x86_64/535.86.10/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 cb7ba412b..c1e19cb4f 100644 --- a/kernel-open/Kbuild +++ b/kernel-open/Kbuild @@ -72,7 +72,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.86.05\" +EXTRA_CFLAGS += -DNV_VERSION_STRING=\"535.86.10\" ifneq ($(SYSSRCHOST1X),) EXTRA_CFLAGS += -I$(SYSSRCHOST1X) diff --git a/kernel-open/nvidia-uvm/uvm_channel.c b/kernel-open/nvidia-uvm/uvm_channel.c index f2759e9f7..06d87d275 100644 --- a/kernel-open/nvidia-uvm/uvm_channel.c +++ b/kernel-open/nvidia-uvm/uvm_channel.c @@ -2703,7 +2703,15 @@ static void init_channel_manager_conf(uvm_channel_manager_t *manager) // access through the bus, because no cache coherence message is exchanged. if (uvm_gpu_is_coherent(gpu->parent)) { manager->conf.gpfifo_loc = UVM_BUFFER_LOCATION_SYS; - manager->conf.gpput_loc = UVM_BUFFER_LOCATION_SYS; + + // On GPUs with limited ESCHED addressing range, e.g., Volta on P9, RM + // cannot guarantee that USERD/GPPUT physical address is accessible by + // ESCHED. We set GPPUT location to vidmem where physical addresses are + // all accessible by ESCHED. We use the max_host_va as a proxy for the + // PA limitation, since all architectures with 40b VA limits also have + // 40b PA limits. + manager->conf.gpput_loc = gpu->parent->max_host_va == (1ull << 40) ? UVM_BUFFER_LOCATION_VID : + UVM_BUFFER_LOCATION_SYS; } else { // By default we place GPFIFO and GPPUT on vidmem as it potentially has diff --git a/kernel-open/nvidia/nvlink_export.h b/kernel-open/nvidia/nvlink_export.h index e7deaff02..471ec8380 100644 --- a/kernel-open/nvidia/nvlink_export.h +++ b/kernel-open/nvidia/nvlink_export.h @@ -46,11 +46,6 @@ NvlStatus nvlink_lib_unload(void); */ NvlStatus nvlink_lib_ioctl_ctrl(nvlink_ioctrl_params *ctrl_params); -/* -* Gets number of devices with type deviceType -*/ -NvlStatus nvlink_lib_return_device_count_by_type(NvU32 deviceType, NvU32 *numDevices); - #ifdef __cplusplus } #endif diff --git a/src/common/inc/nvBldVer.h b/src/common/inc/nvBldVer.h index 0317e193f..b7709d052 100644 --- a/src/common/inc/nvBldVer.h +++ b/src/common/inc/nvBldVer.h @@ -43,11 +43,11 @@ #endif #if defined(NV_LINUX) || defined(NV_BSD) || defined(NV_SUNOS) -#define NV_BUILD_BRANCH_VERSION "rel/gpu_drv/r535/r536_62-214" -#define NV_BUILD_CHANGELIST_NUM (33069717) +#define NV_BUILD_BRANCH_VERSION "rel/gpu_drv/r535/r536_62-219" +#define NV_BUILD_CHANGELIST_NUM (33114094) #define NV_BUILD_TYPE "Official" -#define NV_BUILD_NAME "rel/gpu_drv/r535/r536_62-214" -#define NV_LAST_OFFICIAL_CHANGELIST_NUM (33069717) +#define NV_BUILD_NAME "rel/gpu_drv/r535/r536_62-219" +#define NV_LAST_OFFICIAL_CHANGELIST_NUM (33114094) #else /* Windows builds */ #define NV_BUILD_BRANCH_VERSION "r536_62-3" diff --git a/src/common/inc/nvUnixVersion.h b/src/common/inc/nvUnixVersion.h index 4096a6dc1..48a60e087 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.86.05" +#define NV_VERSION_STRING "535.86.10" #else diff --git a/src/common/nvlink/interface/nvlink.h b/src/common/nvlink/interface/nvlink.h index b93480a26..59e76cd2e 100644 --- a/src/common/nvlink/interface/nvlink.h +++ b/src/common/nvlink/interface/nvlink.h @@ -439,11 +439,6 @@ NvlStatus nvlink_lib_register_link(nvlink_device *dev, nvlink_link *link); */ NvlStatus nvlink_lib_unregister_link(nvlink_link *link); -/* -* Gets number of devices with type deviceType -*/ -NvlStatus nvlink_lib_return_device_count_by_type(NvU32 deviceType, NvU32 *numDevices); - /************************************************************************************************/ /******************************* NVLink link management functions *******************************/ diff --git a/src/common/nvlink/interface/nvlink_export.h b/src/common/nvlink/interface/nvlink_export.h index e7deaff02..471ec8380 100644 --- a/src/common/nvlink/interface/nvlink_export.h +++ b/src/common/nvlink/interface/nvlink_export.h @@ -46,11 +46,6 @@ NvlStatus nvlink_lib_unload(void); */ NvlStatus nvlink_lib_ioctl_ctrl(nvlink_ioctrl_params *ctrl_params); -/* -* Gets number of devices with type deviceType -*/ -NvlStatus nvlink_lib_return_device_count_by_type(NvU32 deviceType, NvU32 *numDevices); - #ifdef __cplusplus } #endif diff --git a/src/common/nvlink/kernel/nvlink/nvlink_lib_mgmt.c b/src/common/nvlink/kernel/nvlink/nvlink_lib_mgmt.c index 1bddb6a35..06e674963 100644 --- a/src/common/nvlink/kernel/nvlink/nvlink_lib_mgmt.c +++ b/src/common/nvlink/kernel/nvlink/nvlink_lib_mgmt.c @@ -171,6 +171,7 @@ nvlink_lib_is_registerd_device_with_reduced_config(void) { NvlStatus lock_status = NVL_SUCCESS; nvlink_device *dev = NULL; + NvBool bIsReducedConfg = NV_FALSE; // Acquire top-level lock lock_status = nvlink_lib_top_lock_acquire(); @@ -187,58 +188,13 @@ nvlink_lib_is_registerd_device_with_reduced_config(void) { if (dev->bReducedNvlinkConfig == NV_TRUE) { - return NV_TRUE; + bIsReducedConfg = NV_TRUE; + break; } } - // Release and free top-level lock + // Release top-level lock nvlink_lib_top_lock_release(); - nvlink_lib_top_lock_free(); - return NV_FALSE; -} - -/* -* Get the number of devices that have the device type deviceType -*/ -NvlStatus -nvlink_lib_return_device_count_by_type -( - NvU32 deviceType, - NvU32 *numDevices -) -{ - NvlStatus lock_status = NVL_SUCCESS; - nvlink_device *dev = NULL; - NvU32 device_count = 0; - - if (nvlink_lib_is_initialized()) - { - // Acquire top-level lock - lock_status = nvlink_lib_top_lock_acquire(); - if (lock_status != NVL_SUCCESS) - { - NVLINK_PRINT((DBG_MODULE_NVLINK_CORE, NVLINK_DBG_LEVEL_ERRORS, - "%s: Failed to acquire top-level lock\n", - __FUNCTION__)); - - return lock_status; - } - - // Top-level lock is now acquired - - // Loop through device list - FOR_EACH_DEVICE_REGISTERED(dev, nvlinkLibCtx.nv_devicelist_head, node) - { - if (dev->type == deviceType) - { - device_count++; - } - } - - // Release top-level lock - nvlink_lib_top_lock_release(); - } - *numDevices = device_count; - return NVL_SUCCESS; + return bIsReducedConfg; } diff --git a/src/common/nvswitch/kernel/inc/lr10/lr10.h b/src/common/nvswitch/kernel/inc/lr10/lr10.h index 5b7d9b486..f95812284 100644 --- a/src/common/nvswitch/kernel/inc/lr10/lr10.h +++ b/src/common/nvswitch/kernel/inc/lr10/lr10.h @@ -583,12 +583,9 @@ typedef struct NvBool bDisabledRemoteEndLinkMaskCached; } lr10_device; -#define NVSWITCH_NUM_DEVICES_PER_DELTA_LR10 6 - typedef struct { NvU32 switchPhysicalId; - NvU64 accessLinkMask; - NvU64 trunkLinkMask; + NvU64 linkMask; } lr10_links_connected_to_disabled_remote_end; #define NVSWITCH_GET_CHIP_DEVICE_LR10(_device) \ diff --git a/src/common/nvswitch/kernel/lr10/link_lr10.c b/src/common/nvswitch/kernel/lr10/link_lr10.c index b1406ba0f..042933a8c 100644 --- a/src/common/nvswitch/kernel/lr10/link_lr10.c +++ b/src/common/nvswitch/kernel/lr10/link_lr10.c @@ -43,68 +43,40 @@ #include "nvswitch/lr10/dev_nvlipt_ip.h" #include "nvswitch/lr10/dev_nport_ip.h" -#define NUM_SWITCH_WITH_DISCONNETED_REMOTE_LINK 12 // This must be incremented if any entries are added to the array below +#define NUM_SWITCH_WITH_DISCONNETED_REMOTE_LINK 8 // This must be incremented if any entries are added to the array below lr10_links_connected_to_disabled_remote_end nvswitchDisconnetedRemoteLinkMasks[] = { { - 0x8, // switchPhysicalId - 0x56A000500, // accessLinkMask - 0xFF00FF // trunkLinkMask + 0x8, // switchPhysicalId + 0x56A000500 //linkMask }, { - 0x9, // switchPhysicalId - 0x509009900, // accessLinkMask - 0xFF00FF // trunkLinkMask + 0x9, // switchPhysicalId + 0x509009900 //linkMask }, { - 0xa, // switchPhysicalId - 0x0, // accessLinkMask - 0xFF00FF // trunkLinkMask + 0xb, // switchPhysicalId + 0x56A000600 //linkMask }, { - 0xb, // switchPhysicalId - 0x56A000600, // accessLinkMask - 0xFF00FF // trunkLinkMask + 0xc, // switchPhysicalId + 0x4A9009400 //linkMask }, { - 0xc, // switchPhysicalId - 0x4A9009400, // accessLinkMask - 0xFF00FF // trunkLinkMask + 0x18, // switchPhysicalId + 0x56A000500 //linkMask }, { - 0xd, // switchPhysicalId - 0x0, // accessLinkMask - 0xFF00FF // trunkLinkMask + 0x19, // switchPhysicalId + 0x509009900 //linkMask }, { - 0x18, // switchPhysicalId - 0x56A000500, // accessLinkMask - 0xFF00FF // trunkLinkMask + 0x1b, // switchPhysicalId + 0x56A000600 //linkMask }, { - 0x19, // switchPhysicalId - 0x509009900, // accessLinkMask - 0xFF00FF // trunkLinkMask - }, - { - 0x1a, // switchPhysicalId - 0x0, // accessLinkMask - 0xFF00FF // trunkLinkMask - }, - { - 0x1b, // switchPhysicalId - 0x56A000600, // accessLinkMask - 0xFF00FF // trunkLinkMask - }, - { - 0x1c, // switchPhysicalId - 0x4A9009400, // accessLinkMask - 0xFF00FF // trunkLinkMask - }, - { - 0x1d, // switchPhysicalId - 0x0, // accessLinkMask - 0xFF00FF // trunkLinkMask + 0x1c, // switchPhysicalId + 0x4A9009400 //linkMask }, }; ct_assert(sizeof(nvswitchDisconnetedRemoteLinkMasks)/sizeof(lr10_links_connected_to_disabled_remote_end) == NUM_SWITCH_WITH_DISCONNETED_REMOTE_LINK); @@ -869,6 +841,7 @@ nvswitch_corelib_set_dl_link_mode_lr10 if (nvswitch_does_link_need_termination_enabled(device, link)) { + if (mode == NVLINK_LINKSTATE_INITPHASE1) { status = nvswitch_link_termination_setup(device, link); @@ -2399,8 +2372,6 @@ nvswitch_load_link_disable_settings_lr10 NvU32 val; NVLINK_CONFIG_DATA_LINKENTRY *vbios_link_entry = NULL; NVSWITCH_BIOS_NVLINK_CONFIG *bios_config; - NvlStatus status; - lr10_device *chip_device = NVSWITCH_GET_CHIP_DEVICE_LR10(device); bios_config = nvswitch_get_bios_nvlink_config(device); if ((bios_config == NULL) || (bios_config->bit_address == 0)) @@ -2441,16 +2412,15 @@ nvswitch_load_link_disable_settings_lr10 __FUNCTION__, link->linkNumber); return; } + val = FLD_SET_DRF(_NVLIPT_LNK, _CTRL_SYSTEM_LINK_MODE_CTRL, _LINK_DISABLE, + _DISABLED, val); + NVSWITCH_LINK_WR32_LR10(device, link->linkNumber, + NVLIPT_LNK, _NVLIPT_LNK, _CTRL_SYSTEM_LINK_MODE_CTRL, val); - status = nvswitch_link_termination_setup(device, link); - if (status != NVL_SUCCESS) - { - NVSWITCH_PRINT(device, ERROR, - "%s: Failed to enable termination on link #%d\n", __FUNCTION__, link->linkNumber); - return; - } - // add link to disabledRemoteEndLinkMask - chip_device->disabledRemoteEndLinkMask |= NVBIT64(link->linkNumber); + // Set link to invalid and unregister from corelib + device->link[link->linkNumber].valid = NV_FALSE; + nvlink_lib_unregister_link(link); + nvswitch_destroy_link(link); return; } @@ -2518,8 +2488,6 @@ nvswitch_does_link_need_termination_enabled_lr10 NvU32 i; NvU32 physicalId; lr10_device *chip_device; - NvU32 numNvswitches; - NvlStatus status; physicalId = nvswitch_read_physical_id(device); chip_device = NVSWITCH_GET_CHIP_DEVICE_LR10(device); @@ -2542,30 +2510,16 @@ nvswitch_does_link_need_termination_enabled_lr10 chip_device->disabledRemoteEndLinkMask = 0; if (nvlink_lib_is_registerd_device_with_reduced_config()) { - for (i = 0; i < NUM_SWITCH_WITH_DISCONNETED_REMOTE_LINK; ++i) + for (i = 0; i < NUM_SWITCH_WITH_DISCONNETED_REMOTE_LINK; ++i) + { + if (nvswitchDisconnetedRemoteLinkMasks[i].switchPhysicalId == physicalId) { - if (nvswitchDisconnetedRemoteLinkMasks[i].switchPhysicalId == physicalId) - { - chip_device->disabledRemoteEndLinkMask |= - nvswitchDisconnetedRemoteLinkMasks[i].accessLinkMask; - - status = nvlink_lib_return_device_count_by_type(NVLINK_DEVICE_TYPE_NVSWITCH, &numNvswitches); - if (status != NVL_SUCCESS) - { - NVSWITCH_PRINT(device, ERROR, - "%s: Failed to get nvswitch device count!\n", __FUNCTION__); - break; - } - - if (numNvswitches <= NVSWITCH_NUM_DEVICES_PER_DELTA_LR10) - { - chip_device->disabledRemoteEndLinkMask |= - nvswitchDisconnetedRemoteLinkMasks[i].trunkLinkMask; - } - break; - } + chip_device->disabledRemoteEndLinkMask = + nvswitchDisconnetedRemoteLinkMasks[i].linkMask; + break; } } + } chip_device->bDisabledRemoteEndLinkMaskCached = NV_TRUE; } diff --git a/src/nvidia/generated/g_gpu_nvoc.h b/src/nvidia/generated/g_gpu_nvoc.h index 686926ce9..e355c1992 100644 --- a/src/nvidia/generated/g_gpu_nvoc.h +++ b/src/nvidia/generated/g_gpu_nvoc.h @@ -1006,9 +1006,6 @@ struct OBJGPU { NvU32 subdeviceInstance; NvS32 numaNodeId; _GPU_UUID gpuUuid; - NvU32 gpuPhysicalId; - NvU32 gpuTerminatedLinkMask; - NvBool gpuLinkTerminationEnabled; NvBool gspRmInitialized; _GPU_PCIE_PEER_CLIQUE pciePeerClique; NvU32 i2cPortForExtdev; @@ -2422,19 +2419,6 @@ static inline void gpuUpdateUserSharedData(struct OBJGPU *pGpu) { #define gpuUpdateUserSharedData_HAL(pGpu) gpuUpdateUserSharedData(pGpu) -void gpuGetTerminatedLinkMask_GA100(struct OBJGPU *pGpu, NvU32 arg0); - - -#ifdef __nvoc_gpu_h_disabled -static inline void gpuGetTerminatedLinkMask(struct OBJGPU *pGpu, NvU32 arg0) { - NV_ASSERT_FAILED_PRECOMP("OBJGPU was disabled!"); -} -#else //__nvoc_gpu_h_disabled -#define gpuGetTerminatedLinkMask(pGpu, arg0) gpuGetTerminatedLinkMask_GA100(pGpu, arg0) -#endif //__nvoc_gpu_h_disabled - -#define gpuGetTerminatedLinkMask_HAL(pGpu, arg0) gpuGetTerminatedLinkMask(pGpu, arg0) - NV_STATUS gpuJtVersionSanityCheck_TU102(struct OBJGPU *pGpu); diff --git a/version.mk b/version.mk index 91b16b95c..9e1ab47d1 100644 --- a/version.mk +++ b/version.mk @@ -1,4 +1,4 @@ -NVIDIA_VERSION = 535.86.05 +NVIDIA_VERSION = 535.86.10 # This file. VERSION_MK_FILE := $(lastword $(MAKEFILE_LIST))