Skip to content

Commit ed4be64

Browse files
committed
560.35.03
1 parent 315fd96 commit ed4be64

File tree

25 files changed

+156
-51
lines changed

25 files changed

+156
-51
lines changed

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# NVIDIA Linux Open GPU Kernel Module Source
22

33
This is the source release of the NVIDIA Linux open GPU kernel modules,
4-
version 560.31.02.
4+
version 560.35.03.
55

66

77
## How to Build
@@ -17,7 +17,7 @@ as root:
1717

1818
Note that the kernel modules built here must be used with GSP
1919
firmware and user-space NVIDIA GPU driver components from a corresponding
20-
560.31.02 driver release. This can be achieved by installing
20+
560.35.03 driver release. This can be achieved by installing
2121
the NVIDIA GPU driver from the .run file using the `--no-kernel-modules`
2222
option. E.g.,
2323

@@ -185,7 +185,7 @@ table below).
185185
For details on feature support and limitations, see the NVIDIA GPU driver
186186
end user README here:
187187

188-
https://us.download.nvidia.com/XFree86/Linux-x86_64/560.31.02/README/kernel_open.html
188+
https://us.download.nvidia.com/XFree86/Linux-x86_64/560.35.03/README/kernel_open.html
189189

190190
For vGPU support, please refer to the README.vgpu packaged in the vGPU Host
191191
Package for more details.

kernel-open/Kbuild

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ EXTRA_CFLAGS += -I$(src)/common/inc
7272
EXTRA_CFLAGS += -I$(src)
7373
EXTRA_CFLAGS += -Wall $(DEFINES) $(INCLUDES) -Wno-cast-qual -Wno-format-extra-args
7474
EXTRA_CFLAGS += -D__KERNEL__ -DMODULE -DNVRM
75-
EXTRA_CFLAGS += -DNV_VERSION_STRING=\"560.31.02\"
75+
EXTRA_CFLAGS += -DNV_VERSION_STRING=\"560.35.03\"
7676

7777
ifneq ($(SYSSRCHOST1X),)
7878
EXTRA_CFLAGS += -I$(SYSSRCHOST1X)

kernel-open/common/inc/nvkms-kapi.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1425,7 +1425,7 @@ struct NvKmsKapiFunctionsTable {
14251425
);
14261426

