535.86.10

This commit is contained in:
Bernhard Stoeckner 2023-07-31 18:16:23 +02:00
parent 337e28efda
commit 29f830f1bb
No known key found for this signature in database
GPG Key ID: 7D23DC2750FAC2E1
14 changed files with 61 additions and 175 deletions

View File

@ -2,6 +2,8 @@
## Release 535 Entries ## Release 535 Entries
### [535.86.10] 2023-07-31
### [535.86.05] 2023-07-18 ### [535.86.05] 2023-07-18
### [535.54.03] 2023-06-14 ### [535.54.03] 2023-06-14

View File

@ -1,7 +1,7 @@
# NVIDIA Linux Open GPU Kernel Module Source # NVIDIA Linux Open GPU Kernel Module Source
This is the source release of the NVIDIA Linux open GPU kernel modules, This is the source release of the NVIDIA Linux open GPU kernel modules,
version 535.86.05. version 535.86.10.
## How to Build ## How to Build
@ -17,7 +17,7 @@ as root:
Note that the kernel modules built here must be used with GSP Note that the kernel modules built here must be used with GSP
firmware and user-space NVIDIA GPU driver components from a corresponding 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` the NVIDIA GPU driver from the .run file using the `--no-kernel-modules`
option. E.g., option. E.g.,
@ -180,7 +180,7 @@ software applications.
## Compatible GPUs ## Compatible GPUs
The open-gpu-kernel-modules can be used on any Turing or later GPU 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. GeForce and Workstation support is still considered alpha-quality.
To enable use of the open kernel modules on GeForce and Workstation GPUs, 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 parameter to 1. For more details, see the NVIDIA GPU driver end user
README here: 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 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 ID, the second is the PCI Subsystem Vendor ID, and the third is the PCI

View File

@ -72,7 +72,7 @@ EXTRA_CFLAGS += -I$(src)/common/inc
EXTRA_CFLAGS += -I$(src) EXTRA_CFLAGS += -I$(src)
EXTRA_CFLAGS += -Wall $(DEFINES) $(INCLUDES) -Wno-cast-qual -Wno-error -Wno-format-extra-args EXTRA_CFLAGS += -Wall $(DEFINES) $(INCLUDES) -Wno-cast-qual -Wno-error -Wno-format-extra-args
EXTRA_CFLAGS += -D__KERNEL__ -DMODULE -DNVRM EXTRA_CFLAGS += -D__KERNEL__ -DMODULE -DNVRM
EXTRA_CFLAGS += -DNV_VERSION_STRING=\"535.86.05\" EXTRA_CFLAGS += -DNV_VERSION_STRING=\"535.86.10\"
ifneq ($(SYSSRCHOST1X),) ifneq ($(SYSSRCHOST1X),)
EXTRA_CFLAGS += -I$(SYSSRCHOST1X) EXTRA_CFLAGS += -I$(SYSSRCHOST1X)

View File

@ -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. // access through the bus, because no cache coherence message is exchanged.
if (uvm_gpu_is_coherent(gpu->parent)) { if (uvm_gpu_is_coherent(gpu->parent)) {
manager->conf.gpfifo_loc = UVM_BUFFER_LOCATION_SYS; 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 { else {
// By default we place GPFIFO and GPPUT on vidmem as it potentially has // By default we place GPFIFO and GPPUT on vidmem as it potentially has

View File

@ -46,11 +46,6 @@ NvlStatus nvlink_lib_unload(void);
*/ */
NvlStatus nvlink_lib_ioctl_ctrl(nvlink_ioctrl_params *ctrl_params); 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 #ifdef __cplusplus
} }
#endif #endif

View File

@ -43,11 +43,11 @@
#endif #endif
#if defined(NV_LINUX) || defined(NV_BSD) || defined(NV_SUNOS) #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_BRANCH_VERSION "rel/gpu_drv/r535/r536_62-219"
#define NV_BUILD_CHANGELIST_NUM (33069717) #define NV_BUILD_CHANGELIST_NUM (33114094)
#define NV_BUILD_TYPE "Official" #define NV_BUILD_TYPE "Official"
#define NV_BUILD_NAME "rel/gpu_drv/r535/r536_62-214" #define NV_BUILD_NAME "rel/gpu_drv/r535/r536_62-219"
#define NV_LAST_OFFICIAL_CHANGELIST_NUM (33069717) #define NV_LAST_OFFICIAL_CHANGELIST_NUM (33114094)
#else /* Windows builds */ #else /* Windows builds */
#define NV_BUILD_BRANCH_VERSION "r536_62-3" #define NV_BUILD_BRANCH_VERSION "r536_62-3"

View File

@ -4,7 +4,7 @@
#if defined(NV_LINUX) || defined(NV_BSD) || defined(NV_SUNOS) || defined(NV_VMWARE) || defined(NV_QNX) || defined(NV_INTEGRITY) || \ #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) (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 #else

View File

@ -439,11 +439,6 @@ NvlStatus nvlink_lib_register_link(nvlink_device *dev, nvlink_link *link);
*/ */
NvlStatus nvlink_lib_unregister_link(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 *******************************/ /******************************* NVLink link management functions *******************************/

View File

@ -46,11 +46,6 @@ NvlStatus nvlink_lib_unload(void);
*/ */
NvlStatus nvlink_lib_ioctl_ctrl(nvlink_ioctrl_params *ctrl_params); 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 #ifdef __cplusplus
} }
#endif #endif

View File

@ -171,6 +171,7 @@ nvlink_lib_is_registerd_device_with_reduced_config(void)
{ {
NvlStatus lock_status = NVL_SUCCESS; NvlStatus lock_status = NVL_SUCCESS;
nvlink_device *dev = NULL; nvlink_device *dev = NULL;
NvBool bIsReducedConfg = NV_FALSE;
// Acquire top-level lock // Acquire top-level lock
lock_status = nvlink_lib_top_lock_acquire(); 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) 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_release();
nvlink_lib_top_lock_free();
return NV_FALSE; return bIsReducedConfg;
}
/*
* 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;
} }

View File

@ -583,12 +583,9 @@ typedef struct
NvBool bDisabledRemoteEndLinkMaskCached; NvBool bDisabledRemoteEndLinkMaskCached;
} lr10_device; } lr10_device;
#define NVSWITCH_NUM_DEVICES_PER_DELTA_LR10 6
typedef struct { typedef struct {
NvU32 switchPhysicalId; NvU32 switchPhysicalId;
NvU64 accessLinkMask; NvU64 linkMask;
NvU64 trunkLinkMask;
} lr10_links_connected_to_disabled_remote_end; } lr10_links_connected_to_disabled_remote_end;
#define NVSWITCH_GET_CHIP_DEVICE_LR10(_device) \ #define NVSWITCH_GET_CHIP_DEVICE_LR10(_device) \

View File

@ -43,68 +43,40 @@
#include "nvswitch/lr10/dev_nvlipt_ip.h" #include "nvswitch/lr10/dev_nvlipt_ip.h"
#include "nvswitch/lr10/dev_nport_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[] = lr10_links_connected_to_disabled_remote_end nvswitchDisconnetedRemoteLinkMasks[] =
{ {
{ {
0x8, // switchPhysicalId 0x8, // switchPhysicalId
0x56A000500, // accessLinkMask 0x56A000500 //linkMask
0xFF00FF // trunkLinkMask
}, },
{ {
0x9, // switchPhysicalId 0x9, // switchPhysicalId
0x509009900, // accessLinkMask 0x509009900 //linkMask
0xFF00FF // trunkLinkMask
}, },
{ {
0xa, // switchPhysicalId 0xb, // switchPhysicalId
0x0, // accessLinkMask 0x56A000600 //linkMask
0xFF00FF // trunkLinkMask
}, },
{ {
0xb, // switchPhysicalId 0xc, // switchPhysicalId
0x56A000600, // accessLinkMask 0x4A9009400 //linkMask
0xFF00FF // trunkLinkMask
}, },
{ {
0xc, // switchPhysicalId 0x18, // switchPhysicalId
0x4A9009400, // accessLinkMask 0x56A000500 //linkMask
0xFF00FF // trunkLinkMask
}, },
{ {
0xd, // switchPhysicalId 0x19, // switchPhysicalId
0x0, // accessLinkMask 0x509009900 //linkMask
0xFF00FF // trunkLinkMask
}, },
{ {
0x18, // switchPhysicalId 0x1b, // switchPhysicalId
0x56A000500, // accessLinkMask 0x56A000600 //linkMask
0xFF00FF // trunkLinkMask
}, },
{ {
0x19, // switchPhysicalId 0x1c, // switchPhysicalId
0x509009900, // accessLinkMask 0x4A9009400 //linkMask
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
}, },
}; };
ct_assert(sizeof(nvswitchDisconnetedRemoteLinkMasks)/sizeof(lr10_links_connected_to_disabled_remote_end) == NUM_SWITCH_WITH_DISCONNETED_REMOTE_LINK); 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 (nvswitch_does_link_need_termination_enabled(device, link))
{ {
if (mode == NVLINK_LINKSTATE_INITPHASE1) if (mode == NVLINK_LINKSTATE_INITPHASE1)
{ {
status = nvswitch_link_termination_setup(device, link); status = nvswitch_link_termination_setup(device, link);
@ -2399,8 +2372,6 @@ nvswitch_load_link_disable_settings_lr10
NvU32 val; NvU32 val;
NVLINK_CONFIG_DATA_LINKENTRY *vbios_link_entry = NULL; NVLINK_CONFIG_DATA_LINKENTRY *vbios_link_entry = NULL;
NVSWITCH_BIOS_NVLINK_CONFIG *bios_config; 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); bios_config = nvswitch_get_bios_nvlink_config(device);
if ((bios_config == NULL) || (bios_config->bit_address == 0)) if ((bios_config == NULL) || (bios_config->bit_address == 0))
@ -2441,16 +2412,15 @@ nvswitch_load_link_disable_settings_lr10
__FUNCTION__, link->linkNumber); __FUNCTION__, link->linkNumber);
return; 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); // Set link to invalid and unregister from corelib
if (status != NVL_SUCCESS) device->link[link->linkNumber].valid = NV_FALSE;
{ nvlink_lib_unregister_link(link);
NVSWITCH_PRINT(device, ERROR, nvswitch_destroy_link(link);
"%s: Failed to enable termination on link #%d\n", __FUNCTION__, link->linkNumber);
return;
}
// add link to disabledRemoteEndLinkMask
chip_device->disabledRemoteEndLinkMask |= NVBIT64(link->linkNumber);
return; return;
} }
@ -2518,8 +2488,6 @@ nvswitch_does_link_need_termination_enabled_lr10
NvU32 i; NvU32 i;
NvU32 physicalId; NvU32 physicalId;
lr10_device *chip_device; lr10_device *chip_device;
NvU32 numNvswitches;
NvlStatus status;
physicalId = nvswitch_read_physical_id(device); physicalId = nvswitch_read_physical_id(device);
chip_device = NVSWITCH_GET_CHIP_DEVICE_LR10(device); chip_device = NVSWITCH_GET_CHIP_DEVICE_LR10(device);
@ -2542,30 +2510,16 @@ nvswitch_does_link_need_termination_enabled_lr10
chip_device->disabledRemoteEndLinkMask = 0; chip_device->disabledRemoteEndLinkMask = 0;
if (nvlink_lib_is_registerd_device_with_reduced_config()) 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].linkMask;
chip_device->disabledRemoteEndLinkMask |= break;
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->bDisabledRemoteEndLinkMaskCached = NV_TRUE; chip_device->bDisabledRemoteEndLinkMaskCached = NV_TRUE;
} }

View File

@ -1006,9 +1006,6 @@ struct OBJGPU {
NvU32 subdeviceInstance; NvU32 subdeviceInstance;
NvS32 numaNodeId; NvS32 numaNodeId;
_GPU_UUID gpuUuid; _GPU_UUID gpuUuid;
NvU32 gpuPhysicalId;
NvU32 gpuTerminatedLinkMask;
NvBool gpuLinkTerminationEnabled;
NvBool gspRmInitialized; NvBool gspRmInitialized;
_GPU_PCIE_PEER_CLIQUE pciePeerClique; _GPU_PCIE_PEER_CLIQUE pciePeerClique;
NvU32 i2cPortForExtdev; NvU32 i2cPortForExtdev;
@ -2422,19 +2419,6 @@ static inline void gpuUpdateUserSharedData(struct OBJGPU *pGpu) {
#define gpuUpdateUserSharedData_HAL(pGpu) gpuUpdateUserSharedData(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); NV_STATUS gpuJtVersionSanityCheck_TU102(struct OBJGPU *pGpu);

View File

@ -1,4 +1,4 @@
NVIDIA_VERSION = 535.86.05 NVIDIA_VERSION = 535.86.10
# This file. # This file.
VERSION_MK_FILE := $(lastword $(MAKEFILE_LIST)) VERSION_MK_FILE := $(lastword $(MAKEFILE_LIST))