14271427
/*!
1428-
* Immediately reset the specified display semaphore to the pending state.
1428+
* Immediately initialize the specified display semaphore to the pending state.
14291429
*
14301430
* Must be called prior to applying a mode set that utilizes the specified
14311431
* display semaphore for synchronization.
@@ -1438,7 +1438,7 @@ struct NvKmsKapiFunctionsTable {
14381438
* for the specified device.
14391439
*/
14401440
NvBool
1441-
(*resetDisplaySemaphore)
1441+
(*tryInitDisplaySemaphore)
14421442
(
14431443
struct NvKmsKapiDevice *device,
14441444
NvU32 semaphoreIndex
@@ -1447,7 +1447,7 @@ struct NvKmsKapiFunctionsTable {
14471447
/*!
14481448
* Immediately set the specified display semaphore to the displayable state.
14491449
*
1450-
* Must be called after \ref resetDisplaySemaphore to indicate a mode
1450+
* Must be called after \ref tryInitDisplaySemaphore to indicate a mode
14511451
* configuration change that utilizes the specified display semaphore for
14521452
* synchronization may proceed.
14531453
*
@@ -1471,7 +1471,7 @@ struct NvKmsKapiFunctionsTable {
14711471
*
14721472
* This can be used by clients to restore a semaphore to a consistent state
14731473
* when they have prepared it for use by previously calling
1474-
* \ref resetDisplaySemaphore() on it, but are then prevented from
1474+
* \ref tryInitDisplaySemaphore() on it, but are then prevented from
14751475
* submitting the associated hardware operations to consume it due to the
14761476
* subsequent failure of some software or hardware operation.
14771477
*

kernel-open/nvidia-drm/nvidia-drm-modeset.c

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,7 @@ static int __nv_drm_convert_in_fences(
192192
&to_nv_crtc_state(crtc_state)->req_config;
193193
struct nv_drm_plane_fence_cb_data *fence_data;
194194
uint32_t semaphore_index;
195+
uint32_t idx_count;
195196
int ret, i;
196197

197198
if (!crtc_state->active) {
@@ -244,9 +245,14 @@ static int __nv_drm_convert_in_fences(
244245
return -EINVAL;
245246
}
246247

247-
semaphore_index = nv_drm_next_display_semaphore(nv_dev);
248+
for (idx_count = 0; idx_count < nv_dev->display_semaphores.count; idx_count++) {
249+
semaphore_index = nv_drm_next_display_semaphore(nv_dev);
250+
if (nvKms->tryInitDisplaySemaphore(nv_dev->pDevice, semaphore_index)) {
251+
break;
252+
}
253+
}
248254

249-
if (!nvKms->resetDisplaySemaphore(nv_dev->pDevice, semaphore_index)) {
255+
if (idx_count == nv_dev->display_semaphores.count) {
250256
NV_DRM_DEV_LOG_ERR(
251257
nv_dev,
252258
"Failed to initialize semaphore for plane fence");

kernel-open/nvidia-uvm/uvm_common.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*******************************************************************************
2-
Copyright (c) 2013-2023 NVIDIA Corporation
2+
Copyright (c) 2013-2024 NVIDIA Corporation
33
44
Permission is hereby granted, free of charge, to any person obtaining a copy
55
of this software and associated documentation files (the "Software"), to
@@ -423,7 +423,9 @@ static void uvm_get_unaddressable_range(NvU32 num_va_bits, NvU64 *first, NvU64 *
423423
UVM_ASSERT(first);
424424
UVM_ASSERT(outer);
425425

426-
if (uvm_platform_uses_canonical_form_address()) {
426+
// Maxwell GPUs (num_va_bits == 40b) do not support canonical form address
427+
// even when plugged into platforms using it.
428+
if (uvm_platform_uses_canonical_form_address() && num_va_bits > 40) {
427429
*first = 1ULL << (num_va_bits - 1);
428430
*outer = (NvU64)((NvS64)(1ULL << 63) >> (64 - num_va_bits));
429431
}

kernel-open/nvidia-uvm/uvm_populate_pageable.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,15 @@ NV_STATUS uvm_populate_pageable_vma(struct vm_area_struct *vma,
137137
if (status != NV_OK)
138138
goto out;
139139

140+
// Kernel v6.6 introduced a bug in set_pte_range() around the handling of AF
141+
// bit. Instead of setting the AF bit, the bit is incorrectly being cleared
142+
// in set_pte_range() during first-touch fault handling. Calling
143+
// handle_mm_fault() again takes a different code path which correctly sets
144+
// the AF bit.
145+
status = handle_fault(vma, start, vma_num_pages, !!(gup_flags & FOLL_WRITE));
146+
if (status != NV_OK)
147+
goto out;
148+
140149
if (touch)
141150
ret = NV_PIN_USER_PAGES_REMOTE(mm, start, vma_num_pages, gup_flags, pages, NULL);
142151
else

src/common/inc/nvBldVer.h

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -36,25 +36,25 @@
3636
// and then checked back in. You cannot make changes to these sections without
3737
// corresponding changes to the buildmeister script
3838
#ifndef NV_BUILD_BRANCH
39-
#define NV_BUILD_BRANCH r560_78
39+
#define NV_BUILD_BRANCH r560_88
4040
#endif
4141
#ifndef NV_PUBLIC_BRANCH
42-
#define NV_PUBLIC_BRANCH r560_78
42+
#define NV_PUBLIC_BRANCH r560_88
4343
#endif
4444

4545
#if defined(NV_LINUX) || defined(NV_BSD) || defined(NV_SUNOS)
46-
#define NV_BUILD_BRANCH_VERSION "rel/gpu_drv/r560/r560_78-120"
47-
#define NV_BUILD_CHANGELIST_NUM (34643855)
46+
#define NV_BUILD_BRANCH_VERSION "rel/gpu_drv/r560/r560_88-137"
47+
#define NV_BUILD_CHANGELIST_NUM (34725486)
4848
#define NV_BUILD_TYPE "Official"
49-
#define NV_BUILD_NAME "rel/gpu_drv/r560/r560_78-120"
50-
#define NV_LAST_OFFICIAL_CHANGELIST_NUM (34643855)
49+
#define NV_BUILD_NAME "rel/gpu_drv/r560/r560_88-137"
50+
#define NV_LAST_OFFICIAL_CHANGELIST_NUM (34725486)
5151

5252
#else /* Windows builds */
53-
#define NV_BUILD_BRANCH_VERSION "r560_78-2"
54-
#define NV_BUILD_CHANGELIST_NUM (34643068)
53+
#define NV_BUILD_BRANCH_VERSION "r560_88-4"
54+
#define NV_BUILD_CHANGELIST_NUM (34711266)
5555
#define NV_BUILD_TYPE "Official"
56-
#define NV_BUILD_NAME "560.81"
57-
#define NV_LAST_OFFICIAL_CHANGELIST_NUM (34643068)
56+
#define NV_BUILD_NAME "560.94"
57+
#define NV_LAST_OFFICIAL_CHANGELIST_NUM (34711266)
5858
#define NV_BUILD_BRANCH_BASE_VERSION R560
5959
#endif
6060
// End buildmeister python edited section

src/common/inc/nvUnixVersion.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
#if defined(NV_LINUX) || defined(NV_BSD) || defined(NV_SUNOS) || defined(NV_VMWARE) || defined(NV_QNX) || defined(NV_INTEGRITY) || \
55
(defined(RMCFG_FEATURE_PLATFORM_GSP) && RMCFG_FEATURE_PLATFORM_GSP == 1)
66

7-
#define NV_VERSION_STRING "560.31.02"
7+
#define NV_VERSION_STRING "560.35.03"
88

99
#else
1010

src/common/sdk/nvidia/inc/nvfixedtypes.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,9 +84,11 @@ typedef NvUFXP32 NvUFXP25_7;
8484
typedef NvUFXP32 NvUFXP26_6;
8585
typedef NvUFXP32 NvUFXP28_4;
8686

87+
typedef NvUFXP64 NvUFXP37_27;
8788
typedef NvUFXP64 NvUFXP40_24;
8889
typedef NvUFXP64 NvUFXP48_16;
8990
typedef NvUFXP64 NvUFXP52_12;
91+
typedef NvUFXP64 NvUFXP54_10;
9092
typedef NvUFXP64 NvUFXP60_4;
9193

9294
/*!

src/nvidia-modeset/kapi/include/nvkms-kapi-notifiers.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,8 +84,8 @@ NvBool nvKmsKapiIsNotifierFinish(const struct NvKmsKapiDevice *device,
8484
void nvKmsKapiNotifierSetNotBegun(struct NvKmsKapiDevice *device,
8585
NvU32 head, NvU32 layer, NvU32 index);
8686

87-
NvBool nvKmsKapiResetDisplaySemaphore(struct NvKmsKapiDevice *device,
88-
NvU32 index);
87+
NvBool nvKmsKapiTryInitDisplaySemaphore(struct NvKmsKapiDevice *device,
88+
NvU32 index);
8989

9090
void nvKmsKapiSignalDisplaySemaphore(struct NvKmsKapiDevice *device,
9191
NvU32 index);

src/nvidia-modeset/kapi/interface/nvkms-kapi.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1425,7 +1425,7 @@ struct NvKmsKapiFunctionsTable {
14251425
);
14261426

14271427
/*!
1428-
* Immediately reset the specified display semaphore to the pending state.
1428+
* Immediately initialize the specified display semaphore to the pending state.
14291429
*
14301430
* Must be called prior to applying a mode set that utilizes the specified
14311431
* display semaphore for synchronization.
@@ -1438,7 +1438,7 @@ struct NvKmsKapiFunctionsTable {
14381438
* for the specified device.
14391439
*/
14401440
NvBool
1441-
(*resetDisplaySemaphore)
1441+
(*tryInitDisplaySemaphore)
14421442
(
14431443
struct NvKmsKapiDevice *device,
14441444
NvU32 semaphoreIndex
@@ -1447,7 +1447,7 @@ struct NvKmsKapiFunctionsTable {
14471447
/*!
14481448
* Immediately set the specified display semaphore to the displayable state.
14491449
*
1450-
* Must be called after \ref resetDisplaySemaphore to indicate a mode
1450+
* Must be called after \ref tryInitDisplaySemaphore to indicate a mode
14511451
* configuration change that utilizes the specified display semaphore for
14521452
* synchronization may proceed.
14531453
*
@@ -1471,7 +1471,7 @@ struct NvKmsKapiFunctionsTable {
14711471
*
14721472
* This can be used by clients to restore a semaphore to a consistent state
14731473
* when they have prepared it for use by previously calling
1474-
* \ref resetDisplaySemaphore() on it, but are then prevented from
1474+
* \ref tryInitDisplaySemaphore() on it, but are then prevented from
14751475
* submitting the associated hardware operations to consume it due to the
14761476
* subsequent failure of some software or hardware operation.
14771477
*

src/nvidia-modeset/kapi/src/nvkms-kapi-notifiers.c

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -286,8 +286,8 @@ NvBool nvKmsKapiAllocateSemaphores(struct NvKmsKapiDevice *device,
286286
return NV_TRUE;
287287
}
288288

289-
NvBool nvKmsKapiResetDisplaySemaphore(struct NvKmsKapiDevice *device,
290-
NvU32 index)
289+
NvBool nvKmsKapiTryInitDisplaySemaphore(struct NvKmsKapiDevice *device,
290+
NvU32 index)
291291
{
292292
struct nvKmsParsedSemaphore semParsed;
293293

@@ -297,12 +297,6 @@ NvBool nvKmsKapiResetDisplaySemaphore(struct NvKmsKapiDevice *device,
297297
&semParsed);
298298

299299
if (semParsed.payload != NVKMS_KAPI_SEMAPHORE_VALUE_DONE) {
300-
nvKmsKapiLogDeviceDebug(
301-
device,
302-
"Attempt to reuse semaphore at index %u with pending status 0x%08x",
303-
index,
304-
semParsed.payload);
305-
306300
return NV_FALSE;
307301
}
308302

src/nvidia-modeset/kapi/src/nvkms-kapi.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3607,7 +3607,7 @@ NvBool nvKmsKapiGetFunctionsTableInternal
36073607
nvKmsKapiSetSemaphoreSurfaceValue;
36083608
funcsTable->setSuspendResumeCallback = nvKmsKapiSetSuspendResumeCallback;
36093609

3610-
funcsTable->resetDisplaySemaphore = nvKmsKapiResetDisplaySemaphore;
3610+
funcsTable->tryInitDisplaySemaphore = nvKmsKapiTryInitDisplaySemaphore;
36113611
funcsTable->signalDisplaySemaphore = nvKmsKapiSignalDisplaySemaphore;
36123612
funcsTable->cancelDisplaySemaphore = nvKmsKapiCancelDisplaySemaphore;
36133613
funcsTable->signalVrrSemaphore = SignalVrrSemaphore;

src/nvidia-modeset/src/nvkms-evo.c

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6716,7 +6716,8 @@ static NvBool GetDfpHdmiProtocol(const NVDpyEvoRec *pDpyEvo,
67166716
nvDpyGetOutputColorFormatInfo(pDpyEvo);
67176717
const NvBool forceHdmiFrlIsSupported = FALSE;
67186718

6719-
nvAssert(rmProtocol == NV0073_CTRL_SPECIFIC_OR_PROTOCOL_SOR_SINGLE_TMDS_A ||
6719+
nvAssert(rmProtocol == NV0073_CTRL_SPECIFIC_OR_PROTOCOL_SOR_DUAL_TMDS ||
6720+
rmProtocol == NV0073_CTRL_SPECIFIC_OR_PROTOCOL_SOR_SINGLE_TMDS_A ||
67206721
rmProtocol == NV0073_CTRL_SPECIFIC_OR_PROTOCOL_SOR_SINGLE_TMDS_B);
67216722

67226723
/* Override protocol if this mode requires HDMI FRL. */
@@ -6743,10 +6744,25 @@ static NvBool GetDfpHdmiProtocol(const NVDpyEvoRec *pDpyEvo,
67436744
if (nvHdmiGetEffectivePixelClockKHz(pDpyEvo, pTimings, pDpyColor) <=
67446745
pDpyEvo->maxSingleLinkPixelClockKHz) {
67456746

6746-
*pTimingsProtocol = (rmProtocol ==
6747-
NV0073_CTRL_SPECIFIC_OR_PROTOCOL_SOR_SINGLE_TMDS_A) ?
6748-
NVKMS_PROTOCOL_SOR_SINGLE_TMDS_A :
6749-
NVKMS_PROTOCOL_SOR_SINGLE_TMDS_B;
6747+
switch (rmProtocol) {
6748+
case NV0073_CTRL_SPECIFIC_OR_PROTOCOL_SOR_DUAL_TMDS:
6749+
/*
6750+
* Force single link TMDS protocol. HDMI does not support
6751+
* physically support dual link TMDS.
6752+
*
6753+
* TMDS_A: "use A side of the link"
6754+
*/
6755+
*pTimingsProtocol = NVKMS_PROTOCOL_SOR_SINGLE_TMDS_A;
6756+
break;
6757+
case NV0073_CTRL_SPECIFIC_OR_PROTOCOL_SOR_SINGLE_TMDS_A:
6758+
*pTimingsProtocol = NVKMS_PROTOCOL_SOR_SINGLE_TMDS_A;
6759+
break;
6760+
case NV0073_CTRL_SPECIFIC_OR_PROTOCOL_SOR_SINGLE_TMDS_B:
6761+
*pTimingsProtocol = NVKMS_PROTOCOL_SOR_SINGLE_TMDS_B;
6762+
break;
6763+
default:
6764+
return FALSE;
6765+
}
67506766
return TRUE;
67516767
}
67526768
} while (nvDowngradeColorSpaceAndBpc(&colorFormatsInfo,

src/nvidia-modeset/src/nvkms-headsurface-ioctl.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ NvBool nvHsIoctlMoveCursor(
110110
{
111111
NVHsChannelEvoRec *pHsChannel;
112112

113-
if (apiHead > ARRAY_LEN(pDispEvo->pHsChannel)) {
113+
if (apiHead >= ARRAY_LEN(pDispEvo->pHsChannel)) {
114114
return FALSE;
115115
}
116116

@@ -206,7 +206,7 @@ NvBool nvHsIoctlSetCursorImage(
206206
NVHsChannelEvoRec *pHsChannel;
207207
NVSurfaceEvoRec *pSurfaceEvo = NULL;
208208

209-
if (apiHead > ARRAY_LEN(pDispEvo->pHsChannel)) {
209+
if (apiHead >= ARRAY_LEN(pDispEvo->pHsChannel)) {
210210
return FALSE;
211211
}
212212

src/nvidia/arch/nvalloc/common/inc/gsp/gsp_proxy_reg.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* SPDX-FileCopyrightText: Copyright (c) 2021-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2+
* SPDX-FileCopyrightText: Copyright (c) 2021-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
33
* SPDX-License-Identifier: MIT
44
*
55
* Permission is hereby granted, free of charge, to any person obtaining a
@@ -40,4 +40,8 @@
4040
#define NVGSP_PROXY_REG_CONF_COMPUTE_MULTI_GPU_MODE_NONE 0x00000000
4141
#define NVGSP_PROXY_REG_CONF_COMPUTE_MULTI_GPU_MODE_PROTECTED_PCIE 0x00000001
4242

43+
#define NVGSP_PROXY_REG_NVLINK_ENCRYPTION 5:5
44+
#define NVGSP_PROXY_REG_NVLINK_ENCRYPTION_DISABLE 0x00000000
45+
#define NVGSP_PROXY_REG_NVLINK_ENCRYPTION_ENABLE 0x00000001
46+
4347
#endif // NVGSP_PROXY_REG_H

src/nvidia/generated/g_gpu_mgr_nvoc.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,7 @@ typedef struct CONF_COMPUTE_CAPS
137137
NvBool bAcceptClientRequest;
138138
NvBool bMultiGpuProtectedPcieModeEnabled;
139139
NvBool bFatalFailure;
140+
NvBool bNvlEncryptionEnabled;
140141
} CONF_COMPUTE_CAPS;
141142

142143
//

src/nvidia/generated/g_kernel_nvlink_nvoc.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -311,6 +311,7 @@ struct KernelNvlink {
311311
NvBool PDB_PROP_KNVLINK_ENCRYPTION_ENABLED;
312312

313313
// Data members
314+
NvU32 gspProxyRegkeys;
314315
struct KernelIoctrl *PRIVATE_FIELD(pKernelIoctrl)[3];
315316
NvU32 PRIVATE_FIELD(ioctrlMask);
316317
NvU32 PRIVATE_FIELD(ipVerNvlink);
@@ -444,6 +445,7 @@ struct KernelNvlink_PRIVATE {
444445
NvBool PDB_PROP_KNVLINK_ENCRYPTION_ENABLED;
445446

446447
// Data members
448+
NvU32 gspProxyRegkeys;
447449
struct KernelIoctrl *pKernelIoctrl[3];
448450
NvU32 ioctrlMask;
449451
NvU32 ipVerNvlink;

src/nvidia/src/kernel/gpu/gsp/arch/hopper/kernel_gsp_gh100.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@
4141
#include "published/hopper/gh100/dev_riscv_pri.h"
4242
#include "published/hopper/gh100/dev_vm.h"
4343

44+
#include "gpu/nvlink/kernel_nvlink.h"
45+
4446
#define RISCV_BR_ADDR_ALIGNMENT (8)
4547

4648
const char*
@@ -409,6 +411,12 @@ kgspSetupGspFmcArgs_GH100
409411
pGspFmcBootParams->initParams.regkeys = pCC->gspProxyRegkeys;
410412
}
411413

414+
KernelNvlink *pKernelNvlink = GPU_GET_KERNEL_NVLINK(pGpu);
415+
if (pKernelNvlink != NULL)
416+
{
417+
pGspFmcBootParams->initParams.regkeys |= pKernelNvlink->gspProxyRegkeys;
418+
}
419+
412420
pGspFmcBootParams->bootGspRmParams.gspRmDescOffset = memdescGetPhysAddr(pKernelGsp->pWprMetaDescriptor, AT_GPU, 0);
413421
pGspFmcBootParams->bootGspRmParams.gspRmDescSize = sizeof(*pKernelGsp->pWprMeta);
414422
pGspFmcBootParams->bootGspRmParams.target = _kgspMemdescToDmaTarget(pKernelGsp->pWprMetaDescriptor);

0 commit comments

Comments
 (0)